Ho la necessità di realizzare la lettura di un registro modbus RTU da un vostro prodotto SlimLine utilizzando una macro attivata da un pulsante su terminale. Ho un progetto in cui ho definito un dispositivo con protocollo libero Free protocol, impostato i parametri di comunicazione a 15200, e, 8, 1 ed eseguo la lettura del registro 40016.
Il frame di comando modbus è cablato nel programma, per il calcolo del CRC ho utilizzato il vostro programma Toolly. Agendo sul pulsante la lettura viene eseguita correttamente, ma quando il valore supera 127 nell’oggetto di visualizzazione viene visualizzato un valore negativo, ecco la macro realizzata.
macro_command main()
char Command[32], Response[32]
short RetValue, Data, Errors
FILL(Command[0],0,32)
FILL(Response[0],0,32)
Command[0]=0x01
Command[1]=0x03
Command[2]=0x9C
Command[3]=0x47
Command[4]=0x00
Command[5]=0x01
Command[6]=0x1A
Command[7]=0x4F
OUTPORT(Command[0], “Free Protocol”, 8) //Send command
INPORT(Response[0], “Free Protocol”, 7, RetValue) //Read response
if (RetValue == 7 and Response[1] == 0x3) then
Data=(Response[3] << 8)+Response[4]
SetData(Data[0], “Local HMI”, LW,100,1)
else
Errors=Errors+1
end if
SetData(Errors, “Local HMI”, LW,101,1)
end macro_command