Sie können Benutzereingabeereignisse in der Anwendung erfassen. Zu diesem Zweck können Sie einen Funktionsblock implementieren, der beim Auftreten von Benutzerereignissen ausgeführt wird.
Erfassen des Schreibens von Variablen
Wenn der Benutzer die Eingabe eines Wertes (in einem Eingabefeld) abschließt, wird ein Bearbeitungssteuerungsereignis geschlossen. Sie können dieses Ereignis in der Anwendung wie folgt erfassen.
-
Erstellen Sie einen Funktionsblock, der die Schnittstelle
VisuElems.IEditBoxInputHandler
aus der BibliothekVisuElemBase
implementiert. -
Übergeben Sie die Instanz an den globalen Ereignismanager
VisuElems.Visu_Globals.g_VisuEventManager
, indem Sie die MethodeSetEditBoxEventHandler
aufrufen.
Beispiel
Eine Visualisierung hat zwei Eingabefelder für iInput_A
und rInput_B
und ein Textausgabeelement.
Die Eingabefelder sind Rechtecke, auf die der Benutzer klicken muss, um Text einzugeben.
Das Textausgabeelement ist ein Rechteck, in dem der Inhalt der Textvariablen PLC_PRG.stInfo
gedruckt wird. Die Textvariable enthält die letzte Eingabe eines Benutzers in eines
der Eingabefelder und die zusätzlichen Informationen, die hinzugefügt wurden.

Eigenschaften des Rechtecks |
|
„Texts Text“ |
|
„Textvariablen Textvariable“ |
PLC_PRG.iInput_A |
Eigenschaften des Rechtecks |
|
„Texts Text“ |
|
„Textvariablen Textvariable“ |
PLC_PRG.rInput_B |
Eigenschaften des Rechtecks für die Textausgabe |
|
„Texts Text“ |
|
„Textvariablen Textvariable“ |
PLC_PRG.stInfo |
PLC_PRG
Umsetzung
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
POU
Umsetzung
FUNCTION_BLOCK POU IMPLEMENTS VisuElems.IEditBoxInputHandler (* no further declarations, no implementation code *)
Methode VariableWritten
zugeordnet zu 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'));
Erfassen von Tastaturereignissen
Wenn der Benutzer die Taste drückt und wieder loslässt, wird ein Tastaturereignis in der Visualisierung ausgelöst. Sie können dieses Ereignis in der Anwendung wie folgt erfassen.
-
Erstellen Sie einen Funktionsblock, der
VisuElems.IVisuUserEventManager
aus der BibliothekVisuElemBase
implementiert. -
Übergeben Sie die Instanz an den globalen Ereignismanager
VisuElems.Visu_Globals.g_VisuEventManager
, indem Sie die MethodeSetKeyEventHandler
aufrufen.
Beispiel
Eine Visualisierung hat ein Textausgabeelement. Das Textausgabeelement ist ein Rechteck,
in dem der Inhalt der Textvariablen PLC_PRG.stInfo
gedruckt wird. Die Textvariable enthält Informationen über die zuletzt vom Benutzer
gedrückte Taste.
Eigenschaften des Rechtecks für die Textausgabe |
|
„Texts Text“ |
|
„Textvariablen Textvariable“ |
PLC_PRG.stInfo |
Umsetzung 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 Funktionsblocks POU
FUNCTION_BLOCK POU IMPLEMENTS VisuElems.IKeyEventHandler (* no further declarations, no implementation code *)
Implementierung der Methode VariableWritten
des Funktionsblocks 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'));
Aufzeichnung von Variablenwertänderungen, die durch Eingangsereignisse ausgelöst werden
Alle Visualisierungselemente, die den Wert einer Variable durch Benutzereingabe verändern,
rufen die Schnittstelle IValueChangedListener
auf. Mit dieser Schnittstelle können die Wertänderungen erfasst und dann programmatisch
verarbeitet werden.
-
Implementieren Sie einen Funktionsblock (Beispiel:
POU
), der die SchnittstelleIValueChangedListener
implementiert.FUNCTION_BLOCK POU IMPLEMENTS VisuElems.IValueChangedListener
Im Gerätebaum wird die Methode „ValueChanged“ unterhalb des Funktionsblocks eingefügt.
-
In einem Programm (Beispiel: „PLC_PRG“), implementieren Sie den IEC-Code, der die Schnittstelle registriert.
VisuElems.g_itfValueChangedListenerManager.AddValueChangedListener(itfValueChangedListener)
„PLC_PRG“ empfängt alle Wertänderungen mit Hilfe der Methode „ValueChanged“.
Nun können Sie die Wertänderungen erfassen und verarbeiten.
Capturing inputs on elements with input options
When a user clicks an element that reacts to input (for example, a rectangle with an input configuration), an event is triggered. Sie können dieses Ereignis in der Anwendung wie folgt erfassen.
1. Create a function block that implements the interface VisuElems.IInputOnElementEventHandler
from the library VisuElemBase
.
2. Pass the instance to the global event manager VisuElems.Visu_Globals.g_VisuEventManager
by calling the method SetInputOnElementEventHandler
.
Example 9. Example
A visualization has a rectangle that reacts to input. For example, the toggling of
a variable has been configured with OnMouseDown
. When the element is clicked by a mouse or touch input, an event HandleInputOnElementEvent
is triggered.
Implementation of the function VisuInit
FUNCTION VisuInit : BOOL
// Set the input on element event handler VisuElems.VisuElemBase.g_VisuEventManager.SetInputOnElementEventHandler(PLC_PRG.evInputOnElementEventHandler);
Implementation of the function block POU
FUNCTION_BLOCK POU IMPLEMENTS VisuElems.VisuElemBase.IInputOnElementEventHandler
(* no further declarations, no implementation code *)
Implementation of the method HandleInputOnElementEvent
of the function block 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)
*)