Vai al contenuto

Connessione con apparecchiatura in Modbus

Home Forum Programmazione IEC 61131 (LogicLab) Connessione con apparecchiatura in Modbus

Stai visualizzando 9 post - dal 1 a 9 (di 9 totali)
  • Autore
    Post
  • #75197
    Paolo
    Partecipante

    Da 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 ?

    #75201
    Sergio Bertana
    Amministratore del forum

    Non 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.

    #75234
    Paolo
    Partecipante

    Come 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
    #75239
    Sergio Bertana
    Amministratore del forum

    Carica 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.

    #75240
    Ufficio Tecnico
    Partecipante

    Con 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 ???)

    #75242
    Sergio Bertana
    Amministratore del forum

    Quindi 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.

    #75269
    Paolo
    Partecipante

    Queste sono le immagini della configurazione utilizzata nelle mie prove.

    #75272
    Sergio Bertana
    Amministratore del forum

    Guardando 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.

    #75275
    Ufficio Tecnico
    Partecipante

    Adesso 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.

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