cp-link3

HID-Focus manuell setzen

Im Folgenden wird beschrieben, wie der HID-Focus manuell gesetzt werden kann (siehe auch Client-Konfiguration - HID-Focus).

Grundkenntnisse erforderlich
Das manuelle Setzen des HID-Focus setzt Grundkenntnisse in der Verwendung des TwinCAT System voraus.

Die folgende Abbildung zeigt schematisch, welche Komponenten des Host-PCs beim manuellen Setzen des HID-Focus beteiligt sind:

 hidfocus_01_overview

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).

Konfiguration der Clients
Das manuelle Setzen des HID-Focus ist nur für Clients möglich, die für den HID-Focus Modus "Manual" konfiguriert sind (siehe auch Client-Konfiguration - HID-Focus).
CP-Link 3 Service
Das manuelle Setzen des HID-Focus ist nur möglich, wenn der CP-Link 3 Service aktiv ist (siehe auch CP-Link 3 Service).
 
 

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:

 
AdsWrite

SetHidFocus
IndexGroup: 0x1000
IndexOffset: IP Address in network byte order or 0 to clear HID-Focus

Possible ADS return values:
ADSERR_DEVICE_INVALID_STATE - CP-Link 3 Remote Port Enumerator returned that command was not valid
ADSERR_DEVICE_NOT_FOUND - CP-Link 3 Remote Port Enumerator not installed
ADSERR_DEVICE_ERROR - CP-Link 3 Remote Port Enumerator returned an error
ADSERR_DEVICE_BUSY - HID-Focus was not set as another client has the focus
ADSERR_NOERR - HID-Focus was set to given client