Dovendo interfacciare pannelli operatore (HMI) ad un sistema programmato con LogicLab c’è la necessità di esportare dal programma tutti i simboli globali per poi importarli nell’ambiente di sviluppo dell’HMI. Il nuovo Tool Symbols converter permette di esportare le variabili mnemoniche globali (Tags) in un file formato csv che potrà essere importato dall’ambiente di sviluppo dell’HMI (Versione 6.09.02.510 o superiore, scaricabile dal ns sito).
In caso di modifica della allocazione delle variabili nel programma LogicLab basterà ripetere l’operazione di esportazione ed importazione per riallineare il programma dell’HMI con il programma LogicLab.

Approfondimenti
- In questo video un dimostrativo di utilizzo pratico del convertitore.
Symbols converter
Attivando da LogicLab il programma, menù Tools->Symbols converter viene letto il file di progetto in uso ed eseguita la scansione delle variabili globali accessibili da protocollo Modbus (Attualmente le variabili allocate in DB100) e visualizzato l’elenco con:
- Total: Numero totale di variabili trovate.
- Warnings: Numero variabili con problemi da verificare, la variabile è riportata in giallo nell’elenco.
- Errors: Numero variabili in errore, la variabile è riportata in rosso nell’elenco.
Per ogni variabile viene riportato.
- Name: Nome mnemonico della variabile da utilizzarsi come TAG nel programma HMI.
- Type: Tipo variabile IEC-61131.
- DB Type: Tipo di DB in cui la variabile è allocata (Default M).
- DB number: Numero DB in cui la variabile è allocata (Default 100).
- DB Data Type: Tipo variabile allocata in DB.
- DB Bit Nr: Numero bit della variabile, di applica a variabili WORD, DWORD, LWORD.
- Description: Descrizione della variabile definita in LogicLab.
- Error Description: La descrizione della causa che ha generato la warning o l’errore.
[To Csv] Conversione in formato CSV
La conversione in formato CSV facilita l’importazione delle Tags nei pannelli operatori. Agendo sul tasto ToCsv viene richiesto il percorso ed il nome del file in cui salvare le Tags. Il file generato avrà 5 colonne separate da virgola:
- Nome mnemonico tag
- Tipo variabile IEC61131
- Tipo variabile allocata in DB
- Indirizzo Modbus accesso a variabile
- Descrizione simbolo
MIPars.BrShed1,BOOL,B,42832,
HMIPars.BrShed2,BOOL,B,42833,
HMIPars.BrWarehouse,BOOL,B,42834,
HMIPars.ZSch.Shed.Monday.MOn,UINT,W,41313,
HMIPars.ZSch.Shed.Monday.HOff,UINT,W,41314,
HMIPars.ZSch.Shed.Monday.MOff,UINT,W,41315,
HMIPars.SPTemperature[10],REAL,D,41380,
HMIPars.SPTemperature[11],REAL,D,41382,
[To Weintek Csv] Conversione in formato CSV adatto a HMI Weintek
Per i pannelli operatore Weintek è stato realizzato un export specifico, per esportare i simboli occorre avere un file di Tags di riferimento.
- Dal progetto EasyBuilderPro menù Project->Address agendo sul tasto Export CSV esportare i simboli predefiniti del pannello in uso (Figura 1).
- Agendo sul tasto To Weintek Csv è richiesta la definizione del nome del PLC (Deve corrispondere con il nome del dispositivo definito nel programma EasyBuilderPro) il tipo di dispositivo deve essere ELSIST MODBUS (ASCII, RTU o TCP/IP) (Figura 2).
- Successivamente verrà richiesta la definizione del nome di file di Tags precedentemente esportato da EasyBuilderPro. Dal file verranno eliminate le Tags riferite al nome PLC definito ed aggiunte le Tags esportate dal programma LogicLab.
- Dal progetto EasyBuilderPro menù Project->Address agendo sul tasto Import CSV importare le Tags esportate da LogicLab.
Ora è possibile ricompilare il progetto e trasferirlo sul pannello.
Come visto al punto 3 l’esportazione nel file cancella solo le Tags riferite al nome del PLC definito, questo permette di eseguire nel caso un pannello sia connesso a più PLC l’esportazione delle Tags dei vari PLC all’interno di un unico file che potrà poi essere importato dall’ambiente EasyBuilderPro.
Utilizzo stuttura dati
Le uniche variabili accessibili da protocollo Modbus sono quelle allocate nella DB100, quindi dovendo allocare le variabili nel datablock occorre prestare atenzione all’indirizzamento. Ricordo che nei sistemi basati su architettura ARM le variabili a 2 bytes vanno allocate ad indirizzi divisibili per 2, le variabili a 4 bytes vanno allocate ad indirizzi divisibili per 4 e le variabili ad 8 bytes vanno allocate ad indirizzi divisibili per 8.
Per evitare di doversi calcolare manualmente gli indirizzi delle variabili e sopratutto doverli modificare nel caso di spostamento delle stesse, consiglio di definirle all’interno di strutture dati ed allocare nella DB100 unicamente la struttura. Come si vede nel progetto a lato le variabili in sola visualizzazione sono definite nella struttura HMIVARIABLES allocata a DB100.256 mentre le variabili in visualizzazione/inputazione sono definite nella struttura HMIPARAMETERS allocata a DB100.2048 (che è la zona tamponata).
Il generatore di simboli creerà per ogni variabile un Tag composto dal nome di istanza della struttura seguito dal nome della variabile in struttura (Esempio: HMIVars.HMIBLightOff, HMIPars.ZSch.Reception.Monday.HOn, HMIPars.SPTemperature[0], ecc). Nel caso di array il nome della variabile sarà seguito dall’indice array racchiuso tra parentesi quadre.
Esempi
Il programma Ptp113 HMIStartUp fornito con LogicLab è un esempio pratico di come realizzare un programma su di un sistema SlimLine e realizzarne l’interfaccia grafica su un pannello operatore. Il programma è suddiviso in due cartelle la cartella LogicLab contiene il programma del PLC, la cartella HMI contiene il programma per l’HMI. Come si vede nella figura sono stati gestiti comandi e visualizzati stati permettendo una interazione con il programma PLC.
Nel programma PLC le variabili HMI sono state allocate sia direttamente che utilizzando strutture dati in questo modo si può vedere come il Symbols converter esegue la generazione della TAGs.
Interessante esempio è il controllo del tempo di reazione, il programma accende la lampada di strobe con tempi random tra 2 e 5 secondi e calcola il tempo nel quale viene premuto il tasto di acknowledge, sono storicizzati gli ultimi 5 tempi.
LogicLab (Ptp113, ST_ReactionTime)
PROGRAM ST_ReactionTime
VAR
i : DINT; (* Auxiliary variable *)
STime : TIME; (* Strobe time *)
RSTime : UDINT; (* Reaction start time (mS) *)
SDelay : TON; (* Strobe delay *)
END_VAR
// *****************************************************************************
// PROGRAM "ST_ReactionTime"
// *****************************************************************************
// Measures the reaction time.
// https://support.elsist.biz/articoli/logiclab-convertitore-simboli-globali/
// -----------------------------------------------------------------------------
// -------------------------------------------------------------------------
// INITIALIZATION
// -------------------------------------------------------------------------
// Set strobe time.
IF (SysFirstLoop) THEN
STime:=TO_TIME((2.0+(SysGetRandom(TRUE)*3.0))*1000.0); //Strobe delay
END_IF;
// -------------------------------------------------------------------------
// REACTION TIME CALCULATION
// -------------------------------------------------------------------------
// Delay the strobe signal.
SDelay(IN:=NOT(RTAck), PT:=STime); //Strobe delay
// On strobe signal the reaction time calculation starts.
// The strobe is set on a random time from 2 to 5 Secs.
IF (SDelay.Q <> RTStrobe) THEN
RTStrobe:=SDelay.Q; //Reaction time strobe
IF (SDelay.Q) THEN RSTime:=SysTimeGetMs(); END_IF; //Reaction start time (mS)
IF NOT(SDelay.Q) THEN
STime:=TO_TIME((2.0+(SysGetRandom(TRUE)*3.0))*1000.0); //Strobe delay
// Shift results on array.
FOR i:=TO_DINT((SIZEOF(HMIVars.RTTime)/SIZEOF(HMIVars.RTTime[0]))-1) TO 1 BY -1 DO
HMIVars.RTTime[i]:=HMIVars.RTTime[i-1]; //Reaction time
END_FOR;
// Save the last result.
HMIVars.RTTime[0]:=TO_TIME(SysTimeGetMs()-RSTime); //Reaction time
END_IF;
END_IF;
// [End of file]