Vai al contenuto

Inserimento dati tramite FB ModbusMaster

Home Forum Programmazione IEC 61131 (LogicLab) Inserimento dati tramite FB ModbusMaster

Stai visualizzando 5 post - dal 1 a 5 (di 5 totali)
  • Autore
    Post
  • #83999
    Ufficio Tecnico
    Partecipante

    Ho una apparecchiatura che dovrei comandare in Modbus, stò utilizzando il blocco funzione ModbusMaster_V3.

    Nel Buffer ho inserito ADR(VELOCITA_CMD) dove la variabile è configurata come intero:

    VELOCITA_CMD: INT; (* VELOCITA COMANDO *)

    Se inserisco un valore positivo l’apparecchiatura accetta il valore se invece inserisco un valore negativo l’apparecchiatura non accetta il valore e rimane quello vecchio

    Cosa sbaglio ?

    #84001
    Concetto
    Partecipante

    Buon giorno

    Bisognerebbe avere più informazioni sull’apparato da comandare, sul tipo di registro e sul range di informazioni che accetta.

     

    #84021
    Sergio Bertana
    Amministratore del forum

    Il FB ModbusMaster invia il dato al tuo dispositivo utilizzando i comandi

    • 16#06 Preset single register (Se scrivi un solo registro)
    • 16#10 Preset multiple registers (Se scrivi più registri)

    In entrambi i casi se i valori sono espressi su una variabile a 16 bit il dato presente nella variabile è inviato al dispositivo slave. Da quello che dici sembra sia il tuo dispositivo slave a non accettare valori negativi.

    Come dice giustamente Concetto occore verificare la documentazione del tuo dispositivo.

    #84067
    Ufficio Tecnico
    Partecipante

    Risolto, Per il comando di velocità nel dispositivo si devono scrivere due WORD

    Quindi  la variabile da INT diventa DINT

    VELOCITA_CMD: DINT; (* VELOCITA COMANDO *)

    E nel blocco ModbusMaster scrivo

    FCODE –> 16#10
    POINTS –> 2

    Ora funziona

    #84070
    Sergio Bertana
    Amministratore del forum

    Aggiungo una doverosa precisazione…

    Il protocollo Modbus prevede registri a 16 bits, e non specifica l’endianness dei dati se espressi su registri di dimensioni maggiori come nel tuo caso un registro DINT a 32 bits.

    I dati nei sistemi basati su architettura ARM come i ns SlimLine hanno una architettura Little-Endian, la memorizzazione inizia dal byte meno significativo per finire col più significativo.

    Ma può essere che il dispositivo dove viene effettuata la scrittura abbia una architettura Big-Endian quindi il dato scritto non verrebbe interpretato correttamente, in questo caso è possibile convertire l’endianness del dato da inviare in Modbus con la funzione SwapData.

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