- toekang scada - http://toekangscada.com -

Kolaborasi ActiveX Control dengan InTouch

Posted By toekang On May 6, 2008 @ 11:45 am In Automation,Component,HMI/Scada,Wonderware | 72 Comments

Toekang bukanlah seorang IT-man itu sudah jelas. Jadi kalau muncul tutorial semacam ini, bukan maksud toekang untuk lancang memasuki wilayah tersebut. Artikel ini hanya untuk konsumsi insan-insan Automation yang sering tertatih-tatih dipaksa melek IT(begitu pula halnya yang dialami toekang). Dan bagi yang sudah melek IT, silahkan memberikan koreksi dan masukan jika tulisan ini mengandung kesalahan.

Kapan kita membutuhkan ActiveX Control di aplikasi HMI kita(khususnya InTouch) ?

  • Pertama, jika aplikasi kita memerlukan fitur yang belum disediakan InTouch, misal : akses ke LPT port, akses ke equipment(protokol) yang tidak disediakan Wonderware maupun 3rd Party-nya(penulis pernah membuat protokol sendiri untuk mengakses firealarm NF5 buatan Nitan)
  • Kedua, jika dengan ActiveX Control itu mempermudah proses develepment. Misal : Untuk akses ke data dalam Database yang cukup komplek akan lebih mudah jika dibungkus kedalam ActiveX Control, Membuat report dimana diketahui InTouch sendiri tidak mempunyai fasilitas report sering lebih simple dan powerfull jika dibuatkan ActiveX Control daripada membuat sendiri di InTouch.

Dalam artikel kali ini toekang akan memberikan tutorial singkat membuat sebuah ActiveX Control sederhana dan cara mengintegrasikan ke InTouch.

Anatomi
ActiveX Control nama resminya adalah OLE Control yang merupakan bagian dari sistem COM(Component Object Model), bentuk konkritnya adalah file dengan extensi .ocx. Dari luar anatomi ActiveX Control ini terdiri dari atribut-atribut yang lebih dikenal dengan Property, apa yang bisa dilakukan ActiveX Control ini yang disebut Method dan kejadian-kejadian apa saja yang menimpanya disebut juga dengan Event.

Sebuah ActiveX Control tidaklah selalu mengandung ketiga komponen diatas yaitu Property, Method dan Event. Kadang hanya mengandung Method dan Event saja tanpa Property, bisa juga Property dan Method saja tanpa Event.

Contoh yang absurd
Contoh ActiveX Control yang akan toekang berikan kali ini mungkin sangat absurd karena dalam kenyataannya sangatlah mubazir jika kita membuat hal seperti ini, tapi cukup lengkap untuk sekadar memberi gambaran apa itu ActiveX Control karena mengandung tiga komponen penting diatas. ActiveX Control yang akan kita buat mengandung dua property ValFromHMI dan ValToHMI keduanya bertipe single(Real di HMI), sebuah Event OnValChange dan Method ShowMsg() seperti gambar dibawah ini :
graphics
Dari gambar di atas ActiveX Control – InTouch diharapkan mampu melakukan hal berikut :

  • Menerima nilai ValOutput dari InTouch yang diumpankan ke property ValFromHMI.
  • Mengirim nilai ValToHMI ke ValInput di InTouch melalui sebuah event OnValChange.
  • Menampilkan sebuah Pop-Up message melalui method ShowAlert().

User Interface
Di contoh ini Toekang akan menggunakan bahasa sejuta umat ‘Visual Basic’ untuk membuat ActiveX Control, tentunya C++ atau Delphi lebih powerfull dalam hal ini karena dua bahasa itu lebih pure OOP. Tapi untuk pemula akan lebih mudah berhadapan dengan VB dibanding dua bahasa tersebut, apalagi skrip-skrip InTouch sendiri kental dengan aroma ‘Basic’.

Buka program Visual Basic dan pilih ActiveX Control :
graphics

Isikan atribut-atribut project ActiveX Control kita seperti ini:
graphics

Selanjutnya buatlah User Control layout seperti dibawah:
graphics
Buat satu label, satu textbox dengan nama txtFromHMI, dan satu tombol untuk mengirim value ka HMI.

Property
Property sendiri sejatinya hanyalah sebuah variabel dengan akses global atau public agar bisa diakses dari luar ActiveX Control. Sangat simpel kita bisa membuatnya seperti ini :
graphics
Tapi menurut kaidah OOP yang benar, pantang memberikan akses langsung ke variable. Sangat dianjurkan untuk memberikan akses ke variabel melalui sebuah fungsi, yaitu fungsi Get dan Let (Get dan Set di C++ dan turunannya). Keuntungan memakai cara ini adalah adanya kontrol akses terhadap property. Misal agar property itu hanya ingin bisa dibaca saja(Read Only) kita harus memodifikasinya menjadi :
graphics
Variabel konkrit dari property ValFromHMI sendiri adalah m_ValFromHMI yang private(dim) sehingga hanya bisa diakses dari dalam ActiveX Control. Fungsi Get disini menyalin nilai m_ValFromHMI ke property ValFromHMI.

Sementara untuk membuat property yang hanya bisa ditulis(write only) kode programnya adalah:
graphics
Dengan fungsi Let nilai dari luar Activex Control(NewVal) akan disalin ke variabel m_ValFromHMI, sedangkan statement ‘PropertyChanged’ memberi tahu kalau telah terjadi perubahan nilai property ValFromHMI. Akhirnya untuk membuat property yang read/write cukup dengan menggabungkan kedua fungsi tadi :
graphics

Dalam contoh ini, property ValFromHMI hanya berfungsi untuk menerima data(write) dari HMI yang selanjutnya akan diupdate ke textbox txtFromHMI, maka hanya diperlukan fungsi Let untuk itu:
graphics
Ada tambahan statemen pada fungsi itu yaitu : ‘txtFromHMI.Text = CStr(m_ValFromHMI)’, perintah ini akan selalu menampilkan data terbaru dari property ValFromHMI ke texbox txtFromHMI. Ini juga merupakan keunggulan pemakaian fungsi Let/Get. Bandingkan jika memakai cara akses langsung ke variabel, untuk menampilkan data terupdate akan memerlukan fungsi tambahan mungkin juga sebuah timer diperlukan untuk itu.

Sedangkan property ValToHMI, HMI hanya perlu membaca saja(read only) maka kodenya sebagai berikut:
graphics

Event
Untuk mendeklarasikan event OnValChange caranya sangat simple, buat kode berikut sebelum property(atau sebelum procedure apapun ditulis).
graphics
Semudah mendeklarasi-nya semudah itu pula cara men-trigernya, perhatikan kode berikut:
graphics
Event itu ditriger saat user menekan tombol ‘cmdSend’ atau tombol ‘Send back to HMI’, namun sebelumnya nilai dalam textbox ‘txtToHMI’ harus disalin dulu ke property ValToHMI. Fungsi ‘Csng’ sendiri tugasnya menggubah nilai string ke data bertipe single.

Method
Method sendiri adalah sebuah public prosedure atau public function, tergantung pada ada atau tidak nilai kembalian(return value). Selanjutnya di contoh ini, toekang akan membuat method ShowAlert yang hanya menampilkan message saja, seperti ini:
graphics

Compile, Register dan Unregister
Komponen ActiveX Control ini haruslah dicompile dulu agar menghasilkan file dengan ekstensi .ocx, caranya dari menu File -> Make AxTest.ocx kemudian tentukan lokasi dimana file ini akan disimpan.
graphics
Agar komponen ActiveX Control yang telah dibuat dapat digunakan oleh aplikasi maka komponen ini perlu diregister dengan perintah :
graphics
Perintah diatas untuk meregister komponen ActiveX Control dengan file AxTest.ocx yang diletakkan di drive D. Jika proses register berhasil akan tampil pesan berikut:
graphics

Seandainya komponen tersebut sudah tidak diperlukan lagi dan ingin dibuang dari sistem, maka perintah untuk Unregister-nya adalah:
graphics

Jika cara diatas sangat merepotkan, ada cara yang lebih praktis untuk meregister/unregister ActiveX. Yaitu dengan memasukan perintah-perintah itu dalam windows registry, selengkapnya dapat dibaca di sini [1]. Dengan cara ini kita cukup klik kanan pada file komponen tersebut, selanjutnya tinggal pilih option Register/UnRegister.

Integrasi dengan InTouch
Jalankan Window Maker, pilih menu Special > Configure > Wizard/ActiveX Installation …, pada tab ‘ActiveX Control Installation’ cari komponen AxTest.Test seperti gambar berikut:
graphics
Kemudian klik Install.

Kemudian klik icon Wizard :
graphics
Selanjutnya ke ActiveX Controls dan pilih komponen ‘Test’ :
graphics
Tempel di project kita, atur ukurannya lalu dobel klik komponen tersebut :
graphics
Beri nama ‘TEST’ kemudian klik OK.
Selanjutnya lengkapi project itu seperti ini :
graphics
Buat terlebih dulu dua tag ‘ValOutput’ dan ‘ValInput’ bertipe real selanjutnya buat link ke box seperti diatas.

Langkah pertama adalah membuat script untuk tombol ‘Send to Ax’ seperti ini:
graphics
Nah ActiveX Control itu yang pake embel-embel #, maka untuk ActiveX Control ‘TEST’ dengan property ‘ValFromHMI’ ditulis ‘#TEST.ValFromHMI’. Dengan script ini kita telah mengirim nilai ke ActiveX Control.

Selanjutnya bagaimana cara ambil data ActiveX Control, di sini toekang akan memanfaatkan event OnValChange dari komponen #TEST. Dobel klik komponen #TEST, pilih tab ‘Events’ lalu ketik ‘TESTOnValChange’ sebagai nama skrip ActiveX Event di project ini.
graphics
Selanjutnya buat script ini :
graphics
Skript ini akan dieksekusi setiap ada event OnValChange dari #TEST, yang dari programnya diketahui digenerate saat tombol ‘Send back to HMI’ diklik.

Yang terakhir adalah bagaimana menampilkan message via method ‘ShowMessage’, buat script berikut pada tombol ‘Test Method’ :
graphics

Uji Coba
Jalankan Viewer masukkan nilai ValOut (kotak kuning) kemudian klik tombol ‘Send to Ax’ hasilnya seperti ini :
graphics
Sekarang tekan tombol ‘Send Back to HMI’ di ActiveX Control itu, hasilnya seperti ini :
graphics
Yang terakhir klik tombol ‘Test Method’ hasilnya ini:
graphics
Selesai ! biarpun sangat sederhana mudah-mudahan memberi sedikit gambaran akan apa ActiveX Control, cara buatnya akhirnya bagaimana menggunakannya.

File-file dalam artikel ini dapat didownload di sini :
1. HMI project (InTouch ver 9.5) di sini [2].
2. ActiveX Control di sini [3].
3. VB Source Code di sini [4].

Article printed from toekang scada: http://toekangscada.com

URL to article: http://toekangscada.com/2008/05/06/kolaborasi-activex-control-dengan-intouch/

URLs in this post:

[1] di sini: http://www.freevbcode.com/ShowCode.asp?ID=1370

[2] di sini: http://toekangscada.com/fileserver/files/ww_activex/WWActiveXDemo.zip

[3] di sini: http://toekangscada.com/fileserver/files/ww_activex/AxTest.ocx

[4] di sini: http://toekangscada.com/fileserver/files/ww_activex/VB_ActiveX_InTouch.zip

Copyright © 2008 toekangscada. All rights reserved.