ทดสอบใช้งาน Modbus RTU 2CH relay module RS485/TTL UART 2CH IN 2CH OUT

อุปกรณ์ในการทดลอง

โปรแกรม

/*

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:

 

 

ที่มา: