Libreria gestione interfaccia operatore (eLLabHMIBuiltInLib) ------------------------------------------------------------ **Attenzione! Per utilizzare la libreria occorre importarla nel proprio progetto**. Vedere capitolo relativo all'\ `import delle librerie <#ChpLibraryImport>`__. Questa libreria permette di gestire l'interfaccia operatore direttamente da LogicLab. Nel menù Resources è possibile configurare le interfacce operatore. Come si vede nella figura è stata definita una interfaccia **MyHMI** che prevede due messaggi. |image0| Come si vede ad ogni messaggio è associato del testo ed eventuali variabili da visualizzare. Nel messaggio possono essere visualizzate tutte le variabili globali. Nella compilazione del progetto LogicLab crea ed istanzia per ogni HMI un blocco funzione di tipo **HMIBuiltInMessages**, con il nome assegnato all'HMI, nell'esempio soprariportato **MyHMI**. Questo FB provvede alla gestione dei messaggi e delle variabili ma per la visualizzazione occorre collegare al FB una FB di gestione terminale. HMIBuiltInMessages, HMI built in messages ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +-----------------------+-----------------------+ | **Type** | **Library** | +-----------------------+-----------------------+ | FB | eLLabHMIBuiltInLib_B3 | | | 10 | +-----------------------+-----------------------+ |image1| Questo blocco funzione esegue la gestione dei messaggi così come definiti da LogicLab. **Anche se ne riporto la raffigurazione a differenza degli altri blocchi funzione è automaticamente istanziato da LogicLab e non và quindi inserito dall'utente nel proprio programma. Per l'utente è importante fare riferimento alle sole variabili di ingresso ed uscita dal FB, variabili che possono essere utilizzate nel proprio programma.** Il parametro **ALevel** configura il livello di accesso ai messaggi, settando i bits della variabile si permette di visualizzare solo i messaggi che hanno lo stesso bit definito in **Access Level**. +-----------------------------------+-----------------------------------+ | **CmdDisable** (BOOL) | Disabilitazione comandi | | | terminale. Attivandolo non è | | | possibile eseguire operazioni. | +-----------------------------------+-----------------------------------+ | **ViewMID** (UINT) | Visualizza messaggio con ID | | | definito. | +-----------------------------------+-----------------------------------+ | **ALevel** (BYTE) | Pattern livello accesso utente. | +-----------------------------------+-----------------------------------+ | **DEntryOk** (BOOL) | Attivo per un loop al termine | | | della inputazione di una | | | variabile. | +-----------------------------------+-----------------------------------+ | **MsgID** (UINT) | ID del messaggio attualmente | | | visualizzato. | +-----------------------------------+-----------------------------------+ | **HMIBuildInID** (UDINT) | ID messaggi da passare alle FB | | | collegate. | +-----------------------------------+-----------------------------------+ **Codici di errore** In caso di errore si attiva l'uscita **Fault**, con `SysGetLastError <#FctSysGetLastError>`__ è possibile rilevare il codice di errore. +------------+------------------------------------------------------------+ | 10046010 | Tabella messaggi generata da LogicLab non supportata. | +------------+------------------------------------------------------------+ | 10046020~2 | Non è possibile allocare memoria per l'esecuzione. | +------------+------------------------------------------------------------+ | 10046100 | Blocco funzione non eseguito in task di background (Back). | +------------+------------------------------------------------------------+ | 10046200 | Messaggio con ID richiesto in **ViewMID** non trovato. | +------------+------------------------------------------------------------+ | 10046100 | Spazio insufficente per visualizzazione variabile. | +------------+------------------------------------------------------------+ HMIBuiltInNetlog, Netlog HMI management ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +-----------------------+-----------------------+ | **Type** | **Library** | +-----------------------+-----------------------+ | FB | eLLabHMIBuiltInLib_B3 | | | 10 | +-----------------------+-----------------------+ |image2| Questo blocco funzione esegue la gestione del terminale (Display e tastiera) integrato nel sistema **NetlogIII**, **deve essere eseguito in task Back**. Si collega al blocco funzione **HMIBuiltInMessages** di gestione messaggi, occorre passare **HMIBuildInID** in uscita dal blocco funzione. Attivando l'ingresso **Enable** si attiva l'uscita **Enabled** e viene gestito il terminale visualizzando i messaggi definiti nel terminale da LogicLab. Nell'ingresso **File** occorre passare lo stream del dispositivo di I/O utilizzato per la gestione (Ritornato dalla funzione **Sysfopen**). Il FB ritorna in uscita lo stato di tutti i tasti del terminale, e questo permette di utilizzarli nel proprio programma come comandi. L'ingresso **SpyOn** se attivo permette di spiare il funzionamento della FB. In caso di errore esecuzione viene attivata per un loop l'uscita **Fault**. +-----------------------------------+-----------------------------------+ | **Enable** (BOOL) | Comando di abilitazione blocco | | | funzione. | +-----------------------------------+-----------------------------------+ | **SpyOn** (BOOL) | Se attivo permette di spiare il | | | funzionamento della FB. | | | | | | | 16#00000001: | | | | **Rx:** Ricezione dati da | | | terminale | | | | | | | 16#00000002: | | | | **Tx:** Trasmissione comandi | | | display | | | | | | | 16#00000004: | | | | **Tx:** Trasmissione dati | | | display | | | | | | | 16#00000008: | | | | **Tx:** Trasmissione comando | | | inputazione dati. | | | | +-----------------------------------+-----------------------------------+ | **File** (FILEP) | Flusso dati **stream** ritornato | | | dalla funzione **Sysfopen**. | +-----------------------------------+-----------------------------------+ | **HMIBuiltInID** (UDINT) | ID gestione messaggi in uscita | | | dalla FB | | | (**HMIBuiltInMessages**). | +-----------------------------------+-----------------------------------+ | **Enabled** (BOOL) | Attivo su abilitazione blocco | | | funzione. | +-----------------------------------+-----------------------------------+ | **Ready** (BOOL) | Attivo se l'hardware display è | | | pronto. | +-----------------------------------+-----------------------------------+ | **Fault** (BOOL) | Attivo per un loop su errore | | | esecuzione. | +-----------------------------------+-----------------------------------+ | **KeyUP** (BOOL) | Stato tasto UP del terminale. | +-----------------------------------+-----------------------------------+ | **KeyDW** (BOOL) | Stato tasto DW del terminale. | +-----------------------------------+-----------------------------------+ | **KeyLEFT** (BOOL) | Stato tasto LEFT del terminale. | +-----------------------------------+-----------------------------------+ | **KeyRIGHT** (BOOL) | Stato tasto RIGHT del terminale. | +-----------------------------------+-----------------------------------+ | **KeyFUN** (BOOL) | Stato tasto FUN del terminale. | +-----------------------------------+-----------------------------------+ | **KeyENT** (BOOL) | Stato tasto ENT del terminale. | +-----------------------------------+-----------------------------------+ **Codici di errore** In caso di errore si attiva l'uscita **Fault**, con `SysGetLastError <#FctSysGetLastError>`__ è possibile rilevare il codice di errore. +----------+------------------------------------------------------------+ | 10047010 | **HMIBuildInID** non definito. | +----------+------------------------------------------------------------+ | 10047020 | **HMIBuildInID** non corretto. | +----------+------------------------------------------------------------+ | 10047100 | Blocco funzione non eseguito in task di background (Back). | +----------+------------------------------------------------------------+ **Esempi** """""""""""" Nell'esempio è gestito il terminale di un sistema **NetlogIII**, i messaggi sono stati definiti nel programma LogicLab con il nome **MyHMI**. **Definizione variabili** |image3| **Esempio ST** *(PTP148A000, ST_HMIBuiltInNetlog)* .. code-block:: none (\* Program initialization. \*) IF (SysFirstLoop) THEN HMIPort.Open:=TRUE; (\* Open port \*) HMIPort.COM:=ADR('PCOM0.1'); (\* COM port definition \*) HMIPort.Baudrate:=115200; (\* Baudrate \*) HMIPort.Parity:='E'; (\* Parity \*) HMIPort.DataBits:=8; (\* Data bits \*) HMIPort.StopBits:=1; (\* Stop bits \*) HMIPort.DTRManagement:=DTR_OFF; (\* DTR management \*) HMIPort.DTRComplement:=FALSE; (\* DTR complement \*) HMIPort.EchoFlush:=FALSE; (\* Received echo flush \*) HMIPort.DTROnTime:=0; (\* DTR On time delay (mS) \*) HMIPort.DTROffTime:=0; (\* DTR Off time delay (mS) \*) HMIPort.FlushTm:=0; (\* Flush time (mS) \*) HMIPort.RxSize:=0; (\* Rx buffer size \*) HMIPort.TxSize:=0; (\* Tx buffer size \*) HMI.SpyOn:=TRUE; (\* Spy On \*) END_IF; (\* Here manages the Netlog terminal. \*) HMIPort(); (\* HMI port management \*) HMI.File:=HMIPort.File; (\* File pointer \*) HMI.HMIBuiltInID:=MyHMI.HMIBuiltInID; (\* ID gestione messaggi \*) HMI(Enable:=HMIPort.Opened); (\* Netlog terminal \*) **Esempio FBD** *(PTP148A000, FBD_HMIBuiltInNetlog)* |image4| HMIPicoface, Picoface HMI ^^^^^^^^^^^^^^^^^^^^^^^^^^^ +-----------------------+-----------------------+ | **Type** | **Library** | +-----------------------+-----------------------+ | FB | eLLabHMIBuiltInLib_B3 | | | 10 | +-----------------------+-----------------------+ |image5| Questo blocco funzione esegue la gestione del terminale Picoface, il terminale può essere connesso al sistema su bus di estensione I2C oppure in seriale sia in configurazione FullDuplexRS232 che in configurazione HalfDuplex RS485. Il parametro **CType** definisce il tipo di comunicazione utilizzata Il **FB deve essere eseguito in task Back**. Si collega al blocco funzione **HMIBuiltInMessages** di gestione messaggi, occorre passare **HMIBuildInID** in uscita dal blocco funzione. Attivando l'ingresso **Enable** si attiva l'uscita **Enabled** e viene gestito il terminale visualizzando i messaggi definiti nel terminale da LogicLab. Nell'ingresso **File** occorre passare lo stream del dispositivo di I/O utilizzato per la gestione (Ritornato dalla funzione **Sysfopen**). Attivando i bits in ingresso è possibile comandare i LEDs e le uscite sul terminale, in uscita è ritornato lo stato dei tasti e degli ingressi del terminale. Questo permette di utilizzarli nel proprio programma come comandi. E' prevista la gestione di un dispositivo One Wire, il FB ritorna in **OneWireData** un array del tipo. |image6| Dove: **DP:** Device Protocol. **DF:** Device family. L'ingresso **SpyOn** se attivo permette di spiare il funzionamento della FB. In caso di errore esecuzione viene attivata per un loop l'uscita **Fault**. +-----------------------------------+-----------------------------------+ | **Enable** (BOOL) | Comando di abilitazione blocco | | | funzione. | +-----------------------------------+-----------------------------------+ | **CType** (BOOL) | Tipo comunicazione. **FALSE:** | | | Full duplex (Default), **TRUE:** | | | Half duplex | +-----------------------------------+-----------------------------------+ | **SpyOn** (BOOL) | Se attivo permette di spiare il | | | funzionamento della FB. | | | | | | | 16#00000001: | | | | **Rx:** Ricezione frame dati da | | | terminale | | | | | | | 16#00000002: | | | | **Tx:** Trasmissione frame dati | | | verso terminale | | | | | | | 16#10000000: | | | | **Wn:** Messaggio di warning | | | (su anomalia di comunicazione | | | | +-----------------------------------+-----------------------------------+ | **File** (FILEP) | Flusso dati **stream** ritornato | | | dalla funzione **Sysfopen**. Per | | | il terminale di default connesso | | | in I2C definire **PCOM15.1**. | +-----------------------------------+-----------------------------------+ | **HMIBuiltInID** (UDINT) | ID gestione messaggi in uscita | | | dalla FB | | | (**HMIBuiltInMessages**). | +-----------------------------------+-----------------------------------+ | **FLed0~6** (BOOL) | Comando LED tasti funzione da [0] | | | a [6]. | +-----------------------------------+-----------------------------------+ | **Backlight** (BOOL) | Comando accensione backlight | | | display. | +-----------------------------------+-----------------------------------+ | **Out0~1** (BOOL) | Comando uscite logiche. | +-----------------------------------+-----------------------------------+ | **Enabled** (BOOL) | Attivo su abilitazione blocco | | | funzione. | +-----------------------------------+-----------------------------------+ | **Ready** (BOOL) | Attivo se l'hardware display è | | | pronto. | +-----------------------------------+-----------------------------------+ | **Fault** (BOOL) | Attivo per un loop su errore | | | esecuzione. | +-----------------------------------+-----------------------------------+ +-----------------------------------+-----------------------------------+ | **OneWireOk** (BOOL) | Attivo se almeno un dispositivo | | | One-Wire è connesso al connettore | | | del terminale. | +-----------------------------------+-----------------------------------+ | **OneWireTrig** (BOOL) | Attivo per un loop di programma, | | | da usare come trigger sull'array | | | **OneWireData**. | +-----------------------------------+-----------------------------------+ | **OneWireData** (BYTE[16]) | Ritorna i dati letti dal | | | dispositivo One Wire connesso al | | | connettore del terminale. | +-----------------------------------+-----------------------------------+ | **FKey0~9** (BOOL) | Stato tasti funzione da [0] a | | | [9]. | +-----------------------------------+-----------------------------------+ | **KeyFUN** (BOOL) | Stato tasto FUN del terminale. | +-----------------------------------+-----------------------------------+ | **KeyESC** (BOOL) | Stato tasto ESC del terminale. | +-----------------------------------+-----------------------------------+ | **KeyCLR** (BOOL) | Stato tasto CLR del terminale. | +-----------------------------------+-----------------------------------+ | **KeyENT** (BOOL) | Stato tasto ENT del terminale. | +-----------------------------------+-----------------------------------+ | **KeyUP** (BOOL) | Stato tasto UP del terminale. | +-----------------------------------+-----------------------------------+ | **KeyDOWN** (BOOL) | Stato tasto DOWN del terminale. | +-----------------------------------+-----------------------------------+ | **Inp0~1** (BOOL) | Stato ingressi digitali. | +-----------------------------------+-----------------------------------+ **Codici di errore** In caso di errore si attiva l'uscita **Fault**, con `SysGetLastError <#FctSysGetLastError>`__ è possibile rilevare il codice di errore. +----------+------------------------------------------------------------+ | 10049010 | **HMIBuildInID** non definito. | +----------+------------------------------------------------------------+ | 10049020 | **HMIBuildInID** non corretto. | +----------+------------------------------------------------------------+ | 10049100 | Blocco funzione non eseguito in task di background (Back). | +----------+------------------------------------------------------------+ **Esempi** """"""""""" Nell'esempio è gestito un terminale **Picoface**, i messaggi sono stati definiti nel programma LogicLab con il nome **MyHMI**. **Definizione variabili** |image7| **Esempio ST** *(PTP148A000, ST_HMIPicoface)* .. code-block:: none (\* Program initialization. \*) IF (SysFirstLoop) THEN HMIPort.Open:=TRUE; (\* Open port \*) HMIPort.COM:=ADR('PCOM15.1'); (\* COM port definition \*) HMIPort.Baudrate:=115200; (\* Baudrate \*) HMIPort.Parity:='E'; (\* Parity \*) HMIPort.DataBits:=8; (\* Data bits \*) HMIPort.StopBits:=1; (\* Stop bits \*) HMIPort.DTRManagement:=DTR_OFF; (\* DTR management \*) HMIPort.DTRComplement:=FALSE; (\* DTR complement \*) HMIPort.EchoFlush:=FALSE; (\* Received echo flush \*) HMIPort.DTROnTime:=0; (\* DTR On time delay (mS) \*) HMIPort.DTROffTime:=0; (\* DTR Off time delay (mS) \*) HMIPort.FlushTm:=0; (\* Flush time (mS) \*) HMIPort.RxSize:=0; (\* Rx buffer size \*) HMIPort.TxSize:=0; (\* Tx buffer size \*) HMI.SpyOn:=TRUE; (\* Spy On \*) HMI.CType:=FALSE; (\* Communication type \*) END_IF; (\* Here manages the Picoface terminal. \*) HMIPort(); (\* HMI port management \*) HMI.File:=HMIPort.File; (\* File pointer \*) HMI.HMIBuiltInID:=MyHMI.HMIBuiltInID; (\* ID gestione messaggi \*) HMI(Enable:=HMIPort.Opened); (\* Picoface terminal \*) **Esempio FBD** *(PTP148A000, FBD_HMIPicoface)* |image8| .. |image0| image:: media/image1.jpg :width: 7.08681in :height: 5.75625in .. |image1| image:: media/image2.jpg :width: 1.63403in :height: 0.925in .. |image2| image:: media/image3.jpg :width: 1.35417in :height: 2.06319in .. |image3| image:: media/image4.jpg :width: 7.08681in :height: 0.72014in .. |image4| image:: media/image5.jpg :width: 5.97986in :height: 3.32292in .. |image5| image:: media/image6.jpg :width: 1.75208in :height: 4.88611in .. |image6| image:: media/image7.jpg :width: 5.51181in :height: 0.33056in .. |image7| image:: media/image8.jpg :width: 7.08681in :height: 0.53542in .. |image8| image:: media/image9.jpg :width: 6.87431in :height: 5.18889in