FB_TcTouchLock_AcquireFocus

Der Funktionsbaustein FB_TcTouchLock_AcquireFocus dient der Vermeidung von parallelen, sich störenden Eingaben über mehrere Multitouch-Control-Panel, die an einen IPC angeschlossen sind. Zu diesem Zweck wird ein Fokus auf eines der angeschlossenen Control-Panel gelegt und damit die Eingabe über alle anderen angeschlossenen Control-Panel gesperrt. Mit dem Funktionsbaustein FB_TcTouchLock_AcquireFocus kann dieser Fokus angefordert und freigegeben werden.
Wird der Fokus an einem Multitouch-Control-Panel angefordert, wenn ein anderes Multitouch-Control-Panel ihn derzeit besitzt, so muss der Fokus von diesem zunächst frei gegeben werden. Sobald die Freigabe erfolgt ist, wird der Fokus automatisch auf das im Wartezustand befindliche Gerät gesetzt.
Die Multitouch-Control-Panel, auf die durch den Funktionsblock zugegriffen werden, müssen zuvor durch die Kommandozeilen-Applikation TcTouchLockService.exe konfiguriert werden. Dabei muss jedem Gerät eine spezifische Identifikationsnummer zugewiesen werden.
Eingänge
VAR_INPUT
bEnable : BOOL;
sSetID : STRING(32);
tLEDTime : TIME := 200;
END_VAR
Name | Typ | Beschreibung |
---|---|---|
bEnable | BOOL | TRUE = Fokus anfordern, FALSE = Fokus abgeben |
sSetID | STRING | ID des Gerätes |
tLEDTime | TIME | Die Ausgabe-LED blinkt im festgelegten Intervall (100ms – 1s), während der Fokus angefordert wird. |
Ausgänge
VAR_OUTPUT
bAcquired : BOOL := FALSE;(* Focus status information *)
bLED : BOOL := FALSE;(* LED control output *)
bBusy : BOOL;(* TRUE => function in progress *)
bError: : BOOL;(* Error flag *)
nErrID : UDINT;(* Error code *)
END_VAR
Name | Typ | Beschreibung |
---|---|---|
bAcquired | BOOL | TRUE, wenn der Client den Fokus besitzt und FALSE, wenn er ihn verliert. |
bLED | BOOL | Dieser Ausgang hat je nach Modus folgende Bedeutung: |
Modus | Bedeutung |
---|---|
Konstant TRUE | Das Panel besitzt den Fokus |
Konstant FALSE | Das Panel besitzt den Fokus nicht |
Toggelt | Das Panel wartet darauf den Fokus zu erhalten |
Name | Typ | Beschreibung |
---|---|---|
bBusy | BOOL | Bei der Aktivierung des Funktionsbausteins wird dieser Ausgang gesetzt und bleibt gesetzt, bis eine Rückmeldung erfolgt. |
bError | BOOL | Sollte ein Fehler bei der Übertragung des Kommandos erfolgen, dann wird dieser Ausgang gesetzt, nachdem der bBusy-Ausgang zurückgesetzt wurde. |
nErrId | UDINT | Liefert bei einem gesetzten ERR-Ausgang die ADS-Fehlernummer bzw. die spezifische Funktionsbaustein-Fehlernummer. |
Fehlercodes | Fehlerbeschreibung |
---|---|
0x0000 | Kein Fehler |
0x0006 | Ziel-Port nicht gefunden |
Beispiel: Touch-Focus über Sondertaste steuern
Das manuelle Setzen des Fokus kann z.B. über eine Sondertaste des Panels gesteuert werden. Da der Fokus auch bei gesperrter Eingabe über den Touchscreen angefordert werden soll, ist eine Eingabemöglichkeit außerhalb des sperrbaren Touchscreens zu berücksichtigen. Über den TwinCAT System Manager wird die Sondertaste mit der entsprechenden Input-Variable des PLC Programms verknüpft. Pro Panel wird eine FB_TcTouchLock_AquireFocus Instanz erzeugt und mit der ID des Panels konfiguriert. Nach Drücken der Sondertaste an einem Panel, wobei der Baustein R_TRIG die steigende Flanke detektiert, versucht das PLC Programm über die entsprechende FB_TcTouchLock_AquireFocus Instanz den Touch-Fokus zu setzen. Der Funktionsbaustein kann außerdem einen Ausgang ansteuern (z.B. eine LED), der signalisiert, ob der Touch-Fokus erfolgreich gesetzt wurde oder ob noch versucht wird den Fokus zu holen. Erneutes Drücken der Sondertaste setzt den Touch-Fokus wieder zurück und ermöglicht damit ein Setzen des Touch-Fokus an anderen Panels.

Das PLC-Programm sieht für zwei Panels folgendermaßen aus:
PROGRAM MAIN
VAR
button1 AT%IX0.0 : BOOL;
button2 AT%IX0.1 : BOOL;
led1 AT%QX0.0 : BOOL;
led2 AT%QX0.1 : BOOL;
fbPanel1 : FB_TcTouchLock_AcquireFocus := ( sSetID := 'A' );
fbPanel2 : FB_TcTouchLock_AcquireFocus := ( sSetID := 'B' );
trigger1 : R_TRIG;
trigger2 : R_TRIG;
END_VAR
(* Panel 1 *)
trigger1( CLK := button1 );
IF trigger1.Q THEN
fbPanel1.bEnable := NOT fbPanel1.bEnable;
END_IF
fbPanel1(bLED=>LED1);
(* Panel 2 *)
trigger2( CLK := button2 );
IF trigger2.Q THEN
fbPanel2.bEnable := NOT fbPanel2.bEnable;
END_IF
fbPanel2(bLED=>LED2 );
Voraussetzungen
Entwicklungsumgebung | Zielplattform | Einzubindende SPS-Bibliotheken (Kategoriegruppe) |
---|---|---|
TwinCAT v3.1. >= 4022.31 | PC oder CX (x86, x64) | Tc2_IoFunctions (IO) |