CV. ZENTRONIC - Perusahaan Jasa Listrik dan Elektronika

Kamis, 16 Maret 2023

Cara Mudah Belajar Modbus RTU dengan Arduino

 

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 = &regBank;  
 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

Arduino – LM35 Temperature Sensor

  Sensor Suhu seri LM35 adalah perangkat suhu sirkuit terpadu presisi dengan tegangan keluaran yang berbanding lurus dengan suhu Celcius. ...