Home › Forum › Discussioni su problematiche generali › Acquisizione da PLC di un misuratore di energia
- Questo topic ha 14 risposte, 4 partecipanti ed è stato aggiornato l'ultima volta 7 anni, 6 mesi fa da Sergio Bertana.
-
AutorePost
-
Giugno 24, 2015 alle 1:27 pm #35815Sergio BertanaAmministratore 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 esserci 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).
Giugno 25, 2015 alle 9:53 am #38986Sergio BertanaAmministratore del forumContinuo 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).
Ottobre 20, 2015 alle 5:15 pm #39106AntonioPartecipanteHo 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 ?
Ottobre 22, 2015 alle 3:29 pm #39107Sergio BertanaAmministratore del forumDirei 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.
Ottobre 22, 2015 alle 5:45 pm #39108AntonioPartecipanteGrazie ho risolto pienamente il problema era nel protocollo seriale (parità pari) e bisogna aggiungere 1 agli indirizzi riportati nel manuale.
Ottobre 25, 2015 alle 11:41 am #39111FrancescoPartecipanteSalve 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.
Ottobre 26, 2015 alle 8:43 am #39112Sergio BertanaAmministratore del forumL’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.
Ottobre 26, 2015 alle 3:55 pm #39113FrancescoPartecipanteSalve 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.
Ottobre 26, 2015 alle 4:43 pm #39114Sergio BertanaAmministratore del forumNon 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.
Ottobre 26, 2015 alle 6:25 pm #39115FrancescoPartecipanteLa seriale e a 9600 e parita even la stazione PLC ho messo 1.
Ottobre 27, 2015 alle 7:44 am #39116Sergio BertanaAmministratore del forumAllora 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 problema 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).
Novembre 3, 2015 alle 5:29 pm #39142Sergio BertanaAmministratore del forumIn questo topic si trova un progetto per acquisire i valori dal misuratore di energia direttamente con un pannello operatore.
Novembre 4, 2015 alle 8:42 am #39143Sergio BertanaAmministratore del forumSperando 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 Modbus di settaggio baud rate siano accettati dallo strumento occorre avere tenere premuto il tasto PRG sullo strumento per 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“.
Marzo 1, 2017 alle 2:33 pm #39858MarcelloPartecipanteHo 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 🙂 ).
Marzo 2, 2017 alle 9:21 am #39859Sergio BertanaAmministratore del forumHo corretto il bug, ora la lettura funziona correttamente allego per il download la nuova libreria eLLabMdbDevsLib_A100.
-
AutorePost
- Devi essere connesso per rispondere a questo topic.