Funzioni ed FB gestione One-Wire (ePLC1WireLib_D000) ---------------------------------------------------- **Attenzione! Per utilizzare la libreria occorre importarla nel proprio progetto**. Vedere capitolo relativo all'\ `import delle librerie <#ChpLibraryImport>`__. La rete da campo 1 Wire® é un protocollo standard basato su di un solo filo di comunicazione, come indica lo stesso nome, che include numerosi dispositivi e sensori frequentemente utilizzati nel campo dell'automazione industriale e domestica. I dispositivi sono interconnessi da soli due fili, uno per la massa ed uno per il segnale e l'alimentazione; su questi due fili possono essere collegati tutti i dispositivi in rete scegliendo la disposizione fisica necessaria. Il protocollo 1 Wire® é dotato di tutte le modalità di comunicazione che consentono di ottenere un elevato trasferimento dati ed una sicurezza intrinseca sulla loro validità. Questo avviene grazie a tecniche di indirizzamento univoche, CRC polinomiali di controllo, numerosi comandi di verifica e complessi algoritmi di gestione. |image0| Il bus One-Wire è presente su alcuni moduli CPU dei nostri sistemi SlimLine, comunque è possibile connettere un convertitore Seriale/One-Wire su una delle porte seriali sia del modulo CPU, che di un modulo di estensione per poter disporre di uno o più bus One-Wire. Il blocco funzione **OWireCore** gestisce il convertitore permettendo la gestione dei dispositivi ad esso connessi. OWireCore, One-Wire interface core ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +----------+-------------------+ | **Type** | **Library** | +----------+-------------------+ | FB | ePLC1WireLib_D000 | +----------+-------------------+ |image1| Questo blocco funzione inizializza e gestisce il convertitore One-Wire connesso allo stream definito in **File**. Il FB controlla il tipo di interfaccia connesso allo stream (Modulo CPU o porta seriale) e la gestisce. Attivando **Enable** il FB esegue la gestione dell'interfaccia One-Wire, l'uscita **OwBOk** si attiva se il bus One-Wire funziona correttamente ed è connesso almeno un dispositivo. L'uscita **CPower** gestisce l'accensione del convertitore (Nel caso del modello DS9097U deve essere connessa al segnale DTR della seriale). In **OwBStatus** viene ritornata la condizione del bus One-Wire. L'uscita **Fault** si attiva in caso di errori di gestione. L'FB ritorna **OWID** che deve essere passato alle FB collegate. +-----------------------------------+-----------------------------------+ | **Enable** (BOOL) | Abilitazione blocco funzione, | | | attivandolo viene gestito il | | | convertitore Seriale/One-Wire. | +-----------------------------------+-----------------------------------+ | **SpyOn** (BOOL) | Attivato permette lo spionaggio | | | del funzionamento. | +-----------------------------------+-----------------------------------+ | **File** (FILEP) | Flusso dati **stream** a cui è | | | connessa l'interfaccia One-Wire. | +-----------------------------------+-----------------------------------+ | **OwOk** (BOOL) | Attivo se bus One-Wire funziona | | | correttamente ed è connesso | | | almeno un dispositivo. | +-----------------------------------+-----------------------------------+ | **CPower** (BOOL) | Comando alimentazione | | | convertitore | +-----------------------------------+-----------------------------------+ | **Fault** (BOOL) | Attivo se errore gestione bus | | | One-Wire. | +-----------------------------------+-----------------------------------+ | **OwID** (@_OWIREDATA) | One-Wire management ID, da | | | passare alle FB collegate. | +-----------------------------------+-----------------------------------+ | **OwBStatus** (USINT) | Ritorna lo stato in cui si trova | | | il bus One-Wire | | | | | | 0: Bus shorted | | | | | | 1: Bus Ok | | | | | | 2: Presence pulse | | | | | | 3: No devices | +-----------------------------------+-----------------------------------+ **Trigger di spy** Se **SpyOn** attivo viene eseguita la funzione `SysSpyData <#FctSysSpyData>`__ che permette di spiare il funzionamento della FB. Sono previsti vari livelli di triggers. +-------------+----------------------------------+ | **TFlags** | **Descrizione** | +-------------+----------------------------------+ | 16#00000001 | **Lg:** Log funzionamento. | +-------------+----------------------------------+ | 16#40000000 | **Er:** Errori di funzionamento. | +-------------+----------------------------------+ **Codici di errore** In caso di errore si attiva l'uscita **Fault**, con `SysGetLastError <#FctSysGetLastError>`__ è possibile rilevare il codice di errore. +------------+------------------------------------------------------------+ | 10008010 | Valore di **File** non definito. | +------------+------------------------------------------------------------+ | 10008100 | Timeout esecuzione | +------------+------------------------------------------------------------+ | 10008200 | Errore sequenza Strong Pullup. | +------------+------------------------------------------------------------+ | 10008400~6 | Errore nelle sequenze configurazione interfaccia One-Wire. | +------------+------------------------------------------------------------+ | 10008500 | Errore controllo interfaccia One-Wire. | +------------+------------------------------------------------------------+ | 10008600~2 | Errore nelle sequenze indirizzamento device One-Wire. | +------------+------------------------------------------------------------+ sOWRdIdentifier, One-Wire read ROM identifier ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +-----------------------+-----------------------+ | **Type** | **Library** | +-----------------------+-----------------------+ | FB | ePLC1WireLib_D000 | +-----------------------+-----------------------+ |image2| Questo blocco funzione esegue la lettura del codice di identificazione di un dispositivo One-Wire, si collega al blocco funzione **OWireCore** di gestione convertitore One-Wire. Occorre passare **OwD** in uscita dal blocco funzione di gestione convertitore. Attivando **Enable**, viene eseguita la lettura del ROM ID dal dispositivo connesso al bus One-Wire **Attenzione! Bisogna avere un solo dispositivo connesso al bus**. Al termine della lettura del codice si attiva l'uscita **Done**. Se la lettura ha esito positivo si attiva per un loop di programma l'uscita **Ok**. Gli 8 bytes del ROM ID sono trasferiti nell'array indirizzato da **IDCode**. Disattivando **Enable** si azzera **Done** e l'eventuale **Fault**, per eseguire nuovamente il comando occorre riabilitare l'ingresso **Enable**. +-----------------------------------+-----------------------------------+ | **Enable** (BOOL) | Abilita il blocco funzione. | +-----------------------------------+-----------------------------------+ | **OwID** (@_OWIREDATA) | One-Wire management ID, fornito | | | dalla FB **OWireCore**. | +-----------------------------------+-----------------------------------+ | **IDCode** (@USINT) | Puntatore array memorizzazione | | | ROM ID, deve essere almeno 8 | | | bytes. | +-----------------------------------+-----------------------------------+ | **Done** (BOOL) | Si attiva al termine della | | | esecuzione lettura del ROM ID. | +-----------------------------------+-----------------------------------+ | **Ok** (BOOL) | Attivo per un loop se lettura ROM | | | ID eseguita correttamente. | +-----------------------------------+-----------------------------------+ | **Fault** (BOOL) | Attivo se errore lettura ROM ID. | +-----------------------------------+-----------------------------------+ **Codici di errore** In caso di errore si attiva l'uscita **Fault**, con `SysGetLastError <#FctSysGetLastError>`__ è possibile rilevare il codice di errore. +----------+------------------------+ | 10009010 | **OwID** non definito. | +----------+------------------------+ | 10009020 | **OwID** non corretto. | +----------+------------------------+ | 10009200 | Timeout esecuzione. | +----------+------------------------+ |image3| **Esempi** """""""""""""" Ecco un semplice esempio di gestione di dispositivi iButton per il riconoscimento personale. Inserendo il TAG nel lettore viene eseguita la lettura del ROM identifier, il valore acquisito è trasferito in un array di 8 bytes **ROMID**. Ciclicamente viene eseguita l'acquisizione, se un TAG è inserito nel lettore viene attivato **TAGInserted**. Per semplicità nel programma non viene eseguito alcun controllo sull'ID letto, ma in un sistema di controllo accessi ad esempio è possibile dall'ID letto identificare la persona ed abilitare o no l'accesso. **Definizione variabili** |image4| **Esempio FBD** *(PTP120A500, FBD_OWRdIdentifier)* |image5| OWRdTemperature, One-Wire read temperature ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +-----------------------+-----------------------+ | **Type** | **Library** | +-----------------------+-----------------------+ | FB | ePLC1WireLib_D000 | +-----------------------+-----------------------+ |image6| Questo blocco funzione esegue l'acquisizione di un sensore One-Wire di temperatura (Maxim DS18B20), si collega al blocco funzione **OWireCore** di gestione interfaccia One-Wire. Occorre passare **OwID** in uscita dal blocco funzione di gestione **OWireCore**. Attivando **Enable**, viene eseguita la lettura del valore di temperatura dal dispositivo connesso al bus One-Wire, terminata l'acquisizione si attiva l'uscita **Done**, se acquisizione corretta si attiva per un loop l'uscita **Ok** e su **Temperature**, sarà riportato il valore di temperatura acquisito. L'uscita **Fault** si attiva in caso di errori di gestione. Disattivando **Enable** si azzera **Done**, per eseguire una nuova lettura occorre riabilitare l'ingresso **Enable**. Se sul bus One-Wire è connesso un unico dispositivo, si può evitare di settare **IDCode** oppure si può forzare a **0**. Se invece sul bus One-Wire sono presenti più dispositivi parallelati, in **IDCode** occorre definire l'indirizzo dell'array di 8 bytes che contiene il ROM ID del dispositivo che si vuole acquisire. +-----------------------------------+-----------------------------------+ | **Enable** (BOOL) | Abilita il blocco funzione. | +-----------------------------------+-----------------------------------+ | **OwID** (@_OWIREDATA) | One-Wire management ID, fornito | | | in uscita dal blocco funzione | | | **OWireCore**. | +-----------------------------------+-----------------------------------+ | **IDCode** (@USINT) | Puntatore ad array definizione | | | ROM ID dispositivo da acquisire. | | | Se 0 viene eseguita lettura con | | | comando Skip ROM (Viene acquisito | | | qualsiasi device connesso). | +-----------------------------------+-----------------------------------+ | **Done** (BOOL) | Si attiva al termine della | | | esecuzione lettura temperatura. | +-----------------------------------+-----------------------------------+ | **Ok** (BOOL) | Attivo per un loop se lettura | | | temperatura eseguita | | | correttamente. | +-----------------------------------+-----------------------------------+ | **Fault** (BOOL) | Attivo se errore lettura | | | temperatura. | +-----------------------------------+-----------------------------------+ | **Temperature** (REAL) | Valore di temperatura acquisito | | | (°C). Range di lettura da -55 | | | (°C) a +125 (°C). Precisione ±0.5 | | | (°C) tra -10 (°C) e +85 (°C). | | | Risoluzione di lettura 0.0625 | | | (°C). | +-----------------------------------+-----------------------------------+ | **Errors** (UDINT) | Contatore errori di esecuzione. | +-----------------------------------+-----------------------------------+ **Codici di errore** In caso di errore si attiva l'uscita **Fault**, con `SysGetLastError <#FctSysGetLastError>`__ è possibile rilevare il codice di errore. +-----------------------------------+-----------------------------------+ | 10010010 | **OwID** non definito. | +-----------------------------------+-----------------------------------+ | 10010020 | **OwID** non corretto. | +-----------------------------------+-----------------------------------+ | 10010100 | Errore in FB **OWireCore**. | +-----------------------------------+-----------------------------------+ | 10010200 | Timeout esecuzione | +-----------------------------------+-----------------------------------+ | 10010100 | FB **OWireCore**, gestione | | | interfaccia One-Wire non | | | disponibile. | +-----------------------------------+-----------------------------------+ | 10010300~3 | Errore nelle sequenze | | | acquisizione temperatura. | +-----------------------------------+-----------------------------------+ **Esempi** """"""""""""" Viene eseguita la lettura della temperatura da un dispositivo One-Wire. Non essendo definito **IDCode** viene acquisito qualsiasi dispositivo presente sul bus One-Wire **Attenzione! Deve essere presente un solo dispositivo sul bus**. Il valore acquisito è trasferito nella variabile **Temperature**. **Definizione variabili** |image7| **Esempio LD** *(PTP120A500, FBD_OWRdTemperatureSkipROM)* |image8| .. |image0| image:: media/image1.jpg :width: 3.125in :height: 2.34375in .. |image1| image:: media/image2.jpg :width: 1.53125in :height: 1.32292in .. |image2| image:: media/image3.jpg :width: 1.18889in :height: 0.93681in .. |image3| image:: media/image4.jpg :width: 1.96875in :height: 1.74792in .. |image4| image:: media/image5.jpg :width: 7.08681in :height: 0.89792in .. |image5| image:: media/image6.jpg :width: 7.08681in :height: 3.075in .. |image6| image:: media/image7.jpg :width: 1.54306in :height: 1.32292in .. |image7| image:: media/image8.jpg :width: 7.08681in :height: 0.74792in .. |image8| image:: media/image9.jpg :width: 7.08681in :height: 3.075in