3. Simulasi IO Outseal dan Arduino

Salah satu hal yang diperlukan setelah bisa membaca sensor adalah mengendalikan aktuator. Aktuator dalam contoh di sini, tidak terbatas pada Motor atau alat penggerak, tetapi bisa juga alat output seperti LED indikator, Relay, Solenoid Valve, Buzzer, dll. 

Lalu bagaimana caranya agar HMI Haiwell bisa menghidup-matikan atau mengendalikan aktuator ini?

Secara garis besar, ada 3 langkah yang bisa dilakukan:

  1. Buat rangkaian modbus Slave dengan alat input/outputnya.
  2. Uji komunikasi modbus dengan software Modbus Poll.
  3. Atur seting komunikasi dan tampilan HMI Haiwell.
Agar lebih "menarik", HMI Haiwell di sini, yang dijadikan modbus Master, tidak hanya mengontrol alat output saja, tetapi juga memonitor alat input yang terhubung dengan Slave. Kemudian agar lebih "meriah", ada 2 modbus Slave yang dibuat, yaitu modbus Slave dengan program Outseal Studio, dan modbus Slave dengan program Arduino, dengan library modbus-esp8266. Berikutnya, agar lebih "mendarat", ditunjukkan bagaimana membuat aplikasi pemantauan umur pakai dari 16 buah mesin. 

Berikut ini uraiannya:

1. Pembuatan Modbus Slave dengan Outseal Studio
Berikut ini langkah-langkahnya:
1. Buat gambar skematik berikut ini di Proteus.

Gambar 1. Rangkaian Slave Outseal Nano (file dapat diunduh di bagian bawah)

Catatan: Outseal Nano memiliki keistimewaan, yaitu kaki input outputnya telah "dibakukan". Kaki input digital sebanyak 8 buah (S.1 - S.8), kaki output digital juga sebanyak 8 buah (R.1 - R.8) dan kaki input analog sebanyak 2 buah (A.1 - A.2). Dalam rangkaian di atas, kedelapan input digital dihubungkan dengan tombol, sedangkan kedelapan output digital dihubungkan dengan LED, dan 2 input analog dihubungkan dengan potensio.

2. Buat kode program berikut ini di Outseal Studio.
Gambar 2. Program Ladder Diagram Outseal Studio (file dapat diunduh di bagian bawah)

Catatan: Perhatikan variabel yang digunakan pada program Ladder Diagram di atas. Ada 4 variabel, yaitu S (Switch), R (Relay), A (Analog) dan B (Binary). Keempat variabel tersebut telah ditempatkan pada alamat modbus tertentu, seperti ditunjukkan dalam tabel berikut ini. Tabel ini mengutip Tabel 38 di buku Panduan Dasar Outseal Revisi 2, di halaman 108 tentang peta alamat modbus Outseal.

Tabel 1. Peta Alamat Modbus Outseal
(Sumber: Panduan Dasar Outseal Revisi 2)

3. Buka Settings, pilih Hardware = Nano V5, Baudrate = 9600 dan alamat Modbus = 1. Kemudian tekan tombol Test untuk kompilasi program.

Gambar 3. Atur settings Outseal, kemudian tekan tombol Test untuk kompilasi program

4. Hal yang menarik dari Outseal Studio adalah, file Hex hasil kompilasi program selalu berada di lokasi direktori file yang tetap, yaitu di C:\Users\nama_user\AppData\Local\Temp\Outseal. Lokasi file Hex ini diperlukan untuk ditempatkan pada kolom Program File, di jendela Edit Component ATmega328. Klik 2 kali komponen ATmega328 di Proteus, kemudian isi kolom Program File dengan lokasi file Hex, CLKDIV8 = Unprogrammed, CKSEL Fuses = Ext Clock, Clock Frequency = 16MHz seperti ditunjukkan pada gambar berikut. 

Gambar 4. Isi kolom Program File dengan lokasi file Hex, isi CLKDIV8 = Unprogrammed,  CKSEL_Fuses = Ext. Clock dan Clock Frequency = 16MHz

5. Atur komponen COMPIM agar simulasi di Proteus ini bisa terhubung dengan software HMI Haiwell, dan juga Modbus Poll. Karena HMI Haiwell menggunakan COM2 untuk komunikasi RS485, maka buat port yang berpasangan dengan COM2, dengan software pembuat virtual port, seperti com0com (link), atau VSPD (link), atau HHD (link). Apabila pasangan COM berhasil dibuat, nama COM yang berpasangan tersebut dapat dilihat di Device Manager. Dalam contoh di sini (lihat Gambar 5), COM yang berpasangan dengan COM2 adalah COM4. Ketik nama COM4 ini di kolom Physical Port COMPIM. Atur juga Physical Baud Rate dan Virtual Baud Rate COMPIM ke 9600.

Gambar 5. Atur port COM dan baud rate di komponen COMPIM, gunakan software pembuat virtual port untuk menciptakan pasangan COM, dan pastikan salah satu pasangan portnya adalah COM2, karena HMI Haiwell hanya menggunakan COM2 untuk komunikasi RS485


2. Pengujian Komunikasi dengan Modbus-Poll
Berikut ini langkah-langkahnya:
1. Buka Modbus Poll. Buka menu File, pilih New untuk menambahkan jendela modbus. Ulangi hingga muncul 3 jendela. Atur secara berturut-turut ketiga jendela tersebut, dengan meng-klik satu per satu jendela, dan pilih Read/Write Definition di menu Setup, dan isi seperti gambar berikut ini:

Gambar 6. Di Read/Write Definition jendela pertama: Function = 01, Address = 136, Quantity = 8

Catatan: Dalam Ladder Diagram di Gambar 2, kontak-kontak untuk menyalakan kedelapan LED menggunakan variabel B9 - B16, yang merupakan memori Coil di Outseal, dengan alamat 136 - 145.

Gambar 7. Di Read/Write Definition jendela kedua: Function = 02, Address = 0, Quantity = 8

Gambar 8. Di Read/Write Definition jendela ketiga: Function = 04, Address = 0, Quantity = 2

2. Berikutnya, klik Connect di menu Connection. Pilih Connection = Serial Port, dan di Serial Settings pilih COM2, 9600, 8 bit data, no parity, 1 bit stop. Klik OK.

Gambar 9. Sambungkan Modbus Poll, klik Connect, pilih Serial Port, pilih COM2

3. Berikutnya, jalankan Proteus. Ubah nilai dari 0 ke 1 di jendela Coil Modbus Poll, dan perhatikan nyala LED di Proteus. Berikutnya lakukan penekanan tombol di Proteus, dan amati nilai di jendela Input Diskrit Modbus Poll. Juga geser potensio di Proteus dan amati perubahan nilai di jendela Input Register.

Gambar 10. Tampak nilai Input Diskrit dan Input Register mengikuti kondisi tombol dan potensio di Proteus, begitu pula nyala LED di Proteus mengikuti nilai Coil di Modbus Poll

4. Setelah komunikasi Modbus Poll dengan Outseal Nano dapat berjalan dengan baik, maka langkah berikutnya adalah menggantikan Modbus Poll dengan HMI Haiwell. Dengan HMI Haiwell, tampilan program akan menjadi lebih menarik, dan menyediakan lebih banyak fasilitas untuk keperluan kontrol dan monitor hardware. Namun sebelum membahas HMI Haiwell, agar tulisan ini tidak terlalu panjang, kita tambahkan dulu rangkaian Modbus Slave Arduino Nano.

Catatan: sebenarnya untuk komunikasi Modbus, tidak perlu membuat banyak device Slave, cukup 1 device Slave saja dengan 1 Master, komunikasi Modbus sudah bisa berjalan. Namun agar rekan-rekan bisa mendapatkan gambaran mengenai alternatif device Slave, maka di sini ditunjukkan bagaimana membuat Modbus Slave dengan Outseal dan Arduino.


3. Pembuatan Modbus Slave dengan Arduino
Berikut ini langkah-langkahnya:
1. Buat gambar skematik berikut ini di Proteus.

Gambar 11. Rangkaian Modbus Slave Outseal dan Arduino (file dapat diunduh di bagian bawah)

2. Pada rangkaian Gambar 11 di atas, Program File pada komponen ATmega328 untuk Modbus Slave1 diisi dengan lokasi file Hex program Outseal, yang sama seperti Gambar 4. Sedangkan komponen ATmega328 untuk Modbus Slave2, isi dengan lokasi file Hex dari kode program berikut ini:
  1. #include "ModbusRTU.h"
  2. ModbusRTU mb;
  3. unsigned long skr = 0;
  4. void setup() {
  5.   Serial.begin(9600);
  6.   mb.begin(&Serial);
  7.   mb.setBaudrate(9600);
  8.   mb.slave(2);  //slave ID
  9.   pinMode(2, INPUT_PULLUP);
  10.   pinMode(3, INPUT_PULLUP);
  11.   pinMode(4, INPUT_PULLUP);
  12.   pinMode(5, INPUT_PULLUP);
  13.   pinMode(6, INPUT_PULLUP);
  14.   pinMode(7, INPUT_PULLUP);
  15.   pinMode(A0, INPUT_PULLUP);
  16.   pinMode(A1, INPUT_PULLUP);
  17.   pinMode(8, OUTPUT);
  18.   pinMode(9, OUTPUT);
  19.   pinMode(10, OUTPUT);
  20.   pinMode(11, OUTPUT);
  21.   pinMode(12, OUTPUT);
  22.   pinMode(13, OUTPUT);
  23.   pinMode(A2, OUTPUT);
  24.   pinMode(A3, OUTPUT);
  25.   mb.addIsts(0);  //IN1
  26.   mb.addIsts(1);  //IN2
  27.   mb.addIsts(2);  //IN3
  28.   mb.addIsts(3);  //IN4
  29.   mb.addIsts(4);  //IN5
  30.   mb.addIsts(5);  //IN6
  31.   mb.addIsts(6);  //IN7
  32.   mb.addIsts(7);  //IN8
  33.   mb.addCoil(0);  //OT1
  34.   mb.addCoil(1);  //OT2
  35.   mb.addCoil(2);  //OT3
  36.   mb.addCoil(3);  //OT4
  37.   mb.addCoil(4);  //OT5
  38.   mb.addCoil(5);  //OT6
  39.   mb.addCoil(6);  //OT7
  40.   mb.addCoil(7);  //OT8
  41.   mb.addIreg(0);  //AN1
  42.   mb.addIreg(1);  //AN2
  43.   mb.addIreg(2);  //AN3
  44.   mb.addIreg(3);  //AN4
  45.   delay(1000);
  46. }
  47. void loop() {
  48.   if (millis() - skr > 1000) {
  49.     skr = millis();
  50.     mb.Ists(0, !digitalRead(2));
  51.     mb.Ists(1, !digitalRead(3));
  52.     mb.Ists(2, !digitalRead(4));
  53.     mb.Ists(3, !digitalRead(5));
  54.     mb.Ists(4, !digitalRead(6));
  55.     mb.Ists(5, !digitalRead(7));
  56.     mb.Ists(6, !digitalRead(A0));
  57.     mb.Ists(7, !digitalRead(A1));
  58.     digitalWrite(8, mb.Coil(0));
  59.     digitalWrite(9, mb.Coil(1));
  60.     digitalWrite(10, mb.Coil(2));
  61.     digitalWrite(11, mb.Coil(3));
  62.     digitalWrite(12, mb.Coil(4));
  63.     digitalWrite(13, mb.Coil(5));
  64.     digitalWrite(A2, mb.Coil(6));
  65.     digitalWrite(A3, mb.Coil(7));
  66.     mb.Ireg(0, analogRead(A4));
  67.     mb.Ireg(1, analogRead(A5));
  68.     mb.Ireg(2, analogRead(A6));
  69.     mb.Ireg(3, analogRead(A7));
  70.   }
  71.   mb.task();
  72. }
Catatan: Kompilasi program di atas dengan menekan tombol Verify di software Arduino IDE untuk menghasilkan file Hex. Lokasi file Hex ditampilkan di kotak Output bagian bawah. Apabila kotak Output tidak memunculkan tulisan, buka menu Preferences di menu File, beri centang pada Compile, di baris Show verbose output during. File program Arduino ini dapat diunduh di bagian bawah halaman ini. Program Arduino ini memerlukan library modbus-esp8266, yang dapat diunduh di link ini: Download library modbus-esp8266

Gambar 12. Copy lokasi file Hex yang muncul di kotak Output setelah kompilasi dilakukan, dan isikan di kolom Program File komponen ATmega328 Slave2

3. Setelah kolom Program File komponen ATmega328 Slave1 dan Slave2 telah terisi dengan lokasi file Hex, atur juga kolom CLKDIV8, CKSEL Fuses, dan Clock Frequency seperti ditunjukkan pada Gambar 4 di atas. 

4. Berikutnya atur juga komponen COMPIM. Isi Physcial Port dengan COM yang berpasangan dengan COM2 (karena HMI Haiwell hanya bisa menggunakan COM2 untuk sambungan RS485). Atur juga Physical Baud Rate dan Virtual Baud Rate ke 9600, seperti ditunjukkan pada Gambar 5 di atas.


4. Pengujian Komunikasi dengan Modbus-Poll
Berikut ini langkah-langkahnya:
1. Buka Modbus Poll. Buka menu File, pilih New untuk menambahkan jendela modbus. Ulangi penambahan hingga muncul 6 jendela. Atur secara berturut-turut keenam jendela tersebut, dengan meng-klik satu per satu jendela, dan pilih Read/Write Definition di menu Setup, dan atur seperti tabel berikut. Jangan lupa untuk memilih Fit to Quantity di kolom Rows, di bagian View.

Tabel 2. Isian menu Setup, Read/Write Definition

Jendela

Slave ID

Function

Address

Quantity

1

1

01

136

8

2

1

02

0

8

3

1

04

0

2

4

2

01

0

8

5

2

02

0

8

6

2

04

0

4


2. Buka menu Connection Modbus Poll. Atur Connection = Serial Port, dan Serial Settings = COM2, 9600, 8 bit data, no parity dan 1 bit stop. Tekan tombol OK dan jalankan Proteus. Lakukan pengubahan nilai di jendela Coil (Function = 1) di Modbus Poll, maka LED indikator di Proteus akan menyala/padam mengikuti nilai yang diberikan. Lakukan penekanan tombol dan pengubahan posisi potensio di Proteus, maka nilai di jendela Input Diskrit (Function = 2) dan jendela Input Register (Function = 4) Modbus Poll juga akan berubah mengikuti kondisi tombol dan potensio. 

Gambar 13. Tampak nilai Input Diskrit dan Input Register mengikuti kondisi tombol dan potensio di Proteus, begitu pula nyala LED di Proteus mengikuti nilai Coil di Modbus Poll, baik untuk rangkaian Slave1 (Outseal Nano) maupun rangkaian Slave2 (Arduino Nano)


5. Pembuatan Kontrol & Monitor HMI Haiwell
Berikut ini langkah-langkahnya:
1. Buka Haiwell Cloud SCADA Develop. Di halaman Start page, klik Create a new project. Isi Project Name dengan nama yang menarik, dan pilih Runtime platform = Haiwell HMI B7H agar mendapat resolusi layar 1024x600. Klik OK.

Gambar 14. Create a new project, isi nama project dan pilih runtime platform

2. Di halaman Project profile, klik 2 kali tombol + Device untuk menambahkan Device. Di halaman Add Device, pilih Device interface = Serial (COM), Choose Device = Modbus Master (RTU/ASCII). Di kolom Device Properties, di Communication port, pilih COM port = COM2, Device station number = 1, Communication port = RS-485, Protocol = Modbus, Baud rate = 9600, Data bits = 8, Parity check = None, Stop bit = 1, Flow control = None.

Gambar 15. Klik 2 kali tombol + Device, pilih Modbus Master (RTU/ASCII), COM port = COM2, Device = 1, RS-485, Modbus, 9600, 8, None, 1, None

3. Pada pertanyaan "Do you want to define the variable of the device now?", pilih Yes. Maka akan muncul halaman Variabel Modbus_1. Klik tombol Add. Di kolom Register type, pilih Digital Output, Function code = 01 05. Di kolom Address, isi dengan angka 136 (karena alamat Coil B9 berada di 136). Kemudian klik tombol Save and Continue untuk mengulangi pembuatan variabel di alamat berikutnya.

Gambar 16. Klik Add, pilih Function code = 01 05 di Register type, dan Address = 136, dan kemudian klik tombol Save and Continue

4. Tekan tombol Save and Continue, dan lanjutkan dengan klik OK Save success. Ulangi sebanyak 8 kali hingga muncul 8 buah variabel Coil (Function = 01) dengan alamat mulai dari 136 - 143. Setelah 8 variabel muncul di daftar, klik Cancel untuk menutup jendela Variable Add. 

Gambar 17. Buat 8 buah variabel Coil dengan alamat 136 - 143 untuk Device Modbus_1

5. Berikutnya, tambahkan 8 buah variabel Input Diskrit dengan cara meng-klik kanan pada daftar variabel, pilih Batch add (bisa juga dengan menekan tombol Batch add di bagian atas daftar). Di jendela Build batch, di  kolom Register type, pilih 1X(Digital input, Function code 02). Di kolom Build quantity, isi dengan angka 8. Di Variable name, pilih Register type + Start address. Klik OK.

Gambar 18. Menambahkan 8 buah variabel Input Diskrit (1X0 - 1X7) dengan Batch add

6. Berikutnya, tambahkan 2 buah Input Register dengan Batch add. Pilih Register type = 3X(Analog Input, Function code 04), dan isi Build Quantity = 3, dan pilih Variable name = Register type + Start address. Klik OK.

Gambar 19. Menambahkan 2 buah variabel Input Register (3X0 - 3X1) dengan Batch add

7. Setelah variabel yang ditetapkan untuk Device Modbus_1 sudah sesuai dengan alat input output yang terhubung dengan hardware Slave1, yang dalam contoh ini: 8 variabel Coil untuk 8 buah LED, 8 variabel Input Diskrit untuk 8 buah tombol, dan 2 variabel Input Register untuk 2 buah potensio, maka kita dapat melakukan monitoring kondisi dari semua alat input output yang terhubung tersebut dengan menekan tombol Start variable monitoring.  

Gambar 20. Tekan tombol Start variable monitoring untuk memantau kondisi alat input output

8. Kondisi alat input output akan terlihat di kolom Current value of device. Jalankan Proteus dan lakukan perubahan pada kondisi tombol dan potensio di rangkaian Slave1 dan perhatikan nilai yang terlihat di kolom Current value. Lakukan perubahan juga pada nilai variabel Coil di kolom tersebut, dan amati kondisi LED di Proteus. 

Gambar 21. Kondisi tombol dan potensio dapat dimonitor dari nilai variabel di kolom Current value, yang juga dapat digunakan untuk mengontrol nyala LED di Proteus 

Catatan: Apabila di kolom Current value tidak menampilkan data, periksa apakah Modbus Poll masih terhubung. Penyebab tidak berjalannya komunikasi salah satunya karena lebih dari 1 perangkat yang menggunakan port serial yang sama. Untuk itu pastikan Modbus Poll ditutup, karena Modbus Poll juga menggunakan port COM2, yang juga digunakan HMI Haiwell.

9. Setelah alat input output di Modbus Slave1 berhasil dimonitor dan dikontrol melalui variabel di HMI Haiwell, langkah berikutnya adalah menambahkan Device Modbus Slave2. Klik pada menu View, pilih Project profile.

Gambar 22. Membuat Project profile untuk menambahkan variabel Modbus Slave2

10. Di halaman Project profile, klik tombol + Device. Di jendela Add device, pilih Modbus Master (RTU/ASCII). Kemudian di Device Properties, di Communication port, isi secara berturut-turut: COM2, 2, RS-485, Modbus, 9600, 8, None, 1, None. Klik OK.

Gambar 23. Klik tombol + Device, pilih Modbus Master, isi dengan isian seperti gambar

11. Berikutnya, pada pertanyaan "Do you want to define the variable of the device now?", pilih Yes. Maka akan muncul halaman Variabel Modbus_2. Klik tombol Batch add. Buat 8 buah variabel Coil (Function 01) dengan alamat 0x0 - 0x7, dengan pilihan Variable name = Register type + Start address. Klik OK. Lanjutkan dengan menambahkan 8 buah variabel Input Diskrit (Function 02), dengan alamat 1x0 - 1x8. Terakhir, tambahkan 4 buah variabel Input Register (Function 04), dengan alamat 3x0 - 3x3. Maka akan terlihat daftar variabel seperti gambar berikut.

Gambar 24. Membuat variabel Coil, Input Diskrit, dan Input Register untuk Modbus Slave2

12. Jalankan Proteus, dan kemudian klik tombol Start variable monitoring, maka seharusnya semua tombol dan potensio dapat dimonitor kondisinya di kolom Current value, dan juga pengubahan nilai variabel Coil di kolom Current value tersebut dapat digunakan untuk mengontrol nyala LED.

Gambar 25. Dengan menjalankan variable monitoring, kondisi tombol dan potensio dapat dimonitor, dan nyala LED di Proteus dapat dikontrol 

13. Setelah semua nilai atau kondisi alat input output, baik di Slave1 maupun di Slave2 dapat muncul nilainya di kolom Current value, maka langkah berikutnya adalah menampilkan variabel-variabel tersebut dalam bentuk objek grafis agar lebih menarik. Klik 2 kali pada tulisan 1:Main_Display, di kolom kiri, di bawah Display. Setelah terbuka halaman Main_Display, ambil objek grafis yang tersedia di kolom kanan, dan tempatkan di halaman Main_Display. Untuk bisa menghidup-matikan LED di Proteus dari HMI Haiwell, gunakan objek Bit Switch, yang dapat diambil dari kategori Functional components. Berikutnya, agar bisa menampilkan kondisi tombol, gunakan objek Bit Lamp, yang juga diambil dari kategori Functional components.

Gambar 26. Menambahkan objek Bit Lamp dari kategori Functional components untuk variabel Input Diskrit dan objek Bit Switch untuk variabel Coil di halaman Main_Display

14. Berikutnya, untuk menampilkan kondisi potensio, tambahkan objek Cursor1 dan Cursor2 dari kategori Instrument Cursor. Sesuai dengan jumlah alat input output di Modbus Slave1, tempatkan 8 buah objek Bit Lamp, 8 buah objek Bit Switch dan 2 buah objek Cursor1. Untuk Modbus Slave2, tempatkan 8 buah objek Bit Lamp, 8 buah objek Bit Switch dan 4 buah objek Cursor2. 

Gambar 27. Tempatkan 8 objek Bit Lamp, 8 objek Bit Switch dan 2 objek Cursor1 untuk Modbus Slave1. Kemudian 8 objek Bit Lamp, 8 objek Bit Switch dan 4 objek Cursor2 untuk Modbus Slave2.

15. Setelah semua objek yang diperlukan untuk kontrol dan monitor alat input output Slave1 dan Slave2 selesai ditempatkan di Display, langkah berikutnya adalah mengisi nama/alamat variabel ke setiap objek grafis tersebut. Pengisian dilakukan dengan meng-klik 2 kali objek, kemudian klik tombol titik-titik, kemudian pilih nama/alamat variabel, sesuai dengan Tabel 1 berikut ini.

Gambar 28. Klik 2 kali objek, isi kolom Read variable dengan meng-klik tombol titik-titik, dan pilih dari daftar nama/alamat variabel yang sesuai dengan objek tersebut

Tabel 3. Nama/alamat variabel yang diisikan sesuai dengan jenis objeknya

Jenis objek

Device

Alamat

Keterangan

8 Bit Lamp

Modbus1

1x0 – 1x7

Menampilkan kondisi 8 tombol di Slave1 (Outseal)

8 Bit Switch

Modbus1

0x0 – 0x7

Menghidup-matikan 8 LED di Slave1 (Outseal)

2 Cursor1

Modbus1

3x0 – 3x1

Menampilkan kondisi 2 potensio di Slave1 (Outseal)

8 Bit Lamp

Modbus2

1x0 – 1x7

Menampilkan kondisi 8 tombol di Slave2 (Arduino)

8 Bit Switch

Modbus2

0x136 – 0x143

Menghidup-matikan 8 LED di Slave2 (Arduino)

4 Cursor2

Modbus2

3x0 – 3x3

Menampilkan kondisi 4 potensio di Slave2 (Arduino)


12. Pastikan semua objek grafis tersebut memiliki nama/alamat yang sesuai dengan Tabel 3 di atas.

Gambar 29. Semua objek grafis telah diisi dengan nama/alamat variabel yang sesuai

13. Setelah semua objek grafis selesai diisi dengan nama variabel, langkah berikutnya, jalankan software HMI Haiwell ini dengan menekan tombol Online Simulation (F5). Maka akan muncul jendela software Haiwell SCADA Cloud Runtime (icon di Taskbar berwarna hijau). Jalankan Proteus. Lakukan pengubahan pada objek Switch di tampilan HMI, dan perhatikan nyala LED di Proteus. Lakukan juga pengubahan pada tombol dan potensio di Proteus, dan perhatikan objek Lampu dan Cursor.

Gambar 30. Terlihat tampilan HMI dapat digunakan untuk memonitor kondisi tombol dan mengontrol nyala LED di rangkaian Slave1 dan Slave2 di Proteus

Gambar 31. Terlihat objek Cursor di tampilan HMI nilainya mengikuti nilai potensio di rangkaian Slave1 dan Slave2 di Proteus

Online atau Offline Simulation??? Apabila rekan-rekan melibatkan variabel External, maka rekan-rekan harus memilih Online Simulation. Namun apabila rekan-rekan hanya menggunakan variabel Internal atau variabel System, maka silahkan memilih Offline Simulation.

14. Sampai di sini pembuatan simulasi tampilan HMI Haiwell untuk kontrol dan monitor IO Slave Outseal dan Slave Arduino selesai. 

Catatan: Dari pengalaman saya, ketika kita membuat semua variabel IO ditampilkan dalam 1 layar, ternyata membuat respon pada beberapa objek (dalam contoh di sini, khususnya objek Bit Lamp dan Cursor untuk Modbus Slave2) menjadi sangat lambat. Sebagai alternatif solusinya, rekan-rekan dapat menambahkan layar, dan kemudian memindahkan sebagian objek grafis yang berisi variabel IO tersebut ke layar yang lain. Lebih jelasnya rekan-rekan dapat melihat video pembuatan di bagian bawah halaman ini.


6. Pembuatan Aplikasi Pemantauan Umur Pakai 16 buah Mesin
Fitur yang umumnya menjadi kelebihan utama dari sebuah HMI adalah tampilan grafis yang menarik dan mudah dipahami. Banyak desain tampilan HMI di internet yang menarik yang bisa dicontoh. Gambar berikut ini menunjukkan contoh tampilan HMI untuk aplikasi pemantauan umur pakai dari 16 buah mesin (dalam tampilan ini hanya ada 8 kotak yang mewakili 8 mesin, untuk 8 kotak lainnya ada di halaman lain). 

Gambar 32. Contoh tampilan HMI untuk aplikasi pemantauan umur pakai mesin (file bisa diunduh di bagian bawah)

Keterangan tampilan: Di sini, 16 buah mesin disimulasikan dengan nyala 16 buah LED di Proteus. Jadi ketika mesin dihidupkan (dihidupkan dengan menekan tombol On/Off di tampilan HMI), maka LED di Proteus akan menyala. Lamanya mesin ini hidup, ditampilkan di tampilan HMI dalam bentuk angka dan warna, di bagian kiri, di bawah nama alat. Warna putih menunjukkan bahwa lamanya waktu hidup belum mencapai batas level 1. Batas level 1 dalam contoh di sini diatur sebesar 102 (nilai ini bisa diatur dengan potensio). Ketika lamanya hidup lebih dari 102, maka warna putih tersebut akan berubah menjadi hijau. Ketika lamanya hidup lebih dari 205, yang merupakan batas level 2, maka warna hijau akan berubah menjadi warna kuning. Di samping bisa memantau lamanya hidup mesin, aplikasi ini juga bisa memantau lamanya mesin mengalami perbaikan. Ketika tombol di Proteus ditekan, maka indikator Alarm di tampilan HMI akan menyala, membuat mesin yang semula hidup menjadi OFF atau mati, dan mesin berada dalam status perbaikan. Lamanya perbaikan ini ditampilkan dalam bentuk angka dan warna di sisi kanan. Ketika lamanya perbaikan melebih batas level 1, yang dalam contoh di sini diatur sebesar 102 (bisa diatur dengan potensio), maka warna putih akan berubah menjadi merah. Ketika lamanya perbaikan melebihi batas level 2, yang dalam contoh di sini diatur sebesar 205 (bisa diatur dengan potensio), maka warna merah akan berubah menjadi warna biru.

Gambar 33. Bagian-bagian pada tampilan HMI pemantauan umur pakai mesin

Agar tidak hanya memantau, tetapi bisa juga mencatat/menyimpan, di sini ditambahkan objek Historical data report table yang ada di kategori Advanced controls.

Gambar 34. Objek Historical data report table untuk menampilkan data umur pemakaian mesin dan lamanya perbaikan dan menyimpannya ke dalam file csv

Lalu bagaimana cara pembuatan aplikasi ini? Berikut ini langkah-langkahnya:
1.  Tampilan aplikasi pemantau umur pakai mesin ini (Gambar 32) sebenarnya sama dengan tampilan Gambar 31, yaitu menggunakan objek Bit Switch untuk tombol On/Off, dan objek Bit Lamp untuk indikator Lamp Alarm, serta objek Cursor5 untuk pengaturan batas level. Sedangkan perbedaannya adalah ada penambahan 3 objek, yaitu gambar alat, angka dan warna umur pakai.
2. Sebenarnya gambar alat ini dibuat dari objek Bit Lamp, yang diubah bentuknya (Shape). Untuk bisa mengubah bentuk Shape dengan Shape yang baru, mula-mula buat 2 gambar; gambar pertama untuk kondisi Off dan gambar kedua untuk kondisi On. Setelah itu, ambil objek Bit Lamp, tempatkan di halaman Display HMI. Klik 2 kali pada objek, hingga muncul jendela pengaturan Bit Lamp. Klik pada Tab Shape, kemudian tekan tombol Shape.

Gambar 35. Klik 2 kali objek Bit Lamp hingga muncul jendela, klik pada Tab Shape, klik tombol Shape

3. Ketika tombol Shape ditekan, muncul jendela Shape library. Ubah pilihan dari Vectogram ke Pictures. Kemudian pada daftar di kolom kiri, klik pada Custom photo library, kemudian klik Photo gallery, maka di bagian bawah akan muncul tombol Import Group dan tombol Import Picture. Tombol Import Group digunakan untuk memasukkan sekelompok gambar, sedangkan tombol Import Picture digunakan untuk memasukkan hanya satu gambar saja.

Gambar 36. Buka Shape library, pilih Pictures, pilih Custom photo library, pilih Photo gallery

3. Di Photo Gallery tersebut akan kita masukkan 2 gambar yang sudah kita buat. Klik tombol Import Group, maka akan muncul jendela pencarian gambar. Pilih gambar yang sudah dibuat.

Gambar 37. Klik tombol Import Group, dan pilih sekaligus 2 gambar, kemudian klik Open

4. Pilih sekaligus 2 gambar yang sudah dibuat, klik tombol Open, maka di jendela Shape library akan muncul sebuah icon dengan angka 2 di bawahnya, yang berarti ada 2 gambar di dalamnya.

Gambar 38. Ketika 2 gambar sekaligus diimport, maka muncul sebuah icon dengan angka 2 di bawahnya

5. Untuk mengetahui gambar di dalamnya, klik pada icon tersebut, maka di kolom bagian bawah akan muncul 2 gambar yang sudah dipilih, dengan angka 0 di gambar yang kiri, dan angka 1 di gambar yang kanan. Ketika Bit Lamp mendapat nilai 0, maka gambar yang kiri yang ditampilkan, sedangkan bila mendapat nilai 1, maka gambar yang kanan yang ditampilkan.

Gambar 39. Ketika icon dengan angka 2 di-klik, akan muncul 2 gambar dengan angka 0 dan 1

6. Klik tombol Select untuk memilih gambar tersebut menggantikan gambar default Bit Lamp. Klik OK, maka sekarang objek Bit Lamp memiliki gambar yang baru, yang kita buat sendiri.

Gambar 40. Klik OK, maka objek Bit Lamp memiliki gambar yang kita buat sendiri

Catatan: Rekan-rekan dapat mengunduh contoh penggunaan Bit Lamp dengan tampilan gambar yang dibuat sendiri, di bagian bawah halaman ini, dengan nama file: aplikasi_tanpa_angka.hwdev.

7. Berikutnya, agar aplikasi ini bisa menampilkan angka penghitungan waktu, baik waktu mesin hidup, maupun waktu perbaikan (saat alarm dihidupkan), maka ada 3 hal yang diperlukan: yang pertama adalah objek Numeric Input/Display untuk menampilkan angka, yang kedua adalah Internal Variabel untuk menampung data angka, dan yang ketiga adalah kode program di bagian Event untuk melakukan penghitungan waktu. Mulai dari objek Numeric input/display, ambil objek tersebut dari kategori Functional components. Klik 2 kali objek Numeric input/display hingga muncul jendela isian Numeric input/display. Di kolom Read variable ini harusnya diisi dengan Internal Variable. 

Gambar 41. Ada 3 hal yang diperlukan: objek Numeric input/display, InternalVariable, dan Event untuk kode program

8. Karena Internal Variable belum dibuat, maka buat dengan cara meng-klik Variable, kemudian klik kanan Internal Variable, kemudian klik pada Add Internal variable group. Pada halaman InternalVariable_1, klik Batch add, dan buat 16 buah variabel dengan tipe register W (= word, atau integer), dan 16 buah variabel lagi dengan tipe B (= bit, atau switch), dengan alamat yang berurutan. Mengapa membuat variabel sebanyak itu? Karena perlu 8 variabel integer untuk menampilkan waktu hidup dan 8 variabel integer untuk menampilkan waktu perbaikan. Berikutnya, butuh 8 variabel switch untuk menampilkan kotak putih/hijau untuk indikator waktu hidup melebihi batas, dan butuh 8 buah variabel switch lagi untuk menampilkan kotak putih/merah untuk waktu perbaikan melebihi batas.

Gambar 42. Buat Internal variable tipe integer sebanyak 16 buah dan Internal variable tipe switch sebanyak 16 buah

9. Setelah Internal variabel sudah berhasil dibuat, isikan nama/alamat Internal Variable tipe integer tersebut ke kolom Read variable di setiap Numeric input/display. Kemudian untuk kotak putih di samping Numeric input/display, buat kotak tersebut dengan Bit Lamp. Buat ukuran lebar dan tingginya cukup kecil, yaitu 20 x 15 pixel. Buat bentuk shape-nya (terdiri dari 2 gambar) yang satu berwarna putih, dan yang kedua berwarna hijau untuk waktu hidup. Sedangkan untuk waktu perbaikan, buat yang satu berwarna putih, dan yang kedua berwarna merah.

Gambar 43. Untuk kotak warna di samping angka waktu hidup gunakan Bit Lamp, dan atur warnanya dengan putih dan hijau, sedangkan untuk waktu perbaikan, atur warnanya dengan putih dan merah

10. Setelah tampilan angka dan kotak warna berhasil dibuat, juga dengan isian variabelnya, maka langkah berikutnya adalah menambahkan kode program agar penghitungan waktu hidup dan waktu perbaikan bisa aktif saat HMI dijalankan. Karena penghitungan harus dilakukan mulai dari awal, maka isikan kode program pada Event Start execution event. Klik kanan Start execution event, pilih Add event. Di jendela Event selection, isi Event execution = Only server background, dan klik pada tombol titik-titik untuk membuka jendela Task selector. Namun sebelum meng-klik tombol titik-titik, atur Execution mode = Execution internal dan  Interval = 5000 milisecond.

Gambar 44. Klik kanan Start execution event, pilih Add event, isi jendela seperti gambar di atas

Catatan: Interval script di atas diatur dijalankan setiap 5000 milidetik atau 5 detik sekali, karena ketika diatur dijalankan setiap detik sekali, respon dari objek-objek grafis menjadi sangat lambat sekali. Ternyata setelah diatur menjadi 5000 milidetik, respon dari objek-objek grafis menjadi lebih baik.

11. Di jendela Task Selector, isikan halaman yang kosong dengan kode program di bawah gambar ini. Setelah terisi dengan kode program seperti gambar berikut ini, klik tombol Compile, diikuti Test. Apabila muncul tulisan Passed the syntax checking, berarti kode program sudah benar formatnya.

Gambar 45. Isikan kode program di bawah ini ke halaman jendela Task selector, klik tombol Compile dan Test untuk memastikan bahwa format program sudah benar

12. Berikut ini kode program untuk Gambar 45 di atas, yang digunakan untuk melakukan pencatatan waktu hidup dan waktu perbaikan serta kotak warna indikator melebihi batas:
  1. if($Modbus_1.0X136){
  2. $InternalVariable_1.Variable1=$InternalVariable_1.Variable1+5;}
  3. if($Modbus_1.0X137){
  4. $InternalVariable_1.Variable2=$InternalVariable_1.Variable2+5;}
  5. if($Modbus_1.0X138){
  6. $InternalVariable_1.Variable3=$InternalVariable_1.Variable3+5;}
  7. if($Modbus_1.0X139){
  8. $InternalVariable_1.Variable4=$InternalVariable_1.Variable4+5;}
  9. if($Modbus_1.0X140){
  10. $InternalVariable_1.Variable5=$InternalVariable_1.Variable5+5;}
  11. if($Modbus_1.0X141){
  12. $InternalVariable_1.Variable6=$InternalVariable_1.Variable6+5;}
  13. if($Modbus_1.0X142){
  14. $InternalVariable_1.Variable7=$InternalVariable_1.Variable7+5;}
  15. if($Modbus_1.0X143){
  16. $InternalVariable_1.Variable8=$InternalVariable_1.Variable8+5;}
  17. if($Modbus_1.1X0){
  18. $InternalVariable_1.Variable9=$InternalVariable_1.Variable9+5;
  19. $Modbus_1.0X136=0;}
  20. if($Modbus_1.1X1){
  21. $InternalVariable_1.Variable10=$InternalVariable_1.Variable10+5;
  22. $Modbus_1.0X137=0;}
  23. if($Modbus_1.1X2){
  24. $InternalVariable_1.Variable11=$InternalVariable_1.Variable11+5;
  25. $Modbus_1.0X138=0;}
  26. if($Modbus_1.1X3){
  27. $InternalVariable_1.Variable12=$InternalVariable_1.Variable12+5;
  28. $Modbus_1.0X139=0;}
  29. if($Modbus_1.1X4){
  30. $InternalVariable_1.Variable13=$InternalVariable_1.Variable13+5;
  31. $Modbus_1.0X140=0;}
  32. if($Modbus_1.1X5){
  33. $InternalVariable_1.Variable14=$InternalVariable_1.Variable14+5;
  34. $Modbus_1.0X141=0;}
  35. if($Modbus_1.1X6){
  36. $InternalVariable_1.Variable15=$InternalVariable_1.Variable15+5;
  37. $Modbus_1.0X142=0;}
  38. if($Modbus_1.1X7){
  39. $InternalVariable_1.Variable16=$InternalVariable_1.Variable16+5;
  40. $Modbus_1.0X143=0;}
  41. if($Modbus_2.0X0){
  42. $InternalVariable_2.Variable1=$InternalVariable_2.Variable1+5;}
  43. if($Modbus_2.0X1){
  44. $InternalVariable_2.Variable2=$InternalVariable_2.Variable2+5;}
  45. if($Modbus_2.0X2){
  46. $InternalVariable_2.Variable3=$InternalVariable_2.Variable3+5;}
  47. if($Modbus_2.0X3){
  48. $InternalVariable_2.Variable4=$InternalVariable_2.Variable4+5;}
  49. if($Modbus_2.0X4){
  50. $InternalVariable_2.Variable5=$InternalVariable_2.Variable5+5;}
  51. if($Modbus_2.0X5){
  52. $InternalVariable_2.Variable6=$InternalVariable_2.Variable6+5;}
  53. if($Modbus_2.0X6){
  54. $InternalVariable_2.Variable7=$InternalVariable_2.Variable7+5;}
  55. if($Modbus_2.0X7){
  56. $InternalVariable_2.Variable8=$InternalVariable_2.Variable8+5;}
  57. if($Modbus_2.1X0){
  58. $InternalVariable_2.Variable9=$InternalVariable_2.Variable9+5;
  59. $Modbus_2.0X0=0;}
  60. if($Modbus_2.1X1){
  61. $InternalVariable_2.Variable10=$InternalVariable_2.Variable10+5;
  62. $Modbus_2.0X1=0;}
  63. if($Modbus_2.1X2){
  64. $InternalVariable_2.Variable11=$InternalVariable_2.Variable11+5;
  65. $Modbus_2.0X2=0;}
  66. if($Modbus_2.1X3){
  67. $InternalVariable_2.Variable12=$InternalVariable_2.Variable12+5;
  68. $Modbus_2.0X3=0;}
  69. if($Modbus_2.1X4){
  70. $InternalVariable_2.Variable13=$InternalVariable_2.Variable13+5;
  71. $Modbus_2.0X4=0;}
  72. if($Modbus_2.1X5){
  73. $InternalVariable_2.Variable14=$InternalVariable_2.Variable14+5;
  74. $Modbus_2.0X5=0;}
  75. if($Modbus_2.1X6){
  76. $InternalVariable_2.Variable15=$InternalVariable_2.Variable15+5;
  77. $Modbus_2.0X6=0;}
  78. if($Modbus_2.1X7){
  79. $InternalVariable_2.Variable16=$InternalVariable_2.Variable16+5;
  80. $Modbus_2.0X7=0;}
  81. if($InternalVariable_1.Variable1>$Modbus_1.3X0){
  82. $InternalVariable_1.Variable17=1;}
  83. else{$InternalVariable_1.Variable17=0;}
  84. if($InternalVariable_1.Variable2>$Modbus_1.3X0){
  85. $InternalVariable_1.Variable18=1;}
  86. else{$InternalVariable_1.Variable18=0;}
  87. if($InternalVariable_1.Variable3>$Modbus_1.3X0){
  88. $InternalVariable_1.Variable19=1;}
  89. else{$InternalVariable_1.Variable19=0;}
  90. if($InternalVariable_1.Variable4>$Modbus_1.3X0){
  91. $InternalVariable_1.Variable20=1;}
  92. else{$InternalVariable_1.Variable20=0;}
  93. if($InternalVariable_1.Variable5>$Modbus_1.3X0){
  94. $InternalVariable_1.Variable21=1;}
  95. else{$InternalVariable_1.Variable21=0;}
  96. if($InternalVariable_1.Variable6>$Modbus_1.3X0){
  97. $InternalVariable_1.Variable22=1;}
  98. else{$InternalVariable_1.Variable22=0;}
  99. if($InternalVariable_1.Variable7>$Modbus_1.3X0){
  100. $InternalVariable_1.Variable23=1;}
  101. else{$InternalVariable_1.Variable23=0;}
  102. if($InternalVariable_1.Variable8>$Modbus_1.3X0){
  103. $InternalVariable_1.Variable24=1;}
  104. else{$InternalVariable_1.Variable24=0;}
  105. if($InternalVariable_1.Variable9>$Modbus_1.3X1){
  106. $InternalVariable_1.Variable25=1;}
  107. else{$InternalVariable_1.Variable25=0;}
  108. if($InternalVariable_1.Variable10>$Modbus_1.3X1){
  109. $InternalVariable_1.Variable26=1;}
  110. else{$InternalVariable_1.Variable26=0;}
  111. if($InternalVariable_1.Variable11>$Modbus_1.3X1){
  112. $InternalVariable_1.Variable27=1;}
  113. else{$InternalVariable_1.Variable27=0;}
  114. if($InternalVariable_1.Variable12>$Modbus_1.3X1){
  115. $InternalVariable_1.Variable28=1;}
  116. else{$InternalVariable_1.Variable28=0;}
  117. if($InternalVariable_1.Variable13>$Modbus_1.3X1){
  118. $InternalVariable_1.Variable29=1;}
  119. else{$InternalVariable_1.Variable29=0;}
  120. if($InternalVariable_1.Variable14>$Modbus_1.3X1){
  121. $InternalVariable_1.Variable30=1;}
  122. else{$InternalVariable_1.Variable30=0;}
  123. if($InternalVariable_1.Variable15>$Modbus_1.3X1){
  124. $InternalVariable_1.Variable31=1;}
  125. else{$InternalVariable_1.Variable31=0;}
  126. if($InternalVariable_1.Variable16>$Modbus_1.3X1){
  127. $InternalVariable_1.Variable32=1;}
  128. else{$InternalVariable_1.Variable32=0;}
  129. if($InternalVariable_2.Variable1>$Modbus_2.3X3){
  130. $InternalVariable_2.Variable17=2;}
  131. else if($InternalVariable_2.Variable1>$Modbus_2.3X2){
  132. $InternalVariable_2.Variable17=1;}
  133. else{$InternalVariable_2.Variable17=0;}
  134. if($InternalVariable_2.Variable2>$Modbus_2.3X3){
  135. $InternalVariable_2.Variable18=2;}
  136. else if($InternalVariable_2.Variable2>$Modbus_2.3X2){
  137. $InternalVariable_2.Variable18=1;}
  138. else{$InternalVariable_2.Variable18=0;}
  139. if($InternalVariable_2.Variable3>$Modbus_2.3X3){
  140. $InternalVariable_2.Variable19=2;}
  141. else if($InternalVariable_2.Variable3>$Modbus_2.3X2){
  142. $InternalVariable_2.Variable19=1;}
  143. else{$InternalVariable_2.Variable19=0;}
  144. if($InternalVariable_2.Variable4>$Modbus_2.3X3){
  145. $InternalVariable_2.Variable20=2;}
  146. else if($InternalVariable_2.Variable4>$Modbus_2.3X2){
  147. $InternalVariable_2.Variable20=1;}
  148. else{$InternalVariable_2.Variable20=0;}
  149. if($InternalVariable_2.Variable5>$Modbus_2.3X3){
  150. $InternalVariable_2.Variable21=2;}
  151. else if($InternalVariable_2.Variable5>$Modbus_2.3X2){
  152. $InternalVariable_2.Variable21=1;}
  153. else{$InternalVariable_2.Variable21=0;}
  154. if($InternalVariable_2.Variable6>$Modbus_2.3X3){
  155. $InternalVariable_2.Variable22=2;}
  156. else if($InternalVariable_2.Variable6>$Modbus_2.3X2){
  157. $InternalVariable_2.Variable22=1;}
  158. else{$InternalVariable_2.Variable22=0;}
  159. if($InternalVariable_2.Variable7>$Modbus_2.3X3){
  160. $InternalVariable_2.Variable23=2;}
  161. else if($InternalVariable_2.Variable7>$Modbus_2.3X2){
  162. $InternalVariable_2.Variable23=1;}
  163. else{$InternalVariable_2.Variable23=0;}
  164. if($InternalVariable_2.Variable8>$Modbus_2.3X3){
  165. $InternalVariable_2.Variable24=2;}
  166. else if($InternalVariable_2.Variable8>$Modbus_2.3X2){
  167. $InternalVariable_2.Variable24=1;}
  168. else{$InternalVariable_2.Variable24=0;}
  169. if($InternalVariable_2.Variable9>$Modbus_2.3X1){
  170. $InternalVariable_2.Variable25=2;}
  171. else if($InternalVariable_2.Variable9>$Modbus_2.3X0){
  172. $InternalVariable_2.Variable25=1;}
  173. else{$InternalVariable_2.Variable25=0;}
  174. if($InternalVariable_2.Variable10>$Modbus_2.3X1){
  175. $InternalVariable_2.Variable26=2;}
  176. else if($InternalVariable_2.Variable10>$Modbus_2.3X0){
  177. $InternalVariable_2.Variable26=1;}
  178. else{$InternalVariable_2.Variable26=0;}
  179. if($InternalVariable_2.Variable11>$Modbus_2.3X1){
  180. $InternalVariable_2.Variable27=2;}
  181. else if($InternalVariable_2.Variable11>$Modbus_2.3X0){
  182. $InternalVariable_2.Variable27=1;}
  183. else{$InternalVariable_2.Variable27=0;}
  184. if($InternalVariable_2.Variable12>$Modbus_2.3X1){
  185. $InternalVariable_2.Variable28=2;}
  186. else if($InternalVariable_2.Variable12>$Modbus_2.3X0){
  187. $InternalVariable_2.Variable28=1;}
  188. else{$InternalVariable_2.Variable28=0;}
  189. if($InternalVariable_2.Variable13>$Modbus_2.3X1){
  190. $InternalVariable_2.Variable29=2;}
  191. else if($InternalVariable_2.Variable13>$Modbus_2.3X0){
  192. $InternalVariable_2.Variable29=1;}
  193. else{$InternalVariable_2.Variable29=0;}
  194. if($InternalVariable_2.Variable14>$Modbus_2.3X1){
  195. $InternalVariable_2.Variable30=2;}
  196. else if($InternalVariable_2.Variable14>$Modbus_2.3X0){
  197. $InternalVariable_2.Variable30=1;}
  198. else{$InternalVariable_2.Variable30=0;}
  199. if($InternalVariable_2.Variable15>$Modbus_2.3X3){
  200. $InternalVariable_2.Variable31=2;}
  201. else if($InternalVariable_2.Variable15>$Modbus_2.3X2){
  202. $InternalVariable_2.Variable31=1;}
  203. else{$InternalVariable_2.Variable31=0;}
  204. if($InternalVariable_2.Variable16>$Modbus_2.3X1){
  205. $InternalVariable_2.Variable32=2;}
  206. else if($InternalVariable_2.Variable16>$Modbus_2.3X0){
  207. $InternalVariable_2.Variable32=1;}
  208. else{$InternalVariable_2.Variable32=0;}

13. Apabila rekan-rekan masih bingung dengan materi Simulasi IO Outseal dan Arduino, dan juga pembuatan aplikasi pemantauan waktu umur pakai mesin dengan HMI Haiwell, rekan-rekan dapat melihat video berikut ini:

Video pembuatan Simulasi IO

14. Sampai di sini materi tentang Simulasi IO Outseal dan Arduino menggunakan HMI Haiwell dan Proteus. File-file yang diperlukan dalam pembuatan Simulasi IO ini, dan juga file aplikasi pemantauan umur pakai 16 buah mesin, dapat rekan-rekan unduh di link ini: 

No comments:

Post a Comment