FB_TcTouchLock_AcquireFocus

FB_TcTouchLock_AcquireFocus 1:

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.

FB_TcTouchLock_AcquireFocus 2: 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.

FB_TcTouchLock_AcquireFocus 3: 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.

FB_TcTouchLock_AcquireFocus 4:

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)