Dalla versione 5.22.x.xx di LogicLab è stata introdotta la possibilità di eseguire operazioni sui bits (Vedi articolo). Può essere comodo sfruttare nel programma la possibilità di accesso bitwise per gestire stati, allarmi, anomalie, su 8/16/32/64 bits raggruppati in un’unica variabile di tipo BYTE/WORD/DWORD/LWORD.
Interfaccia con pannello operatore
Questa soluzione è ancora più interessante per la gestione del’interfaccia con il pannello operatore, i pannelli operatore Weintek possono operare su variabili %MW_Bit, permettendo di gestire 16 bits operando su di una singola variabile WORD.
Come indicato in questo articolo il pannello operatore comunica in Modbus ed opera su variabili allocate in DB100. Da LogicLab è possibile definire variabili BOOL nella DB100 indicando l’indirizzo della variabile BYTE/WORD/DWORD/LWORD ed il bit da utilizzare.
Definizione WORD di allarme
Allocata a DB100.16 con 16 allarmi gestibili da programma LogicLab con lo mnemonico. Dal pannello operatore definiamo per ogni allarme il relativo indirizzo (Indirizzo WORD+2 digit indirizzo bit).
- Alarm00->%MW_Bit 400800
- Alarm01->%MW_Bit 400801
- Alarm15->%MW_Bit 400816
Definizione DWORD di stato
Allocata a DB100.32 con 32 stati gestibili da programma LogicLab con lo mnemonico. Dal pannello operatore definiamo per ogni stato il relativo indirizzo (Indirizzo WORD+2 digit indirizzo bit).
- Status00->%MW_Bit 401600
- Status01->%MW_Bit 401601
- Status31->%MW_Bit 401716
Esempi
Come utilizzare gli esempi.
L’esempio illustra come utilizzare in un programma ST le definizioni.
LogicLab (Ptp181, ST_AlmStsBitwise)
PROGRAM ST_AlmStsBitwise
VAR
PlantOnAlarm : BOOL; (* Plant on alarm *)
Alarms AT %MW100.16 : WORD;
Alarm00 AT %MW100.16.0 : BOOL;
Alarm01 AT %MW100.16.1 : BOOL;
Alarm15 AT %MW100.16.15 : BOOL;
Status AT %MD100.32 : DWORD;
Status00 AT %MD100.32.0 : BOOL;
Status01 AT %MD100.32.1 : BOOL;
Status31 AT %MD100.32.31 : BOOL;
END_VAR
// *****************************************************************************
// PROGRAM "ST_AlmStsBitwise"
// *****************************************************************************
// How to manage bitwise operations on DB100 allocated variables.
// -----------------------------------------------------------------------------
// -------------------------------------------------------------------------
// ALARMS MANAGEMENT
// -------------------------------------------------------------------------
IF (%IX255.0) THEN Alarm00:=TRUE; ELSE Alarm00:=FALSE; END_IF;
Alarm01:=%IX255.1;
PlantOnAlarm:=TO_BOOL(Alarms <> 0);
%QX255.0:=PlantOnAlarm;
// -------------------------------------------------------------------------
// STATUS MANAGEMENT
// -------------------------------------------------------------------------
IF (%IX255.2) THEN Status00:=TRUE; ELSE Status00:=FALSE; END_IF;
Status01:=%IX255.3;
%QX255.1:=TO_BOOL(Status <> 0);
// [End of file]