Uygulamadaki kullanıcı girişi olaylarını yakalayabilirsiniz. Bu amaçla, kullanıcı olayları meydana geldiğinde çalıştırılan bir fonksiyon bloğu uygulayabilirsiniz.
Değişkenlerin yazımının yakalanması
Kullanıcı bir değerin girişini tamamladığında (bir giriş alanında), bir düzenleme kontrolü olayı kapatılır. Bu olayı uygulamada aşağıdaki şekilde yakalayabilirsiniz.
-
VisuElemBasekütüphanesindenVisuElems.IEditBoxInputHandlerarayüzünü uygulayan bir fonksiyon bloğu oluşturun. -
SetEditBoxEventHandleryöntemini çağırarak örneği global olay yöneticisiVisuElems.Visu_Globals.g_VisuEventManager'a iletin.
Örnek
Bir görselleştirmenin iInput_A ve rInput_B için iki giriş alanı ve bir metin çıktı öğesi vardır.
Giriş alanları, kullanıcının metin girmek için tıklaması istenen dikdörtgenlerdir.
Metin çıktı öğesi, PLC_PRG.stInfo metin değişkeninin içeriğinin yazdırıldığı bir dikdörtgendir. Metin değişkeni, kullanıcının
giriş alanlarından birine yaptığı son girişi ve eklenen ek bilgileri içerir.
|
Dikdörtgenin özellikleri |
|
|
«Metinler Metin» |
|
|
«Metin değişkenleri Metin değişkeni» |
PLC_PRG.iInput_A |
|
Dikdörtgenin özellikleri |
|
|
«Metinler Metin» |
|
|
«Metin değişkenleri Metin değişkeni» |
PLC_PRG.rInput_B |
|
Metin çıktısı için dikdörtgenin özellikleri |
|
|
«Metinler Metin» |
|
|
«Metin değişkenleri Metin değişkeni» |
PLC_PRG.stInfo |
PLC_PRG uygulama
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 uygulama
FUNCTION_BLOCK POU IMPLEMENTS VisuElems.IEditBoxInputHandler (* no further declarations, no implementation code *)
VariableWritten yöntemine atanmıştır 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'));
Klavye olaylarını yakalama
Kullanıcı tuşa basıp bıraktığında, görselleştirmede bir klavye olayı tetiklenir. Bu olayı uygulamada aşağıdaki şekilde yakalayabilirsiniz.
-
VisuElemBasekütüphanesindenVisuElems.IVisuUserEventManageruygulayan bir fonksiyon bloğu oluşturun. -
SetKeyEventHandleryöntemini çağırarak örneği global olay yöneticisiVisuElems.Visu_Globals.g_VisuEventManager'a iletin.
Örnek
Bir görselleştirmenin bir metin çıktı öğesi vardır. Metin çıktı öğesi, PLC_PRG.stInfo metin değişkeninin içeriğinin yazdırıldığı bir dikdörtgendir. Metin değişkeni, kullanıcı
tarafından basılan son tuş hakkında bilgi içerir.
|
Metin çıktısı için dikdörtgenin özellikleri |
|
|
«Metinler Metin» |
|
|
«Metin değişkenleri Metin değişkeni» |
PLC_PRG.stInfo |
PLC_PRG programının uygulanması
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 fonksiyon bloğunun uygulanması
FUNCTION_BLOCK POU IMPLEMENTS VisuElems.IKeyEventHandler (* no further declarations, no implementation code *)
POU fonksiyon bloğunun VariableWritten yönteminin uygulanması
/// 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'));
Giriş olayları tarafından tetiklenen değişken değer değişikliklerinin kaydedilmesi
Kullanıcı girişi ile bir değişkenin değerini değiştiren tüm görselleştirme öğeleri
IValueChangedListener arayüzünü çağırır. Bu arayüz ile değer değişiklikleri kaydedilebilir ve daha sonra
programlı olarak işlenebilir.
-
IValueChangedListenerarayüzünü uygulayan bir fonksiyon bloğu (örnek:POU) uygulayın.FUNCTION_BLOCK POU IMPLEMENTS VisuElems.IValueChangedListenerCihaz ağacında, «ValueChanged» yöntemi fonksiyon bloğunun altına eklenir.
-
Bir programda (örnek: «PLC_PRG»), arayüzü kaydeden IEC kodunu uygulayın.
VisuElems.g_itfValueChangedListenerManager.AddValueChangedListener(itfValueChangedListener)«PLC_PRG» tüm değer değişikliklerini «ValueChanged» yöntemi aracılığıyla alır.
Artık değer değişikliklerini kaydedebilir ve işleyebilirsiniz.
