Protocollo DLMS, o IEC 62056-21 ------------------------------- Con il nuovo protocollo standard DLMS (Device Language Message Specification), la comunicazione con i sistemi di metering viene immensamente semplificata. Questo protocollo ha una struttura orientata agli **Oggetti** che rende possibile leggere con la stessa identica modalità dati applicativi provenienti da contatori di diversi costruttori. Lo standard IEC 61107 o IEC 62056-21 è uno standard internazionale che descrive il protocollo DLMS per la lettura da parte di un computer dei dati da contatori tariffari di energia elettrica, acqua e gas. Il protocollo prevede una fase di **Sign-On** con il contatore durante la quale occorre fornire un codice di accesso (Solitamente il numero di serie del contatore), ed il contatore fornisce una password in uscita che può essere utilizzata per criptare i dati. Terminata questa fase è possibile richiedere al contatore il valore dei suoi registri utilizzando i codici di identificazione **OBIS** a 5 caratteri (IEC 62056-61). Per la famiglia SlimLine abbiamo sviluppato un apposito blocco funzione che automatizza tutte le operazioni, occorre passare il numero di serie del contatore ed il codice OBIS del registro da leggere. Il blocco funzione esegue il Sign-On sul contatore e ritorna il valore del registro indicato. |image0| **Interfaccia con il contatore** Per interfacciarsi con il contatore è possibile utilizzare un apposito accoppiatore ottico che si appoggia alla finestra di lettura del contatore e si connette ad una delle porte seriali dello SlimLine (Nella foto l'accoppiatore ISKRA). Oppure nel caso di contatori predisposti con l'uscita RS485 è possibile connettersi direttamente alla porta RS485 dello SlimLine. IEC62056_21Rd, IEC62056-21 protocol read ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ **Type** FB, **Library** eLLabUtyLib_C030 +-------------+-------------------------------+ | **Type** FB | **Library** eLLabUtyLib_C030 | +-------------+-------------------------------+ |image1| +-----------------------+-----------------------+ | **Type** | **Library** | +-----------------------+-----------------------+ | FB | eLLabUtyLib_C030 | +-----------------------+-----------------------+ Questo blocco funzione esegue la gestione della lettura di registri da sistemi di metering utilizzando il protocollo IEC62056-21.Questo è un blocco funzione protetto per utilizzarlo occorre richiedere il codice di protezione, vedi `protezione funzioni e blocchi funzione <#ChpFctFBProtection>`__. E' comunque possibile utilizzarlo liberamente in modo test per 30 Min. Occorre in **SerialNr** definire il numero seriale del contatore (Utilizzato come chiave di accesso alla lettura) e in **Register** l'indirizzo del registro da leggere secondo la normativa OBIS. Se la lettura ha esito positivo viene attivata l'uscita **Done** e le variabili **MeterCode**, **Password** e **Value** sono valorizzate con i dati letti dal contatore. +-----------------------------------+-----------------------------------+ | **Enable** (BOOL) | Attivando l'ingresso viene | | | gestita la lettura del contatore. | +-----------------------------------+-----------------------------------+ | **File** (FILEP) | Pointer al file della risorsa | | | così come ritornato dalla | | | funzione **Sysfopen**. | +-----------------------------------+-----------------------------------+ | **SerialNr** (STRING[16]) | Numero di serie del contatore, | | | viene utilizzato come chiave di | | | accesso. | +-----------------------------------+-----------------------------------+ | **Register** (STRING[16]) | Indirizzo registro da leggere | | | secondo la codifica OBIS. | +-----------------------------------+-----------------------------------+ | **Done** (BOOL) | Viene attivato per un loop al | | | termine della acquisizione. | +-----------------------------------+-----------------------------------+ | **Fault** (BOOL) | Viene attivato per un loop in | | | caso di errore nella sequenza di | | | acquisizione. | +-----------------------------------+-----------------------------------+ | **TxString** (STRING[32]) | Contiene la stringa di comando | | | inviata al contatore, può essere | | | utilizzato in debug per | | | verificare i comandi inviati. | +-----------------------------------+-----------------------------------+ | **RxString** (STRING[32]) | Contiene la stringa di risposta | | | ritornata dal contatore, può | | | essere utilizzato in debug per | | | verificare le risposte ricevute. | +-----------------------------------+-----------------------------------+ | **MeterCode** (STRING[32]) | Contiene stringa con il codice | | | del contatore acquisita durante | | | fase di acceso (Sign-on). | +-----------------------------------+-----------------------------------+ | **Password** (UDINT) | Contiene valore password | | | acquisita dal contatore durante | | | fase di acceso (Sign-on). | +-----------------------------------+-----------------------------------+ | **Value** (STRING[32]) | Contiene stringa con valore | | | registro richiesto acquisita dal | | | contatore. | +-----------------------------------+-----------------------------------+ **Codici di errore** In caso di errore si attiva l'uscita **Fault**, con `SysGetLastError <#FctSysGetLastError>`__ è possibile rilevare il codice di errore. +------------+----------------------------------------------------------+ | 10016010 | Valore di **File** non definito. | +------------+----------------------------------------------------------+ | 10016020 | FB protetta, terminato tempo funzionamento in modo demo. | +------------+----------------------------------------------------------+ | 10016050 | Timeout esecuzione. | +------------+----------------------------------------------------------+ | 10016070 | Errore case gestione. | +------------+----------------------------------------------------------+ | 10016100~1 | Errore ricezione tipo da contatore. | +------------+----------------------------------------------------------+ | 10016110~2 | Errore ricezione password da contatore. | +------------+----------------------------------------------------------+ | 10016120~2 | Errore ricezione valore parametro da contatore. | +------------+----------------------------------------------------------+ | 10016200 | Overflow ricezione stringa da contatore. | +------------+----------------------------------------------------------+ **Esempi** E' disponibile un programma di esempio Ptp122*000 che esegue la lettura da un contatore di energia di 3 registri. A titolo indicativo diamo un esempio di massima per la lettura di un registro. Su attivazione dell'ingresso digitale **Di00M00** viene eseguita la lettura del registro **1.8.0** (Potenza in Kw). Se la lettura ha esito positivo si attiva per un loop l'uscita digitale **Di00M00**. Le variabili **MeterCode**, **Password** e **Value**, saranno valorizzate con i valori letti dal contatore. +-------------------------------------------------+ | **Definizione variabili** | +-------------------------------------------------+ | |image2| | +-------------------------------------------------+ **Esempio LD** *(PTP114A000, LD_IEC62056_21Rd)* |image3| .. |image0| image:: media/image1.jpg :width: 2.60417in :height: 2.08333in .. |image1| image:: media/image2.jpg :width: 1.44861in :height: 1.56319in .. |image2| image:: media/image3.jpg :width: 7.08681in :height: 1.425in .. |image3| image:: media/image4.jpg :width: 7.08681in :height: 2.24792in