FB_CPLink3_AcquireHIDFocus
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 |