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.