Vai al contenuto

Comunicazione Modbus RTU con Energy meter SDM120

Home Forum Programmazione IEC 61131 (LogicLab) Comunicazione Modbus RTU con Energy meter SDM120

Taggato: 

Stai visualizzando 15 post - dal 1 a 15 (di 15 totali)
  • Autore
    Post
  • #58794
    tommas.cavallini
    Partecipante

    Salve a tutti possiedo un PLC SlimLine LogicLab Compact Ethernet e devo instaurare una comunicazione RTU con 2 EnergyMeter. Ho seguito il tutorial di Elsist per leggere i dati da un SDM120 e con uno solo funziona tutto; però quando provo a leggere 2 dati provenienti da 2 EnergyMeter differenti riesco sempre  a leggerne  solo 1 come posso risolvere questo problema?

    #58798
    Sergio Bertana
    Amministratore del forum

    Quando parli di tutorial credo tu ti riferisca a questo video, dove ho spiegato come eseguire l’acquisizione dei dati dagli Energy meter SDM120.

    Ora immagino tu abbia utilizzato per la lettura il FB EastronSDM120, che ne gestisce completamente la lettura. Ma come vedi il FB ha il parametro Node dove devi definire il nodo Modbus del meter da acquisisre.

    In pratica ogni SDM120 deve avere il proprio indirizzo di nodo uno diverso dall’altro, di default l’indirizzo di nodo è 1, per cambiarlo devi seguire le informazioni del manuale, in pratica devi tenere premutoil tasto sul frontale per entrare in Set parametri e poi inviare un comando Modbus di scrittura indirizzo di nodo.

    #58805
    tommas.cavallini
    Partecipante

    Buongiorno, intanto grazie mille per l’attenzione. Nel mio progetto ho utilizzato i FB SysSerialPort e ModbusMaster e VarSwap.

    Ho provato in seguito a collegare un altro FB ModbusMaster (che identifica il secondo SDM120 avente nodo 2) utilizzando lo stesso FB per  la porta seriale. Nella porta EN del secondo ModbusMaster ho aggiunto un eTON con tempo di 200ms, però riesco sempre a leggere solo il primo (collegato al primo FB ModbusMaster). Ho provato anche a separare il tutto in due programmi diversi associandoli anche a task diversi, ma il risultato non cambia, anzi, non legge più nemmeno il primo.

    Come posso risolvere? Grazie ancora in anticipo.

    #58807
    Sergio Bertana
    Amministratore del forum

    Quindi se ho capito non utilizzi il FB EastronSDM120, ma vuoi provare a realizzare tu il programma con il FB ModbusMaster?

    Allora se devi comunicare con più dispositivi in RS485 multidrop devi utilizzare la tecnica delle FB in cascata, in pratica istanzi più FB ModbusMaster tutte condividono il File in uscita dalla SysSerialPort. Il Done della prima FB lo colleghi all’Enable della seconda e così via, il Done dell’ultima istanza lo colleghi invertito all’Enable della prima. Puoi intrudurre una pausa di attesa tra le comunicazioni defindendo il valore di Delay.

    Ma molto meglio in questo caso utilizzare il FB ACModbus, che ti permette di connetterti a più dispositivi in multidrop utilizzando un solo FB ModbusMaster.

    #58808
    tommas.cavallini
    Partecipante

    Ho provato il metodo con i FB ModbusMaster in cascata e funziona, grazie mille per l’aiuto!

    I suoi video e le sue spiegazioni sono stati fondamentali soprattutto perchè mi sono appena affacciato al mondo dei PLC, gliene sono veramente grato. Nel caso avessi altri dubbi, scriverò sul forum che è molto ben fatto e le risposte sono più celeri di quanto mi aspettassi.

    #58894
    tommas.cavallini
    Partecipante

    Adesso è venuto fuori il problema che tramite connessione ModBus RTU voglio anche scrivere dei dati. Mi chiedevo quindi: se per la lettura usavamo il FB varSwap per convertire in REAL i valori, per la scrittura come faccio?

    Pensavo di inserire i valori da scrivere alla voce Buffer del FB ModbusMaster, ma credo di aver capito che non posso scrivere un valore REAL ma un valore nello standard IEE754, giusto?

    Come faccio ad eseguire quindi la conversione inversa di VarSwap?

    #58898
    Sergio Bertana
    Amministratore del forum

    Un pò di ordine tra le idee… e una occhiata a questo post potrebbe essere utile.

    I dati in lettura e scrittura sul meter sono sempre in float 32 bit IEE754, che in IEC61131 si identificano con il formato REAL. Quindi con la funzione VarSwap non fai nessuna conversione. Usi questa funzione perchè essendo il valore espresso su 32 bits si utilizzano 2 registri Modbus per la lettura/scrittura e siccome il protocollo Modbus non specifica l’endiannes sui valori multiregistro ognuno fà come vuole.

    La funzione VarSwap sistema proprio l’endiannes dei dati quindi puoi usarla sia per convertire i dati in lettura che quelli in scrittura. Quindi per scrivere un valore sul meter appoggi il dato REAL nel buffer del FB ModbusMaster (Che definirei di tipo DWORD) utilizzando la funzione VarSwap.

    #58983
    tommas.cavallini
    Partecipante

    Perfetto, adesso il mio problema sta nella gestione temporale di lettura e scrittura di dieci elettrovalvole.

    Se per la lettura basta associare il programma al task Back in modo tale da essere eseguita periodicamente, la scrittura invece vorrei poterla eseguire solo in seguito ad una particolare condizione: ho visto che LogicLab non mette a disposizione dei task ad evento, quindi come potrei fare?

    #58985
    Sergio Bertana
    Amministratore del forum

    Mi sono un pò perso… si parlava di energy meter SDM120 ed ora saltiamo ad elettrovalvole…

    Ma venendo alla tua domanda hai appreso come mettere in cascata più FB ModbusMaster per effettuare la lettura dei registri da diversi strumenti. Ora quando devi scrivere aspetti il Done dell’ultimo FB in cascata e anzichè ripartire con la sequenza togliendo l’Enable del primo, farai partire un un ulteriore FB ModbusMaster che configurerai di volta in volta per la scrittura del registro che ti occorre.

    #58986
    tommas.cavallini
    Partecipante

    Anzitutto mi scuso per la confusione: devo leggere sia gli EnergyMeter che le elettrovavole, su queste ultime devo effettuare anche la scrittura: dato che entrambe comunicano in RTU ho pensato di poter chiedere direttamente qui senza dover per forza aprire un altro topic.

    Venendo a noi, non ho ben capito la soluzione proposta: pensavo di separare la fase di lettura e scrittura non collegando i FB in cascata. Infatti, la lettura deve essere continuativa mentre la scrittura avviene solo quando e se voglio cambiare dei parametri.

    #58989
    Sergio Bertana
    Amministratore del forum

    Nessun problema solo che non capivo il nesso con le elettrovalvole…

    Infatti il mio sufggerimento era di abilitare il FB parametrizzato per la scrittura solo quando serve scrivere, naturalmente tutto sarebbe molto più semplice lavorando in linguaggio ST e gestendo il programma in case con lo statement CASE.

    TRovi molti programmi realizzati in questo modo puoi prendere spunto da esempi che trovi nel forum.

    #59286
    Matteo Bianchi
    Partecipante

    Sto cercando di lavorare con SDM20, rispetto all’esempio del video corso, che utilizza la funzione ModbusMaster, la documentazione online riporta un ModbusMaster versione v1, in cui non compare più il parametro IFTime.

    Come posso recuperare la  documentazione con il vecchio parametro IFTime, io non lavoro a 2400 bit/s ma a 9600, per cui IFTime in esempio non và bene. O eventualmente come posso fare per utilizzare il nuovo ModbusMaster_V1 ?

    Che libreria devo caricare?

    #59296
    Sergio Bertana
    Amministratore del forum

    La vecchia documentazione la puoi sempre trovare nel manuale in PDF che è scaricabile dal sito (LO trovi in testa all’indice del manuale on-line).

    Ma io ti consiglio di scaricare dal sito la libreria eLLabMdbDevsLib che come vedi dalla pagina del manuale è la libreria in cui si trova il nuovo FB ModbusMaster_v1.

    La libreria è realizzata per i nuovi sistemi XUnified, se il tuo sistema è ancora un XTargetxx puoi eseguire un upgrade (Trovi le informazioni nella zona knowlewdge del sito) od inserire nel progetto la libreria eLLabXTargetAdjLib (Vedi articolo).

    #70448
    Edi
    Partecipante

    Salve, vorrei chiedere un consiglio sulla gestione del protocollo ModbusMaster in quanto dovrei acquisire la lettura contemporanea di più registri non consecutivi di due contatori di energia elettrica (non SDM) collegati tramite la RS485.

    Mi trovo in difficoltà su come eseguire la lettura di almeno 15 valori REAL, in poche parole dovrei realizzare un FB uguale a quello del SDM 630 dove acquisisce tensione, corrente, potenza attiva, reattiva ecc.

    #70500
    Sergio Bertana
    Amministratore del forum

    Il modo più intuitivo di realizzare quello che ti serve è utilizzare più istanze del FB ModbusMaster connesse in cascata (Vedi articolo).

    Il modo più da programmatore e che utilizza meno risorse è di utilizzare il FB ACModbus, definendo un array di variabili ACMODBUS_DATA_V2 con i parametri dei vari registri da gestire sul meter.

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