I did a program with Modbus library and this work good, but I try compile with "standard" library ArduinoModbus, and this returns error .
This is both programs, and the check ok and check with error
Excuse my bad english
This work OK
[RTU]>Tx > 10:33:06:257 - 01 03 00 00 00 04 44 09
[RTU]>Rx > 10:33:06:273 - 01 03 08 00 00 00 00 00 00 00 00 95 D7
#include <modbus.h>
#include <modbusDevice.h>
#include <modbusRegBank.h>
#include <modbusSlave.h>
#define Entrada0 A0
#define Entrada1 A1
#define Entrada2 A2
#define Entrada3 A3
modbusDevice regBank;
modbusSlave slave;
void setup()
{
regBank.setId(1);
regBank.add(40001);
regBank.add(40002);
regBank.add(40003);
regBank.add(40004);
slave._device = ®Bank;
slave.setBaud(9600);
}
void loop()
{
regBank.set(40001, (word) analogRead(Entrada0));
regBank.set(40002, (word) analogRead(Entrada1));
regBank.set(40003, (word) analogRead(Entrada2));
regBank.set(40004, (word) analogRead(Entrada3));
slave.run();
}
This is with error
[RTU]>Tx > 10:31:12:301 - 01 03 00 00 00 04 44 09
[RTU]>Rx > 10:31:12:316 - 01 83 02 C0 F1
Sys > 10:31:12:316 - Error : Illegal data address
#include <ArduinoModbus.h>
#define Entrada0 A0
#define Entrada1 A1
#define Entrada2 A2
#define Entrada3 A3
const int numCoils = 10;
const int numDiscreteInputs = 10;
const int numHoldingRegisters = 10;
const int numInputRegisters = 10;
void setup()
{
ModbusRTUServer.configureCoils(0x00, numCoils);
ModbusRTUServer.configureDiscreteInputs(0x00, numDiscreteInputs);
ModbusRTUServer.configureHoldingRegisters(0x00, numHoldingRegisters);
ModbusRTUServer.configureInputRegisters(0x00, numInputRegisters);
Serial.begin(9600);
while (!Serial);
if (!ModbusRTUServer.begin(1, 9600))
{
while (1);
}
}
void loop()
{
ModbusRTUServer.poll();
ModbusRTUServer.holdingRegisterWrite(1,analogRead(Entrada0));
ModbusRTUServer.holdingRegisterWrite(2,analogRead(Entrada1));
ModbusRTUServer.holdingRegisterWrite(3,analogRead(Entrada2));
ModbusRTUServer.holdingRegisterWrite(4,analogRead(Entrada3));
}
Thank you very much, regards