HID-Focus manuell setzen
Im Folgenden wird beschrieben, wie der HID-Focus manuell gesetzt werden kann (siehe auch Client-Konfiguration - HID-Focus).
Die folgende Abbildung zeigt schematisch, welche Komponenten des Host-PCs beim manuellen Setzen des HID-Focus beteiligt sind:
Der Treiber für den "CP-Link 3 Remote Port Enumerator" hat eine Schnittstelle, über die der HID-Focus auf einen bestimmten Client gesetzt werden kann. Über diese Schnittstelle kann der HID-Focus auch wieder zurückgesetzt werden. Die Schnittstelle des Treibers ist indirekt über ADS zugänglich, d.h. über einen ADS Server, der im "CP-Link 3 Service" implementiert ist. Die Schnittstelle kann somit auch aus der TwinCAT PLC heraus verwendet werden. Die Verwendung wird durch eine PLC Library vereinfacht. Die PLC Library enthält den PLC Baustein FB_CPLink3_AcquireHidFocus mit dessen Hilfe der HID-Focus auf einen bestimmten Client gesetzt werden kann. Ein zugehöriges Beispielprogramm zeigt, wie der PLC Baustein verwendet werden kann. Beispielprogramm und Library werden bei der Installation von CP-Link 3 im Programm-Verzeichnis im Unterordner Plc abgelegt (Für TwinCAT 2: TcCPLink3.lib und CplHidFocusSelect.pro, für TwinCAT 3: Tc2_CPLink3.compiled-library und CplHidFocusSelect.tpzip).
Beispielprogramm: HID-Focus über Sondertaste steuern
Das manuelle Setzen des HID-Focus kann z.B. über eine Sondertaste des Client 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 );
CP-Link 3 ADS-Schnittstelle
Der CP-Link 3 ADS-Server ist auf AMS Port 19300 erreichbar. Zurzeit ist eine Funktion implementiert: