Comunicazione modbus con modulo TRP-C68
Home › Forum › Moduli I/O distribuiti › Comunicazione modbus con modulo TRP-C68
- Questo topic ha 4 risposte, 2 partecipanti ed è stato aggiornato l'ultima volta 12 anni, 8 mesi fa da
Sergio Bertana.
-
AutorePost
-
Luglio 24, 2012 alle 12:39 pm #35253
Andrea
PartecipanteStò 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 correttaAvete qualche altro suggerimento ?
Luglio 24, 2012 alle 12:44 pm #37345Sergio Bertana
Amministratore del forumIl 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.
Luglio 27, 2012 alle 12:23 pm #37346Sergio Bertana
Amministratore del forumIl 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.
Agosto 1, 2012 alle 9:52 am #37347Andrea
PartecipanteHo 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 ?
Agosto 1, 2012 alle 10:09 am #37348Sergio Bertana
Amministratore del forumIl 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. -
AutorePost
- Devi essere connesso per rispondere a questo topic.