Da link da te indicato ho trovato un esempio
#include <SimpleModbusSlave.h>
#define CE_Pin 8 // Chip Enable
#define baudrate 57600
byte ID = 1;
//////////////// registers of your slave ///////////////////
enum
{
// ---- Addres Reg. 0 Lecturas de Valores
I,
V,
E,
RAD,
TEMP,
PvGiro,
PvEleva,
VelGiro,
VelEleva,
AL1,
AL2,
// ---- Addres Reg. 11 Escrituras. Parametrso
MaxGiroPot,
LGi,
LGiC,
CalibraGiEl,
LElMaMe,
LElCMaMe,
VelGiElminAl,
ZmGiEl,
T1,
T2,
TEWeb_AngPosSeg,
// ---- Addres Reg. 22 Escrituras. Posicion y Ordenes
SV_Giro,
SV_Eleva,
FLOrdenes,
// ---- Addres Reg. 25 Escrituras. Fecha y Hora
Ano,
MesDia,
HoraMin,
TOTAL_ERRORS,
// leave this one
TOTAL_REGS_SIZE
};
unsigned int holdingRegs[TOTAL_REGS_SIZE]; // function 3 and 16 register array
////////////////////////////////////////////////////////////
void setup()
{
// parameters(long baudrate, unsigned char ID, unsigned char transmit enable pin, unsigned int holding registers size)
modbus_configure(115200, ID, CE_Pin, TOTAL_REGS_SIZE); //No es necesario definir CE_Pin como OutPut, lo hace la libreria
}
void loop()
{
// modbus_update() is the only method used in loop(). It returns the total error
// count since the slave started. You don't have to use it but it's useful
// for fault finding by the modbus master.
holdingRegs[I] = millis() / 1000;
holdingRegs[V] = 2;
holdingRegs[E] = 3;
holdingRegs[RAD] = 4;
holdingRegs[TEMP] = 5;
holdingRegs[PvGiro] = 6;
holdingRegs[PvEleva] = 7;
holdingRegs[VelGiro] = 8;
holdingRegs[VelEleva] = 9;
holdingRegs[AL1] = 10;
holdingRegs[AL2] = 11;
//------------//
holdingRegs[MaxGiroPot] = 12;
holdingRegs[LGi] = 13;
holdingRegs[LGiC] = 14;
holdingRegs[CalibraGiEl] = 15;
holdingRegs[LElMaMe] = 16;
holdingRegs[LElCMaMe] = 17;
holdingRegs[VelGiElminAl] = 18;
holdingRegs[ZmGiEl] = 19;
holdingRegs[T1] = 20;
holdingRegs[T2] = 21;
holdingRegs[TEWeb_AngPosSeg] = 22;
//------------//
holdingRegs[SV_Giro] = 23;
holdingRegs[SV_Eleva] = 24;
holdingRegs[FLOrdenes] = 25;
//------------//
holdingRegs[Ano] = 26;
holdingRegs[MesDia] = 27;
holdingRegs[HoraMin] = 28;
holdingRegs[TOTAL_ERRORS] = modbus_update(holdingRegs);
for (byte i = 0; i < 29; i++)
{
Serial.print (holdingRegs[i]);
Serial.print ("/");
}
Serial.println (TOTAL_REGS_SIZE);
delay(1000);
}
forse ti potrebbe chiarire meglio come funziona la libreria.