Hi everybody,
I solved my issue next to a feedback from industrialshields. I had to use a modified simplemodbus library and carefully define my RS485 pins and defined it in modbusconstruct.
Here you can find now if it can help someone my code to read input registers and write single register to my 5 Promux slaves.
#include <SimpleModbusMasterSoftwareSerial.h>
#include <SoftwareSerial.h>
#define baud 9600
#define timeout 1000
#define polling 10 // the scan rate
#define retry_count 10
int SSerialRX =11 ;// RO //RS485 Receive pin
int SSerialTX=10; // DI //RS485 Transmit pin
int SSerialTxControl=14; // DE //RS485 Direction pin
int GroundRE=15 ; // RE
SoftwareSerial RS485Serial(SSerialRX, SSerialTX);
enum
{
PACKET1,
//PACKET2,
//PACKET3,
//PACKET4,
//PACKET5,
//PACKET6,
//PACKET7,
//PACKET8,
PACKET9,
//PACKET10,
//PACKET11,
//PACKET12,
//PACKET13,
//PACKET14,
//PACKET15,
//PACKET16,
PACKET17,
//PACKET18,
//PACKET19,
//PACKET20,
//PACKET21,
//PACKET22,
//PACKET23,
//PACKET24,
PACKET25,
//PACKET26,
//PACKET27,
//PACKET28,
//PACKET29,
//PACKET30,
//PACKET31,
//PACKET32,
PACKET33,
TOTAL_NO_OF_PACKETS // leave this last entry
};
// Create an array of Packets to be configured
Packet packets[TOTAL_NO_OF_PACKETS];
// Masters register array
#define TOTAL_NO_OF_REGISTERS 33
unsigned int regs[TOTAL_NO_OF_REGISTERS];
void setup()
{
Serial.begin(38400);
pinMode(SSerialTxControl, OUTPUT);
pinMode(GroundRE, OUTPUT);
digitalWrite(GroundRE,LOW);
/////module promux TC slave 32
modbus_construct(&packets[PACKET1], 32, READ_INPUT_REGISTERS, 1, 8, 0);
// modbus_construct(&packets[PACKET2], 32, READ_INPUT_REGISTERS, 2, 1, 1);
// modbus_construct(&packets[PACKET3], 32, READ_INPUT_REGISTERS, 3, 1, 2);
// modbus_construct(&packets[PACKET4], 32, READ_INPUT_REGISTERS, 4, 1, 3);
// modbus_construct(&packets[PACKET5], 32, READ_INPUT_REGISTERS, 5, 1, 4);
// modbus_construct(&packets[PACKET6], 32, READ_INPUT_REGISTERS, 6, 1, 5);
// modbus_construct(&packets[PACKET7], 32, READ_INPUT_REGISTERS, 7, 1, 6);
// modbus_construct(&packets[PACKET8], 32, READ_INPUT_REGISTERS, 8, 1, 7);
/////module promux TC slave 33
modbus_construct(&packets[PACKET9], 33, READ_INPUT_REGISTERS, 1, 8, 8);
// modbus_construct(&packets[PACKET10], 33, READ_INPUT_REGISTERS, 2, 1, 9);
// modbus_construct(&packets[PACKET11], 33, READ_INPUT_REGISTERS, 3, 1, 10);
// modbus_construct(&packets[PACKET12], 33, READ_INPUT_REGISTERS, 4, 1, 11);
// modbus_construct(&packets[PACKET13], 33, READ_INPUT_REGISTERS, 5, 1, 12);
// modbus_construct(&packets[PACKET14], 33, READ_INPUT_REGISTERS, 6, 1, 13);
// modbus_construct(&packets[PACKET15], 33, READ_INPUT_REGISTERS, 7, 1, 14);
// modbus_construct(&packets[PACKET16], 33, READ_INPUT_REGISTERS, 8, 1, 15);
/////module promux TC slave 34
modbus_construct(&packets[PACKET17], 34, READ_INPUT_REGISTERS, 1, 8, 16);
// modbus_construct(&packets[PACKET18], 34, READ_INPUT_REGISTERS, 2, 1, 17);
// modbus_construct(&packets[PACKET19], 34, READ_INPUT_REGISTERS, 3, 1, 18);
// modbus_construct(&packets[PACKET20], 34, READ_INPUT_REGISTERS, 4, 1, 19);
// modbus_construct(&packets[PACKET21], 34, READ_INPUT_REGISTERS, 5, 1, 20);
// modbus_construct(&packets[PACKET22], 34, READ_INPUT_REGISTERS, 6, 1, 21);
// modbus_construct(&packets[PACKET23], 34, READ_INPUT_REGISTERS, 7, 1, 22);
// modbus_construct(&packets[PACKET24], 34, READ_INPUT_REGISTERS, 8, 1, 23);
/////module promux TC slave 35
modbus_construct(&packets[PACKET25], 35, READ_INPUT_REGISTERS, 1, 8, 24);
// modbus_construct(&packets[PACKET26], 35, READ_INPUT_REGISTERS, 2, 1, 25);
// modbus_construct(&packets[PACKET27], 35, READ_INPUT_REGISTERS, 3, 1, 26);
// modbus_construct(&packets[PACKET28], 35, READ_INPUT_REGISTERS, 4, 1, 27);
// modbus_construct(&packets[PACKET29], 35, READ_INPUT_REGISTERS, 5, 1, 28);
// modbus_construct(&packets[PACKET30], 35, READ_INPUT_REGISTERS, 6, 1, 29);
// modbus_construct(&packets[PACKET31], 35, READ_INPUT_REGISTERS, 7, 1, 30);
// modbus_construct(&packets[PACKET32], 35, READ_INPUT_REGISTERS, 8, 1, 31);
/////module promux DO slave 36
modbus_construct(&packets[PACKET33], 36, PRESET_SINGLE_REGISTER, 2, 1, 32);
modbus_configure(&RS485Serial, baud, SERIAL_8N1, timeout, polling, retry_count, SSerialTxControl, packets, TOTAL_NO_OF_PACKETS, regs);
}
void loop()
{
modbus_update();
Serial.print(regs[0]);
Serial.print("//");
Serial.print(regs[1]);
Serial.print("//");
Serial.print(regs[2]);
Serial.print("//");
Serial.print(regs[3]);
Serial.print("//");
Serial.print(regs[4]);
Serial.print("//");
Serial.print(regs[5]);
Serial.print("//");
Serial.print(regs[6]);
Serial.print("//");
Serial.println(regs[7]);
Serial.print("//");
Serial.print(regs[8]);
Serial.print("//");
Serial.print(regs[9]);
Serial.print("//");
Serial.print(regs[10]);
Serial.print("//");
Serial.print(regs[11]);
Serial.print("//");
Serial.print(regs[12]);
Serial.print("//");
Serial.print(regs[13]);
Serial.print("//");
Serial.print(regs[14]);
Serial.print("//");
Serial.print(regs[15]);
Serial.print("//");
Serial.print(regs[16]);
Serial.print("//");
Serial.print(regs[17]);
Serial.print("//");
Serial.print(regs[18]);
Serial.print("//");
Serial.print(regs[19]);
Serial.print("//");
Serial.print(regs[20]);
Serial.print("//");
Serial.print(regs[21]);
Serial.print("//");
Serial.print(regs[22]);
Serial.print("//");
Serial.print(regs[23]);
Serial.print("//");
Serial.print(regs[24]);
Serial.print("//");
Serial.print(regs[25]);
Serial.print("//");
Serial.print(regs[26]);
Serial.print("//");
Serial.print(regs[27]);
Serial.print("//");
Serial.print(regs[28]);
Serial.print("//");
Serial.print(regs[29]);
Serial.print("//");
Serial.print(regs[30]);
Serial.print("//");
Serial.println(regs[31]);
}
You can also download a free modbus slave simulator if you have a RS485 converter to PC.
benoit
gpl-3.0.txt (34.3 KB)
keywords.txt (407 Bytes)
SimpleModbusMasterSoftwareSerial.cpp (15.3 KB)
SimpleModbusMasterSoftwareSerial.h (5.99 KB)