FB_TcTouchLock_AcquireFocus
The function block FB_TcTouchLock_AcquireFocus is used to avoid simultaneous inputs via several multi-touch Control Panels connected to an IPC, which would be disruptive. To this end, the focus is placed on one of the connected Control Panels, while inputs from all other connected Control Panels are blocked. The function block FB_TcTouchLock_AcquireFocus can be used to request and release the focus.
If the focus is requested from a multi-touch Control Panel when another multi-touch Control Panel currently has the focus, the focus must first be released by this Panel. Once the release has taken place, the focus is automatically set to the device that is waiting for it.
The multi-touch Control Panels that are accessed by the function block must first be configured using the command line application TcTouchLockService.exe. A unique identification number must be assigned to each device.
VAR_INPUT
VAR_INPUT
bEnable : BOOL;
sSetID : STRING(32);
tLEDTime : TIME := 200;
END_VAR
bEnable: TRUE = request focus, FALSE = release focus
sSetID: ID of the device
tLEDTime: The output LED flashes at the specified interval (100 ms – 1 s) while the focus is requested
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: TRUE if the client has the focus; FALSE if the client loses the focus.
bLED: This output has the following meaning, depending on the mode:
Mode | Meaning |
---|---|
Constant TRUE | The Panel has the focus |
Constant FALSE | The Panel does not have the focus |
Toggeles | The Panel is waiting for the focus |
bBusy: TRUE, as long as the function block is active.
bError: TRUE if an ADS error occurs during transmission of the command. The bBusy output is reset beforehand.
nErrId: Supplies the ADS error number or the command-specific error code (table) when the bError output is set.
Error Codes | Error description |
---|---|
0x0000 | No error |
0x0006 | Target port not found |
Sample: Control of touch focus via special key
Manual setting of the focus can be controlled via a special key on the Panel, for example. Since it must be possible to request the focus via the touchscreen when the input is locked, an input option outside the lockable touchscreen must be provided. The special key is linked to the corresponding input variable in the PLC program through the TwinCAT System Manager. One FB_TcTouchLock_AquireFocus instance is created per Panel and configured with the Panel ID. After pressing the special key on a Panel, the function block R_TRIG detects the rising edge, and the PLC program tries to set the touch focus via the corresponding FB_TcTouchLock_AquireFocus instance. The function block can also control an output (e.g. an LED), which signals whether the touch focus has been set successfully or whether an attempt is still being made to obtain the focus. Pressing the special key again resets the touch focus, allowing the touch focus to be set to another Panel.
For two Panels the PLC program looks like this:
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 );
Requirements
Development environment | Target platform | PLC libraries to be integrated (category group) |
---|---|---|
TwinCAT v3.1. >= 4022.31 | PC or CX (x86, x64) | Tc2_IoFunctions (IO) |