Connessione con apparecchiatura in Modbus
Home › Forum › Programmazione IEC 61131 (LogicLab) › Connessione con apparecchiatura in Modbus
- Questo topic ha 8 risposte, 3 partecipanti ed è stato aggiornato l'ultima volta 1 anno, 3 mesi fa da
Ufficio Tecnico.
-
AutorePost
-
Gennaio 4, 2024 alle 8:27 pm #75197
Paolo
PartecipanteDa un po’ di tempo sto cercando di collegarmi con un plc Slimline MPS056B120 ad una apparecchiatura tramite Modbus. L’apparecchiatura e’ configurata come Modbus server IP 192.168.1.101 porta 502, l’indirizzo da leggere/scrivere e’ il 55.
Con un software leggo tramite holding registers l’indirizzo 55 (40055). Ho provato con un pannello Weintek ad aggiungere un dispositivo modbus TCP/IP (vedi allegato A1-A2-A3) e riesco a leggere/scrivere l’indirizzo 55.
Ho scritto un semplice programma che poi ho scaricato nel plc (vedi allegato B1-B2) il SysTCPClient funziona, il ModbusSlave da errore. Ho provato ad impostare N_W_1 (Offset dell’indirizzo) in vari modi (a 55 oppure a 26 a 40054 a 40055 a 40026) ma e’ sempre in errore.
Cosa c’e’ di sbagliato ?
Gennaio 5, 2024 alle 9:44 am #75201Sergio Bertana
Amministratore del forumNon riesco a vedere gli allegati, ma intanto non devi utilizzare il FB ModbusSlave, ma il FB ModbusMaster visto che devi interrogare un dispoositivo server.
Puoi copiare l’esempio ST_ModbusMaster riportato nel manuale utilizzando la connessione TCPClient, il programma và eseguito in task Back. Naturalmente dovrai modificare:
MMdb.FCode:=16#04; //Modbus function code MMdb.Address:=55; //Modbus register address MMdb.Points:=xx; //Modbus register points
In base alle tue esigenze, il codice funzione mi sembra di capire sia 16#04, ma potrebbe anche essere 16#03, mentre l’indirizzo è 55 decimale o esadecimale?
Poi siccome Modbus ha offset 1, nel caso prova a settare/resettare la flag MMdb.Absolute.
Utilizza la console di spionaggio per vedere la comunicazione e capire eventuali problemi.
Gennaio 8, 2024 alle 9:07 pm #75234Paolo
PartecipanteCome si aggiungono delle immagini ?
Indirizzo 55 in decimale, FCode 16#04 oppure FCode 16#03 sempre in errore, Timeout 1s Delay 1s
Con SpyData mi compare questo
21:05:16.408157|ModbusMaster:Er|Error:10007050, Case:211, Back:51, Node:01, FCode:03, Address:32, Points:8 21:05:17.409422|ModbusMaster:Tx|00 34 00 00 00 06 01 03 00 31 00 08 21:05:18.409533|ModbusMaster:Rx| 21:05:18.410428|ModbusMaster:Er|Error:10007050, Case:211, Back:51, Node:01, FCode:03, Address:32, Points:8 21:05:19.411509|ModbusMaster:Tx|00 35 00 00 00 06 01 03 00 31 00 08
Gennaio 9, 2024 alle 11:45 am #75239Sergio Bertana
Amministratore del forumCarica le immagini su qualche sito cloud (Esempio imgur) e postane il link…
Dal report di spionaggio vedo che il sistema innvia il pacchetto Modbus di interrogazione corretto, ma non riceve nessuna risposta… Così và in errore di timeout…
Sei sicuro dell’indirizzo 55 ?
Prova con l’emulatore Modbus di Toolly ad interrogare il tuo dispositivo e provare se riesci a ricevere la risposta.
Visto che con il terminale Weintek hai detto che sei riuscito ad interrogare il dispositivo, invia alla eMail di supporto il programma che hai utilizzato che provo a verificare.
Gennaio 9, 2024 alle 12:59 pm #75240Ufficio Tecnico
PartecipanteCon l’emulatore Modbus di Toolly non ricevo risposta, ho provato con un altro emulatore e funziona.
L’indirizzo corretto e’ 55 oppure 40055 in decimale.
L’apparecchiature esterna e configurata come MODBUS TCP
Nel blocco funzione Logiclab ho messo MDB_TCP (cosa significa ? MODBUS TCP oppure RTU over TCP oppure ???)
Gennaio 9, 2024 alle 3:02 pm #75242Sergio Bertana
Amministratore del forumQuindi se non ricevi risposta con l’emulatore Modbus di Toolly c’è un errore in qualche parametro.
Modbus TCP è il protocollo da utilizzare, come vedi dal report di spionaggio il frame inviato è:
00 35 00 00 00 06 01 03 00 31 00 08
Infatti il Modbus TCP inizia con 2 bytes con un numero progressivo 00 35, 2 bytes sempre 00 00, 2 bytes con la lunghezza del pacchetto 00 06. Poi segue il frame Modbus RTU senza CRC, inizia con nodo 01, codice funzione 03, indirizzo 00 31, numero registri da leggere 00 08.
Ora il 40055 nel dialetto Modbus potrebbe indicare la lettura (Codice 04) all’indirizzo 55 esadecimale. Tieni conto che Modbus ha offset 1, ma alcuni sistemi non lo gestiscono infatti anche nell’emulatore è previsto il tick Zero base addressing che annulla l’offset.
Gennaio 10, 2024 alle 8:28 am #75269Paolo
PartecipanteQueste sono le immagini della configurazione utilizzata nelle mie prove.
Gennaio 10, 2024 alle 8:32 am #75272Sergio Bertana
Amministratore del forumGuardando la tua configurazione vedo che sul pannello Weintek hai utilizzato la configurazione Modbus standard e non la zero base addressing, quindi anche sullo SlimLine è corretto non settare l’ingresso Absolute.
Vedo che l’indirizzo è 55 decimale quindi è corretto quello che hai definito nel progetto LogicLab.
Sul pannello Weintek hai utilizzato il comando 04, mentre nel progetto LogicLab hai definito 16#03 in FCode, prova ad utilizzare anche qui il 16#04.
Sul pannello Weintek esegui la lettura solo di un registro WORD, mentre nel programma LogicLab hai definito 8 in Points, prova a definire 1.
Fatto questo verifichiamo con la console di spionaggio se la comunicazione funziona, poi andremo a capire se il problema era il codice funzione (Come io credo) o il numero di registri da leggere.
Gennaio 10, 2024 alle 9:03 am #75275Ufficio Tecnico
PartecipanteAdesso funziona tutto
Ho impostato l’apparecchiatura esterna su Modbus RTU e non funzionava, ho rimesso Modbus TCP ed adesso funziona tutto.
Funziona anche con Fcode 16#06 per la scrittura.
Mistero dell’elettronica.
-
AutorePost
- Devi essere connesso per rispondere a questo topic.