ทดสอบใช้งาน Modbus RTU 2CH relay module RS485/TTL UART 2CH IN 2CH OUT
อุปกรณ์ในการทดลอง
1. บอร์ด Arduino Uno www.lazada.co.th
2. บอร์ด ModBusRelay 2 CH www.lazada.co.th
3. บอร์ด MAX485 www.lazada.co.th
โปรแกรม
/*
ModbusMaster library was written by Doc Walker https://github.com/4-20ma/ModbusMaster
This code Turns On and Turns Off RKI-4450 2-Channel Modbus RTU Relay Module and shows status of the relay.
Connections of Sensor, Arduino and MAX485 TTL to RS485 Converter
Serial Port 0 is not used to connect to drive because its connected to USB-Serial and used to show information on console.
For Arduino Uno Software serial needs to be used as there is only one hardware serial port and its connected to USB-Serial.
Sensor MAX485 TTL to RS485 Converter
A+ - A
B- - B
GND - GND
MAX485 TTL to RS485 Converter Arduino (Software Serial)
R0 - D2
DE & RE - D8
DI - D3
GND - GND
For more information see :https://robokits.co.in/arduino/motor-control-boards/interface-boards/modbus-rtu-2-channel-relay-module-ttl-communication-output
*/
#include <ModbusMaster.h>
#include <SoftwareSerial.h>
SoftwareSerial mySerial(2,3); //Software Serial port For Arduino Uno
#define MODBUS_DATA_TRANSACTION_PIN 8 //DE & RE Pin of MAX485
ModbusMaster node; //object for ModbusMaster
long int a1,a2,a3,a4,a5,a6;
uint8_t Slave_ID = 255; //Slave ID of the Sensor
void setup()
{
pinMode(MODBUS_DATA_TRANSACTION_PIN, OUTPUT);
digitalWrite(MODBUS_DATA_TRANSACTION_PIN, 0);
Serial.begin(9600); //Baud rate is 9600 8N1
mySerial.begin(9600); //Modbus Baud rate is 9600 8N1
node.begin(mySerial);
node.preTransmission(preTransmission);
node.postTransmission(postTransmission);
Serial.println("RKI-4450 2-Channel Modus RTU Relay Module");
Serial.print("Slave ID :");
Serial.println(Slave_ID);
}
void loop()
{
a1 = node.Turn_On_Relay1(Slave_ID); //Turn on relay1 for 5 seconds
Serial.print("Relay Status :");
Serial.println(a1);
delay(3000);
a2 = node.Turn_Off_Relay1(Slave_ID); //Turn off relay1 for 5 seconds
Serial.print("Relay Status :");
Serial.println(a2);
delay(3000);
a3 = node.Turn_On_Relay2(Slave_ID); //Turn on relay2 for 5 seconds
Serial.print("Relay Status :");
Serial.println(a3);
delay(3000);
a4 = node.Turn_Off_Relay2(Slave_ID); //Turn off relay2 for 5 seconds
Serial.print("Relay Status :");
Serial.println(a4);
delay(3000);
a5 = node.Turn_On_ALL_Relay(Slave_ID); //Turn on both relay for 5 seconds
Serial.print("Relay Status :");
Serial.println(a5);
delay(3000);
a6 = node.Turn_Off_ALL_Relay(Slave_ID); //Turn off both relay for 5 seconds
Serial.print("Relay Status :");
Serial.println(a6);
delay(3000);
}
void preTransmission()
{
digitalWrite(MODBUS_DATA_TRANSACTION_PIN, 1);
delay(10);
}
void postTransmission()
{
delay(2);
digitalWrite(MODBUS_DATA_TRANSACTION_PIN, 0);
}
VDO:
ที่มา: