Benutzereingabeereignisse abfangen
Sie können Benutzereingabeereignisse in der Applikation abfangen. Sie können dafür einen Funktionsbaustein implementieren, der bei Eingabeereignissen aufgerufen wird.
Hinweis
Beispielprojekt für die Erfassung von Variablanänderungen per Benutzereingabe
Das Beispielprojekt zeichnet Variablenwertänderungen auf, die durch Benutzereingaben innerhalb der Visualisierung ausgelöst wurden. In diesem Projekt finden Sie auch die Implementierung der Methode ValueChanged
Das Schreiben einer Variablen abfangen
Wenn ein Benutzer die Eingabe eines Werts (in einem Eingabefeld) abschließt, wird ein Edit-Control-Ereignis geschlossen. Sie können diese Ereignis in der Applikation folgendermaßen abfangen.
Erstellen Sie einen Funktionsbaustein, der die Schnittstelle
VisuElems.IEditBoxInputHandleraus der BibliothekVisuElemBaseimplementiert.Übergeben Sie die Instanz an den globalen Eventmanager
VisuElems.Visu_Globals.g_VisuEventManagerdurch Aufruf der MethodeSetEditBoxEventHandler.
Eine Visualisierung hat 2 Eingabefeldern für iInput_A und rInput_B und ein Textausgabeelement.
Die Eingabefeldern sind Rechtecke, bei denen ein Benutzer auf einen Mausklick hin zu einer Eingabe aufgefordert wird.
Das Textausgabeelement ist ein Rechteck, in dem der Inhalt der Textvariable PLC_PRG.stInfo ausgegeben wird. Die Textvariable enthält die zuletzt von einem Benutzer getätigte Eingabe auf einem der Eingabefelder und die hinzugefügte zusätzliche Information.

Eigenschaften des Rechtecks | |
| |
| |
Eigenschaften des Rechtecks | |
| |
| |
Eigenschaften des Rechtecks für die Textausgabe | |
| |
| |
Implementierung PLC_PRG
PROGRAM PLC_PRG
VAR_INPUT
iInput_A:INT; (* Used in the visualization as user input variable*)
rInput_B:REAL; (* Used in the visualization as user input variable*)
stInfo : STRING; (* Informs about the user input via the edit control field;
String gets composed by method 'VariableWritten;
Result is displayed in the lower rectangle of the visualization *)
END_VAR
VAR
inst : POU;
bFirst : BOOL := TRUE;
END_VAR
IF bFirst THEN
bFirst := FALSE;
VisuElems.Visu_Globals.g_VisuEventManager.SetEditBoxEventHandler(inst);
(* Call of method VariableWritten *)
END_IF Implementierung POU
FUNCTION_BLOCK POU IMPLEMENTS VisuElems.IEditBoxInputHandler (* no further declarations, no implementation code *)
Methode VariableWritten assigned to POU
METHOD VariableWritten : BOOL
(* provides some information always when an edit control field is closed in the visualization, that is a variable gets written by user input in one of the upper rectangles *)
VAR_INPUT
pVar : POINTER TO BYTE;
varType : VisuElems.Visu_Types;
iMaxSize : INT;
pClient : POINTER TO VisuElems.VisuStructClientData;
END_VAR
// String stInfo, which will be displayed in the lower rectangle, is composed here
PLC_PRG.stInfo := 'Variable written; type: ';
PLC_PRG.stInfo := CONCAT(PLC_PRG.stInfo, INT_TO_STRING(varType));
PLC_PRG.stInfo := CONCAT(PLC_PRG.stInfo, ', adr: ');
PLC_PRG.stInfo := CONCAT(PLC_PRG.stInfo, DWORD_TO_STRING(pVar));
PLC_PRG.stInfo := CONCAT(PLC_PRG.stInfo, ', by: ');
PLC_PRG.stInfo := CONCAT(PLC_PRG.stInfo, SEL(pClient^.globaldata.clienttype = VisuElems.Visu_ClientType.Targetvisualization,'other visu', 'targetvisu')); Tastaturereignis abfangen
Wenn ein Benutzer eine Taste drückt und loslässt, wird in der Visualisierung ein Tastaturereignis ausgelöst. Sie können dieses Ereignis in der Applikation folgendermaßen abfangen.
Erstellen Sie einen Funktionsbaustein, der das Interface
VisuElems.IKeyEventHandleraus der BibliothekVisuElemBaseimplementiert.Übergeben Sie die Instanz an den globalen Eventmanager
VisuElems.Visu_Globals.g_VisuEventManagerdurch Aufruf der MethodeSetKeyEventHandler.
Eine Visualisierung hat ein Textausgabeelement. Das Textausgabeelement ist ein Rechteck, in dem der Inhalt der Textvariable PLC_PRG.stInfo ausgegeben wird. Die Textvariable enthält Information zur zuletzt vom Benutzer getätigten Taste.
Eigenschaften des Rechtecks für die Textausgabe | |
| |
| |
Implementierung des Programms PLC_PRG
PROGRAM PLC_PRG
VAR_INPUT
stInfo : STRING;
END_VAR
VAR
inst : POU;
bFirst : BOOL := TRUE;
END_VAR
IF bFirst THEN
bFirst := FALSE;
VisuElems.Visu_Globals.g_VisuEventManager.SetKeyEventHandler(inst);
END_IF Implementierung des Funktionsbausteins POU
FUNCTION_BLOCK POU IMPLEMENTS VisuElems.IKeyEventHandler
(* no further declarations, no implementation code *)
Implementierung der Methode VariableWritten des FBs POU
/// This method will be called after a key event is released.
/// RETURN:
/// TRUE - When the handler has handled this event and it should not be handled by someone else
/// FALSE - When the event is not handled by this handler
METHOD HandleKeyEvent : BOOL
VAR_INPUT
/// Event type. The value is true if a key-up event was released.
bKeyUpEvent : BOOL;
/// Key code
dwKey : DWORD;
/// Modifier. Possible values:
/// VISU_KEYMOD_SHIFT : DWORD := 1;
/// VISU_KEYMOD_ALT : DWORD := 2;
/// VISU_KEYMOD_CTRL : DWORD := 4;
dwModifiers : DWORD;
/// Pointer to the client structure were the event was released
pClient : POINTER TO VisuStructClientData;
END_VAR
VAR
END_VAR
PLC_PRG.stInfo := 'KeyEvent up: ';
PLC_PRG.stInfo := CONCAT(PLC_PRG.stInfo, BOOL_TO_STRING(bKeyUpEvent));
PLC_PRG.stInfo := CONCAT(PLC_PRG.stInfo, ', key: ');
PLC_PRG.stInfo := CONCAT(PLC_PRG.stInfo, DWORD_TO_STRING(dwKey));
PLC_PRG.stInfo := CONCAT(PLC_PRG.stInfo, ', modifier: ');
PLC_PRG.stInfo := CONCAT(PLC_PRG.stInfo, DWORD_TO_STRING(dwModifiers));
PLC_PRG.stInfo := CONCAT(PLC_PRG.stInfo, ', by: ');
PLC_PRG.stInfo := CONCAT(PLC_PRG.stInfo, SEL(pClient^.globaldata.clienttype =
VisuElems.Visu_ClientType.Targetvisualization,'other visu', 'targetvisu'));
Durch Eingabeereignisse ausgelöste Variablenwertänderungen aufzeichnen
Alle Visulisierungselemente, die durch eine Benutzereingabe den Wert einer Variablen ändern, rufen die Schnittstelle IValueChangedListener auf. Mit dieser Schnittstelle können die Wertänderungen aufgezeichnet und anschließend programmatisch verarbeitet werden.
Hinweis
Beispielprojekt für die Erfassung von Variablanänderungen per Benutzereingabe
Das Beispielprojekt zeichnet Variablenwertänderungen auf, die durch Benutzereingaben innerhalb der Visualisierung ausgelöst wurden. In diesem Projekt finden Sie auch die Implementierung der Methode ValueChanged
Implementieren Sie einen Funktionsbaustein, zum Beispiel
POU, der die SchnittstelleIValueChangedListenerimplementiert.FUNCTION_BLOCK POU IMPLEMENTS VisuElems.IValueChangedListenerIm Gerätebaum wird unter dem Funktionsbaustein die Methode ValueChanged eingefügt.
Implementieren Sie in einem Programm, zum Beispiel PLC_PRG, den IEC-Code der die Schnittstelle anmeldet.
VisuElems.g_itfValueChangedListenerManager.AddValueChangedListener(itfValueChangedListener)Über die Methode ValueChanged erhält PLC_PRG alle Wertänderungen.
Nun Können Sie die Wertänderungen aufzeichnen und weiterverarbeiten.
Eingaben auf Elemente mit Eingabemöglichkeit abfangen
Wenn ein Benutzer ein Element betätigt, das auf Eingaben reagiert (beispielsweise Rechteck mit Eingabekonfiguration), wird ein Ereignis ausgelöst. Sie können dieses Ereignis in der Applikation folgendermaßen abfangen.
Erstellen Sie einen Funktionsbaustein, der das Interface
VisuElems.IInputOnElementEventHandleraus der BibliothekVisuElemBaseimplementiert.Übergeben Sie die Instanz an den globalen Eventmanager
VisuElems.Visu_Globals.g_VisuEventManagerdurch Aufruf der MethodeSetInputOnElementEventHandler.
Eine Visualisierung hat ein Rechteck, das auf Eingaben reagiert. Es wurde beispielsweise mit OnMouseDown das Toggeln einer Variablen konfiguriert. Wenn nun das Element durch eine Maus - oder Touch-Eingabe betätigt wird, wird ein Event HandleInputOnElementEvent ausgelöst.
Implementierung der Funktion VisuInit
FUNCTION VisuInit : BOOL // Set the input on element event handler VisuElems.VisuElemBase.g_VisuEventManager.SetInputOnElementEventHandler(PLC_PRG.evInputOnElementEventHandler);
Implementierung des Funktionsbausteins POU
FUNCTION_BLOCK POU IMPLEMENTS VisuElems.VisuElemBase.IInputOnElementEventHandler (* no further declarations, no implementation code *)
Implementiertung der Methode HandleInputOnElementEvent des FBs POU
(* This method will be called when an input on a visualization element was executed.
RETURN:
TRUE - When the handler has handled this event and it should not be handled by someone else
FALSE - When the event is not handled by this handler*)
METHOD HandleInputOnElementEvent : BOOL
VAR_INPUT
event : VisuElems.VisuStructInputOnElementEvent;
END_VAR
IF event.eType = VisuElems.VisuEnumInputOnElementType.MouseDown THEN
SysProcessExecuteCommand('python D:\Beep.py', 0);
END_IF (* Content Beep.py: import winsound freq=500 duration=200 winsound.Beep(freq,duration) *)