Vediamo di fare un pò di chiarezza, intanto hai utilizzato il comando Modbus 16#10 Preset multiple registers che, anche se corretto, è più adatto alla scrittura di registri a 16 bits piuttosto che variabili bit. Nel tuo comando hai settato a 16#FFFF 3 variabili WORD allocate nella DB100 agli indirizzi 512, 514, 516. Cito un estratto del manuale MNL151.
Per la scrittura delle variabili si utilizza il comando Preset multiple registers (Codice 0x10). Ipotizzando di dover accedere in scrittura ad una variabile WORD allocata in memoria all’indirizzo MX100.64 calcoleremo l’indirizzo di scrittura nel modo:
((Indirizzo variabile/2)+Offset)-1 → ((64/2)+40000)-1=40031 → 0x9C5F
Ora se vuoi utilizzare il comando 16#10 puoi utilizzare anche una sola variabile a 16 bits utilizzando solo 4 bits per gestire le 4 uscite. Molto meglio però è allocare 4 variali BOOL in moemoria DB100 e gestirle con i comandi 16#05 Force single coil e 16#0F Force multiple coils.
Ma detto questo la cosa più importante da ricordare è che i comandi Modbus accedono solo alla memoria dello SlimLine se vuoi gestire gli I/O fisici devi realizzare un semplice programma che trasferisca le variabili dalla memoria sulle uscite, o che trasferisca gli ingressi in memoria se vuoi acquisire gli ingressi.
Il programma lo puoi realizare nel linguaggio che preferisci (Il più semplice è LD), nel forum troverai sicuramente esempi di gestione I/O da programma, in questo topic c’è un esempio di connessione ad un pannello Weintek.