Komunikasi Data Arduino dan Indusoft Web Studio (IWS) dengan Protokol ModbusRTU Serial


Protokol Modbus merupakan protokol yang sudah cukup lazim digunakan dalam komunikasi data. Protokol ini biasa digunakan untuk menghubungkan antara suatu RTU dengan MTU. Pada topik bahasan kali ini, kita akan memahami lebih jelas cara menggunakan protokol Modbus antara Arduino dengan salah satu software SCADA yaitu Indusoft Web Studio.

Untuk mengkomunikasikan data antara IWS dan Arduino, kita membutuhkan dua buah software yaitu Arduino IDE dan Indusoft Web Stduio. Akan tetapi, pada tutorial kali ini kita akan membahas hanya di Arduinonya saja. Untuk software Arduino IDE bisa anda dapatkan pada link berikut.

Download Arduino IDE Gratis
Untuk pengiriman data dari Arduino ke IWS saya ketahui ada 2 jenis komunikasi data. Komunikasi data pertama yaitu berupa Coil Status dimana pada komunikas data ini, kita hanya bisa menulis/membaca data 1 ataupun 0 saja. Komunikasi ini biasa digunakan untuk membaca/menuliskan data status dari suatu objek. Misal menghidupkan dan melihat kondisi LED. Sedangkan komunikasi data yang kedua yaitu holding register dimana penulisan atau pembacaan data dapat berupa data integer maupun real.

Contoh Sintaks Coil Status


Konfigurasi ini memiliki adress 0X:n dimana n merupakan array data yang dikirim atau diterima. Untuk pembacaan data dengan konfigurasi coil status pada arduino, sintaks pembacaannya adalah menggunakan sintaks:

bitWrite(x, n, b)

x: Variabel yang akan dimasukan datanya
n: Bit data untuk memulai pengiriman
b: Nilai data yang akan dibaca atau dituliskan

Jika kurang jelas saya contohkan seperti berikut.

bitWrite(data[0], 0, digitalRead(3));

Pada sintaks diatas, saya mencoba membaca data dari pembacaan data digital pada Pin digital 3 di Arduino dengan digitalRead(3). Data yang akan saya gunakan dimulai dari bit ke 0, artinya semua data yang didapat akan dikirimkan. Data yang sudah dibaca, disimpan pada variabel data[0], artinya data akan masuk ke array data urutan 0 (pertama)

Perlu diketahui, array di arduino dimulai dari 0. Tetapi, ketika data dikirimkan ke IWS, maka akan menjadi data nomor 1 sehingga pada adress di IWS, pembacaan data[0] memiliki address 0X:1.

Contoh Sintaks Holding Register


Konfigurasi ini pada IWS memiliki adress 4X:n dimana n merupakan urutan data yang diterima. Berbeda dengan sintaks di coil status, pada konfigurasi ini kita cukup memasukan data berupa bilangan integer atau float pada variabel data. Dengan kata lain, sintaksnya sama seperti kita memasukan data biasa ke variabel. Sebagai contoh, sintaks yang saya gunakan seperti berikut.

data[1] = 1000;          //pembacaan data 1000

analogWrite(data[2], 3) //penulisan data ke pin 3

Pada contoh diatas, saya memasukan data[1] dengan nilai 1000. Maka untuk membaca data dari IWS kita cukup menggunakan address 4X:2 untuk membaca data[1]. Mengapa 4X:2 bukan 4X:1? sama seperti pada coil status, data[1] di arduino berarti data dengan urutan array 2 (data[0] = data pertama, data[1] = data kedua) sehingga untuk pembacaan di IWS menggunakan 4X:2.

Untuk membaca data dari IWS, kita juga bisa menggunakan sintaks pada baris kedua diatas. Pada sintaks tersebut, data dari address 4X:3 yang merupakan data[2] dituliskan pada Pin Analog 3. Kita bisa juga menaruh data tersebut dalam sebuah variabel, misalkan

nilaiPWM =  data[2];

Maka data yang dibaca dari address  4X:3 yang dimasukan ke data[2], akan dimasukan lagi ke variabel nilaiPWM.

Bagaimana cara mengirimkan data yang telah ditampung dari arduino ke IWS?

Pengiriman atau pembacaan data antara Arduino dan IWS memerlukan sebuah library bernama ModbusRtu.h. Setelah memasukan library nya ke arduino, sintaks yang digunakan seperti berikut.

#include <ModbusRtu.h>
#define ID 1

Modbus slave(ID,0,0);

int8_t state = 0;
uint16_t data[4];
uint16_t h,t,s;

void setup()
{
  slave.begin(9600);
}
  
void loop()
{
      h = 200;
      t = 1000;  
      s = 50;
    
      data[0]=h;
      data[1]=t;
      data[2]=s;
      bitWrite(data[3],0,3);          // data[3] didapat dari pembacaan di pin 3
      
      state=slave.poll(data,4);      // pengiriman variabel data ke slave dengan panjang data 4

}

Pada sketch di atas, saya mengirimkan data pada variabel h,t,s, dan pembacan dari pin 3 sesuai dengan input data masing-masing pada array data[0] sampai data[3]. Sehingga jelasnya, nilai variabel data adalah sebagai berikut.

data[4] = {200, 1000, 50, 0);

Data yang ditampung pada variabel data, akan dikirimkan ke serial di slave. Data inilah yang akan dibaca oleh IWS sesuai addressnya masing-masing.

Nah materi di atas merupakan cara komunikasi antara Arduino dengan IWS. Untuk bagaimana cara membaca data, menampilkan, dan  menulis data di Indusoft Web Studio (IWS) beserta contoh projectnya akan kita bahas di tutorial berikutnya.

Terimakasih telah membaca, jangan lupa share!

Berlangganan update artikel terbaru via email:

0 Response to "Komunikasi Data Arduino dan Indusoft Web Studio (IWS) dengan Protokol ModbusRTU Serial"

Post a Comment

Iklan Atas Artikel

Iklan Tengah Artikel 1

Iklan Tengah Artikel 2

Iklan Bawah Artikel