Pada kesempatan ini, saya akan menyampaikan hasil eksperimen sederhana, yakni mengontrol LED pada board Arduino melalui komputer melalui port serial dengan menggunakan protokol Modbus.

Pada eksperimen ini saya menggunakan board Arduino UNO dengan library ArduinoModbus. Library ArduinoModbus membutuhkan library ArduinoRS485. Jadi pastikan kedua library tersebut telah terinstalasi pada Arduino IDE.

Sebagai output yang akan dikontrol (COIL), saya menambahkan rangkaian LED Aktif-Tinggi yang terhubung pada (dikontrol oleh) pin 8 dan pin 9. Simak gambar berikut ini.

Arduino UNO dalam hal ini bertindak sebagai Modbus Server atau Modbus Slave. Arduino akan menunggu perintah dari komputer. Jika ada perintah yang dikirim oleh komputer, maka Arduino UNO akan meresponnya.

Adapun komputer dalam hal ini bertindak sebagai Modbus Client atau Modbus Master. Komputer mengirimkan perintah untuk mengontrol LED pada board Arduino. Untuk pemrograman pada sisi komputer, saya menggunakan library libmodbus.

libmodbus adalah library yang ditulis dalam bahasa C yang digunakan untuk melakukan komunikasi data menggunakan protokol Modbus. Library libmodbus mendukung komunikasi RTU (Serial) dan TCP (Ethernet). Library ini menyediakan banyak sekali fungsi siap pakai untuk memudahkan kita dalam menyusun program komunikasi data menggunakan protokol Modbus. Library ArduinoModbus dibuat berdasarkan library libmodbus dengan memodifikasi bagian kode program RS485 dan TCP.

Lebih detil mengenai library libmodbus dapat Anda baca di: https://libmodbus.org.

Untuk detil mengenai protokol Modbus dapat Anda baca di: https://modbus.org.

Kode Program Arduino

Sebelum memrogram Arduino, perlu dilakukan terlebih dahulu instalasi library ArduinoModbus dan ArduinoRS485. Silakan buka Library Manager dan lakukan instalasi.

Selanjutnya, buat sketch baru dan copy-paste kode program berikut ini.

#include <ArduinoRS485.h>
#include <ArduinoModbus.h>

const int led0 = 13;
const int led1 = 8, led2 = 9;
const int SlaveID = 36;

void setup() 
{
  pinMode(led0, OUTPUT);
  pinMode(led1, OUTPUT);
  pinMode(led2, OUTPUT);

  for (int i=0; i<3; i++)
  {
    digitalWrite(led0, HIGH); delay(100);
    digitalWrite(led0, LOW); delay(100);
  }

  Serial.begin(9600);

  if (!ModbusRTUServer.begin(SlaveID, 9600)) {
    while (1) {
      digitalWrite(led0, HIGH); delay(100);
      digitalWrite(led0, LOW); delay(100);
    }
  }
  
  ModbusRTUServer.configureCoils(0x00, 2);
}

void loop() 
{
  ModbusRTUServer.poll();

  digitalWrite(8, ModbusRTUServer.coilRead(0));
  digitalWrite(9, ModbusRTUServer.coilRead(1));
}

Selanjutnya, Upload dan tekan tombol reset setelah selesai Upload.

Penjelasan Singkat Kode Program

Pada bagian setup(), program melakukan konfigurasi terhadap pin 8, 9, dan 13 agar berfungsi sebagai OUTPUT. Dan kemudian, menyalakan LED pada pin 13 secara berkedip sebanyak 3 kali.

Selanjutnya, program melakukan inisialisasi Serial dengan baudrate 9600. Dan dilanjutkan dengan melakukan inisialisasi ModbusRTUServer dengan ID = 36 dengan baudrate 9600.

Jika program gagal melakukan inisialisasi ModbusRTUServer, maka LED pada pin 13 akan berkedip-kedip secara terus-menerus.

Jika inisialisasi berhasil, maka program akan melakukan konfigurasi COIL sebanyak 2 buah yang dimulai pada alamat 0. Sehingga COIL terdapat pada alamat 0 dan 1. COIL dengan alamat 0 ditujukan untuk mengontrol LED1 (pin 8) dan COIL dengan alamat 1 ditujukan untuk mengontrol LED2 (pin 9).

Pada bagian loop(), program akan memanggil fungsi ModbusRTUServer.poll(). Ini adalah mandatori. Harus dilakukan. Dan jika proses polling ini mendapati adanya perintah dari komputer, maka seyogyanya program akan melakukan seleksi terhadap perintah tersebut.

Untuk merespon adanya perubahan nilai pada COIL dengan alamat 0 dan COIL dengan alamat 1, maka program secara kontinyu membaca nilai COIL menggunakan fungsi ModbusRTUServer.readCOIL() dan melakukan update kepada nilai pin menggunakan fungsi digitalWrite().

Kode Program Komputer

Program pada komputer membutuhkan library libmodbus. Untuk memenuhi kebutuhan tersebut, saya melakukan: git clone https://github.com/stephane/libmodbus.git dan kemudian melakukan instalasi dengan ./autogen.sh && configure && make && make install;

Listing program untuk mengontrol LED pada Arduino UNO menggunakan libmodbus adalah sebagai berikut.

#include <stdio.h>
#include <stdlib.h>
#include <modbus.h>
#include <string.h>

int main(int argc, char **argv) 
{
    modbus_t *ctx;
    int errno;
    uint16_t tab_reg[32];

    ctx = modbus_new_rtu(argv[1], 9600, 'N', 8, 1);
    if (ctx == NULL) {
        printf("Unable to create the libmodbus context\n");
        return -1;
    }

    modbus_rtu_set_serial_mode(ctx, MODBUS_RTU_RS232);
    modbus_set_slave(ctx, atoi(argv[2]));

    if (modbus_connect(ctx) == -1) {
        printf("Connection failed: %s\n", modbus_strerror(errno));
        modbus_free(ctx);
        return -1;
    }

    if (strcmp(argv[3], "LED1")==0)
    {
        printf("LED1 = ON\n");
        modbus_write_bit(ctx, 0, 1);
    }
    else if (strcmp(argv[3], "led1")==0)
    {
        printf("LED1 = OFF\n");
        modbus_write_bit(ctx, 0, 0);
    }
    else if (strcmp(argv[3], "LED2")==0)
    {
        printf("LED2 = ON\n");
        modbus_write_bit(ctx, 1, 1);
    }
    else if (strcmp(argv[3], "led2")==0)
    {
        printf("LED2 = OFF\n");
        modbus_write_bit(ctx, 1, 0);
    }

    modbus_close(ctx);
    modbus_free(ctx);
}

Program menerima 3 buah parameter, yakni: <port serial> <slave-id> <command>

<port serial> adalah port serial pada komputer dimana Arduin UNO terhubung.

<slave-id> adalah nomor ID dari perangkat modbus yang akan dihubungi, dalam hal ini adalah Arduino UNO dengan ID = 36.

<command> adalah perintah untuk mengontrol LED. Terdapat 4 command, yakni: LED1, led1, LED2 dan led2. Command dengan huruf besar digunakan untuk mengaktifkan LED dan command dengan huruf kecil digunakan untuk menonaktifkan LED.

Contoh penggunaan program ledmodbus dapat Anda lihat pada screenshot berikut ini.

Nah, demikianlah proses dan hasil eksperimen saya dalam rangka mengujicoba library ArduinoModbus dan libmodbus untuk komunikasi data menggunakan protokol Modbus.

Silakan menghubungi kami jika Anda memiliki pertanyaan atau ingin sharing seputar Modbus.

Kunjungi Situs Kami

Kami melayani perancangan dan pembuatan hardware maupun software berbasis mikrokontroler.

Kami berpengalaman menggunakan mikrokontroler 8051, AVR, PIC, STM8 dan tentunya board Arduino sebagai board mikrokontroler siap pakai.

Kami juga melayani pelatihan/bimbingan privat baik online maupun offline.

Silakan menghubungi kami melalui Whatsapp 0882-3560-7047.

Dan jangan lupa untuk mengunjungi situs kami melalui link berikut ini.

Selamat belajar. Selamat berkarya.

By admin

Tinggalkan Balasan

Alamat email Anda tidak akan dipublikasikan.

Copy link
Powered by Social Snap