05 Jan
Print This Post
InTouch - PLC, Monitoring Komunikasi

:: Automation :: HMI/Scada :: Wonderware Add comments
icon

Ada dua cara untuk memonitor komunikasi antara InTouch dan PLC. Cara pertama yaitu dengan memanfaatkan item(bit) bawaan IO/DA Server yaitu $SYS$Status(DA Server) atau Status(IO Server) dan IOStatus. Cara kedua adalah dengan cara membuat PLC Heartbeat yang memanfaatkan scripting engine InTouch.

Saya selalu memakai kombinasi keduanya dengan cara kedua sebagai prioritas utama, sedang cara pertama sebagai pelengkap. Mengapa demikian ? Karena jika mengandalkan cara pertama saja, masih ada celah di mana cara ini tidak dapat memberikan informasi tengtang status PLC(STOP/RUN), untuk lebih jelasnya baca artikel ini. Cara kedua sebenarnya sudah cukup ampuh untuk memonitor komunikasi InTouch-PLC. Masalahnya jika tidak digabungkan dengan bit IOStatus dan Status kita sulit menentukan siapa sebenarnya penyebab eror komunikasi ini, apakah IO/DAserver, kabel koneksi atau malah PLC-nya yang STOP.
Ada dua cara untuk memonitor komunikasi antara InTouch dan PLC. Cara pertama yaitu dengan memanfaatkan item(bit) bawaan IO/DA Server yaitu $SYS$Status(DA Server) atau Status(IO Server) dan IOStatus. Cara kedua adalah dengan cara membuat PLC Heartbeat yang memanfaatkan scripting engine InTouch.

Saya selalu memakai kombinasi keduanya dengan cara kedua sebagai prioritas utama, sedang cara pertama sebagai pelengkap. Mengapa demikian ? Karena jika mengandalkan cara pertama saja, masih ada celah di mana cara ini tidak dapat memberikan informasi tengtang status PLC(STOP/RUN), untuk lebih jelasnya baca artikel ini. Cara kedua sebenarnya sudah cukup ampuh untuk memonitor komunikasi InTouch-PLC. Masalahnya jika tidak digabungkan dengan bit IOStatus dan Status kita sulit menentukan siapa sebenarnya penyebab eror komunikasi ini, apakah IO/DAserver, kabel koneksi atau malah PLC-nya yang STOP.

Bagaimana bit IOStatus, Status($SYS$Status) dan PLC Heartbeat memonitor status komunikasi antara InTouch, IO/DA Server dan PLC dapat digambarkan sebagai berikut :
graphics

  • Bit Status($SYS$Status) merupakan bawaan IO/DA Server, berfungsi untuk memonitor status komunikasi antara IO/DA Server dengan PLC.
  • Bit IOStatus yang juga bawaan IO/DA Server, berfungsi untuk memonitor status IO/DA Server itu sendiri. Bit ini juga dapat digunakan untuk memonitor komunikasi antar dua node InTouch atau InTouch dengan program yang suport DDE seperti Microsoft Excel.
  • PLC Heartbeat digunakan untuk memonitor komunikasi data antara InTouch dengan PLC.

Dalam contoh ini, PLC yang digunakan adalah Siemen S7 dan DA Server DASIDirect 1.5. Bagaimana cara membuat tag yang memanfaatkan IOStatus, $SYS$Status dan juga membuat Acces Name tidak dijalaskan di sini. Kalau kita instal InTouch di sana sudah buit-in manual yang cukup jelas membahas ini, masih kurang jelas bisa juga membaca artikel ini : Tech Node 118. Fokus kali ini hanya bagaimana membuat PLC Heartbeat dan mengkombinasikan dengan ke-dua bit bawaan IO/DA Server agar monitoring komuniksai InTouch - PLC lebih akurat.

Pilih Bit atau Interger ?
Bit(bolean) yang di InTouch lebih dikenal sebagai tag Discrete memang lebih sederhana dan sedikit memakai resource. Tapi memakai bit juga mengandung kekurangan terutama jika diterapkan pada PLC yang mempunyai akses data agak lambat contoh S7-300. Perhatikan gambar dibawah :
graphics
Kurva yang sebelah atas merupakan pulsa yang di-generate oleh PLC, sedangkan di bawahnya adalah update rate dari IO/DA Server. Nah pada posisi-posisi transisi yang ditandai oleh ‘dot’ itu sering-kali InTouch tidak dapat mendeteksinya. Semakin besar trafik data(semakin banyak IO Tag yang mengakses ke PLC) semakin sering lolos. Sebenarnya ada cara untuk meminimalisasi hal ini yaitu dengan membuat Topic khusus untuk deteksi komunikasi dan seting update-ratenya dengan angka unik, misalnya 1267ms.

Bagaimana kalau memakai nilai integer ? Perhatikan gambar di bawah :
graphics
Tag interger yang digunakan dibuat agar kontinyu berubah. Dengan cara ini menjamin nilai data selalu berubah setiap kali InTouch meng-update data. Dengan berubahnya nilai di tag ini, kita bisa yakin bahwa komunikasi berjalan baik. Jika data konstan untuk periode tertentu itu berarti terjadi masalah komunikasi antara InTouch dan PLC.

Prosedur
Buat empat tag seperti dalam tabel di bawah:
graphics
Hanya dua tag yang diperlukan untuk membuat PLC Heartbeat yaitu PLC01\iPulse dan PLC01\PulseCount, sisanya adalah tag PLC01\IOserver untuk memonitor status IO/DA Server dan terakhir PLC01\Comm untuk memonitor komunikasi IO/DA Server dengan PLC.

PLC01\PulseCount digunakan untuk membuat internal counter yang bertambah setiap detik. Buat Data Change Scripts seperti dibawah:
graphics

Counter tersebut akan direset setiap terjadi perubahan nilai pada tag PLC01\iPulse, buat Data Change Scripts seperti dibawah:
graphics

Komunikasi dianggap eror jika Counter melebihi nilai seting, nilai IOStatus false atau nilai $SYS$Status false. Satukan logika tersebut dan buat Condition Scripts seperti dibawah:
graphics
Skrip di atas dapat dijelaskan sebagai berikut: Jika Counter melebihi angka 20 atau nilai IOStatus = 0 atau nilai $SYS$Status = 0 maka komunikasi dianggab eror. Jika ini terjadi, setiap 5 detik status PLC (1 = RUN, 0 = STOP) di update dan memunculkan Pop-Up window “Common_Communiction” yang memuat semua status komunikasi.

Yang terakhir adalah melakukan update status PLC jika komunikasi sudah kembali normal (jika sebelumnya pernah eror). Masih di skrip yang sama buatlah skrip di bawah pada kondisi ‘While False’:
graphics

Pengujian
Jalankan PLC, aktivkan DA Server kemudian jalankan Window Viewer, jika komunikasi berjalan lancar maka pada window “Common_Communication” akan menampilkan IO Server, Cummunication dan PLC Status dalam kondisi normal:
graphics

Set PLC ke kondisi STOP mode, maka hasilnya seperti ini:
graphics
Set PLC ke posisi RUN tunggu sampai status kembali normal kemudian cabut kabel komunikasi (RJ45), hasilnya seperti ini:
graphics
Kondisi seperti di atas juga dapat terjadi jika salah konfigurasi di DA Server walaupun kabel koneksi sudah terhubung dengan benar.

Yang terakhir stop DA Server, hasil yang didapat adalah semuanya menjadi fail seperti di bawah:
graphics

RSS feed | Trackback URI

15 Comments »

Comment by elmauz
2008-03-10 16:23:30

ini bikinnya pake InTouch 10 ya

Comment by e.one
2008-03-29 08:00:55

Ngak itu saya buat pake i9.5 pake i7.0 juga bisa …
itu cuman pop-up menu yang ditempelin gambar dari photoshop :)

 
 
Comment by wahyudin
2008-03-19 14:23:40

wow, keren analisanya, simplicity but usefully…
keren mas iwan
mas intouch kan ga bisa baca .jpg cuman bisa .bmp, tu file hasil create photoshop disave .bmp ato ada opsi lain? bmp berat kan..

Comment by Tonai
2008-03-29 08:07:05

khan beratnya saat inisialisasi awal aja dien
pas udah jalan gak lagi
cuma emang aplikasinya jadi gede

 
Comment by e.one
2008-03-29 08:10:47

pake JPG lebih ringan, tul kata ‘tonai’ itu ngak seluruhnya JPG hanya nempel2 … tapi emang file aplikasi jadi gede, cuman untuk spesifikasi PC sekarang itu mah kecil

 
 
Comment by Juni
2008-04-08 21:58:36

jadi ingat masukin photo compressor 2 buah di project Caltex dulu (2002)…. emang besar sih bmpnya … berat di awal aja stlh itu baik2 aja …
cuman makan waktu buat edit photo …. kalo punya banyak waktu buat development … silahkan bikin sebagus2nya ….
tapi kalo kerja di system integrator …. yah mending pikir2 dulu … yang paling penting adalah fungsi kerja dari HMI tsb sudah memenuhi kontrak ….
kalo mau bikin HMI yang keren … tentu ada bayarannya lagi …. (biar ndak rugi prshn yang mempekerjakan kita)

btw, sampe sekarang masih penasaran dengan freeze nya komunikasi data antara Intouch dengan S7-300 pake Dassidirect di project doeloe …
maklum .. ndak sempat utak-atik lagi …. tahu deh si tonai dan kawan-kawan laen sudah solve masalahnya atau belum …. (baru ingat lagi skrg :D )

Comment by Tonai
2008-04-09 08:10:00

klo dassidirect 1.1 emang ada masalah bug sering freeze setiap 40 hari, tapi sekarang alhamdulillah udah ada dassidirect 1.5 lebih stabil, tp tetep aja gw gak percaya ama $sys$status, jadinya ya baca heartbeat aja lebih aman hehehe

Comment by e.one
2008-04-10 13:58:17

DASSIDirect 1.1 itu kan 1 SP1 yang ini ngak ton, yang problem itu 1.0

(Comments wont nest below this level)
 
 
 
Comment by didik
2008-05-30 19:11:59

klo pengalaman saya, disain HMI-wwIntouch dengan melakukan banyak import thp file JPG/Bitmp. memang berat waktu load awal. file appplikasinya jadi besar.
selama ini scada/hmi yag saya krjakan selalu multi monitor. yaitu antara 2-3 monitor bahkan 4 monitor (bentar lagi)
dalam kasus ini saya mendevelop serta test running pada hanya satu monitor dan yang tampak adalah hanya 1/multi-monitor. yaitu pada PC yg saya bawa.
Nah saat di test Running hanya dengan satu monitor, memang tidak terasa berat. akan tetapi saat applikasi tsb di running dengan multi monitor akan memberikan dampak lebih berat. dan itu berlanjut terus saat running time. dan ini berlaku seiring dengan semakin banyak monitor yg digunakan.
so, kayaknya klo pake multi monitor kayaknya perlu dipertimbangkan.
ataw dari kawan2 ada komentar?

Comment by toekang
2008-06-02 09:38:55

Kalau membuat file gambar-nya(JPG) satu halaman penuh emang berat, di aplikasi toekang kan hanya bagian2 tertentu aja, misal title-bar, tool-bar. dan sebagian besar lagi itu hanya di window pop-up menu, so ngak akan memberatkan biarpun 4 monitor sekaligus. karena paling2 per monitor buka 1 window pop-up doank.
Emang memakai multimonitor di InTouch itu lebih berat karena konsep Multimonitor di InTouch kan sebenarnya hanya mengakali resolusi besar di pecah menjadi kecil2(setidaknya sampai i9.5 konsepnya masih seperti ini).
Beda kalau di beberapa HMI lain contoh ACS800xA(ini DCS), yang benar2 mengcloning aplikasi(disini tidak ada perbedaan mendevelop multi monitor ama single monitor).

 
 
Comment by sidiq
2008-06-24 15:13:58

mas, perkenalkan saya sidiq. saya baru belajar wonderware. saya pengen nanya script buat bikin turun suatu nilai secara otomatis kalo di wonderware gimana ya? decrease otomatis lah..
o iya, saya juga import file JPG ke aplikasi yang saya buat. sizenya jadi 1G lebih..normal ga sih??

salam,
sidiq hk

Comment by toekang
2008-07-07 16:04:31

salam kenal juga …
sorry baru bisa online, ada perbaikan infrastruktur di tempat toekang cari duit.
misal sebuah tag integer X akan di buat berkurang 1 setiap detik.
buat skrip ini :
IF X > 0 then
X = X - 1;
ENDIF;

letakkan skrip ini di tempat yg di eksekusi tiap detik bisa di application script, Data Change Script dgn memanfaatkan tag $second, atau di Window Script.

 
 
Comment by Rachmadi
2008-07-03 06:29:31

Kalo nama saya rachmadi, dan baru belajar wonderware juga ^_^. Pertanyaan saya soal mencari item untuk internal clock. Contoh diatas item MW10, trus library untuk memetakan item secara keseluruhan tuh liat dimana ya???

Thanks a lot for your kind attention.
Rachmadi

Comment by toekang
2008-07-07 16:12:58

Maksud internal clock ini apa ? apa system clock-nya PC ?
klo itu ada banyak internal tag yang bisa dipake :
$second, $date, $year, $hour, $minute, $sec -> interger
atau bisa pake $DateTime yg mengandung nilai komplit Date-Time
terhitung sejak 1 january 1970 dalam satuan milisecond.

item MW10 ??? ini item ke controller(PLC)??

 
 
Comment by vbadvisor
2008-12-04 22:09:11

I do it like this:
a. Make a 1 sec Pulse in PLC such as N12:0/0 (PLC5,Rockwell) and create a MMI Tag called Clock_1HZ as type:I/O Discrete to connect PLC bit N12:0/0

b.Write Condition Script:

Clock_1HZ tag Type:I/O Discrete;Group:$System
Clock_1HZ tag Comment:1HZ clock,Access Name:REFINER,Item:N12:0/0

Clock_1HZ Condition Script Comment:Check if PLC in stop mode

Condition Type:On False {Consider case if N12:0/0 is always 0}
COUNTER2 = 0;

Condition Type:On True {Consider case if N12:0/0 is always 1}
COUNTER1 = 0;

Condition Type: While False Every 1000 Msec
COUNTER1=COUNTER1+1;
IF COUNTER1 >= 10 THEN {if no response beyond 10 sec,assume PLC is in Stop mode or lose communication}
PLC_STOP_MODE = 1;
ELSE PLC_STOP_MODE = 0;
ENDIF;

Condition Type:While True Every 3000 MSec
COUNTER2=COUNTER2+1;
IF COUNTER2 >= 10 THEN
PLC_STOP_MODE = 1;
ELSE PLC_STOP_MODE = 0;
ENDIF;

COUNTER2 tag is Intoch Memory Integer
PLC_STOP_MODE Tag is Intouch Memory Discrete

 
Name (required)
E-mail (required - never shown publicly)
URI
Your Comment (smaller size | larger size)
You may use <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <code> <em> <i> <strike> <strong> in your comment.