Acquisizione da PLC di un misuratore di energia

Attenzione !I messaggi sul forum potrebbero essere modificati dal nostro staff. La data e l'ora dei messaggi potrebbe non essere quella di invio ma quella di moderazione da parte dello staff. Grazie per l'attenzione.

Home Forum Discussioni su problematiche generali Acquisizione da PLC di un misuratore di energia

Questo argomento contiene 14 risposte, ha 4 partecipanti, ed è stato aggiornato da  Sergio Bertana 1 anno, 10 mesi fa.

Stai vedendo 15 articoli - dal 1 a 15 (di 15 totali)
  • Autore
    Articoli
  • #35815

    Sergio Bertana
    Amministratore del forum

    Pubblico questo topic dietro la richiesta di un cliente che desidera interfacciare un misuratore di energia ad un nostro sistema SlimLine. Il cliente utilizza degli economici energy meters della Eastron con interfaccia ad impulso e/o Modbus, in particolare il modello SDM120C Modbus (Datasheet e Manuale).

    Per eseguire la lettura da SlimLine dei registri del misuratore di energia, viene utilizzato il blocco funzione ModbusMaster che esegue la lettura del registro indicato dal misuratore. Come visibile dal manuale tutti i valori del misuratore sono ritornati con una variabile di tipo REAL (Utilizza 2 registri Modbus, 4 bytes).

    Il formato REAL utilizzato dal misuratore è lo stesso utilizzato dallo SlimLine (IEE754 a 32 bits), esiste però una differenza tra l’endianness utilizzato dallo strumento e quello dello SlimLine, ecco perchè ho realizzato la funzione DWSwap. Questa funzione provvede a scambiare l’endianness del dato acquisito dal misuratore per adattarlo a quello dello SlimLine (Ecco la stampa del programma).

    Come si vede dalla stampa la porta seriale viene impostata a 2400, n, 8 ,1 che è il default dello strumento (Nella documentazione sembra eserci un refuso in quanto è indicata la parità pari). Il numero di nodo di default del misuratore è 1. Il FB ModbusMaster esegue la lettura di 2 registri a partire dall’indirizzo 1 (Quindi viene ritornato il valore di tensione). E’ possibile da debug leggere il valore ritornato nella variabile Value, e modificare il registro da leggere variandone l’indirizzo nella variabile Address (Download programma).

    #38986

    Sergio Bertana
    Amministratore del forum

    Continuo nell’esercizio proponendo un programma più complesso che esegue la lettura di tutti e 10 i registri del misuratore di energia SDM120. Il programma come si vede dalla stampa è sviluppato in linguaggio ST.

    Questo programma può essere utilizzato come dimostrativo in tutte le comunicazioni modbus, infatti ho definito la struttura MODBUSCONFIG che permette di definire per ogni comando modbus il nodo, il codice comando e l’indirizzo del registro. Tutte le letture sono per comodità suddivise su 2 registri (4 bytes) e tramite un ROL viene sistemata la differenza di endianness tra i due sistemi.

    Ho definito anche la struttura SDM120REGISTERS che contiene tutti i registri del misuratore di energia. In questo modo un unica variabile contiene tutti i valori acquisiti.

    Per completezza viene gestita anche una connessione TCP/IP sulla porta 2000. Connettendosi sulla porta è possibile disabilitare il FB ModbusMaster ed inviare le stringhe modbus al misuratore di energia direttamente da una connessione Telnet (Esempio utilizzando Toolly). Questa opzione può essere comoda per configurare il misuratore, ponendolo in Test tramite Modbus è possibile configurarne alcune funzioni (Download programma).

    #39106

    Antonio
    Partecipante

    Ho scaricato entrambi gli esempi e li ho testati senza successo con il modello SDM320M. Premetto che ho impostato la giusta velocità di default a 9600 e il nodo mi dice il manuale ed anche il display è ad 1.

    Ho anche provato a cambiare l’address nel primo esempio con alcuni valori delle tabelle nel manuale ma senza successo. Anche il secondo esempio non và (valori in debug sempre a zero). Bisogna necessarimente utilizzare il modello SDM120C ?

    #39107

    Sergio Bertana
    Amministratore del forum

    Direi di concentrarci sul primo esempio che esegue un semplice comando Modbus di lettura registri. Come vedi nell’esempio l’ingresso SpyOn è attivo quindi collegandoti in Telnet allo SlimLine puoi vedere tramite la console di spionaggio i dati in transito sulla comunicazione seriale (Topic).

    Se vuoi avere più tempo per analizzare i pacchetti dati puoi aumentare il valore del parametro Delay portandolo a qualche  secondo (Esempio 5000 per avere 5 secondi di ritardo tra un pacchetto e l’altro).

    Come vedi dal manuale utente del prodotto, il registro Modbus 1 (Nel manuale è indicato come 3001) che è quello che acquisiamo nell’esempio corrisponde al valore Line to neutral volts. Dalla console di spionaggio potrai vedere uscire un frame in trasmissione uguale a quello indicato nel manuale al capitolo 4.2 Data reading. In realtà c’è una incongruenza nel manuale perchè in testa alla tabella dei registri dicono Parameters to be read by function code 04, mentre nell’esempio al capitolo 4.2 utilizzano il function code 03.

    Normalmente i codici 03 e 04 sono equivalenti, ma puoi provare a modificare nell’esempio il parametro FCode portandolo a 16#03.

    #39108

    Antonio
    Partecipante

    Grazie ho risolto pienamente il problema era nel protocollo seriale (parità pari) e bisogna aggiungere 1 agli indirizzi riportati nel manuale.

    #39111

    Francesco
    Partecipante

    Salve ho visto che state parlando dello stesso prodotto che ho acquistato anche io SDM320M della Eastrom ho un pannello operatore MT8100ie e ho collegato lo strumendo al pannello con la porta rs485 modbus 2w ma non riesco a farli comunicare.

    I collegamenti che ho utilizzato sono 7-8 non so se ho fatto giusto non ho tanta esperienza per questo chedo un vostro aiuto grazie.

    #39112

    Sergio Bertana
    Amministratore del forum

    L’SDM320M supporta il Modbus RTU quindi è pienamente compatibile con il pannello Weintek. Se usi i pin 7-8 del connettore “E” devi impostare porta di comunicazione COM3. Poi verifica di avere impostato correttamente la modalità di comunicazione ed avere impostato il protocollo Modbus RTU con il corretto numero di nodo.

    #39113

    Francesco
    Partecipante

    Salve sto usando il pin 7-8 del connettore e la COM3, poi ho messo tipo di PLC Modbus RTU RS485 2w la stazione PLC ho messo 1. Poi ho creato una finestra numerica ho messo nome PLC Modbus RTU, indirizzo 3x 1 che sarebbe l’indirizzo dello stumendo.

    #39114

    Sergio Bertana
    Amministratore del forum

    Non mi dici se hai impostato seriale a 9600 baud e parità pari (Almeno questo sembra quello che ha impostato saing).

    Poi attenzione 3x è il comando 03 Modbus (Puoi provare con il 4x) ma 1 non è l’indirizzo dello strumento, il valore che metti dopo il codice del comando è l’indirizzo del registro che leggi. E poi devi definire nell’oggetto il corretto tipo di dati che leggi, se è un registro a 16 bit devi indicare unsigned int 16 bit.

    #39115

    Francesco
    Partecipante

    La seriale e a 9600 e parita even la stazione PLC ho messo 1.

    #39116

    Sergio Bertana
    Amministratore del forum

    Allora deve funzionare…
    Hai provato ad invertire i due file della RS485, molte volte è solo nell’errato collegamento della seriale il problema.

    Per capire dove è il poblema dovresti spiare la comunicazione seriale (Ecco perchè nel FB sullo SlimLine abbiamo inserito il comando di SpyOn) in questo topic viene spiegato come spiare un RS232. Per la RS485 è ancora più facile, basta avere un adattatore USB/RS485 da collegare al PC.

    Con l’adattatore collegato al PC hai anche il vantaggio di poter provare la comunicazione direttamente con il simulatore del pannello direttamente da PC senza utilizzare il pannello reale. E se conosci un po Modbus potrai prima testare se funziona con Toolly o con programmi di simulazione Modbus (Esempio Modscan Topic).

    #39142

    Sergio Bertana
    Amministratore del forum

    In questo topic si trova un progetto per acquisisre i valori dal misuratore di energia direttamente con un pannello operatore.

    #39143

    Sergio Bertana
    Amministratore del forum

    Sperando di fare cosa gradita allego una versione in Italiano del manuale utente dello strumento reperita in Internet.

    Dovendo modificare il valore di baud rate dal default di 9600 baud al valore di 2400 baud per poter inserire lo strumento in una rete Modbus con altri oggetti, ho utilizzato Toolly per inviare i comandi Modbus relativi al cambio baud rate.

    Frame Modbus da inviare allo strumento (Con ID 1) per impostare baud rate a 2400 baud “01 10 F8 00 00 01 02 00 02 5E 5E
    Frame Modbus da inviare allo strumento (Con ID 1) per impostare baud rate a 9600 baud “01 10 F8 00 00 01 02 00 04 DE 5C

    Attenzione affinchè i comandi Mofbus di settaggio baud rate siano accettati dallo strumento occorre avere tenere premuto il tasto PRG sullo strumento pèer almeno 5 secondi. Al rilascio si attiva una icona tipo cornetta telefonica sul display, ora è possibile inviare i comandi che saranno automaticamente memorizzati.

    Se il comando cambio baud rate non è accettato lo strumento risponde con il codice di eccezione “01 90 01 8D C0“. Se il comando è accettato lo strumento risponde con “01 10 F8 00 00 01 30 A9“.

    #39858

    Marcello
    Partecipante

    Ho notato che nelle istruzioni dell’SDM120 l’indirizzo per la lettura della corrente è errato 16#17 anzichè 16#07 infatti l’FB EastromSDM120 non restituisce nessun dato sulla uscita Current.

    Ho provato con un mio FB mettendo l’indirizzo corretto (16#07) e il risultato è apparso subito. Potete aggiornare l’FB EastromSDM120 con questa correzione così che possa utilizzarlo (funziona meglio del mio 🙂 ).

    #39859

    Sergio Bertana
    Amministratore del forum

    Ho corretto il bug, ora la lettura funziona correttamente allego per il download la nuova libreria eLLabMdbDevsLib_A100.

Stai vedendo 15 articoli - dal 1 a 15 (di 15 totali)

Devi essere loggato per rispondere a questa discussione.