saya kali ini akan membahas tentang protokol komunikasi pada industri yang masih de facto menjadi standar disana. Standar MODBUS yang diperkenalkan oleh modicom (kemudian menjadi schneider) pada tahun 1979 sebagai sistem kendali pada mesin industri dimana saat itu kontrol dari pusat PLC (Programmable Logic Unit) dihubungkan menuju RTU (remote terminal unit) melalui komunikasi serial RS 232/485. Untuk memudahkan pemahaman kali ini saya akan menekankan praktek langsung menggunakan mikrokontroller arduino.
Pola pikir orang jaman dulu saat mendesain protokol modbus menggunakan pola ADDRESS-DATA, jadi sebuah lokasi alamat memori memiliki data yang dapat dibaca atau ditulis dan dari perubahan register ini maka akan mendapatkan kondisi yang diharapkan. Alamat address yang standar modbus sebagai berikut :

Coil merupakan istilah output relay, Discrete input merupakan istilah untuk switch, Input register merupakan data sensor analog dan Holding register sebagai alamat memory umum yang dapat digunakan menampung parameter/variabel. Ada istilah lainnya yang perlu diketahui yaitu function code yang menjelaskan perintah yang dikirim akan mengerjakan apa.
FUNCTION CODE VALUE TYPE
01 (0x01) Read Coil Status
02 (0x02) Read Input Status
03 (0x03) Read Holding Registers
04 (0x04) Read Input Registers
05 (0x05) Force Single Coil
06 (0x06) Preset Single Register
15 (0x0F) Force Multiple Coils
16 (0x10) Preset Multiple Registers
Yang sering digunakan pada alat berbasis modbus adalah fungsi 02, 03, 04 dan 05.
Karena di tempat saya tidak memiliki alat berbasis modbus maka pada praktek part 1 ini kita akan membuat alat seperti pada skematik diatas tujuannya menjadikan arduino dengan I/O berupa dht11, led dan tombol menjadi berbasis modbus. Script nya seperti dibawah ini :#include <modbus.h>
#include <modbusDevice.h>
#include <modbusRegBank.h>
#include <modbusSlave.h>
#include "DHT.h"
#define LED 2
#define TOMBOL 3
#define dhtPin 4
#define DHTTYPE DHT11
DHT dht(dhtPin, DHTTYPE);
modbusDevice regBank;
modbusSlave slave;
void setup()
{
pinMode(LED, OUTPUT);
pinMode(TOMBOL, INPUT);
regBank.setId(1);
dht.begin();
/*
modbus registers format seperti berikut
00001-09999 Digital Outputs, master dapat menulis dan membaca data
10001-19999 Digital Inputs, master hanya bisa baca data
30001-39999 Analog Inputs, master hanya bisa membaca nilai pada register
40001-49999 Analog Outputs, master dapat tulis baca register
*/
regBank.add(1); //LED
regBank.add(10001); //TOMBOL
regBank.add(30001); //DHT11
regBank.add(30002); //DHT11
regBank.add(40001); // w
regBank.add(40002); // w
regBank.add(40003); // w
regBank.add(40004); // .
regBank.add(40005); // z
regBank.add(40006); // e
regBank.add(40007); // n
regBank.add(40008); // t
regBank.add(40009); // r
regBank.add(40010); // o
regBank.add(40011); // n
regBank.add(40012); // i
regBank.add(40013); // c
regBank.add(40014); // .
regBank.add(40015); // m
slave._device = ®Bank;
slave.setBaud(9600);
regBank.set(40001,1);
regBank.set(40002,2);
regBank.set(40003,3);
regBank.set(40004,4);
regBank.set(40005,5);
regBank.set(40006,6);
regBank.set(40007,7);
regBank.set(40008,8);
regBank.set(40009,9);
regBank.set(40010,10);
regBank.set(40011,11);
regBank.set(40012,12);
regBank.set(40013,13);
regBank.set(40014,14);
regBank.set(40015,15);
}
void loop()
{
digitalWrite(LED,regBank.get(1));
regBank.set(10001, digitalRead(TOMBOL));
int h = dht.readHumidity();
int t= dht.readTemperature();
regBank.set(30001,h);
regBank.set(30002,t);
slave.run();
}
Pergunakan software monitoring modbus yang banyak ada di internet untuk melakukan pengecekan apakah alat yang kita buat sudah terbukti menggunakan modbus, yang saya gunakan adalah radzio modbus.
Dengan menggunakan USB to Serial langsung ke PC maka telah terbukti device modbus arduino dengan ID 1 dapat dibaca datanya dan dilakukan kontrol LED terhadapnya.
Tidak ada komentar:
Posting Komentar