ユーザー入力イベントのキャプチャ
アプリケーション内でユーザー入力イベントをキャプチャできます。そのためには、ユーザーイベントが発生した際に実行される関数ブロックを実装します。
注記
ユーザー入力による変数の変更をキャプチャするためのサンプルプロジェクト
サンプルプロジェクトは、視覚化内でのユーザー入力によってトリガーされた変数値の変化を記録します。このプロジェクトでは、メソッドの実装も確認できます。ValueChanged
。
変数の書き込みをキャプチャする
ユーザーが入力フィールドへの値の入力を完了すると、編集コントロールイベントが閉じられます。このイベントは、アプリケーション内で次のようにキャプチャできます。
インターフェースを実装する関数ブロックを作成する
VisuElems.IEditBoxInputHandler
図書館からVisuElemBase
。インスタンスをグローバルイベントマネージャーに渡す
VisuElems.Visu_Globals.g_VisuEventManager
メソッドを呼び出すことによってSetEditBoxEventHandler
。
視覚化には2つの入力フィールドがあり、iInput_A
そしてrInput_B
および 1 つのテキスト出力要素。
入力フィールドは、ユーザーがテキストを入力するためにクリックするように求められる長方形です。
テキスト出力要素は、テキスト変数の内容が入る長方形である。PLC_PRG.stInfo
が印刷されます。テキスト変数には、ユーザーが入力フィールドのいずれかに最後に入力した内容と、追加された追加情報が含まれます。

長方形の特性 | |
| |
| |
長方形の特性 | |
| |
| |
テキスト出力用の四角形のプロパティ | |
| |
|
の実装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
の実装POU
FUNCTION_BLOCK POU IMPLEMENTS VisuElems.IEditBoxInputHandler (* no further declarations, no implementation code *)
方法VariableWritten
割り当てられた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'));
キーボードイベントのキャプチャ
ユーザーがキーを押して放すと、視覚エフェクト内でキーボードイベントが発生します。このイベントは、アプリケーション内で次のようにキャプチャできます。
インターフェースを実装する関数ブロックを作成する
VisuElems.IKeyEventHandler
図書館からVisuElemBase
。インスタンスをグローバルイベントマネージャーに渡す
VisuElems.Visu_Globals.g_VisuEventManager
メソッドを呼び出すことによってSetKeyEventHandler
。
視覚化には1つのテキスト出力要素があります。テキスト出力要素は、テキスト変数の内容が入る四角形です。PLC_PRG.stInfo
が出力されます。テキスト変数には、ユーザーが最後に押したキーに関する情報が含まれます。
テキスト出力用の四角形のプロパティ | |
| |
|
プログラムの実施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
機能ブロックの実装POU
FUNCTION_BLOCK POU IMPLEMENTS VisuElems.IKeyEventHandler (* no further declarations, no implementation code *)
方法の実装VariableWritten
機能ブロックの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'));
入力イベントによってトリガーされた変数値の変化を記録する
ユーザー入力によって変数の値を変更するすべての視覚化要素は、インターフェースを呼び出します。IValueChangedListener
このインターフェースを使用すると、値の変更を記録し、プログラムで処理することができます。
注記
ユーザー入力による変数の変更をキャプチャするためのサンプルプロジェクト
サンプルプロジェクトは、視覚化内でのユーザー入力によってトリガーされた変数値の変化を記録します。このプロジェクトでは、メソッドの実装も確認できます。ValueChanged
。
関数ブロックを実装する(例:
POU
)インターフェースを実装するIValueChangedListener
。FUNCTION_BLOCK POU IMPLEMENTS VisuElems.IValueChangedListener
デバイスツリーでは、値が変更されましたメソッドは関数ブロックの下に挿入されます。
プログラム内(例: PLC_PRG )、インターフェースを登録する IEC コードを実装します。
VisuElems.g_itfValueChangedListenerManager.AddValueChangedListener(itfValueChangedListener)
PLC_PRGすべての値の変更は、値が変更されました方法。
これで、値の変更を記録して処理できるようになります。
入力オプションを持つ要素の入力をキャプチャする
ユーザーが入力に反応する要素(例えば、入力設定を持つ四角形)をクリックすると、イベントが発生します。このイベントは、アプリケーション内で次のようにキャプチャできます。
インターフェースを実装する関数ブロックを作成する
VisuElems.IInputOnElementEventHandler
図書館からVisuElemBase
。インスタンスをグローバルイベントマネージャに渡す
VisuElems.Visu_Globals.g_VisuEventManager
メソッドを呼び出すことによってSetInputOnElementEventHandler
。
視覚化には入力に反応する四角形があります。例えば、変数の切り替えは次のように設定されています。OnMouseDown
要素がマウスまたはタッチ入力によってクリックされると、イベントが発生します。HandleInputOnElementEvent
が発生します。
機能の実装VisuInit
FUNCTION VisuInit : BOOL // Set the input on element event handler VisuElems.VisuElemBase.g_VisuEventManager.SetInputOnElementEventHandler(PLC_PRG.evInputOnElementEventHandler);
機能ブロックの実装POU
FUNCTION_BLOCK POU IMPLEMENTS VisuElems.VisuElemBase.IInputOnElementEventHandler (* no further declarations, no implementation code *)
方法の実装HandleInputOnElementEvent
機能ブロックの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) *)