FB_CPLink3_AcquireHIDFocus

FB_CPLink3_AcquireHIDFocus 1:

Dieser Funktionsbaustein wird benutzt um den HID-Fokus anzufordern oder abzugeben.

VAR_IN_OUT

VAR_IN_OUT
    hFocus  : T_HCPLink3HidFocus;(* CPLink3 HID focus handle *)
END_VAR

hFocus: Internes CP-Link3 HID Fokus-Handle.

VAR_INPUT

VAR_INPUT
    bEnable : BOOL := FALSE;(* TRUE = Acquire, FALSE = Release focus *)
    setIP   : T_IPv4Addr := '';
END_VAR

bEnable: TRUE = Fokus anfordern, FALSE = Fokus abgeben.

setIP: IP-Adresse des Clients.

VAR_OUTPUT

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

bAcquired: Dieser Ausgang wird gesetzt, wenn der Client den Fokus besitzt und zurückgesetzt, wenn er ihn verliert.

bLED: Dieser Ausgang hat je nach Modus folgende Bedeutung:

Modus

Bedeutung

Konstant TRUE

Der Client besitzt den Fokus.

Konstant FALSE

Der Client besitzt den Fokus nicht.

Toggelt

Der Client wartet darauf den Fokus zu bekommen.

 

bBusy: Bei der Aktivierung des Funktionsbausteins wird dieser Ausgang gesetzt und bleibt gesetzt, bis eine Rückmeldung erfolgt.

bError: Sollte ein ADS-Fehler bei der Übertragung des Kommandos erfolgen, dann wird dieser Ausgang gesetzt, nachdem der bBusy-Ausgang zurückgesetzt wurde.

nErrID: Liefert bei einem gesetzten bError-Ausgang die ADS-Fehlernummer.

 

Beispiel: HID-Focus über Sondertaste steuern

Das manuelle Setzen des HID-Focus kann z.B. über eine Sondertaste des Clients gesteuert werden. Über den TwinCAT System Manager wird die Sondertaste mit der entsprechenden Input-Variable des PLC-Programms verknüpft. Pro Client wird eine FB_CPLink3_AcquireHidFocus Instanz erzeugt und mit der IP-Adresse des Clients konfiguriert. Nach Drücken der Sondertaste an einem Client, wobei der Baustein R_TRIG die steigende Flanke detektiert, versucht das PLC-Programm über die entsprechende FB_CPLink3_AcquireHidFocus Instanz den HID-Focus zu setzen. Der Funktionsbaustein kann außerdem einen Ausgang ansteuern (z.B. eine LED) die signalisiert, ob der HID-Focus erfolgreich gesetzt wurde oder ob noch versucht wird den Focus zu holen. Erneutes Drücken der Sondertaste setzt den HID-Focus wieder zurück.

Die drei Instanzen des Funktionsblocks FB_CPLink3_AcquireHidFocus nutzen die Variable hFocus um untereinander Informationen auszutauschen. Damit wird z.B. gewährleistet, dass nur die Instanz, die den HID-Focus erfolgreich gesetzt hat, diesen auch wieder zurücksetzen kann.

Das PLC-Programm sieht für drei Clients folgendermaßen aus:

PROGRAM MAIN
VAR
    button1 AT%IX0.0 : BOOL;
    button2 AT%IX0.1 : BOOL;
    button3 AT%IX0.2 : BOOL;

    led1 AT%QX0.0 : BOOL;
    led2 AT%QX0.1 : BOOL;
    led3 AT%QX0.2 : BOOL;

    hFocus : T_HCPLink3HidFocus;
    fbPanel1 : FB_CPLink3_AcquireHidFocus := ( setIP := '192.168.1.1' );
    fbPanel2 : FB_CPLink3_AcquireHidFocus := ( setIP := '192.168.1.2' );
    fbPanel3 : FB_CPLink3_AcquireHidFocus := ( setIP := '192.168.1.3' );

    trigger1 : R_TRIG;
    trigger2 : R_TRIG;
    trigger3 : R_TRIG;
END_VAR
(* Panel 1 *)
trigger1( CLK := button1 );
IF trigger1.Q THEN
    fbPanel1.bEnable := NOT fbPanel1.bEnable;
END_IF
fbPanel1( hFocus:= hFocus, bLED=>LED1);

(* Panel 2 *)
trigger2( CLK := button2 );
IF trigger2.Q THEN
    fbPanel2.bEnable := NOT fbPanel2.bEnable;
END_IF
fbPanel2( hFocus:= hFocus, bLED=>LED2 );

(* Panel 3 *)
trigger3( CLK := button3 );
IF trigger3.Q THEN
    fbPanel3.bEnable := NOT fbPanel3.bEnable;
END_IF
fbPanel3( hFocus:= hFocus, bLED=>LED3 );

Voraussetzungen

Entwicklungsumgebung

Zielplattform

Einzubindende SPS Bibliotheken

TwinCAT v2.10.0 und höher

PC

TcCPLink3.Lib