Il protocollo Modbus sui sistemi SlimLine gestisce le variabili allocate nella DB 100 indirizzandole con indirizzi a partire da 40000 (E’ previsto anche un alias a indirizzo 20000). In questo topic ed in questo topic trovi altre informazioni al riguardo.
Programmi come il Modbus Scanner che non conosco, di solito viene indicato 40000 per indicare indirizzo “0” con codice di comando 04 Read Input Registers, quindi in realtà tu stai leggendo l’indirizzo “0” e non 40000 ed è per questo che lo SlimLine ti risponde con un codice di errore.
Se guardo lo screenshot dell’errore vedo che di fianco al Poll vi è la stringa “01 03 00 00 00 02” che corrisponde al comando 03 Read Holding Registers, su nodo Modbus 1 a partire da indirizzo 0000 per 2 registri 0002 (4 bytes). Mentre per leggere un REAL (4 BYTES) allocato a MD 100.0 dovresti inviare il comando 01 03 9C 3F 00 02 DA 57.
Come vedi ho aggiunto il CRC che probabilmente nel log è filtrato ma sopratutto devi notare che per leggere all’indirizzo 40000 -> 9C40 in Hex ho inviato l’indirizzo 39999 -> 9C3F in Hex, perchè per definizione modbus ha offset 1. Molti programmi però non ne tengono conto quindi attenzione…
Poi nei numeri a 32 bits DINT, UDINT e REAL devi stare attento alla endianness del dato (Topic).