Vai al contenuto

Utilizzo FB ModbusSlave

Home Forum Programmazione IEC 61131 (LogicLab) Utilizzo FB ModbusSlave

Stai visualizzando 2 post - dal 1 a 2 (di 2 totali)
  • Autore
    Post
  • #66609
    Anonimo
    Inattivo

    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?

    #66613
    Sergio Bertana
    Amministratore del forum

    Il 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.

Stai visualizzando 2 post - dal 1 a 2 (di 2 totali)
  • Devi essere connesso per rispondere a questo topic.