Vai al contenuto

Acquisizione di variabili SIGNED64 bit da Modbus

Home Forum Discussioni su problematiche generali Acquisizione di variabili SIGNED64 bit da Modbus

Stai visualizzando 2 post - dal 1 a 2 (di 2 totali)
  • Autore
    Post
  • #62046
    Marco
    Partecipante

    Dovrei comprimere delle variabili SIGNED64 bit, lette via Modbus con Slimline Mps056 XUnified e scomposte in 4 word.

    Avete qualche consiglio per comprimerle nuovamente su una LINT ?

    #62052
    Sergio Bertana
    Amministratore del forum

    Mi viene in mente qualcosa tipo questo:

    VAR
        WValue : ARRAY[0..3] OF WORD;
        IValue : ARRAY[0..1] OF LINT;
    END_VAR
    
        // Min value: -9223372036854775808 16#8000000000000000
    
        WValue[0]:=16#8000; //MSW
        WValue[1]:=16#0000;
        WValue[2]:=16#0000;
        WValue[3]:=16#0000; //LSW
    
        IValue[0]:=WValue[0];
        IValue[0]:=(IValue[0]*16#10000)+TO_ULINT(WValue[1]);
        IValue[0]:=(IValue[0]*16#10000)+TO_ULINT(WValue[2]);
        IValue[0]:=(IValue[0]*16#10000)+TO_ULINT(WValue[3]);
    
        // Max value: +9223372036854775807 16#7FFFFFFFFFFFFFFF
    
        WValue[0]:=16#7FFF; //MSW
        WValue[1]:=16#FFFF;
        WValue[2]:=16#FFFF;
        WValue[3]:=16#FFFF; //LSW
    
        IValue[1]:=WValue[0];
        IValue[1]:=(IValue[1]*16#10000)+TO_ULINT(WValue[1]);
        IValue[1]:=(IValue[1]*16#10000)+TO_ULINT(WValue[2]);
        IValue[1]:=(IValue[1]*16#10000)+TO_ULINT(WValue[3]);

    Nell’esempio ho riportato i due valori estremi di una variabile LINT.

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