Vai al contenuto

Comunicazione modbus con modulo TRP-C68

Home Forum Moduli I/O distribuiti Comunicazione modbus con modulo TRP-C68

Stai visualizzando 5 post - dal 1 a 5 (di 5 totali)
  • Autore
    Post
  • #35253
    Andrea
    Partecipante

    Stò cercando di comunicare in modbus con un TRP-C68, ho visto sul forum la necessità di impostare il data format  a 02, nonostante ciò il mio dispositivo PLC Sofrel non riconosce esatta la risposta. Ecco la diagnostica di comunicazione:

    0403000000084459 -> Interrogazione <TRP-C68_4>
    0403187FF9197FF8BA7FF8F07FF9347FF8EE7FF9817FF8287FFA3F8AD6 -> MODBUS: Risposta non corretta

    Avete qualche altro suggerimento ?

    #37345
    Sergio Bertana
    Amministratore del forum

    Il modulo TRP-C68 può operare sia con protocollo ASCII (SW1=Off, SW2=On) che con protocollo Modbus RTU  (SW1=Off, SW2=Off). Di default il modulo comunica a 9600, n, 8 e l’indirizzo di nodo modbus è 01. Il modulo utilizza il codice di comando modbus 0x46 (E’ un codice gestibile dall’utente e non definito nello standard) per gestire tutti i  comandi di configurazione. Per la lettura dei valori analogici acquisiti vengono invece utilizzati i codici di comando 0x03:Read holding registers e 0x04:Read input registers.

    Il formato della stringa modbus di interrogazione è: ID 03 00 NN 00 CN (CRC)
    Dove NN:Indica il canale di partenza (Da 0 a 7) e CN:Indica il numero di canali da leggere (Da 1 a 8).

    La stringa di interrogazione quindi segue le specifiche dettate dal protocollo, il problema è nella stringa di risposta, la stringa di risposta cambia in base al tipo di acquisizione scelto. Con il comando module’s configuration (Vedi capitolo 7-4) del manuale ID 46 06 00 BD 00 TT 00 DF 00 00 (CRC) è possibile definire i parametri di funzionamento del modulo:

    BD: Imposta il baud rate (06 per 9600 baud)
    TT: Imposta il modo di acquisizione (08 per +/-10V)
    DF: Imposta il formato dati.

    Occorre impostare correttamente il parametro DF, per avere acquisizione su 2 bytes, occorre definire il formato esadecimale complemento a 2 (2’s Complement HEX Format). Inoltre occorre definire acquisizione in modo Fast (Bit 5 attivo). Quindi su un modulo configurato di default (Indirizzo 01) dovremo inviare il comando: 01 46 06 00 06 00 08 00 22 00 00 EC B8, il modulo risponde con: 01 46 06 00 00 00 00 00 00 00 00 CB 73.

    La configurazione impostata nel modulo rimane permanente, il modulo alla riaccensione resterà configurato come impostato dal comando.

    #37346
    Sergio Bertana
    Amministratore del forum

    Il post precedente rettifica quanto riportato in questo post, dove nel campo DF era indicato il valore 02. Avevo fatto personalmente le prove, quindi non mi spiego perchè ora DF debba essere settato a 22, o si tratta di un refuso, oppure i nuovi convertitori hanno una versione firmware diversa.

    Il comando modbus per la lettura della versione firmware è ID 46 07 00 (CRC). Inviando al modulo: 01 46 07 00 E2 3D, il modulo risponde con la data del firmware, nel modulo che ho testato la risposta è: 01 46 07 09 10 23 00 AB CF. Quindi il firmware è datato 23/10/2009.

    #37347
    Andrea
    Partecipante

    Ho impostato tramite il comando modbus Set up the module’s configuration la configurazione desiderata. Parametro TT (Modo di acquisizione) impostato a 0x0D per acquisire 0-20 mA, parametro DF (Formato dati) impostato a 0x22 per avere acquisizione su 2 bytes.

    Ora il PLC Sofrel riconosce correttamente la risposta, ma ho una difficoltà nel comprendere il valore di ritorno acquisito. Dovendo acquisire valori di corrente 4-20 mA ho inserito le resistenze di carico da 124 Ohm fornite con il modulo, ho applicato 4 mA all’ingresso, definendo sul PLC una acquisizione di valore intero a 16 bits ottengo come risultato 39348.

    Non capisco come dal valore acquisito posso ottenere il valore di corrente reale all’ingresso, avete suggerimenti ?

    #37348
    Sergio Bertana
    Amministratore del forum

    Il valore di lettura ritornato è in esadecimale complemento a 2, quindi il valore di 0 corrisponde a 0x8000 (32768), valori superiori indicano letture positive, valori inferiori indicano letture negative. Per ricavare il valore in corrente occorre eseguire la formula:

    Corrente=(Valore letto-32768)*(20/32767) Semplificando: Corrente=(Valore letto-32768)*0.00061037

    Applicando la formula il valore letto di 39348 corrisponde a: (39348-32768)*0.00061037=4.016 mA
    Naturalmente essendo il tuo trasduttore un trasduttore 4-20 mA dovrai sottrarre l’offset di 4 mA alla lettura. Disponendo di una lettura anche per correnti inferiori ai 4 mA, è possibile utilizzare il controllo sui valori inferiori per determinare l’interruzione del cavo di connessione al trasduttore.

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