ArduinoModbus adalah library komunikasi Modbus untuk platform Arduino yang dibuat atau dikembangkan dari library libmodbus. Ada banyak library Modbus yang tersedia di pustaka library Arduino. Namun untuk saat ini, saya masih menggunakan ArduinoModbus dan belum mencoba library-library yang lain.
Dan untuk pemrograman pada sisi komputer, saya menggunakan library libmodbus. Ada banyak juga pilihan library Modbus yang bisa dicoba, tapi libmodbus adalah library yang usianya sudah cukup matang dengan pengguna yang sangat banyak.
Jadi, memilih ArduinoModbus dan libmodbus, menurut saya adalah pilihan yang paling bijaksana, baik untuk pemula maupun non-pemula. Mengapa? Karena ArduinoModbus dibuat dari libmodbus dan keduanya telah digunakan dan diuji oleh banyak pengguna.
Pada eksperimen sebelumnya, saya sudah mencoba membuat sistem sejenis tapi dengan output 2 buah LED dan menggunakan Modbus RTU (Serial). Nah, pada kesempatan kali ini, saya akan menyampaikan hasil eksperimen saya dalam membuat dan menguji sistem Modbus TCP Relay 4-Channel. Tidak detil, tapi semoga bermanfaat.
Foto Sistem

Pada eksperimen ini saya menggunakan board Arduino Mega2560 dan board Ethernet Shield W5100. Dan sebagai output, saya menggunakan board Relay 5V 4-Channel.
Mengapa tidak menggunakan Arduino UNO? Karena pada eksperimen ini digunakan library Ethernet dan library ArduinoModbus beserta library-library pendukungnya. Jadi, sistem menjadi sangat riskan kekurangan memori jika mengembangkan sistem ini menggunakan Arduino UNO. Dan perlu diingat bahwa kekurangan memori akan menyebabkan sistem bekerja tidak sesuai seperti yang diharapkan. Tidak error ketika kompilasi dan tidak pula error ketika upload, tapi akan error ketika running.
Untuk mengontrol relay, saya menggunakan pin A8, A9, A10 dan A11. Anda bebas menggunakan pin lain yang tersedia pada board Arduino Mega2560.
Sketch Arduino dan Kode Program Komputer
#include <SPI.h> #include <Ethernet.h> #include <ArduinoRS485.h> #include <ArduinoModbus.h> byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED }; IPAddress ip(192, 168, 1, 88); EthernetServer ethServer(8888); ModbusTCPServer modbusTCPServer; #define RELAY1 A8 #define RELAY2 A9 #define RELAY3 A10 #define RELAY4 A11 void setup() { for (int x=RELAY1; x<=RELAY4; x++) { digitalWrite(x, HIGH); pinMode(x, OUTPUT); } Serial.begin(9600); while (!Serial); Serial.println("Modbus TCP Relay 4-Channel"); Ethernet.begin(mac, ip); if (Ethernet.hardwareStatus() == EthernetNoHardware) { Serial.println("Ethernet: No Hardware"); while (1); } if (Ethernet.linkStatus() == LinkOFF) { Serial.println("Ethernet connection error"); } ethServer.begin(); if (!modbusTCPServer.begin()) { Serial.println("Failed to start Modbus TCP Server!"); while (1); } // konfigurasikan 4 COIL dengan alamat awal 0 modbusTCPServer.configureCoils(0, 4); } void loop() { EthernetClient client = ethServer.available(); if (client) { Serial.println(":CONNECTED;"); modbusTCPServer.accept(client); while (client.connected()) { modbusTCPServer.poll(); kontrolRelay(); } Serial.println(":DISCONNECTED;"); } } void kontrolRelay() { digitalWrite(RELAY1, modbusTCPServer.coilRead(0) ? 0 : 1); delay(1); digitalWrite(RELAY2, modbusTCPServer.coilRead(1) ? 0 : 1); delay(1); digitalWrite(RELAY3, modbusTCPServer.coilRead(2) ? 0 : 1); delay(1); digitalWrite(RELAY4, modbusTCPServer.coilRead(3) ? 0 : 1); delay(1); }
Untuk mengontrol sistem relay dari komputer, saya membuat program console menggunakan bahasa pemrograman C. Berikut ini adalah kode programnya.
#include <stdio.h> #include <stdlib.h> #include <modbus.h> #include <string.h> int main(int argc, char **argv) { modbus_t *ctx; int errno; printf("MODTCP4RC - Program Kontrol Modbus TCP Relay 4-Channel\n"); printf("Chandra - teknikelektrolinks.com\n"); ctx = modbus_new_tcp(argv[1], atoi(argv[2])); if (ctx == NULL) { printf("Unable to create the libmodbus context\n"); return -1; } modbus_connect(ctx); if (modbus_connect(ctx) == -1) { printf("Connection failed: %s\n", modbus_strerror(errno)); modbus_free(ctx); return -1; } if (strcmp(argv[3], "R1")==0) { printf("RELAY-1 = ON\n"); modbus_write_bit(ctx, 0, 1); } else if (strcmp(argv[3], "r1")==0) { printf("RELAY-1 = OFF\n"); modbus_write_bit(ctx, 0, 0); } else if (strcmp(argv[3], "R2")==0) { printf("RELAY-2 = ON\n"); modbus_write_bit(ctx, 1, 1); } else if (strcmp(argv[3], "r2")==0) { printf("RELAY-2 = OFF\n"); modbus_write_bit(ctx, 1, 0); } else if (strcmp(argv[3], "R3")==0) { printf("RELAY-3 = ON\n"); modbus_write_bit(ctx, 2, 1); } else if (strcmp(argv[3], "r3")==0) { printf("RELAY-3 = OFF\n"); modbus_write_bit(ctx, 2, 0); } else if (strcmp(argv[3], "R4")==0) { printf("RELAY-4 = ON\n"); modbus_write_bit(ctx, 3, 1); } else if (strcmp(argv[3], "r4")==0) { printf("RELAY-4 = OFF\n"); modbus_write_bit(ctx, 3, 0); } modbus_close(ctx); modbus_free(ctx); printf("Selesai.\n"); }
Hasil Eksperimen

Pada saat standby, Arduino akan menunggu adanya koneksi dari komputer melalui TCP melalui alamat IP 192.168.1.88 dan Port 888. Jika ada koneksi, maka Arduino akan menampilkan “:CONNECTED;” pada Serial Monitor.
Selanjutnya, Arduino akan membaca perintah yang dikirim oleh komputer dan jika perintah dari komputer dikenali, maka Arduino akan melakukan update pada relay sesuai perintah.
Selama koneksi terjalin, maka Arduino akan secara kontinyu melakukan proses polling dan melakukan update pada kondisi relay. Dan jika komputer telah memutus koneksi, maka Arduino akan menampilkan “:DISCONNECTED;” pada Serial Monitor.
Program console MODTCP4RC berfungsi sebagai Modbus Client (Master). Program ini digunakan untuk mengontrol COIL pada Modbus Server (Arduino) dengan mengirimkan fungsi Write Single Coil (fungsi 0x05).
Program console MODTCP4RC mengenali beberapa perintah untuk mengontrol relay pada Modbus Slave (Arduino), yakni:
- R1 – RELAY-1 ON
- r1 – RELAY-1 OFF
- R2 – RELAY-2 ON
- r2 – RELAY-2 OFF
- R3 – RELAY-3 ON
- r3 – RELAY-3 OFF
- R4 – RELAY-4 ON
- r3 – RELAY-4 OFF
Pada screenshot pengujian di atas bisa kita lihat bahwa komputer mengirimkan 3 kali perintah, yakni R1, R2 dan r1.
Pengujian berjalan dengan baik dengan kualitas kinerja yang menurut saya baik. Sistem Modbus TCP Relay 4-Channel ini saya aktifkan berjam-jam dan setiap kali saya perintah dari komputer, maka sistem merespon dengan baik.
Dengan menggunakan library ArduinoModbus untuk Arduino dan library libmodbus untuk komputer, maka kita bisa lebih mudah dan lebih nyaman dalam mengembangkan aplikasi dengan komunikasi Modbus.
Nah, semoga eksperimen sederhana Membuat Modbus TCP Relay 4-Channel ini bermanfaat bagi kita semua.
Kunjungi Situs Kami
Kami melayani perancangan dan pembuatan sistem kontrol elektronik berbasis mikrokontroler beserta pemrograman, baik pemrograman mikrokontroler dan pemrograman komputer. Kami juga melayani perancangan dan pembuatan panel kontrol industri.
Klik link berikut ini dan dapatkan beberapa program aplikasi mini gratis di bagian Free Software.
https://teknikelektrolinks.com
Semoga bermanfaat. Selamat belajar. Selamat berkarya.