25 Sep
Print This Post
Indirect Tagmane + Loop = Simple

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

Sebelum ini di tagname bunglon toekang sudah ngasih sedikit gambaran tentang Indirect Tagname, untuk lebih mempertajam elmu yuk kita latihan dgn contoh yang lebih rumit. Meski contoh yang akan toekang berikan boleh jadi ngak akan pernah diaplikasikan dimana-mana (baca: absurd), toekang harap bisa memberi wawasan lebih tentang satu hal ‘pentingnya efisiensi script’.

Coba amati ilustrasi dibawah :
graphics
Sekarang bayangkan kalau kita punya line produksi yang terdiri dari 25 tangki dengan isi berbeda-beda sesuai dengan proses yang berjalan seperti tabel sebelah kanan. Sedang di Scada/HMI diminta untuk menampilkan status/nilai masing-masing tangki dengan sedikit berbeda. Yaitu jika tangki terisi 100% maka diberi nilai ‘FULL’, jika kosong atau 0% diberi nilai ‘EMTY’ dan selebihnya sama persi dengan nilai aslinya.

Di HMI apa yang kita perlukan?
Pertama tagname-tagname untuk akuisisi data level tangki.
Oke buat Real tagname L1_LI101 .. L1_LI125 untuk tangki-tangki di Line1 sedang untuk tangki-tangki di Line2 buat saja L2_LI201 .. L2_LI225. Menampilkan level tangki yang dibuat ‘sedikit berbeda itu’ dimana ada data ‘EMTY’ dan ‘FULL’ yang mau ngak mau harus melibatkan data tipe string/message, no problem buat aja serangam semua tagname-nya dalam tipe string/message LI01_Sts .. LI25_Sts.
Sampai disini sebenarnya sudah cukup, namun untuk mencapai tujuan ‘simple’ seperti judul artikel ini masih diperlukan dua tagname lagi : indLevelTank tipe Indirect Analog untuk memanipulasi Level tangki di sisi akuisisi dan indLevelTankSts tipe Indirect Message untuk memanipulasi level tangki di sisi tampilan.

Bikin skrip !
Skripnya sederhana saja seperti ini :

Penjelasannya gini (ambil contoh level tangki di Line1): Cek dulu level aktual kalau samadengan 0% maka tulis ‘EMTY’, kalau 100% maka tulis ‘FULL’ diluar itu konversi nilai aktual yg bertipe real ke string dengan akurasi 2 digit dibelakang koma. Untuk level tangki no 1 diwakili baris 2 s/d 9, dengan cara yg sama buat skrip-skrip untuk tangki-tangki yang lain (sampai tangki ke-25).

Ah mudah kali … ngak ada yang istimewa !!
Eit !!! tunggu dulu, itu hanya 25 tangki … nah gimana kalau 100 tangki ..gimana klo 1000 !

Wah pangjangnyaaaa …

Jangan kawatir, akan toekang kasih resep yang mak nyus agar skripnya ngak perlu panjang dan sedap dipandang mata. Begini :

Amboi elok nian skrip nih … bisakah toekang kasih siki’ penjelasan ?

Tentu bisa !, toekang hanya perlu variable interger untuk bikin index dalam proses looping nanti dan satu variable string sebagai konversi dari index sebelumnya. Karena variabel-variabel itu hanya diperlukan di dalam skrip saja maka buat saja variable internal, proses ini diwakili oleh baris 2 dan 3.

Karena jumlah tangki masing-masing line sudah pasti yaitu 25 kita buat proses looping saja, baris 6 menandai awal looping dan baris 26 akhir looping.

Kita juga perlu nilai string dari index dalam proses looping maka dibuatlah baris 8. Perhatikan juga struktur tagname kita L1_LI101 .. L1_LI125, nilai penanda nomor tangki adalah 01 .. 25. Jadi kita masih punya masalah, konversi nilai interger 1 ke string adalah 1 juga bukan 01, jadi kita perlu tambahan baris 9 s/d 11 untuk angka dibawah 10.

Akhirnya tibalah saatnya memakai elmu bunglon kita :
Untuk nilai aktual tangki kita pakai indLevelTank (Indirect Analog), untuk nama tagname-nya kita tinggal merakitnya dari awalan tagname ‘L1_LI1′ ditambah nomor index yg telah dikonversi ke srting. Dengan cara yang sama untuk tampilan kita pakai indLevelTankSts (Indirect Message). Baris 14 dan 15 mewakili hal ini.

Untuk proses transfernya kita pakai satu skrip sebelumnya dengan perubahan sedikit yaitu dengan menganti L1_LI101 dengan indLevelTank dan LI01_Sts dengan indLevelTankSts.

Beres !!!
Berapun banyaknya tangki yang kita pakai, hanya ini skripnya, ngak kurang ngak lebih ..!

Sampel project dalam artikel ini dapat didownload di sini :
1. HMI project (InTouch ver 9.5) di sini.

Leave a Reply