Home › Forum › Programmazione IEC 61131 (LogicLab) › Utilizzo FB ModbusSlave
- Questo topic ha 1 risposta, 1 partecipante ed è stato aggiornato l'ultima volta 1 anno, 9 mesi fa da Sergio Bertana.
-
AutorePost
-
Luglio 28, 2022 alle 8:35 am #66609AnonimoInattivo
Stavo valutando di utilizzare il FB ModbusSlave guardando l’esempio su knowledge, vedo che si definisce come puntatore l’indirizzo delle variabili che si desidera pubblicare.
Mdb.Offset:=40000; //Modbus address offset Mdb.Buffer:=ADR(%MX100.0); //Modbus buffer address
Ma se ipotizziamo di avere una variabile VarToMB1 che è un array 10 elementi ed una variabile VarToMB2 a sua volta un array di 20 elementi come faccio ad indirizzarli sulla porta desiderata, per la prima variabile potrei scrivere:
Mdb.Offset:=20000; //Modbus address offset Mdb.Buffer:=ADR(VarToMB1); //Modbus buffer address
Ma per la seconda?
Luglio 28, 2022 alle 8:45 am #66613Sergio BertanaAmministratore del forumIl FB ModbusSlave può operare su un unico banco di memoria di cui nel parametro Buffer occorre passare l’indirizzo di allocazione e nel parametro Size la dimensione. Per rispondere alla tua domanda l’unica soluzione possibile è di definire una struttura dati che contiene le due variabili che vuoi pubblicare.
MODBUSDATA: STRUCT VarToMB1 : ARRAY[0..9] OF BYTE; VarToMB2 : ARRAY[0..9] OF BYTE; END_STRUCT;
Poi dichiari una variabile VarMB di tipo MODBUSDATA e ne passi l’indirizzo al parametro Buffer del FB.
VAR VarMB : MODBUSDATA; (* Modbus data *) END_VAR Mdb.Buffer:=ADR(VarMB); //Modbus buffer address Mdb.Size:=SIZEOF(VarMB); //Modbus buffer size
Attenzione all’allineamento, sai che i sistemi ARM hanno allineamento ad indirizzo multiplo 2 per le variabili a due bytes ed indirizzo multiplo 4 per le variabili 4 bytes. Quindi se le variabili in struttura sono ad 1 byte BOOL o BYTE vengono accodate ma se sono a 2 bytes o 4 bytes il compilatore inserisce bytes liberi per correggerne l’allineamento.
-
AutorePost
- Devi essere connesso per rispondere a questo topic.