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.IEditBoxInputHandler
aus der BibliothekVisuElemBase
implementiert.Übergeben Sie die Instanz an den globalen Eventmanager
VisuElems.Visu_Globals.g_VisuEventManager
durch 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.IKeyEventHandler
aus der BibliothekVisuElemBase
implementiert.Übergeben Sie die Instanz an den globalen Eventmanager
VisuElems.Visu_Globals.g_VisuEventManager
durch 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 SchnittstelleIValueChangedListener
implementiert.FUNCTION_BLOCK POU IMPLEMENTS VisuElems.IValueChangedListener
Im 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.IInputOnElementEventHandler
aus der BibliothekVisuElemBase
implementiert.Übergeben Sie die Instanz an den globalen Eventmanager
VisuElems.Visu_Globals.g_VisuEventManager
durch 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) *)