Started fixes for HMI

This commit is contained in:
2026-03-06 08:39:54 +01:00
parent 64f561b0c5
commit bcff5a1132
16 changed files with 899 additions and 270 deletions

View File

@@ -211,5 +211,23 @@
<Hide GUID="{3C12606F-988C-4B37-9511-7C233F8FBCE5}"/> <Hide GUID="{3C12606F-988C-4B37-9511-7C233F8FBCE5}"/>
</Hides> </Hides>
</DataType> </DataType>
<DataType>
<Name GUID="{B99ECE54-A5B8-4553-AC1E-A541DF25A5ED}">KeyenceVS</Name>
<DisplayName TxtId=""><![CDATA[NewEventClass_DisplayText]]></DisplayName>
<EventId>
<Name Id="1">Error0</Name>
<DisplayName TxtId=""><![CDATA[Error 0 with ID: {0}]]></DisplayName>
<Severity>Error</Severity>
</EventId>
<EventId>
<Name Id="2">Error1</Name>
<DisplayName TxtId=""><![CDATA[Error 1 with ID: {0}]]></DisplayName>
<Severity>Error</Severity>
</EventId>
<Hides>
<Hide GUID="{16528473-AB44-490C-A162-8BC066443C77}"/>
<Hide GUID="{2386AC4A-F41F-412A-9823-3EFB4C4E996D}"/>
</Hides>
</DataType>
</DataTypes> </DataTypes>
</TcModuleClass> </TcModuleClass>

View File

@@ -5,8 +5,7 @@
<Settings MaxCpus="2"/> <Settings MaxCpus="2"/>
<Licenses> <Licenses>
<Target> <Target>
<ManualSelect>{9FD32FC8-0CF9-4C5B-95FB-F35423496A77}</ManualSelect> <LicenseDevice DongleHardwareId="2" DongleDevice="#x03020036" DongleLevel="60" DongleSystemId="{62CA069B-335C-D22F-33C1-C939EDC0FF9A}" DongleSerialNumber="000brrhk" DongleCacheLicense="false"/>
<LicenseDevice DongleHardwareId="2" DongleDevice="#x03020036" DongleLevel="40" DongleSerialNumber="000brrhk" DongleCacheLicense="true"/>
<LicenseDevice Disabled="true" DongleHardwareId="4" DongleDevice="#x71010002" DongleLevel="40" DongleSystemId="{5097FB65-8A2A-EFB0-8273-38CF2A98119D}" DongleSerialNumber="000btjb7" DongleCacheLicense="false"/> <LicenseDevice Disabled="true" DongleHardwareId="4" DongleDevice="#x71010002" DongleLevel="40" DongleSystemId="{5097FB65-8A2A-EFB0-8273-38CF2A98119D}" DongleSerialNumber="000btjb7" DongleCacheLicense="false"/>
</Target> </Target>
</Licenses> </Licenses>
@@ -44,6 +43,8 @@
<Mappings> <Mappings>
<MappingInfo Identifier="{00000000-2001-0850-0020-500840000403}" Id="#x02030050"/> <MappingInfo Identifier="{00000000-2001-0850-0020-500840000403}" Id="#x02030050"/>
<MappingInfo Identifier="{00000000-2001-0850-0020-500851000403}" Id="#x02030040"/> <MappingInfo Identifier="{00000000-2001-0850-0020-500851000403}" Id="#x02030040"/>
<MappingInfo Identifier="{00000000-2001-0850-0020-500890000403}" Id="#x02030080"/>
<MappingInfo Identifier="{00000000-2001-0850-0020-5008B0000403}" Id="#x02030070"/>
<MappingInfo Identifier="{00000000-0010-0304-3000-040310000403}" Id="#x02030010"/> <MappingInfo Identifier="{00000000-0010-0304-3000-040310000403}" Id="#x02030010"/>
<MappingInfo Identifier="{00000000-0020-0304-3000-040322000403}" Id="#x02030030"/> <MappingInfo Identifier="{00000000-0020-0304-3000-040322000403}" Id="#x02030030"/>
<MappingInfo Identifier="{05000010-2001-0850-3000-040300205008}" Id="#x02030060" Watchdog="10000000040000000400000004000000"/> <MappingInfo Identifier="{05000010-2001-0850-3000-040300205008}" Id="#x02030060" Watchdog="10000000040000000400000004000000"/>

View File

@@ -17,6 +17,7 @@ VAR
_fbCoolplate : FB_Coolplate; _fbCoolplate : FB_Coolplate;
_fbHVTesterHot : FB_HVTester; _fbHVTesterHot : FB_HVTester;
_fbHVTesterCold : FB_HVTester; _fbHVTesterCold : FB_HVTester;
//_fbInput : FB_Input;
//_fbNOK : FB_NOK; //_fbNOK : FB_NOK;
//_fbTrayFeederOutput : FB_TrayFeeder(sIPAddr := '192.168.1.11', udiPort := 5000); //_fbTrayFeederOutput : FB_TrayFeeder(sIPAddr := '192.168.1.11', udiPort := 5000);
@@ -26,7 +27,6 @@ VAR
// ======================= // =======================
_xReleaseAlarms : BOOL; _xReleaseAlarms : BOOL;
_xConfirmAlarms : BOOL;
_stRobotCmd : ST_PMLc; _stRobotCmd : ST_PMLc;
_stRobotStatus : ST_PMLs; _stRobotStatus : ST_PMLs;
_stRobotAdmin : ST_PMLa; _stRobotAdmin : ST_PMLa;
@@ -35,14 +35,6 @@ VAR
stCamResult AT %I* : ST_TrayFeederCamPosData; stCamResult AT %I* : ST_TrayFeederCamPosData;
_rtStopRobotFromSafety : R_TRIG; _rtStopRobotFromSafety : R_TRIG;
// commands
_xClear : BOOL;
_xReset : BOOL;
_xStart : BOOL;
_xHold : BOOL;
_xUnhold : BOOL;
_xStop : BOOL;
_xStartCycle : BOOL; _xStartCycle : BOOL;
_xStartTrigger : BOOL; _xStartTrigger : BOOL;
@@ -56,36 +48,6 @@ END_VAR
<ST><![CDATA[// Data from safety <ST><![CDATA[// Data from safety
_xReleaseAlarms := PRG_Safety.xEStopOk; _xReleaseAlarms := PRG_Safety.xEStopOk;
IF _xClear THEN
_xClear := FALSE;
_fbRobot.M_CmdClear();
END_IF
IF _xReset THEN
_xReset := FALSE;
_fbRobot.M_CmdReset();
END_IF
IF _xStart THEN
_xStart := FALSE;
_fbRobot.M_CmdStart();
END_IF
IF _xHold THEN
_xHold := FALSE;
_fbRobot.M_CmdHold();
END_IF
IF _xUnhold THEN
_xUnhold := FALSE;
_fbRobot.M_CmdUnhold();
END_IF
IF _xStop THEN
_xStop := FALSE;
_fbRobot.M_CmdStop();
END_IF
_rtStopRobotFromSafety(CLK := PRG_Safety.xStopRobot); _rtStopRobotFromSafety(CLK := PRG_Safety.xStopRobot);
IF _rtStopRobotFromSafety.Q THEN IF _rtStopRobotFromSafety.Q THEN
_stRobotCmd.eCntrlCmd := E_PackMLCmd.STOP; _stRobotCmd.eCntrlCmd := E_PackMLCmd.STOP;
@@ -100,7 +62,7 @@ _fbRobot(
stJobParams := _stRobotJobParams, stJobParams := _stRobotJobParams,
stUnitFeedbacks := _stUnitFeedbacks, stUnitFeedbacks := _stUnitFeedbacks,
xReleaseAlarms:= _xReleaseAlarms, xReleaseAlarms:= _xReleaseAlarms,
xConfirmAlarms:= GVL_SCADA.xErrAck, xConfirmAlarms:= GVL_SCADA.stMachine.stConfirmAlarmsBtn.xRequest,
stStatus => _stRobotStatus, stStatus => _stRobotStatus,
stAdmin => _stRobotAdmin, stAdmin => _stRobotAdmin,
stHMIInterface := GVL_SCADA.stMachine.stKukaRobot); stHMIInterface := GVL_SCADA.stMachine.stKukaRobot);
@@ -117,42 +79,40 @@ _fbEtcher1(
xOpenDoor:= GVL_SCADA.xOpenAllChambers, xOpenDoor:= GVL_SCADA.xOpenAllChambers,
xOpenChuckClamp := GVL_SCADA.xOpenChuckClampEtcher1, xOpenChuckClamp := GVL_SCADA.xOpenChuckClampEtcher1,
xReleaseAlarms := _xReleaseAlarms, xReleaseAlarms := _xReleaseAlarms,
xConfirmAlarms := GVL_SCADA.xErrAck, xConfirmAlarms := GVL_SCADA.stMachine.stConfirmAlarmsBtn.xRequest,
stHMIInterface := GVL_SCADA.stMachine.stEtcher1); stHMIInterface := GVL_SCADA.stMachine.stEtcher1);
_fbEtcher2( _fbEtcher2(
xOpenDoor:= GVL_SCADA.xOpenAllChambers, xOpenDoor:= GVL_SCADA.xOpenAllChambers,
xOpenChuckClamp := GVL_SCADA.xOpenChuckClampEtcher2, xOpenChuckClamp := GVL_SCADA.xOpenChuckClampEtcher2,
xReleaseAlarms := _xReleaseAlarms, xReleaseAlarms := _xReleaseAlarms,
xConfirmAlarms := GVL_SCADA.xErrAck, xConfirmAlarms := GVL_SCADA.stMachine.stConfirmAlarmsBtn.xRequest,
stHMIInterface := GVL_SCADA.stMachine.stEtcher2); stHMIInterface := GVL_SCADA.stMachine.stEtcher2);
_fbTrayFeederInput( _fbTrayFeederInput(
stCommand:= , stCommand:= ,
xReleaseAlarms := _xReleaseAlarms, xReleaseAlarms := _xReleaseAlarms,
xConfirmAlarms := GVL_SCADA.xErrAck, xConfirmAlarms := GVL_SCADA.stMachine.stConfirmAlarmsBtn.xRequest,
stStatus=> GVL_SCADA.stTrayFeederInputState,
stAdmin=> GVL_SCADA.stTRayFeederInputAdmin,
stHMIInterface := GVL_SCADA.stMachine.stTrayFeederIn); stHMIInterface := GVL_SCADA.stMachine.stTrayFeederIn);
_fbTrayFeederInput( // _fbTrayFeederOut(
stCommand:= , // stCommand:= ,
xReleaseAlarms := _xReleaseAlarms, // xReleaseAlarms := _xReleaseAlarms,
xConfirmAlarms := GVL_SCADA.xErrAck, // xConfirmAlarms := GVL_SCADA.stMachine.stConfirmAlarmsBtn.xRequest,
stStatus=> GVL_SCADA.stTrayFeederInputState, // stStatus=> GVL_SCADA.stTrayFeederInputState,
stAdmin=> GVL_SCADA.stTRayFeederInputAdmin, // stAdmin=> GVL_SCADA.stTRayFeederInputAdmin,
stHMIInterface := GVL_SCADA.stMachine.stTrayFeederOut); // stHMIInterface := GVL_SCADA.stMachine.stTrayFeederOut);
_fbHotplate(stHMIInterface := GVL_SCADA.stMachine.stHotplate); _fbHotplate(stHMIInterface := GVL_SCADA.stMachine.stHotplate);
_fbCoolplate(stHMIInterface := GVL_SCADA.stMachine.stCoolplate); _fbCoolplate(stHMIInterface := GVL_SCADA.stMachine.stCoolplate);
_fbAligner(stCommand:= , stStatus=> , stAdmin=> , xConfirmAlarms:= GVL_SCADA.xErrAck, stHMIInterface := GVL_SCADA.stMachine.stAligner); _fbAligner(stCommand:= , stStatus=> , stAdmin=> , xConfirmAlarms:= GVL_SCADA.stMachine.stConfirmAlarmsBtn.xRequest, stHMIInterface := GVL_SCADA.stMachine.stAligner);
// Call safety program // Call safety program
PRG_Safety( PRG_Safety(
xConfirmAlarms := GVL_SCADA.xErrAck, xConfirmAlarms := GVL_SCADA.stMachine.stConfirmAlarmsBtn.xRequest,
xRobotStopped := (_stRobotStatus.eStateCurrent <> E_PackMLState.EXECUTE)); xRobotStopped := (_stRobotStatus.eStateCurrent <> E_PackMLState.EXECUTE));
// Handle robot cmds // Handle robot cmds
@@ -249,11 +209,7 @@ END_IF
xTriggerCamera := _tofTriggerTime.Q; xTriggerCamera := _tofTriggerTime.Q;
// Reset alarm reset request // Reset alarm reset request
GVL_SCADA.xErrAck := FALSE; GVL_SCADA.stMachine.stConfirmAlarmsBtn.xRequest := FALSE;]]></ST>
IF _xConfirmAlarms THEN
_xConfirmAlarms := FALSE;
END_IF]]></ST>
</Implementation> </Implementation>
<Method Name="M_HandleRobotCmd" Id="{14934aaa-b667-4ddb-915d-1d84e8eb799d}"> <Method Name="M_HandleRobotCmd" Id="{14934aaa-b667-4ddb-915d-1d84e8eb799d}">
<Declaration><![CDATA[METHOD PRIVATE M_HandleRobotCmd <Declaration><![CDATA[METHOD PRIVATE M_HandleRobotCmd

View File

@@ -79,6 +79,9 @@ VAR
_fbRobot : FB_Mecademics; _fbRobot : FB_Mecademics;
xDisableVacuum AT %Q* : BOOL; xDisableVacuum AT %Q* : BOOL;
// Internals
_xOpenChuckClamp : BOOL;
END_VAR END_VAR
]]></Declaration> ]]></Declaration>
<Implementation> <Implementation>
@@ -100,8 +103,11 @@ ELSE
_tpEjectChuck(IN := FALSE); _tpEjectChuck(IN := FALSE);
END_IF END_IF
// Todo bessere implementierung finden
_xOpenChuckClamp := xOpenChuckClamp OR stHMIInterface.stChuckUnlockCmd.xRequest;
_fbUnlockLeft( _fbUnlockLeft(
xAutomaticOpen:= xOpenChuckClamp, xAutomaticOpen:= _xOpenChuckClamp,
xReleaseErrors:= xReleaseAlarms, xReleaseErrors:= xReleaseAlarms,
stValveConfig:= _stValveUnlockLeftCfg, stValveConfig:= _stValveUnlockLeftCfg,
xReleaseManualMode:= xReleaseManualMode, xReleaseManualMode:= xReleaseManualMode,
@@ -109,7 +115,7 @@ _fbUnlockLeft(
stHMIInterface:= stHMIInterface.stChuckUnlockLeft); stHMIInterface:= stHMIInterface.stChuckUnlockLeft);
_fbUnlockRight( _fbUnlockRight(
xAutomaticOpen:= xOpenChuckClamp, xAutomaticOpen:= _xOpenChuckClamp,
xReleaseErrors:= xReleaseAlarms, xReleaseErrors:= xReleaseAlarms,
stValveConfig:= _stValveUnlockRightCfg, stValveConfig:= _stValveUnlockRightCfg,
xReleaseManualMode:= xReleaseManualMode, xReleaseManualMode:= xReleaseManualMode,

View File

@@ -26,8 +26,7 @@ VAR
_xDone : BOOL; _xDone : BOOL;
_xError : BOOL; _xError : BOOL;
_iDS : INT; _iDS : INT;
END_VAR END_VAR]]></Declaration>
]]></Declaration>
<Implementation> <Implementation>
<ST><![CDATA[SUPER^(stPackMLHMIInterface := stPackMLHMIInterface); <ST><![CDATA[SUPER^(stPackMLHMIInterface := stPackMLHMIInterface);
@@ -257,6 +256,7 @@ END_VAR]]></Declaration>
M_CmdAbort(); M_CmdAbort();
END_IF END_IF
// Set wrf // Set wrf
32: 32:
M_ExecuteCmd(E_Meca_Cmds.SET_WRF, 163.5, -34.79, 465, -180, 0, 180, xDone => xExecDone, xError => xExecError); M_ExecuteCmd(E_Meca_Cmds.SET_WRF, 163.5, -34.79, 465, -180, 0, 180, xDone => xExecDone, xError => xExecError);
@@ -271,7 +271,8 @@ END_VAR]]></Declaration>
// Set trf // Set trf
33: 33:
M_ExecuteCmd(E_Meca_Cmds.SET_TRF, 0, 0, 91, 0, 180, 90, xDone => xExecDone, xError => xExecError); // SetTrf(32.38 , 27.52, 91, 0, 180, -90)
M_ExecuteCmd(E_Meca_Cmds.SET_TRF, 32.38, 27.52, 91, 0, 180, -90, xDone => xExecDone, xError => xExecError);
IF xExecDone THEN IF xExecDone THEN
_iSSM := 34; _iSSM := 34;

View File

@@ -4,15 +4,31 @@
<Declaration><![CDATA[FUNCTION_BLOCK FB_Input EXTENDS FB_PackMLGeneric <Declaration><![CDATA[FUNCTION_BLOCK FB_Input EXTENDS FB_PackMLGeneric
VAR_INPUT VAR_INPUT
stRecipe : ST_Input_Recipe; stRecipe : ST_Input_Recipe;
xReleaseAlarms : BOOL;
xConfirmAlarms : BOOL;
END_VAR END_VAR
VAR_OUTPUT VAR_OUTPUT
END_VAR END_VAR
VAR_IN_OUT
stHMIInterface : ST_HMI_Input;
END_VAR
VAR VAR
_fbTrayFeeder : FB_TrayFeeder(sIPAddr := '192.168.1.10', udiPort := 5000); _fbTrayFeeder : FB_TrayFeeder(sIPAddr := '192.168.1.10', udiPort := 5000);
_fbCamera : FB_KeyenceVS;
END_VAR END_VAR
]]></Declaration> ]]></Declaration>
<Implementation> <Implementation>
<ST><![CDATA[]]></ST> <ST><![CDATA[// Call components
// ===============
// _fbTrayFeeder(
// stHMIInterface:= stHMIInterface.stTrayFeeder,
// xReleaseAlarms:= xReleaseAlarms,
// xConfirmAlarms:= xConfirmAlarms);
//
// _fbCamera(
// xReleaseAlarms:= xReleaseAlarms,
// xConfirmAlarms:= xConfirmAlarms);]]></ST>
</Implementation> </Implementation>
<Method Name="FB_init" Id="{bbceb3b3-f8a1-472a-b29a-eebb04390aa6}"> <Method Name="FB_init" Id="{bbceb3b3-f8a1-472a-b29a-eebb04390aa6}">
<Declaration><![CDATA[//FB_Init ist immer implizit verfügbar und wird primär für die Initialisierung verwendet. <Declaration><![CDATA[//FB_Init ist immer implizit verfügbar und wird primär für die Initialisierung verwendet.

View File

@@ -0,0 +1,388 @@
<?xml version="1.0" encoding="utf-8"?>
<TcPlcObject Version="1.1.0.1">
<POU Name="FB_KeyenceVS" Id="{2ea89630-4476-43f8-991b-76955c0d8baf}" SpecialFunc="None">
<Declaration><![CDATA[FUNCTION_BLOCK FB_KeyenceVS
VAR_INPUT
xReleaseAlarms : BOOL;
xConfirmAlarms : BOOL;
END_VAR
VAR_OUTPUT
xBusy : BOOL;
xDone : BOOL;
xError : BOOL;
END_VAR
VAR
// ======
// Inputs
// ======
i_xTriggerRdy AT %I* : BOOL;
i_xTriggerAck AT %I* : BOOL;
i_xResultRdy AT %I* : BOOL;
i_xRunStatus AT %I*: BOOL;
i_xCmdComplete AT %I* : BOOL;
i_xCmdError AT %I* : BOOL;
i_xCmdRdy AT %I* : BOOL;
i_xProgLoadComplete AT %I* : BOOL;
i_xError0State AT %I* : BOOL;
i_xError1State AT %I* : BOOL;
i_udiError0Code AT %I* : UDINT;
i_udiError1Code AT %I* : UDINT;
i_udiPrgNr AT %I* : UDINT;
i_udiTotalCnt AT %I* : UDINT;
i_abyResult128 AT %I* : ARRAY[0..127] OF BYTE;
// =======
// Outputs
// =======
o_xTrigger AT %Q* : BOOL;
o_xResultHandshakeEnable AT %Q* : BOOL;
o_xResultAck AT %Q* : BOOL;
o_xGotoRun AT %Q* : BOOL;
o_xGotoSetting AT %Q* : BOOL;
o_xError0Clear AT %Q* : BOOL;
o_xError1Clear AT %Q* : BOOL;
o_xCmdRequest AT %Q* : BOOL;
o_xPrgLoadExec AT %Q* : BOOL;
o_udiPrgNr AT %Q* : UDINT;
// ======
// Alarms
// ======
_fbError0Alarm : FB_AlarmMessage(stEventEntry := TC_EVENTS.KeyenceVS.Error0, xWithConfirmation := TRUE);
_rtError0 : R_TRIG;
_fbError1Alarm : FB_AlarmMessage(stEventEntry := TC_EVENTS.KeyenceVS.Error1, xWithConfirmation := TRUE);
_rtError1 : R_TRIG;
// ==============
// Ouputs buffers
// ==============
_xBusy : BOOL;
_xDone : BOOL;
_xError : BOOL;
// =============
// State machine
// =============
// State of state machine
_uiState : UINT;
// Command to start loading a program with defined number
_xLoadProgNr : BOOL;
// Program number to load
_udiProgNrToLoad : UDINT;
// Command to change camera into run mode
_xSwitchToRunMode : BOOL;
// Command to change to config mode
_xSwitchToConfigMode : BOOL;
// Trigger a picture
_xTrigger : BOOL;
END_VAR
]]></Declaration>
<Implementation>
<ST><![CDATA[// ==============
// Alarm handling
// ==============
// If error 0 occurs, add error code to alarm message
_rtError0(CLK := i_xError0State);
IF _rtError0.Q THEN
_fbError0Alarm.Arguments.Clear().AddUDInt(i_udiError0Code);
END_IF
_fbError0Alarm(
xActive:= i_xError0State,
xRelease:= xReleaseAlarms,
xAcknowledge:= xConfirmAlarms);
IF _fbError0Alarm.Active THEN
_xError := TRUE;
END_IF
// If error 1 occurs, add error code to alarm message
_rtError1(CLK := i_xError1State);
IF _rtError1.Q THEN
_fbError1Alarm.Arguments.Clear().AddUDInt(i_udiError1Code);
END_IF
_fbError1Alarm(
xActive:= i_xError1State,
xRelease:= xReleaseAlarms,
xAcknowledge:= xConfirmAlarms);
IF _fbError1Alarm.Active THEN
_xError := TRUE;
END_IF
// =============
// State machine
// =============
CASE _uiState OF
// Idle
0:
// Load program number
IF _xLoadProgNr THEN
_xLoadProgNr := FALSE;
_uiState := 10;
END_IF
IF _xSwitchToRunMode THEN
_xSwitchToRunMode := FALSE;
_uiState := 20;
END_IF
IF _xSwitchToConfigMode THEN
_xSwitchToConfigMode := FALSE;
_uiState := 30;
END_IF
IF _xTrigger THEN
_xTrigger := FALSE;
_uiState := 40;
END_IF
// Load program number
10:
o_udiPrgNr := _udiProgNrToLoad;
o_xPrgLoadExec := TRUE;
IF i_xProgLoadComplete THEN
o_xPrgLoadExec := FALSE;
_xDone := TRUE;
_xBusy := FALSE;
_uiState := 0;
END_IF
IF _xError THEN
_uiState := 900;
END_IF
// Switch to run mode
20:
o_xGotoRun := TRUE;
o_xGotoSetting := FALSE;
IF i_xRunStatus THEN
o_xGotoRun := FALSE;
_xDone := TRUE;
_xBusy := FALSE;
_uiState := 0;
END_IF
IF _xError THEN
_uiState := 900;
END_IF
// Switch to config mode
30:
o_xGotoSetting := TRUE;
o_xGotoRun := FALSE;
IF (NOT i_xRunStatus) THEN
o_xGotoRun := FALSE;
_xDone := TRUE;
_xBusy := FALSE;
_uiState := 0;
END_IF
IF _xError THEN
_uiState := 900;
END_IF
// Trigger
40:
o_xTrigger := TRUE;
IF i_xTriggerAck THEN
o_xTrigger := FALSE;
_uiState := 41;
END_IF
IF _xError THEN
_uiState := 900;
END_IF
// Wait for result
41:
IF i_xResultRdy THEN
o_xResultAck := TRUE;
_uiState := 42;
END_IF
IF _xError THEN
_uiState := 900;
END_IF
// Wait for result ack done
42:
IF (NOT i_xResultRdy) THEN
o_xResultAck := FALSE;
_uiState := 0;
END_IF
IF _xError THEN
_uiState := 900;
END_IF
// Error state
900:
_xError := TRUE;
_xDone := FALSE;
_xBusy := FALSE;
_uiState := 901;
// Wait for error ack
901:
IF xConfirmAlarms THEN
_xError := FALSE;
_uiState := 0;
END_IF
END_CASE
// =============================
// Copy output buffers to output
// =============================
xBusy := _xBusy;
xDone := _xDone;
xError := _xError;
]]></ST>
</Implementation>
<Method Name="M_GetResult128" Id="{80736d9c-5f6b-4185-a62e-60e64078b87d}">
<Declaration><![CDATA[// Get result data from 128 Byte input
METHOD M_GetResult128 : BOOL
VAR_INPUT
// Start index in result byte array
uiIdx : UINT;
// Target buffer
pTarget : PVOID;
// Target buffer size
udiSize : UDINT := 0;
// Result of copy
udiResult : UDINT;
END_VAR
]]></Declaration>
<Implementation>
<ST><![CDATA[// Check index size
IF (uiIdx < 0)
OR (uiIdx > 127) // Index to big
OR ((uiIdx + udiSize) > 128) // Start index and size will read over the input array bounds
OR udiSize = 0 // No target size given
OR pTarget = 0 // No valid target pointer
THEN
M_GetResult128 := FALSE;
RETURN;
END_IF
// Copy data
udiResult := MEMCPY(destAddr := pTarget, srcAddr := ADR(i_abyResult128[uiIdx]), n := udiSize);
// Check if copy was successful
IF udiResult <> udiSize THEN
M_GetResult128 := FALSE;
ELSE
M_GetResult128 := TRUE;
END_IF]]></ST>
</Implementation>
</Method>
<Method Name="M_SetProgramNr" Id="{61381180-0979-4559-a38e-7a94f647a142}">
<Declaration><![CDATA[METHOD M_SetProgramNr : BOOL
VAR_INPUT
udiPrgNr : UDINT;
END_VAR
]]></Declaration>
<Implementation>
<ST><![CDATA[IF _xBusy OR _xError THEN
M_SetProgramNr := FALSE;
RETURN;
END_IF
// Set Prg nr
_udiProgNrToLoad := udiPrgNr;
// Start command
_xLoadProgNr := TRUE;
// Set busy
_xBusy := TRUE;
_xDone := FALSE;
// Report command result
M_SetProgramNr := TRUE;]]></ST>
</Implementation>
</Method>
<Method Name="M_SwitchToConfig" Id="{97bb226a-9857-448a-8000-4f7ffa070011}">
<Declaration><![CDATA[METHOD M_SwitchToConfig : BOOL
VAR_INPUT
END_VAR
]]></Declaration>
<Implementation>
<ST><![CDATA[IF _xBusy OR _xError THEN
M_SwitchToConfig := FALSE;
RETURN;
END_IF
// Start command
_xSwitchToConfigMode := TRUE;
// Set busy
_xBusy := TRUE;
_xDone := FALSE;
// Report command result
M_SwitchToConfig := TRUE;]]></ST>
</Implementation>
</Method>
<Method Name="M_SwitchToRun" Id="{949f243b-ddfd-4924-8c44-0bc4957e34cf}">
<Declaration><![CDATA[METHOD M_SwitchToRun : BOOL
VAR_INPUT
END_VAR
]]></Declaration>
<Implementation>
<ST><![CDATA[IF _xBusy OR _xError THEN
M_SwitchToRun := FALSE;
RETURN;
END_IF
// Start command
_xSwitchToRunMode := TRUE;
// Set busy
_xBusy := TRUE;
_xDone := FALSE;
// Report command result
M_SwitchToRun := TRUE;]]></ST>
</Implementation>
</Method>
<Method Name="M_Trigger" Id="{d463f53a-1fcf-4a61-a95a-507b0a863218}">
<Declaration><![CDATA[METHOD M_Trigger : BOOL
VAR_INPUT
END_VAR
]]></Declaration>
<Implementation>
<ST><![CDATA[IF _xBusy OR _xError OR (NOT i_xTriggerRdy) THEN
M_Trigger := FALSE;
RETURN;
END_IF
// Start command
_xTrigger := TRUE;
// Set busy
_xBusy := TRUE;
_xDone := FALSE;
// Report command result
M_Trigger := TRUE;]]></ST>
</Implementation>
</Method>
</POU>
</TcPlcObject>

View File

@@ -0,0 +1,11 @@
<?xml version="1.0" encoding="utf-8"?>
<TcPlcObject Version="1.1.0.1">
<DUT Name="ST_HMI_Input" Id="{a4730084-6aa8-4ec8-a056-5ec2c2cb728b}">
<Declaration><![CDATA[TYPE ST_HMI_Input :
STRUCT
stTrayFeeder : ST_HMI_PackML;
END_STRUCT
END_TYPE
]]></Declaration>
</DUT>
</TcPlcObject>

View File

@@ -356,7 +356,7 @@ END_IF
<Declaration><![CDATA[METHOD PROTECTED M_Idle <Declaration><![CDATA[METHOD PROTECTED M_Idle
]]></Declaration> ]]></Declaration>
<Implementation> <Implementation>
<ST><![CDATA[_stJobParams := stJobParams;]]></ST> <ST><![CDATA[_stJobParams := stHMIInterface.stJobParams;]]></ST>
</Implementation> </Implementation>
</Method> </Method>
<Method Name="M_Resetting" Id="{dfe4d36a-80aa-4364-bfd8-6ddd41636d59}" FolderPath="StateMachine\"> <Method Name="M_Resetting" Id="{dfe4d36a-80aa-4364-bfd8-6ddd41636d59}" FolderPath="StateMachine\">

View File

@@ -139,7 +139,7 @@ END_VAR]]></Declaration>
IF _tonReconnect.Q THEN IF _tonReconnect.Q THEN
_tonReconnect(IN := FALSE, PT := T#5S); _tonReconnect(IN := FALSE, PT := T#5S);
_xConnect := TRUE; _xConnect := TRUE;
_iSSM := 35; _iSSM := 40;
END_IF END_IF
35: 35:

View File

@@ -11,8 +11,6 @@ VAR_GLOBAL
// DEBUG - NOT FOR HMI! // DEBUG - NOT FOR HMI!
// ==================== // ====================
xErrAck : BOOL;
xOpenAllChambers : BOOL; xOpenAllChambers : BOOL;
xOpenChuckClampEtcher1 : BOOL; xOpenChuckClampEtcher1 : BOOL;

View File

@@ -146,6 +146,12 @@
<Compile Include="01_Stationen\Input\FB_Input.TcPOU"> <Compile Include="01_Stationen\Input\FB_Input.TcPOU">
<SubType>Code</SubType> <SubType>Code</SubType>
</Compile> </Compile>
<Compile Include="01_Stationen\Input\FB_KeyenceVS.TcPOU">
<SubType>Code</SubType>
</Compile>
<Compile Include="01_Stationen\Input\ST_HMI_Input.TcDUT">
<SubType>Code</SubType>
</Compile>
<Compile Include="01_Stationen\Input\ST_Input_Recipe.TcDUT"> <Compile Include="01_Stationen\Input\ST_Input_Recipe.TcDUT">
<SubType>Code</SubType> <SubType>Code</SubType>
</Compile> </Compile>
@@ -480,8 +486,8 @@
<ProjectExtensions> <ProjectExtensions>
<PlcProjectOptions> <PlcProjectOptions>
<XmlArchive> <XmlArchive>
<Data> <Data>
<o xml:space="preserve" t="OptionKey"> <o xml:space="preserve" t="OptionKey">
<v n="Name">"&lt;ProjectRoot&gt;"</v> <v n="Name">"&lt;ProjectRoot&gt;"</v>
<d n="SubKeys" t="Hashtable" ckt="String" cvt="OptionKey"> <d n="SubKeys" t="Hashtable" ckt="String" cvt="OptionKey">
<v>{192FAD59-8248-4824-A8DE-9177C94C195A}</v> <v>{192FAD59-8248-4824-A8DE-9177C94C195A}</v>
@@ -626,14 +632,14 @@
</d> </d>
<d n="Values" t="Hashtable" /> <d n="Values" t="Hashtable" />
</o> </o>
</Data> </Data>
<TypeList> <TypeList>
<Type n="Boolean">System.Boolean</Type> <Type n="Boolean">System.Boolean</Type>
<Type n="Hashtable">System.Collections.Hashtable</Type> <Type n="Hashtable">System.Collections.Hashtable</Type>
<Type n="OptionKey">{54dd0eac-a6d8-46f2-8c27-2f43c7e49861}</Type> <Type n="OptionKey">{54dd0eac-a6d8-46f2-8c27-2f43c7e49861}</Type>
<Type n="String">System.String</Type> <Type n="String">System.String</Type>
</TypeList> </TypeList>
</XmlArchive> </XmlArchive>
</PlcProjectOptions> </PlcProjectOptions>
</ProjectExtensions> </ProjectExtensions>
</Project> </Project>

File diff suppressed because one or more lines are too long

View File

@@ -68,7 +68,7 @@
<ImageDatas> <ImageDatas>
<ImageData Id="1000">424de6000000000000007600000028000000100000000e000000010004000000000070000000c21e0000c21e000000000000000000006865630089786200c18c5600c89a64009f918300a9a7a600d7b69400e2d1bf00e2e2e200f4e9db00f7efe700f3efef00f7f7ef00f7f7f700fff7f700ffffff00ffffffffffffffffffffffffffffffff63fffff66fffff44327fffb639fff704723fff4626fff407f329f80522af800df726f505626f505ffc22a00ba22a00bfff62604ff62605ffff92358ff92358fffff337ffff337ffffff969ffff769fffffffffffffffffffffffffffffffffff</ImageData> <ImageData Id="1000">424de6000000000000007600000028000000100000000e000000010004000000000070000000c21e0000c21e000000000000000000006865630089786200c18c5600c89a64009f918300a9a7a600d7b69400e2d1bf00e2e2e200f4e9db00f7efe700f3efef00f7f7ef00f7f7f700fff7f700ffffff00ffffffffffffffffffffffffffffffff63fffff66fffff44327fffb639fff704723fff4626fff407f329f80522af800df726f505626f505ffc22a00ba22a00bfff62604ff62605ffff92358ff92358fffff337ffff337ffffff969ffff769fffffffffffffffffffffffffffffffffff</ImageData>
</ImageDatas> </ImageDatas>
<Device Id="5" Disabled="true" DevType="111" DevFlags="#x0003" AmsPort="28677" AmsNetId="5.127.104.206.6.1" RemoteName="Device 5 (EtherCAT)" InfoImageId="10"> <Device Id="5" DevType="111" DevFlags="#x0003" AmsPort="28677" AmsNetId="5.127.104.206.6.1" RemoteName="Device 5 (EtherCAT)" InfoImageId="10">
<Name>__FILENAME__</Name> <Name>__FILENAME__</Name>
<AddressInfo> <AddressInfo>
<Pnp> <Pnp>

View File

@@ -49,6 +49,41 @@
</OwnerB> </OwnerB>
</OwnerA> </OwnerA>
</UnrestoredVarLinks> </UnrestoredVarLinks>
<UnrestoredVarLinks ImportTime="2026-03-05T17:11:16">
<OwnerA Name="InputDst" Prefix="TIPC^PLC^PLC Instance" Type="1">
<OwnerB Name="TIID^Device 2 (Profinet Controller)^vs-0001">
<Link VarA="PRG_Main._fbInput._fbCamera.i_abyResult128" TypeA="ARRAY [0..127] OF BYTE" InOutA="0" GuidA="{53AB2BCA-C5AB-B7CE-D17C-430953A42679}" VarB="API^Term 4 (Result Data 128Byte)^Subterm 6 (Result Data 128Byte)^Inputs^Result Data" RestoreInfo="ANotFound"/>
<Link VarA="PRG_Main._fbInput._fbCamera.i_udiError0Code" TypeA="UDINT" InOutA="0" GuidA="{18071995-0000-0000-0000-000000000008}" VarB="API^Term 3 (Assignable Status)^Subterm 5 (Assignable Status)^Inputs^Error0 Code" RestoreInfo="ANotFound"/>
<Link VarA="PRG_Main._fbInput._fbCamera.i_udiError1Code" TypeA="UDINT" InOutA="0" GuidA="{18071995-0000-0000-0000-000000000008}" VarB="API^Term 3 (Assignable Status)^Subterm 5 (Assignable Status)^Inputs^Error1 Code" RestoreInfo="ANotFound"/>
<Link VarA="PRG_Main._fbInput._fbCamera.i_udiPrgNr" TypeA="UDINT" InOutA="0" GuidA="{18071995-0000-0000-0000-000000000008}" VarB="API^Term 3 (Assignable Status)^Subterm 5 (Assignable Status)^Inputs^Program Number" RestoreInfo="ANotFound"/>
<Link VarA="PRG_Main._fbInput._fbCamera.i_udiTotalCnt" TypeA="UDINT" InOutA="0" GuidA="{18071995-0000-0000-0000-000000000008}" VarB="API^Term 3 (Assignable Status)^Subterm 5 (Assignable Status)^Inputs^Total Count (24/28)" RestoreInfo="ANotFound"/>
<Link VarA="PRG_Main._fbInput._fbCamera.i_xCmdComplete" TypeA="BOOL" InOutA="0" GuidA="{18071995-0000-0000-0000-000000000030}" VarB="API^Term 2 (Status)^Subterm 4 (Status)^Inputs^Status Register[3]^Command_complete" Size="1" RestoreInfo="ANotFound"/>
<Link VarA="PRG_Main._fbInput._fbCamera.i_xCmdError" TypeA="BOOL" InOutA="0" GuidA="{18071995-0000-0000-0000-000000000030}" VarB="API^Term 2 (Status)^Subterm 4 (Status)^Inputs^Status Register[3]^Command_error" Size="1" RestoreInfo="ANotFound"/>
<Link VarA="PRG_Main._fbInput._fbCamera.i_xCmdRdy" TypeA="BOOL" InOutA="0" GuidA="{18071995-0000-0000-0000-000000000030}" VarB="API^Term 2 (Status)^Subterm 4 (Status)^Inputs^Status Register[3]^Command_ready" Size="1" RestoreInfo="ANotFound"/>
<Link VarA="PRG_Main._fbInput._fbCamera.i_xError0State" TypeA="BOOL" InOutA="0" GuidA="{18071995-0000-0000-0000-000000000030}" VarB="API^Term 2 (Status)^Subterm 4 (Status)^Inputs^Status Register[2]^Error0_Status" Size="1" RestoreInfo="ANotFound"/>
<Link VarA="PRG_Main._fbInput._fbCamera.i_xError1State" TypeA="BOOL" InOutA="0" GuidA="{18071995-0000-0000-0000-000000000030}" VarB="API^Term 2 (Status)^Subterm 4 (Status)^Inputs^Status Register[2]^Error1_Status" Size="1" RestoreInfo="ANotFound"/>
<Link VarA="PRG_Main._fbInput._fbCamera.i_xProgLoadComplete" TypeA="BOOL" InOutA="0" GuidA="{18071995-0000-0000-0000-000000000030}" VarB="API^Term 2 (Status)^Subterm 4 (Status)^Inputs^Status Register[3]^Program_Load_Complete" Size="1" RestoreInfo="ANotFound"/>
<Link VarA="PRG_Main._fbInput._fbCamera.i_xResultRdy" TypeA="BOOL" InOutA="0" GuidA="{18071995-0000-0000-0000-000000000030}" VarB="API^Term 2 (Status)^Subterm 4 (Status)^Inputs^Status Register[2]^Result_Ready" Size="1" RestoreInfo="ANotFound"/>
<Link VarA="PRG_Main._fbInput._fbCamera.i_xRunStatus" TypeA="BOOL" InOutA="0" GuidA="{18071995-0000-0000-0000-000000000030}" VarB="API^Term 2 (Status)^Subterm 4 (Status)^Inputs^Status Register[2]^Run_Status" Size="1" RestoreInfo="ANotFound"/>
<Link VarA="PRG_Main._fbInput._fbCamera.i_xTriggerAck" TypeA="BOOL" InOutA="0" GuidA="{18071995-0000-0000-0000-000000000030}" VarB="API^Term 2 (Status)^Subterm 4 (Status)^Inputs^Status Register[1]^Trigger_Ack" Size="1" RestoreInfo="ANotFound"/>
<Link VarA="PRG_Main._fbInput._fbCamera.i_xTriggerRdy" TypeA="BOOL" InOutA="0" GuidA="{18071995-0000-0000-0000-000000000030}" VarB="API^Term 2 (Status)^Subterm 4 (Status)^Inputs^Status Register[0]^Trigger_Ready" Size="1" RestoreInfo="ANotFound"/>
</OwnerB>
</OwnerA>
<OwnerA Name="OutputSrc" Prefix="TIPC^PLC^PLC Instance" Type="2">
<OwnerB Name="TIID^Device 2 (Profinet Controller)^vs-0001">
<Link VarA="PRG_Main._fbInput._fbCamera.o_udiPrgNr" TypeA="UDINT" InOutA="1" GuidA="{18071995-0000-0000-0000-000000000008}" VarB="API^Term 11 (Program Number)^Subterm 13 (Program Number)^Outputs^Program Number" RestoreInfo="ANotFound"/>
<Link VarA="PRG_Main._fbInput._fbCamera.o_xCmdRequest" TypeA="BOOL" InOutA="1" GuidA="{18071995-0000-0000-0000-000000000030}" VarB="API^Term 10 (Control)^Subterm 12 (Control)^Outputs^Control Register[3]^Command_Request" Size="1" RestoreInfo="ANotFound"/>
<Link VarA="PRG_Main._fbInput._fbCamera.o_xError0Clear" TypeA="BOOL" InOutA="1" GuidA="{18071995-0000-0000-0000-000000000030}" VarB="API^Term 10 (Control)^Subterm 12 (Control)^Outputs^Control Register[2]^Error0_Clear" Size="1" RestoreInfo="ANotFound"/>
<Link VarA="PRG_Main._fbInput._fbCamera.o_xError1Clear" TypeA="BOOL" InOutA="1" GuidA="{18071995-0000-0000-0000-000000000030}" VarB="API^Term 10 (Control)^Subterm 12 (Control)^Outputs^Control Register[2]^Error1_Clear" Size="1" RestoreInfo="ANotFound"/>
<Link VarA="PRG_Main._fbInput._fbCamera.o_xGotoRun" TypeA="BOOL" InOutA="1" GuidA="{18071995-0000-0000-0000-000000000030}" VarB="API^Term 10 (Control)^Subterm 12 (Control)^Outputs^Control Register[2]^Go_to_Run" Size="1" RestoreInfo="ANotFound"/>
<Link VarA="PRG_Main._fbInput._fbCamera.o_xGotoSetting" TypeA="BOOL" InOutA="1" GuidA="{18071995-0000-0000-0000-000000000030}" VarB="API^Term 10 (Control)^Subterm 12 (Control)^Outputs^Control Register[2]^Go_to_Setting" Size="1" RestoreInfo="ANotFound"/>
<Link VarA="PRG_Main._fbInput._fbCamera.o_xPrgLoadExec" TypeA="BOOL" InOutA="1" GuidA="{18071995-0000-0000-0000-000000000030}" VarB="API^Term 10 (Control)^Subterm 12 (Control)^Outputs^Control Register[3]^Program_Load_Execute" Size="1" RestoreInfo="ANotFound"/>
<Link VarA="PRG_Main._fbInput._fbCamera.o_xResultAck" TypeA="BOOL" InOutA="1" GuidA="{18071995-0000-0000-0000-000000000030}" VarB="API^Term 10 (Control)^Subterm 12 (Control)^Outputs^Control Register[2]^Result_Ack" Size="1" RestoreInfo="ANotFound"/>
<Link VarA="PRG_Main._fbInput._fbCamera.o_xResultHandshakeEnable" TypeA="BOOL" InOutA="1" GuidA="{18071995-0000-0000-0000-000000000030}" VarB="API^Term 10 (Control)^Subterm 12 (Control)^Outputs^Control Register[2]^Result_Handshake_Enable" Size="1" RestoreInfo="ANotFound"/>
<Link VarA="PRG_Main._fbInput._fbCamera.o_xTrigger" TypeA="BOOL" InOutA="1" GuidA="{18071995-0000-0000-0000-000000000030}" VarB="API^Term 10 (Control)^Subterm 12 (Control)^Outputs^Control Register[0]^Trigger" Size="1" RestoreInfo="ANotFound"/>
</OwnerB>
</OwnerA>
</UnrestoredVarLinks>
<Contexts> <Contexts>
<Context> <Context>
<Id>0</Id> <Id>0</Id>
@@ -74,9 +109,83 @@
<Link VarA="PlcTask Outputs^PRG_Main._fbAligner.xActivateVacuum" VarB="Module 1 (EX600-SEC#, 32 Valves)^Valve Outputs^Aligner enable vacuum" Size="1"/> <Link VarA="PlcTask Outputs^PRG_Main._fbAligner.xActivateVacuum" VarB="Module 1 (EX600-SEC#, 32 Valves)^Valve Outputs^Aligner enable vacuum" Size="1"/>
<Link VarA="PlcTask Outputs^PRG_Main._fbAligner.xDeactivateVacuum" VarB="Module 1 (EX600-SEC#, 32 Valves)^Valve Outputs^Aligner disable vacuum" Size="1"/> <Link VarA="PlcTask Outputs^PRG_Main._fbAligner.xDeactivateVacuum" VarB="Module 1 (EX600-SEC#, 32 Valves)^Valve Outputs^Aligner disable vacuum" Size="1"/>
</OwnerB> </OwnerB>
<OwnerB Name="TIID^Device 1 (EtherCAT)^HP (EK1100)^Term 47 (EL2004)">
<Link VarA="PlcTask Outputs^PRG_Main._fbHotplate.xEnableHotplate" VarB="Channel 1^HotplateControl" Size="1"/>
</OwnerB>
<OwnerB Name="TIID^Device 1 (EtherCAT)^HP (EK1100)^Term 48 (EL3202)">
<Link VarA="PlcTask Inputs^PRG_Main._fbCoolplate._fbTempSensor.iAnalogValue" VarB="RTD Inputs Channel 2^CP_CurrentTemp"/>
<Link VarA="PlcTask Inputs^PRG_Main._fbCoolplate._fbTempSensor.xErrorCard" VarB="RTD Inputs Channel 2^Status^Error" Size="1"/>
<Link VarA="PlcTask Inputs^PRG_Main._fbCoolplate._fbTempSensor.xOverrange" VarB="RTD Inputs Channel 2^Status^Overrange" Size="1"/>
<Link VarA="PlcTask Inputs^PRG_Main._fbCoolplate._fbTempSensor.xUnderrange" VarB="RTD Inputs Channel 2^Status^Underrange" Size="1"/>
<Link VarA="PlcTask Inputs^PRG_Main._fbHotplate._fbTempSensor.iAnalogValue" VarB="RTD Inputs Channel 1^HOTPLATE_CurrentTemp"/>
<Link VarA="PlcTask Inputs^PRG_Main._fbHotplate._fbTempSensor.xErrorCard" VarB="RTD Inputs Channel 1^Status^Error" Size="1"/>
<Link VarA="PlcTask Inputs^PRG_Main._fbHotplate._fbTempSensor.xOverrange" VarB="RTD Inputs Channel 1^Status^Overrange" Size="1"/>
<Link VarA="PlcTask Inputs^PRG_Main._fbHotplate._fbTempSensor.xUnderrange" VarB="RTD Inputs Channel 1^Status^Underrange" Size="1"/>
</OwnerB>
<OwnerB Name="TIID^Device 1 (EtherCAT)^HP (EK1100)^Term 49 (EL6021)">
<Link VarA="PlcTask Inputs^PRG_Main._fbCoolplate.abyDataIn" VarB="COM TxPDO-Map Inputs^Data In 0" Size="8"/>
<Link VarA="PlcTask Inputs^PRG_Main._fbCoolplate.abyDataIn" VarB="COM TxPDO-Map Inputs^Data In 1" Size="8" OffsA="8"/>
<Link VarA="PlcTask Inputs^PRG_Main._fbCoolplate.abyDataIn" VarB="COM TxPDO-Map Inputs^Data In 10" Size="8" OffsA="80"/>
<Link VarA="PlcTask Inputs^PRG_Main._fbCoolplate.abyDataIn" VarB="COM TxPDO-Map Inputs^Data In 11" Size="8" OffsA="88"/>
<Link VarA="PlcTask Inputs^PRG_Main._fbCoolplate.abyDataIn" VarB="COM TxPDO-Map Inputs^Data In 12" Size="8" OffsA="96"/>
<Link VarA="PlcTask Inputs^PRG_Main._fbCoolplate.abyDataIn" VarB="COM TxPDO-Map Inputs^Data In 13" Size="8" OffsA="104"/>
<Link VarA="PlcTask Inputs^PRG_Main._fbCoolplate.abyDataIn" VarB="COM TxPDO-Map Inputs^Data In 14" Size="8" OffsA="112"/>
<Link VarA="PlcTask Inputs^PRG_Main._fbCoolplate.abyDataIn" VarB="COM TxPDO-Map Inputs^Data In 15" Size="8" OffsA="120"/>
<Link VarA="PlcTask Inputs^PRG_Main._fbCoolplate.abyDataIn" VarB="COM TxPDO-Map Inputs^Data In 16" Size="8" OffsA="128"/>
<Link VarA="PlcTask Inputs^PRG_Main._fbCoolplate.abyDataIn" VarB="COM TxPDO-Map Inputs^Data In 17" Size="8" OffsA="136"/>
<Link VarA="PlcTask Inputs^PRG_Main._fbCoolplate.abyDataIn" VarB="COM TxPDO-Map Inputs^Data In 18" Size="8" OffsA="144"/>
<Link VarA="PlcTask Inputs^PRG_Main._fbCoolplate.abyDataIn" VarB="COM TxPDO-Map Inputs^Data In 19" Size="8" OffsA="152"/>
<Link VarA="PlcTask Inputs^PRG_Main._fbCoolplate.abyDataIn" VarB="COM TxPDO-Map Inputs^Data In 2" Size="8" OffsA="16"/>
<Link VarA="PlcTask Inputs^PRG_Main._fbCoolplate.abyDataIn" VarB="COM TxPDO-Map Inputs^Data In 20" Size="8" OffsA="160"/>
<Link VarA="PlcTask Inputs^PRG_Main._fbCoolplate.abyDataIn" VarB="COM TxPDO-Map Inputs^Data In 21" Size="8" OffsA="168"/>
<Link VarA="PlcTask Inputs^PRG_Main._fbCoolplate.abyDataIn" VarB="COM TxPDO-Map Inputs^Data In 3" Size="8" OffsA="24"/>
<Link VarA="PlcTask Inputs^PRG_Main._fbCoolplate.abyDataIn" VarB="COM TxPDO-Map Inputs^Data In 4" Size="8" OffsA="32"/>
<Link VarA="PlcTask Inputs^PRG_Main._fbCoolplate.abyDataIn" VarB="COM TxPDO-Map Inputs^Data In 5" Size="8" OffsA="40"/>
<Link VarA="PlcTask Inputs^PRG_Main._fbCoolplate.abyDataIn" VarB="COM TxPDO-Map Inputs^Data In 6" Size="8" OffsA="48"/>
<Link VarA="PlcTask Inputs^PRG_Main._fbCoolplate.abyDataIn" VarB="COM TxPDO-Map Inputs^Data In 7" Size="8" OffsA="56"/>
<Link VarA="PlcTask Inputs^PRG_Main._fbCoolplate.abyDataIn" VarB="COM TxPDO-Map Inputs^Data In 8" Size="8" OffsA="64"/>
<Link VarA="PlcTask Inputs^PRG_Main._fbCoolplate.abyDataIn" VarB="COM TxPDO-Map Inputs^Data In 9" Size="8" OffsA="72"/>
<Link VarA="PlcTask Inputs^PRG_Main._fbCoolplate.stStatus^bBufferFull" VarB="COM TxPDO-Map Inputs^Status^Buffer full"/>
<Link VarA="PlcTask Inputs^PRG_Main._fbCoolplate.stStatus^bFramingError" VarB="COM TxPDO-Map Inputs^Status^Framing error"/>
<Link VarA="PlcTask Inputs^PRG_Main._fbCoolplate.stStatus^bInitAccepted" VarB="COM TxPDO-Map Inputs^Status^Init accepted"/>
<Link VarA="PlcTask Inputs^PRG_Main._fbCoolplate.stStatus^bOverrunError" VarB="COM TxPDO-Map Inputs^Status^Overrun error"/>
<Link VarA="PlcTask Inputs^PRG_Main._fbCoolplate.stStatus^bParityError" VarB="COM TxPDO-Map Inputs^Status^Parity error"/>
<Link VarA="PlcTask Inputs^PRG_Main._fbCoolplate.stStatus^bReceiveRequested" VarB="COM TxPDO-Map Inputs^Status^Receive request"/>
<Link VarA="PlcTask Inputs^PRG_Main._fbCoolplate.stStatus^bTransmitAccepted" VarB="COM TxPDO-Map Inputs^Status^Transmit accepted"/>
<Link VarA="PlcTask Outputs^PRG_Main._fbCoolplate.abyDataOut" VarB="COM RxPDO-Map Outputs^Data Out 0" Size="8"/>
<Link VarA="PlcTask Outputs^PRG_Main._fbCoolplate.abyDataOut" VarB="COM RxPDO-Map Outputs^Data Out 1" Size="8" OffsA="8"/>
<Link VarA="PlcTask Outputs^PRG_Main._fbCoolplate.abyDataOut" VarB="COM RxPDO-Map Outputs^Data Out 10" Size="8" OffsA="80"/>
<Link VarA="PlcTask Outputs^PRG_Main._fbCoolplate.abyDataOut" VarB="COM RxPDO-Map Outputs^Data Out 11" Size="8" OffsA="88"/>
<Link VarA="PlcTask Outputs^PRG_Main._fbCoolplate.abyDataOut" VarB="COM RxPDO-Map Outputs^Data Out 12" Size="8" OffsA="96"/>
<Link VarA="PlcTask Outputs^PRG_Main._fbCoolplate.abyDataOut" VarB="COM RxPDO-Map Outputs^Data Out 13" Size="8" OffsA="104"/>
<Link VarA="PlcTask Outputs^PRG_Main._fbCoolplate.abyDataOut" VarB="COM RxPDO-Map Outputs^Data Out 14" Size="8" OffsA="112"/>
<Link VarA="PlcTask Outputs^PRG_Main._fbCoolplate.abyDataOut" VarB="COM RxPDO-Map Outputs^Data Out 15" Size="8" OffsA="120"/>
<Link VarA="PlcTask Outputs^PRG_Main._fbCoolplate.abyDataOut" VarB="COM RxPDO-Map Outputs^Data Out 16" Size="8" OffsA="128"/>
<Link VarA="PlcTask Outputs^PRG_Main._fbCoolplate.abyDataOut" VarB="COM RxPDO-Map Outputs^Data Out 17" Size="8" OffsA="136"/>
<Link VarA="PlcTask Outputs^PRG_Main._fbCoolplate.abyDataOut" VarB="COM RxPDO-Map Outputs^Data Out 18" Size="8" OffsA="144"/>
<Link VarA="PlcTask Outputs^PRG_Main._fbCoolplate.abyDataOut" VarB="COM RxPDO-Map Outputs^Data Out 19" Size="8" OffsA="152"/>
<Link VarA="PlcTask Outputs^PRG_Main._fbCoolplate.abyDataOut" VarB="COM RxPDO-Map Outputs^Data Out 2" Size="8" OffsA="16"/>
<Link VarA="PlcTask Outputs^PRG_Main._fbCoolplate.abyDataOut" VarB="COM RxPDO-Map Outputs^Data Out 20" Size="8" OffsA="160"/>
<Link VarA="PlcTask Outputs^PRG_Main._fbCoolplate.abyDataOut" VarB="COM RxPDO-Map Outputs^Data Out 21" Size="8" OffsA="168"/>
<Link VarA="PlcTask Outputs^PRG_Main._fbCoolplate.abyDataOut" VarB="COM RxPDO-Map Outputs^Data Out 3" Size="8" OffsA="24"/>
<Link VarA="PlcTask Outputs^PRG_Main._fbCoolplate.abyDataOut" VarB="COM RxPDO-Map Outputs^Data Out 4" Size="8" OffsA="32"/>
<Link VarA="PlcTask Outputs^PRG_Main._fbCoolplate.abyDataOut" VarB="COM RxPDO-Map Outputs^Data Out 5" Size="8" OffsA="40"/>
<Link VarA="PlcTask Outputs^PRG_Main._fbCoolplate.abyDataOut" VarB="COM RxPDO-Map Outputs^Data Out 6" Size="8" OffsA="48"/>
<Link VarA="PlcTask Outputs^PRG_Main._fbCoolplate.abyDataOut" VarB="COM RxPDO-Map Outputs^Data Out 7" Size="8" OffsA="56"/>
<Link VarA="PlcTask Outputs^PRG_Main._fbCoolplate.abyDataOut" VarB="COM RxPDO-Map Outputs^Data Out 8" Size="8" OffsA="64"/>
<Link VarA="PlcTask Outputs^PRG_Main._fbCoolplate.abyDataOut" VarB="COM RxPDO-Map Outputs^Data Out 9" Size="8" OffsA="72"/>
<Link VarA="PlcTask Outputs^PRG_Main._fbCoolplate.stCtrl^bInitRequest" VarB="COM RxPDO-Map Outputs^Ctrl^Init request"/>
<Link VarA="PlcTask Outputs^PRG_Main._fbCoolplate.stCtrl^bReceiveAccepted" VarB="COM RxPDO-Map Outputs^Ctrl^Receive accepted"/>
<Link VarA="PlcTask Outputs^PRG_Main._fbCoolplate.stCtrl^bSendContinues" VarB="COM RxPDO-Map Outputs^Ctrl^Send continues"/>
<Link VarA="PlcTask Outputs^PRG_Main._fbCoolplate.stCtrl^bTransmitRequest" VarB="COM RxPDO-Map Outputs^Ctrl^Transmit request"/>
</OwnerB>
<OwnerB Name="TIID^Device 1 (EtherCAT)^K01_KL01 (EK1100)^K01_KL02 (EL1018)"> <OwnerB Name="TIID^Device 1 (EtherCAT)^K01_KL01 (EK1100)^K01_KL02 (EL1018)">
<Link VarA="PlcTask Inputs^PRG_Safety.xRequestOpenDoor" VarB="Channel 4^MainDoorUnlock" Size="1"/> <Link VarA="PlcTask Inputs^PRG_Safety.xRequestOpenDoor" VarB="Channel 4^MainDoorUnlock" Size="1"/>
</OwnerB> </OwnerB>
<OwnerB Name="TIID^Device 1 (EtherCAT)^K01_KL01 (EK1100)^K01_KL04 (EL2008)">
<Link VarA="PlcTask Outputs^PRG_Safety.xLEDMachineOff" VarB="Channel 2^MachineOff" Size="1"/>
<Link VarA="PlcTask Outputs^PRG_Safety.xLEDMachineOn" VarB="Channel 1^MachineOn" Size="1"/>
</OwnerB>
<OwnerB Name="TIID^Device 1 (EtherCAT)^K12_KL01 (EK1100)^K12_KL04 (EL1018)"> <OwnerB Name="TIID^Device 1 (EtherCAT)^K12_KL01 (EK1100)^K12_KL04 (EL1018)">
<Link VarA="PlcTask Inputs^PRG_Main._fbAligner.xVacuumOk" VarB="Channel 7^Input" Size="1"/> <Link VarA="PlcTask Inputs^PRG_Main._fbAligner.xVacuumOk" VarB="Channel 7^Input" Size="1"/>
</OwnerB> </OwnerB>
@@ -166,43 +275,129 @@
<Link VarA="PlcTask Outputs^PRG_Main._fbRobot.stCtrl" VarB="Module 3 (Default IO)^Std. Out (64 Bytes)^Output DWORD 0 (CMDs)"/> <Link VarA="PlcTask Outputs^PRG_Main._fbRobot.stCtrl" VarB="Module 3 (Default IO)^Std. Out (64 Bytes)^Output DWORD 0 (CMDs)"/>
<Link VarA="PlcTask Outputs^PRG_Main._fbRobot.stJobs" VarB="Module 3 (Default IO)^Std. Out (64 Bytes)^Output DWORD 1 (JobNr/PLCJobNr)"/> <Link VarA="PlcTask Outputs^PRG_Main._fbRobot.stJobs" VarB="Module 3 (Default IO)^Std. Out (64 Bytes)^Output DWORD 1 (JobNr/PLCJobNr)"/>
</OwnerB> </OwnerB>
<OwnerB Name="TIID^Device 2 (Profinet Controller)^vs-0001"> <OwnerB Name="TIID^Device 5 (EtherCAT)^Etcher1Robot (Meca500)">
<Link VarA="PlcTask Inputs^PRG_Main.stCamResult" VarB="API^Term 4 (Result Data 128Byte)^Subterm 6 (Result Data 128Byte)^Inputs^Result Data" Size="264" OffsB="224"/> <Link VarA="PlcTask Inputs^PRG_Main._fbEtcher1._fbRobot.stRobotInputs^stConfigurations^siElbow" VarB="Configurations^Elbow"/>
<Link VarA="PlcTask Outputs^PRG_Main.xTriggerCamera" VarB="API^Term 10 (Control)^Subterm 12 (Control)^Outputs^Control Register[0]^Trigger" Size="1"/> <Link VarA="PlcTask Inputs^PRG_Main._fbEtcher1._fbRobot.stRobotInputs^stConfigurations^siShoulder" VarB="Configurations^Shoulder"/>
<Link VarA="PlcTask Inputs^PRG_Main._fbEtcher1._fbRobot.stRobotInputs^stConfigurations^siTurn" VarB="Configurations^Turn"/>
<Link VarA="PlcTask Inputs^PRG_Main._fbEtcher1._fbRobot.stRobotInputs^stConfigurations^siWrist" VarB="Configurations^Wrist"/>
<Link VarA="PlcTask Inputs^PRG_Main._fbEtcher1._fbRobot.stRobotInputs^stDynamicData0" VarB="Dynamic Data 0^Dynamic Type" Size="32"/>
<Link VarA="PlcTask Inputs^PRG_Main._fbEtcher1._fbRobot.stRobotInputs^stDynamicData0" VarB="Dynamic Data 0^Value 0" Size="32" OffsA="32"/>
<Link VarA="PlcTask Inputs^PRG_Main._fbEtcher1._fbRobot.stRobotInputs^stDynamicData0" VarB="Dynamic Data 0^Value 1" Size="32" OffsA="64"/>
<Link VarA="PlcTask Inputs^PRG_Main._fbEtcher1._fbRobot.stRobotInputs^stDynamicData0" VarB="Dynamic Data 0^Value 2" Size="32" OffsA="96"/>
<Link VarA="PlcTask Inputs^PRG_Main._fbEtcher1._fbRobot.stRobotInputs^stDynamicData0" VarB="Dynamic Data 0^Value 3" Size="32" OffsA="128"/>
<Link VarA="PlcTask Inputs^PRG_Main._fbEtcher1._fbRobot.stRobotInputs^stDynamicData0" VarB="Dynamic Data 0^Value 4" Size="32" OffsA="160"/>
<Link VarA="PlcTask Inputs^PRG_Main._fbEtcher1._fbRobot.stRobotInputs^stDynamicData0" VarB="Dynamic Data 0^Value 5" Size="32" OffsA="192"/>
<Link VarA="PlcTask Inputs^PRG_Main._fbEtcher1._fbRobot.stRobotInputs^stDynamicData1" VarB="Dynamic Data 1^Dynamic Type" Size="32"/>
<Link VarA="PlcTask Inputs^PRG_Main._fbEtcher1._fbRobot.stRobotInputs^stDynamicData1" VarB="Dynamic Data 1^Value 0" Size="32" OffsA="32"/>
<Link VarA="PlcTask Inputs^PRG_Main._fbEtcher1._fbRobot.stRobotInputs^stDynamicData1" VarB="Dynamic Data 1^Value 1" Size="32" OffsA="64"/>
<Link VarA="PlcTask Inputs^PRG_Main._fbEtcher1._fbRobot.stRobotInputs^stDynamicData1" VarB="Dynamic Data 1^Value 2" Size="32" OffsA="96"/>
<Link VarA="PlcTask Inputs^PRG_Main._fbEtcher1._fbRobot.stRobotInputs^stDynamicData1" VarB="Dynamic Data 1^Value 3" Size="32" OffsA="128"/>
<Link VarA="PlcTask Inputs^PRG_Main._fbEtcher1._fbRobot.stRobotInputs^stDynamicData1" VarB="Dynamic Data 1^Value 4" Size="32" OffsA="160"/>
<Link VarA="PlcTask Inputs^PRG_Main._fbEtcher1._fbRobot.stRobotInputs^stDynamicData1" VarB="Dynamic Data 1^Value 5" Size="32" OffsA="192"/>
<Link VarA="PlcTask Inputs^PRG_Main._fbEtcher1._fbRobot.stRobotInputs^stDynamicData2" VarB="Dynamic Data 2^Dynamic Type" Size="32"/>
<Link VarA="PlcTask Inputs^PRG_Main._fbEtcher1._fbRobot.stRobotInputs^stDynamicData2" VarB="Dynamic Data 2^Value 0" Size="32" OffsA="32"/>
<Link VarA="PlcTask Inputs^PRG_Main._fbEtcher1._fbRobot.stRobotInputs^stDynamicData2" VarB="Dynamic Data 2^Value 1" Size="32" OffsA="64"/>
<Link VarA="PlcTask Inputs^PRG_Main._fbEtcher1._fbRobot.stRobotInputs^stDynamicData2" VarB="Dynamic Data 2^Value 2" Size="32" OffsA="96"/>
<Link VarA="PlcTask Inputs^PRG_Main._fbEtcher1._fbRobot.stRobotInputs^stDynamicData2" VarB="Dynamic Data 2^Value 3" Size="32" OffsA="128"/>
<Link VarA="PlcTask Inputs^PRG_Main._fbEtcher1._fbRobot.stRobotInputs^stDynamicData2" VarB="Dynamic Data 2^Value 4" Size="32" OffsA="160"/>
<Link VarA="PlcTask Inputs^PRG_Main._fbEtcher1._fbRobot.stRobotInputs^stDynamicData2" VarB="Dynamic Data 2^Value 5" Size="32" OffsA="192"/>
<Link VarA="PlcTask Inputs^PRG_Main._fbEtcher1._fbRobot.stRobotInputs^stDynamicData3" VarB="Dynamic Data 3^Dynamic Type" Size="32"/>
<Link VarA="PlcTask Inputs^PRG_Main._fbEtcher1._fbRobot.stRobotInputs^stDynamicData3" VarB="Dynamic Data 3^Value 0" Size="32" OffsA="32"/>
<Link VarA="PlcTask Inputs^PRG_Main._fbEtcher1._fbRobot.stRobotInputs^stDynamicData3" VarB="Dynamic Data 3^Value 1" Size="32" OffsA="64"/>
<Link VarA="PlcTask Inputs^PRG_Main._fbEtcher1._fbRobot.stRobotInputs^stDynamicData3" VarB="Dynamic Data 3^Value 2" Size="32" OffsA="96"/>
<Link VarA="PlcTask Inputs^PRG_Main._fbEtcher1._fbRobot.stRobotInputs^stDynamicData3" VarB="Dynamic Data 3^Value 3" Size="32" OffsA="128"/>
<Link VarA="PlcTask Inputs^PRG_Main._fbEtcher1._fbRobot.stRobotInputs^stDynamicData3" VarB="Dynamic Data 3^Value 4" Size="32" OffsA="160"/>
<Link VarA="PlcTask Inputs^PRG_Main._fbEtcher1._fbRobot.stRobotInputs^stDynamicData3" VarB="Dynamic Data 3^Value 5" Size="32" OffsA="192"/>
<Link VarA="PlcTask Inputs^PRG_Main._fbEtcher1._fbRobot.stRobotInputs^stEndEffectorPose" VarB="End-Effector Pose^SubIndex 001" Size="32"/>
<Link VarA="PlcTask Inputs^PRG_Main._fbEtcher1._fbRobot.stRobotInputs^stEndEffectorPose" VarB="End-Effector Pose^SubIndex 002" Size="32" OffsA="32"/>
<Link VarA="PlcTask Inputs^PRG_Main._fbEtcher1._fbRobot.stRobotInputs^stEndEffectorPose" VarB="End-Effector Pose^SubIndex 003" Size="32" OffsA="64"/>
<Link VarA="PlcTask Inputs^PRG_Main._fbEtcher1._fbRobot.stRobotInputs^stEndEffectorPose" VarB="End-Effector Pose^SubIndex 004" Size="32" OffsA="96"/>
<Link VarA="PlcTask Inputs^PRG_Main._fbEtcher1._fbRobot.stRobotInputs^stEndEffectorPose" VarB="End-Effector Pose^SubIndex 005" Size="32" OffsA="128"/>
<Link VarA="PlcTask Inputs^PRG_Main._fbEtcher1._fbRobot.stRobotInputs^stEndEffectorPose" VarB="End-Effector Pose^SubIndex 006" Size="32" OffsA="160"/>
<Link VarA="PlcTask Inputs^PRG_Main._fbEtcher1._fbRobot.stRobotInputs^stJointSet" VarB="Joint Set^SubIndex 001" Size="32"/>
<Link VarA="PlcTask Inputs^PRG_Main._fbEtcher1._fbRobot.stRobotInputs^stJointSet" VarB="Joint Set^SubIndex 002" Size="32" OffsA="32"/>
<Link VarA="PlcTask Inputs^PRG_Main._fbEtcher1._fbRobot.stRobotInputs^stJointSet" VarB="Joint Set^SubIndex 003" Size="32" OffsA="64"/>
<Link VarA="PlcTask Inputs^PRG_Main._fbEtcher1._fbRobot.stRobotInputs^stJointSet" VarB="Joint Set^SubIndex 004" Size="32" OffsA="96"/>
<Link VarA="PlcTask Inputs^PRG_Main._fbEtcher1._fbRobot.stRobotInputs^stJointSet" VarB="Joint Set^SubIndex 005" Size="32" OffsA="128"/>
<Link VarA="PlcTask Inputs^PRG_Main._fbEtcher1._fbRobot.stRobotInputs^stJointSet" VarB="Joint Set^SubIndex 006" Size="32" OffsA="160"/>
<Link VarA="PlcTask Inputs^PRG_Main._fbEtcher1._fbRobot.stRobotInputs^stMotionStatus^PStop2" VarB="Motion Status^PStop2"/>
<Link VarA="PlcTask Inputs^PRG_Main._fbEtcher1._fbRobot.stRobotInputs^stMotionStatus^bEOB" VarB="Motion Status^EOB"/>
<Link VarA="PlcTask Inputs^PRG_Main._fbEtcher1._fbRobot.stRobotInputs^stMotionStatus^bEOM" VarB="Motion Status^EOM"/>
<Link VarA="PlcTask Inputs^PRG_Main._fbEtcher1._fbRobot.stRobotInputs^stMotionStatus^bExcessiveTorque" VarB="Motion Status^Excessive torque"/>
<Link VarA="PlcTask Inputs^PRG_Main._fbEtcher1._fbRobot.stRobotInputs^stMotionStatus^bFIFOCleared" VarB="Motion Status^FIFO Cleared"/>
<Link VarA="PlcTask Inputs^PRG_Main._fbEtcher1._fbRobot.stRobotInputs^stMotionStatus^bPaused" VarB="Motion Status^Paused"/>
<Link VarA="PlcTask Inputs^PRG_Main._fbEtcher1._fbRobot.stRobotInputs^stMotionStatus^uiDiscardedCheckpointId" VarB="Motion Status^DiscardedCheckpointId"/>
<Link VarA="PlcTask Inputs^PRG_Main._fbEtcher1._fbRobot.stRobotInputs^stMotionStatus^uiFIFOSpace" VarB="Motion Status^FIFO Space"/>
<Link VarA="PlcTask Inputs^PRG_Main._fbEtcher1._fbRobot.stRobotInputs^stMotionStatus^uiMoveID" VarB="Motion Status^Move ID"/>
<Link VarA="PlcTask Inputs^PRG_Main._fbEtcher1._fbRobot.stRobotInputs^stMotionStatus^uiOfflineProgramID" VarB="Motion Status^Offline Program ID"/>
<Link VarA="PlcTask Inputs^PRG_Main._fbEtcher1._fbRobot.stRobotInputs^stMotionStatus^uiReachedCheckPointId" VarB="Motion Status^ReachedCheckPointId"/>
<Link VarA="PlcTask Inputs^PRG_Main._fbEtcher1._fbRobot.stRobotInputs^stRobotStatus^bActivated" VarB="Robot Status^Activated"/>
<Link VarA="PlcTask Inputs^PRG_Main._fbEtcher1._fbRobot.stRobotInputs^stRobotStatus^bBrakesEngaged" VarB="Robot Status^BrakesEngaged"/>
<Link VarA="PlcTask Inputs^PRG_Main._fbEtcher1._fbRobot.stRobotInputs^stRobotStatus^bBusy" VarB="Robot Status^Busy"/>
<Link VarA="PlcTask Inputs^PRG_Main._fbEtcher1._fbRobot.stRobotInputs^stRobotStatus^bCollisionStatus" VarB="Robot Status^CollisionStatus"/>
<Link VarA="PlcTask Inputs^PRG_Main._fbEtcher1._fbRobot.stRobotInputs^stRobotStatus^bEStop" VarB="Robot Status^Estop"/>
<Link VarA="PlcTask Inputs^PRG_Main._fbEtcher1._fbRobot.stRobotInputs^stRobotStatus^bHomed" VarB="Robot Status^Homed"/>
<Link VarA="PlcTask Inputs^PRG_Main._fbEtcher1._fbRobot.stRobotInputs^stRobotStatus^bRecoveryMode" VarB="Robot Status^RecoveryMode"/>
<Link VarA="PlcTask Inputs^PRG_Main._fbEtcher1._fbRobot.stRobotInputs^stRobotStatus^bSimActivated" VarB="Robot Status^SimActivated"/>
<Link VarA="PlcTask Inputs^PRG_Main._fbEtcher1._fbRobot.stRobotInputs^stRobotStatus^bWorkZoneStatus" VarB="Robot Status^WorkZoneStatus"/>
<Link VarA="PlcTask Inputs^PRG_Main._fbEtcher1._fbRobot.stRobotInputs^stRobotStatus^uiError" VarB="Robot Status^Error"/>
<Link VarA="PlcTask Inputs^PRG_Main._fbEtcher1._fbRobot.stRobotInputs^stRobotTimestamp^udiDynamic_Data_Cycles" VarB="Robot Timestamp^Dynamic Data Cycles"/>
<Link VarA="PlcTask Inputs^PRG_Main._fbEtcher1._fbRobot.stRobotInputs^stRobotTimestamp^udiTimestamp_Microseconds" VarB="Robot Timestamp^Timestamp Microseconds"/>
<Link VarA="PlcTask Inputs^PRG_Main._fbEtcher1._fbRobot.stRobotInputs^stRobotTimestamp^udiTimestamp_Seconds" VarB="Robot Timestamp^Timestamp Seconds"/>
<Link VarA="PlcTask Inputs^PRG_Main._fbEtcher1._fbRobot.stRobotInputs^stTRF" VarB="TRF^SubIndex 001" Size="32"/>
<Link VarA="PlcTask Inputs^PRG_Main._fbEtcher1._fbRobot.stRobotInputs^stTRF" VarB="TRF^SubIndex 002" Size="32" OffsA="32"/>
<Link VarA="PlcTask Inputs^PRG_Main._fbEtcher1._fbRobot.stRobotInputs^stTRF" VarB="TRF^SubIndex 003" Size="32" OffsA="64"/>
<Link VarA="PlcTask Inputs^PRG_Main._fbEtcher1._fbRobot.stRobotInputs^stTRF" VarB="TRF^SubIndex 004" Size="32" OffsA="96"/>
<Link VarA="PlcTask Inputs^PRG_Main._fbEtcher1._fbRobot.stRobotInputs^stTRF" VarB="TRF^SubIndex 005" Size="32" OffsA="128"/>
<Link VarA="PlcTask Inputs^PRG_Main._fbEtcher1._fbRobot.stRobotInputs^stTRF" VarB="TRF^SubIndex 006" Size="32" OffsA="160"/>
<Link VarA="PlcTask Inputs^PRG_Main._fbEtcher1._fbRobot.stRobotInputs^stWRF" VarB="WRF^SubIndex 001" Size="32"/>
<Link VarA="PlcTask Inputs^PRG_Main._fbEtcher1._fbRobot.stRobotInputs^stWRF" VarB="WRF^SubIndex 002" Size="32" OffsA="32"/>
<Link VarA="PlcTask Inputs^PRG_Main._fbEtcher1._fbRobot.stRobotInputs^stWRF" VarB="WRF^SubIndex 003" Size="32" OffsA="64"/>
<Link VarA="PlcTask Inputs^PRG_Main._fbEtcher1._fbRobot.stRobotInputs^stWRF" VarB="WRF^SubIndex 004" Size="32" OffsA="96"/>
<Link VarA="PlcTask Inputs^PRG_Main._fbEtcher1._fbRobot.stRobotInputs^stWRF" VarB="WRF^SubIndex 005" Size="32" OffsA="128"/>
<Link VarA="PlcTask Inputs^PRG_Main._fbEtcher1._fbRobot.stRobotInputs^stWRF" VarB="WRF^SubIndex 006" Size="32" OffsA="160"/>
<Link VarA="PlcTask Inputs^PRG_Main._fbEtcher2._fbRobot.stRobotInputs^stSafetyStatus^bConnection_Dropped" VarB="Safety Status^Connection Dropped"/>
<Link VarA="PlcTask Inputs^PRG_Main._fbEtcher2._fbRobot.stRobotInputs^stSafetyStatus^bConnection_Dropped_Resettable" VarB="Safety Status^Connection Dropped Resettable"/>
<Link VarA="PlcTask Inputs^PRG_Main._fbEtcher2._fbRobot.stRobotInputs^stSafetyStatus^bEstop" VarB="Safety Status^Estop"/>
<Link VarA="PlcTask Inputs^PRG_Main._fbEtcher2._fbRobot.stRobotInputs^stSafetyStatus^bEstop_Resettable" VarB="Safety Status^Estop Resettable"/>
<Link VarA="PlcTask Inputs^PRG_Main._fbEtcher2._fbRobot.stRobotInputs^stSafetyStatus^bPStop2" VarB="Safety Status^PStop2"/>
<Link VarA="PlcTask Inputs^PRG_Main._fbEtcher2._fbRobot.stRobotInputs^stSafetyStatus^bPStop2_Resettable" VarB="Safety Status^PStop2 Resettable"/>
<Link VarA="PlcTask Inputs^PRG_Main._fbEtcher2._fbRobot.stRobotInputs^stSafetyStatus^bReboot" VarB="Safety Status^Reboot"/>
<Link VarA="PlcTask Inputs^PRG_Main._fbEtcher2._fbRobot.stRobotInputs^stSafetyStatus^bReboot_Resettable" VarB="Safety Status^Reboot Resettable"/>
<Link VarA="PlcTask Inputs^PRG_Main._fbEtcher2._fbRobot.stRobotInputs^stSafetyStatus^bReset_Ready" VarB="Safety Status^Reset Ready"/>
<Link VarA="PlcTask Inputs^PRG_Main._fbEtcher2._fbRobot.stRobotInputs^stSafetyStatus^bVmotor_on" VarB="Safety Status^Vmotor on"/>
<Link VarA="PlcTask Outputs^PRG_Main._fbEtcher1._fbRobot.stRobotOutputs^stBrakesControl^bBrakesControlAllowed" VarB="Brakes Control^BrakesControlAllowed"/>
<Link VarA="PlcTask Outputs^PRG_Main._fbEtcher1._fbRobot.stRobotOutputs^stBrakesControl^bBrakesEngaged" VarB="Brakes Control^BrakesEngaged"/>
<Link VarA="PlcTask Outputs^PRG_Main._fbEtcher1._fbRobot.stRobotOutputs^stMotionControl^Clear_Move" VarB="Motion Control^Clear Move"/>
<Link VarA="PlcTask Outputs^PRG_Main._fbEtcher1._fbRobot.stRobotOutputs^stMotionControl^Move_ID" VarB="Motion Control^Move ID"/>
<Link VarA="PlcTask Outputs^PRG_Main._fbEtcher1._fbRobot.stRobotOutputs^stMotionControl^Pause" VarB="Motion Control^Pause"/>
<Link VarA="PlcTask Outputs^PRG_Main._fbEtcher1._fbRobot.stRobotOutputs^stMotionControl^Resume_Motion" VarB="Motion Control^Resume Motion"/>
<Link VarA="PlcTask Outputs^PRG_Main._fbEtcher1._fbRobot.stRobotOutputs^stMotionControl^SetPoint" VarB="Motion Control^SetPoint"/>
<Link VarA="PlcTask Outputs^PRG_Main._fbEtcher1._fbRobot.stRobotOutputs^stMove" VarB="Move^Move Command" Size="32"/>
<Link VarA="PlcTask Outputs^PRG_Main._fbEtcher1._fbRobot.stRobotOutputs^stMove" VarB="Move^SubIndex 001" Size="32" OffsA="32"/>
<Link VarA="PlcTask Outputs^PRG_Main._fbEtcher1._fbRobot.stRobotOutputs^stMove" VarB="Move^SubIndex 002" Size="32" OffsA="64"/>
<Link VarA="PlcTask Outputs^PRG_Main._fbEtcher1._fbRobot.stRobotOutputs^stMove" VarB="Move^SubIndex 003" Size="32" OffsA="96"/>
<Link VarA="PlcTask Outputs^PRG_Main._fbEtcher1._fbRobot.stRobotOutputs^stMove" VarB="Move^SubIndex 004" Size="32" OffsA="128"/>
<Link VarA="PlcTask Outputs^PRG_Main._fbEtcher1._fbRobot.stRobotOutputs^stMove" VarB="Move^SubIndex 005" Size="32" OffsA="160"/>
<Link VarA="PlcTask Outputs^PRG_Main._fbEtcher1._fbRobot.stRobotOutputs^stMove" VarB="Move^SubIndex 006" Size="32" OffsA="192"/>
<Link VarA="PlcTask Outputs^PRG_Main._fbEtcher1._fbRobot.stRobotOutputs^stRobotControl^bActivate" VarB="Robot Control^Activate"/>
<Link VarA="PlcTask Outputs^PRG_Main._fbEtcher1._fbRobot.stRobotOutputs^stRobotControl^bDeactivate" VarB="Robot Control^Deactivate"/>
<Link VarA="PlcTask Outputs^PRG_Main._fbEtcher1._fbRobot.stRobotOutputs^stRobotControl^bDisableEtherCAT" VarB="Robot Control^DisableEtherCAT"/>
<Link VarA="PlcTask Outputs^PRG_Main._fbEtcher1._fbRobot.stRobotOutputs^stRobotControl^bHome" VarB="Robot Control^Home"/>
<Link VarA="PlcTask Outputs^PRG_Main._fbEtcher1._fbRobot.stRobotOutputs^stRobotControl^bRecovery_Mode" VarB="Robot Control^Recovery Mode"/>
<Link VarA="PlcTask Outputs^PRG_Main._fbEtcher1._fbRobot.stRobotOutputs^stRobotControl^bReset_Error" VarB="Robot Control^Reset Error"/>
<Link VarA="PlcTask Outputs^PRG_Main._fbEtcher1._fbRobot.stRobotOutputs^stRobotControl^bSim_Mode" VarB="Robot Control^Sim Mode"/>
<Link VarA="PlcTask Outputs^PRG_Main._fbEtcher1._fbRobot.stRobotOutputs^udiDynamicDataCfg0" VarB="Dynamic Data Cfg 0^Dynamic Type"/>
<Link VarA="PlcTask Outputs^PRG_Main._fbEtcher1._fbRobot.stRobotOutputs^udiDynamicDataCfg1" VarB="Dynamic Data Cfg 1^Dynamic Type"/>
<Link VarA="PlcTask Outputs^PRG_Main._fbEtcher1._fbRobot.stRobotOutputs^udiDynamicDataCfg2" VarB="Dynamic Data Cfg 2^Dynamic Type"/>
<Link VarA="PlcTask Outputs^PRG_Main._fbEtcher1._fbRobot.stRobotOutputs^udiDynamicDataCfg3" VarB="Dynamic Data Cfg 3^Dynamic Type"/>
<Link VarA="PlcTask Outputs^PRG_Main._fbEtcher1._fbRobot.stRobotOutputs^udiHostTime" VarB="Host Time^Host Time"/>
</OwnerB> </OwnerB>
<OwnerB Name="TIID^Device 7 (EtherCAT)^Etcher2Robot (Meca500)"> <OwnerB Name="TIID^Device 7 (EtherCAT)^Etcher2Robot (Meca500)">
<Link VarA="PlcTask Inputs^PRG_Main._fbEtcher2._fbRobot.stRobotInputs^stConfigurations^siElbow" VarB="Configurations^Elbow"/> <Link VarA="PlcTask Inputs^PRG_Main._fbEtcher2._fbRobot.stRobotInputs^stConfigurations^siElbow" VarB="Configurations^Elbow"/>
<Link VarA="PlcTask Inputs^PRG_Main._fbEtcher2._fbRobot.stRobotInputs^stConfigurations^siShoulder" VarB="Configurations^Shoulder"/> <Link VarA="PlcTask Inputs^PRG_Main._fbEtcher2._fbRobot.stRobotInputs^stConfigurations^siShoulder" VarB="Configurations^Shoulder"/>
<Link VarA="PlcTask Inputs^PRG_Main._fbEtcher2._fbRobot.stRobotInputs^stConfigurations^siTurn" VarB="Configurations^Turn"/> <Link VarA="PlcTask Inputs^PRG_Main._fbEtcher2._fbRobot.stRobotInputs^stConfigurations^siTurn" VarB="Configurations^Turn"/>
<Link VarA="PlcTask Inputs^PRG_Main._fbEtcher2._fbRobot.stRobotInputs^stConfigurations^siWrist" VarB="Configurations^Wrist"/> <Link VarA="PlcTask Inputs^PRG_Main._fbEtcher2._fbRobot.stRobotInputs^stConfigurations^siWrist" VarB="Configurations^Wrist"/>
<Link VarA="PlcTask Inputs^PRG_Main._fbEtcher2._fbRobot.stRobotInputs^stDynamicData0" VarB="Dynamic Data 0^Dynamic Type" Size="32"/>
<Link VarA="PlcTask Inputs^PRG_Main._fbEtcher2._fbRobot.stRobotInputs^stDynamicData0" VarB="Dynamic Data 0^Value 0" Size="32" OffsA="32"/>
<Link VarA="PlcTask Inputs^PRG_Main._fbEtcher2._fbRobot.stRobotInputs^stDynamicData0" VarB="Dynamic Data 0^Value 1" Size="32" OffsA="64"/>
<Link VarA="PlcTask Inputs^PRG_Main._fbEtcher2._fbRobot.stRobotInputs^stDynamicData0" VarB="Dynamic Data 0^Value 2" Size="32" OffsA="96"/>
<Link VarA="PlcTask Inputs^PRG_Main._fbEtcher2._fbRobot.stRobotInputs^stDynamicData0" VarB="Dynamic Data 0^Value 3" Size="32" OffsA="128"/>
<Link VarA="PlcTask Inputs^PRG_Main._fbEtcher2._fbRobot.stRobotInputs^stDynamicData0" VarB="Dynamic Data 0^Value 4" Size="32" OffsA="160"/>
<Link VarA="PlcTask Inputs^PRG_Main._fbEtcher2._fbRobot.stRobotInputs^stDynamicData0" VarB="Dynamic Data 0^Value 5" Size="32" OffsA="192"/>
<Link VarA="PlcTask Inputs^PRG_Main._fbEtcher2._fbRobot.stRobotInputs^stDynamicData1" VarB="Dynamic Data 1^Dynamic Type" Size="32"/>
<Link VarA="PlcTask Inputs^PRG_Main._fbEtcher2._fbRobot.stRobotInputs^stDynamicData1" VarB="Dynamic Data 1^Value 0" Size="32" OffsA="32"/>
<Link VarA="PlcTask Inputs^PRG_Main._fbEtcher2._fbRobot.stRobotInputs^stDynamicData1" VarB="Dynamic Data 1^Value 1" Size="32" OffsA="64"/>
<Link VarA="PlcTask Inputs^PRG_Main._fbEtcher2._fbRobot.stRobotInputs^stDynamicData1" VarB="Dynamic Data 1^Value 2" Size="32" OffsA="96"/>
<Link VarA="PlcTask Inputs^PRG_Main._fbEtcher2._fbRobot.stRobotInputs^stDynamicData1" VarB="Dynamic Data 1^Value 3" Size="32" OffsA="128"/>
<Link VarA="PlcTask Inputs^PRG_Main._fbEtcher2._fbRobot.stRobotInputs^stDynamicData1" VarB="Dynamic Data 1^Value 4" Size="32" OffsA="160"/>
<Link VarA="PlcTask Inputs^PRG_Main._fbEtcher2._fbRobot.stRobotInputs^stDynamicData1" VarB="Dynamic Data 1^Value 5" Size="32" OffsA="192"/>
<Link VarA="PlcTask Inputs^PRG_Main._fbEtcher2._fbRobot.stRobotInputs^stDynamicData2" VarB="Dynamic Data 2^Dynamic Type" Size="32"/>
<Link VarA="PlcTask Inputs^PRG_Main._fbEtcher2._fbRobot.stRobotInputs^stDynamicData2" VarB="Dynamic Data 2^Value 0" Size="32" OffsA="32"/>
<Link VarA="PlcTask Inputs^PRG_Main._fbEtcher2._fbRobot.stRobotInputs^stDynamicData2" VarB="Dynamic Data 2^Value 1" Size="32" OffsA="64"/>
<Link VarA="PlcTask Inputs^PRG_Main._fbEtcher2._fbRobot.stRobotInputs^stDynamicData2" VarB="Dynamic Data 2^Value 2" Size="32" OffsA="96"/>
<Link VarA="PlcTask Inputs^PRG_Main._fbEtcher2._fbRobot.stRobotInputs^stDynamicData2" VarB="Dynamic Data 2^Value 3" Size="32" OffsA="128"/>
<Link VarA="PlcTask Inputs^PRG_Main._fbEtcher2._fbRobot.stRobotInputs^stDynamicData2" VarB="Dynamic Data 2^Value 4" Size="32" OffsA="160"/>
<Link VarA="PlcTask Inputs^PRG_Main._fbEtcher2._fbRobot.stRobotInputs^stDynamicData2" VarB="Dynamic Data 2^Value 5" Size="32" OffsA="192"/>
<Link VarA="PlcTask Inputs^PRG_Main._fbEtcher2._fbRobot.stRobotInputs^stDynamicData3" VarB="Dynamic Data 3^Dynamic Type" Size="32"/>
<Link VarA="PlcTask Inputs^PRG_Main._fbEtcher2._fbRobot.stRobotInputs^stDynamicData3" VarB="Dynamic Data 3^Value 0" Size="32" OffsA="32"/>
<Link VarA="PlcTask Inputs^PRG_Main._fbEtcher2._fbRobot.stRobotInputs^stDynamicData3" VarB="Dynamic Data 3^Value 1" Size="32" OffsA="64"/>
<Link VarA="PlcTask Inputs^PRG_Main._fbEtcher2._fbRobot.stRobotInputs^stDynamicData3" VarB="Dynamic Data 3^Value 2" Size="32" OffsA="96"/>
<Link VarA="PlcTask Inputs^PRG_Main._fbEtcher2._fbRobot.stRobotInputs^stDynamicData3" VarB="Dynamic Data 3^Value 3" Size="32" OffsA="128"/>
<Link VarA="PlcTask Inputs^PRG_Main._fbEtcher2._fbRobot.stRobotInputs^stDynamicData3" VarB="Dynamic Data 3^Value 4" Size="32" OffsA="160"/>
<Link VarA="PlcTask Inputs^PRG_Main._fbEtcher2._fbRobot.stRobotInputs^stDynamicData3" VarB="Dynamic Data 3^Value 5" Size="32" OffsA="192"/>
<Link VarA="PlcTask Inputs^PRG_Main._fbEtcher2._fbRobot.stRobotInputs^stEndEffectorPose^rSubIndex_001" VarB="End-Effector Pose^SubIndex 001"/> <Link VarA="PlcTask Inputs^PRG_Main._fbEtcher2._fbRobot.stRobotInputs^stEndEffectorPose^rSubIndex_001" VarB="End-Effector Pose^SubIndex 001"/>
<Link VarA="PlcTask Inputs^PRG_Main._fbEtcher2._fbRobot.stRobotInputs^stEndEffectorPose^rSubIndex_002" VarB="End-Effector Pose^SubIndex 002"/> <Link VarA="PlcTask Inputs^PRG_Main._fbEtcher2._fbRobot.stRobotInputs^stEndEffectorPose^rSubIndex_002" VarB="End-Effector Pose^SubIndex 002"/>
<Link VarA="PlcTask Inputs^PRG_Main._fbEtcher2._fbRobot.stRobotInputs^stEndEffectorPose^rSubIndex_003" VarB="End-Effector Pose^SubIndex 003"/> <Link VarA="PlcTask Inputs^PRG_Main._fbEtcher2._fbRobot.stRobotInputs^stEndEffectorPose^rSubIndex_003" VarB="End-Effector Pose^SubIndex 003"/>
@@ -239,85 +434,6 @@
<Link VarA="PlcTask Inputs^PRG_Main._fbEtcher2._fbRobot.stRobotInputs^stRobotTimestamp^udiDynamic_Data_Cycles" VarB="Robot Timestamp^Dynamic Data Cycles"/> <Link VarA="PlcTask Inputs^PRG_Main._fbEtcher2._fbRobot.stRobotInputs^stRobotTimestamp^udiDynamic_Data_Cycles" VarB="Robot Timestamp^Dynamic Data Cycles"/>
<Link VarA="PlcTask Inputs^PRG_Main._fbEtcher2._fbRobot.stRobotInputs^stRobotTimestamp^udiTimestamp_Microseconds" VarB="Robot Timestamp^Timestamp Microseconds"/> <Link VarA="PlcTask Inputs^PRG_Main._fbEtcher2._fbRobot.stRobotInputs^stRobotTimestamp^udiTimestamp_Microseconds" VarB="Robot Timestamp^Timestamp Microseconds"/>
<Link VarA="PlcTask Inputs^PRG_Main._fbEtcher2._fbRobot.stRobotInputs^stRobotTimestamp^udiTimestamp_Seconds" VarB="Robot Timestamp^Timestamp Seconds"/> <Link VarA="PlcTask Inputs^PRG_Main._fbEtcher2._fbRobot.stRobotInputs^stRobotTimestamp^udiTimestamp_Seconds" VarB="Robot Timestamp^Timestamp Seconds"/>
<Link VarA="PlcTask Inputs^PRG_Main._fbEtcher2._fbRobot.stRobotInputs^stSafetyStatus" VarB="Safety Status^Connection Dropped" Size="1" OffsA="10"/>
<Link VarA="PlcTask Inputs^PRG_Main._fbEtcher2._fbRobot.stRobotInputs^stSafetyStatus" VarB="Safety Status^Connection Dropped Resettable" Size="1" OffsA="42"/>
<Link VarA="PlcTask Inputs^PRG_Main._fbEtcher2._fbRobot.stRobotInputs^stSafetyStatus" VarB="Safety Status^Estop" Size="1"/>
<Link VarA="PlcTask Inputs^PRG_Main._fbEtcher2._fbRobot.stRobotInputs^stSafetyStatus" VarB="Safety Status^Estop Resettable" Size="1" OffsA="32"/>
<Link VarA="PlcTask Inputs^PRG_Main._fbEtcher2._fbRobot.stRobotInputs^stSafetyStatus" VarB="Safety Status^PStop2" Size="1" OffsA="2"/>
<Link VarA="PlcTask Inputs^PRG_Main._fbEtcher2._fbRobot.stRobotInputs^stSafetyStatus" VarB="Safety Status^PStop2 Resettable" Size="1" OffsA="34"/>
<Link VarA="PlcTask Inputs^PRG_Main._fbEtcher2._fbRobot.stRobotInputs^stSafetyStatus" VarB="Safety Status^Reboot" Size="1" OffsA="7"/>
<Link VarA="PlcTask Inputs^PRG_Main._fbEtcher2._fbRobot.stRobotInputs^stSafetyStatus" VarB="Safety Status^Reboot Resettable" Size="1" OffsA="39"/>
<Link VarA="PlcTask Inputs^PRG_Main._fbEtcher2._fbRobot.stRobotInputs^stSafetyStatus" VarB="Safety Status^Reset Ready" Size="1" OffsA="72"/>
<Link VarA="PlcTask Inputs^PRG_Main._fbEtcher2._fbRobot.stRobotInputs^stSafetyStatus" VarB="Safety Status^Unused10" Size="1" OffsA="9"/>
<Link VarA="PlcTask Inputs^PRG_Main._fbEtcher2._fbRobot.stRobotInputs^stSafetyStatus" VarB="Safety Status^Unused12" Size="1" OffsA="11"/>
<Link VarA="PlcTask Inputs^PRG_Main._fbEtcher2._fbRobot.stRobotInputs^stSafetyStatus" VarB="Safety Status^Unused13" Size="1" OffsA="12"/>
<Link VarA="PlcTask Inputs^PRG_Main._fbEtcher2._fbRobot.stRobotInputs^stSafetyStatus" VarB="Safety Status^Unused14" Size="1" OffsA="13"/>
<Link VarA="PlcTask Inputs^PRG_Main._fbEtcher2._fbRobot.stRobotInputs^stSafetyStatus" VarB="Safety Status^Unused15" Size="1" OffsA="14"/>
<Link VarA="PlcTask Inputs^PRG_Main._fbEtcher2._fbRobot.stRobotInputs^stSafetyStatus" VarB="Safety Status^Unused16" Size="1" OffsA="15"/>
<Link VarA="PlcTask Inputs^PRG_Main._fbEtcher2._fbRobot.stRobotInputs^stSafetyStatus" VarB="Safety Status^Unused17" Size="1" OffsA="16"/>
<Link VarA="PlcTask Inputs^PRG_Main._fbEtcher2._fbRobot.stRobotInputs^stSafetyStatus" VarB="Safety Status^Unused18" Size="1" OffsA="17"/>
<Link VarA="PlcTask Inputs^PRG_Main._fbEtcher2._fbRobot.stRobotInputs^stSafetyStatus" VarB="Safety Status^Unused19" Size="1" OffsA="18"/>
<Link VarA="PlcTask Inputs^PRG_Main._fbEtcher2._fbRobot.stRobotInputs^stSafetyStatus" VarB="Safety Status^Unused2" Size="1" OffsA="1"/>
<Link VarA="PlcTask Inputs^PRG_Main._fbEtcher2._fbRobot.stRobotInputs^stSafetyStatus" VarB="Safety Status^Unused20" Size="1" OffsA="19"/>
<Link VarA="PlcTask Inputs^PRG_Main._fbEtcher2._fbRobot.stRobotInputs^stSafetyStatus" VarB="Safety Status^Unused21" Size="1" OffsA="20"/>
<Link VarA="PlcTask Inputs^PRG_Main._fbEtcher2._fbRobot.stRobotInputs^stSafetyStatus" VarB="Safety Status^Unused22" Size="1" OffsA="21"/>
<Link VarA="PlcTask Inputs^PRG_Main._fbEtcher2._fbRobot.stRobotInputs^stSafetyStatus" VarB="Safety Status^Unused23" Size="1" OffsA="22"/>
<Link VarA="PlcTask Inputs^PRG_Main._fbEtcher2._fbRobot.stRobotInputs^stSafetyStatus" VarB="Safety Status^Unused24" Size="1" OffsA="23"/>
<Link VarA="PlcTask Inputs^PRG_Main._fbEtcher2._fbRobot.stRobotInputs^stSafetyStatus" VarB="Safety Status^Unused25" Size="1" OffsA="24"/>
<Link VarA="PlcTask Inputs^PRG_Main._fbEtcher2._fbRobot.stRobotInputs^stSafetyStatus" VarB="Safety Status^Unused26" Size="1" OffsA="25"/>
<Link VarA="PlcTask Inputs^PRG_Main._fbEtcher2._fbRobot.stRobotInputs^stSafetyStatus" VarB="Safety Status^Unused27" Size="1" OffsA="26"/>
<Link VarA="PlcTask Inputs^PRG_Main._fbEtcher2._fbRobot.stRobotInputs^stSafetyStatus" VarB="Safety Status^Unused28" Size="1" OffsA="27"/>
<Link VarA="PlcTask Inputs^PRG_Main._fbEtcher2._fbRobot.stRobotInputs^stSafetyStatus" VarB="Safety Status^Unused29" Size="1" OffsA="28"/>
<Link VarA="PlcTask Inputs^PRG_Main._fbEtcher2._fbRobot.stRobotInputs^stSafetyStatus" VarB="Safety Status^Unused30" Size="1" OffsA="29"/>
<Link VarA="PlcTask Inputs^PRG_Main._fbEtcher2._fbRobot.stRobotInputs^stSafetyStatus" VarB="Safety Status^Unused31" Size="1" OffsA="30"/>
<Link VarA="PlcTask Inputs^PRG_Main._fbEtcher2._fbRobot.stRobotInputs^stSafetyStatus" VarB="Safety Status^Unused32" Size="1" OffsA="31"/>
<Link VarA="PlcTask Inputs^PRG_Main._fbEtcher2._fbRobot.stRobotInputs^stSafetyStatus" VarB="Safety Status^Unused34" Size="1" OffsA="33"/>
<Link VarA="PlcTask Inputs^PRG_Main._fbEtcher2._fbRobot.stRobotInputs^stSafetyStatus" VarB="Safety Status^Unused36" Size="1" OffsA="35"/>
<Link VarA="PlcTask Inputs^PRG_Main._fbEtcher2._fbRobot.stRobotInputs^stSafetyStatus" VarB="Safety Status^Unused37" Size="1" OffsA="36"/>
<Link VarA="PlcTask Inputs^PRG_Main._fbEtcher2._fbRobot.stRobotInputs^stSafetyStatus" VarB="Safety Status^Unused38" Size="1" OffsA="37"/>
<Link VarA="PlcTask Inputs^PRG_Main._fbEtcher2._fbRobot.stRobotInputs^stSafetyStatus" VarB="Safety Status^Unused39" Size="1" OffsA="38"/>
<Link VarA="PlcTask Inputs^PRG_Main._fbEtcher2._fbRobot.stRobotInputs^stSafetyStatus" VarB="Safety Status^Unused4" Size="1" OffsA="3"/>
<Link VarA="PlcTask Inputs^PRG_Main._fbEtcher2._fbRobot.stRobotInputs^stSafetyStatus" VarB="Safety Status^Unused41" Size="1" OffsA="40"/>
<Link VarA="PlcTask Inputs^PRG_Main._fbEtcher2._fbRobot.stRobotInputs^stSafetyStatus" VarB="Safety Status^Unused42" Size="1" OffsA="41"/>
<Link VarA="PlcTask Inputs^PRG_Main._fbEtcher2._fbRobot.stRobotInputs^stSafetyStatus" VarB="Safety Status^Unused44" Size="1" OffsA="43"/>
<Link VarA="PlcTask Inputs^PRG_Main._fbEtcher2._fbRobot.stRobotInputs^stSafetyStatus" VarB="Safety Status^Unused45" Size="1" OffsA="44"/>
<Link VarA="PlcTask Inputs^PRG_Main._fbEtcher2._fbRobot.stRobotInputs^stSafetyStatus" VarB="Safety Status^Unused46" Size="1" OffsA="45"/>
<Link VarA="PlcTask Inputs^PRG_Main._fbEtcher2._fbRobot.stRobotInputs^stSafetyStatus" VarB="Safety Status^Unused47" Size="1" OffsA="46"/>
<Link VarA="PlcTask Inputs^PRG_Main._fbEtcher2._fbRobot.stRobotInputs^stSafetyStatus" VarB="Safety Status^Unused48" Size="1" OffsA="47"/>
<Link VarA="PlcTask Inputs^PRG_Main._fbEtcher2._fbRobot.stRobotInputs^stSafetyStatus" VarB="Safety Status^Unused49" Size="1" OffsA="48"/>
<Link VarA="PlcTask Inputs^PRG_Main._fbEtcher2._fbRobot.stRobotInputs^stSafetyStatus" VarB="Safety Status^Unused5" Size="1" OffsA="4"/>
<Link VarA="PlcTask Inputs^PRG_Main._fbEtcher2._fbRobot.stRobotInputs^stSafetyStatus" VarB="Safety Status^Unused50" Size="1" OffsA="49"/>
<Link VarA="PlcTask Inputs^PRG_Main._fbEtcher2._fbRobot.stRobotInputs^stSafetyStatus" VarB="Safety Status^Unused51" Size="1" OffsA="50"/>
<Link VarA="PlcTask Inputs^PRG_Main._fbEtcher2._fbRobot.stRobotInputs^stSafetyStatus" VarB="Safety Status^Unused52" Size="1" OffsA="51"/>
<Link VarA="PlcTask Inputs^PRG_Main._fbEtcher2._fbRobot.stRobotInputs^stSafetyStatus" VarB="Safety Status^Unused53" Size="1" OffsA="52"/>
<Link VarA="PlcTask Inputs^PRG_Main._fbEtcher2._fbRobot.stRobotInputs^stSafetyStatus" VarB="Safety Status^Unused54" Size="1" OffsA="53"/>
<Link VarA="PlcTask Inputs^PRG_Main._fbEtcher2._fbRobot.stRobotInputs^stSafetyStatus" VarB="Safety Status^Unused55" Size="1" OffsA="54"/>
<Link VarA="PlcTask Inputs^PRG_Main._fbEtcher2._fbRobot.stRobotInputs^stSafetyStatus" VarB="Safety Status^Unused56" Size="1" OffsA="55"/>
<Link VarA="PlcTask Inputs^PRG_Main._fbEtcher2._fbRobot.stRobotInputs^stSafetyStatus" VarB="Safety Status^Unused57" Size="1" OffsA="56"/>
<Link VarA="PlcTask Inputs^PRG_Main._fbEtcher2._fbRobot.stRobotInputs^stSafetyStatus" VarB="Safety Status^Unused58" Size="1" OffsA="57"/>
<Link VarA="PlcTask Inputs^PRG_Main._fbEtcher2._fbRobot.stRobotInputs^stSafetyStatus" VarB="Safety Status^Unused59" Size="1" OffsA="58"/>
<Link VarA="PlcTask Inputs^PRG_Main._fbEtcher2._fbRobot.stRobotInputs^stSafetyStatus" VarB="Safety Status^Unused6" Size="1" OffsA="5"/>
<Link VarA="PlcTask Inputs^PRG_Main._fbEtcher2._fbRobot.stRobotInputs^stSafetyStatus" VarB="Safety Status^Unused60" Size="1" OffsA="59"/>
<Link VarA="PlcTask Inputs^PRG_Main._fbEtcher2._fbRobot.stRobotInputs^stSafetyStatus" VarB="Safety Status^Unused61" Size="1" OffsA="60"/>
<Link VarA="PlcTask Inputs^PRG_Main._fbEtcher2._fbRobot.stRobotInputs^stSafetyStatus" VarB="Safety Status^Unused62" Size="1" OffsA="61"/>
<Link VarA="PlcTask Inputs^PRG_Main._fbEtcher2._fbRobot.stRobotInputs^stSafetyStatus" VarB="Safety Status^Unused63" Size="1" OffsA="62"/>
<Link VarA="PlcTask Inputs^PRG_Main._fbEtcher2._fbRobot.stRobotInputs^stSafetyStatus" VarB="Safety Status^Unused64" Size="1" OffsA="63"/>
<Link VarA="PlcTask Inputs^PRG_Main._fbEtcher2._fbRobot.stRobotInputs^stSafetyStatus" VarB="Safety Status^Unused65" Size="8" OffsA="64"/>
<Link VarA="PlcTask Inputs^PRG_Main._fbEtcher2._fbRobot.stRobotInputs^stSafetyStatus" VarB="Safety Status^Unused68" Size="1" OffsA="74"/>
<Link VarA="PlcTask Inputs^PRG_Main._fbEtcher2._fbRobot.stRobotInputs^stSafetyStatus" VarB="Safety Status^Unused69" Size="1" OffsA="75"/>
<Link VarA="PlcTask Inputs^PRG_Main._fbEtcher2._fbRobot.stRobotInputs^stSafetyStatus" VarB="Safety Status^Unused7" Size="1" OffsA="6"/>
<Link VarA="PlcTask Inputs^PRG_Main._fbEtcher2._fbRobot.stRobotInputs^stSafetyStatus" VarB="Safety Status^Unused70" Size="1" OffsA="76"/>
<Link VarA="PlcTask Inputs^PRG_Main._fbEtcher2._fbRobot.stRobotInputs^stSafetyStatus" VarB="Safety Status^Unused71" Size="1" OffsA="77"/>
<Link VarA="PlcTask Inputs^PRG_Main._fbEtcher2._fbRobot.stRobotInputs^stSafetyStatus" VarB="Safety Status^Unused72" Size="1" OffsA="78"/>
<Link VarA="PlcTask Inputs^PRG_Main._fbEtcher2._fbRobot.stRobotInputs^stSafetyStatus" VarB="Safety Status^Unused73" Size="1" OffsA="79"/>
<Link VarA="PlcTask Inputs^PRG_Main._fbEtcher2._fbRobot.stRobotInputs^stSafetyStatus" VarB="Safety Status^Unused74" Size="1" OffsA="80"/>
<Link VarA="PlcTask Inputs^PRG_Main._fbEtcher2._fbRobot.stRobotInputs^stSafetyStatus" VarB="Safety Status^Unused75" Size="1" OffsA="81"/>
<Link VarA="PlcTask Inputs^PRG_Main._fbEtcher2._fbRobot.stRobotInputs^stSafetyStatus" VarB="Safety Status^Unused76" Size="1" OffsA="82"/>
<Link VarA="PlcTask Inputs^PRG_Main._fbEtcher2._fbRobot.stRobotInputs^stSafetyStatus" VarB="Safety Status^Unused77" Size="1" OffsA="83"/>
<Link VarA="PlcTask Inputs^PRG_Main._fbEtcher2._fbRobot.stRobotInputs^stSafetyStatus" VarB="Safety Status^Unused78" Size="1" OffsA="84"/>
<Link VarA="PlcTask Inputs^PRG_Main._fbEtcher2._fbRobot.stRobotInputs^stSafetyStatus" VarB="Safety Status^Unused79" Size="1" OffsA="85"/>
<Link VarA="PlcTask Inputs^PRG_Main._fbEtcher2._fbRobot.stRobotInputs^stSafetyStatus" VarB="Safety Status^Unused9" Size="1" OffsA="8"/>
<Link VarA="PlcTask Inputs^PRG_Main._fbEtcher2._fbRobot.stRobotInputs^stSafetyStatus" VarB="Safety Status^Vmotor on" Size="1" OffsA="73"/>
<Link VarA="PlcTask Inputs^PRG_Main._fbEtcher2._fbRobot.stRobotInputs^stTRF^rSubIndex001" VarB="TRF^SubIndex 001"/> <Link VarA="PlcTask Inputs^PRG_Main._fbEtcher2._fbRobot.stRobotInputs^stTRF^rSubIndex001" VarB="TRF^SubIndex 001"/>
<Link VarA="PlcTask Inputs^PRG_Main._fbEtcher2._fbRobot.stRobotInputs^stTRF^rSubIndex002" VarB="TRF^SubIndex 002"/> <Link VarA="PlcTask Inputs^PRG_Main._fbEtcher2._fbRobot.stRobotInputs^stTRF^rSubIndex002" VarB="TRF^SubIndex 002"/>
<Link VarA="PlcTask Inputs^PRG_Main._fbEtcher2._fbRobot.stRobotInputs^stTRF^rSubIndex003" VarB="TRF^SubIndex 003"/> <Link VarA="PlcTask Inputs^PRG_Main._fbEtcher2._fbRobot.stRobotInputs^stTRF^rSubIndex003" VarB="TRF^SubIndex 003"/>

View File

@@ -2627,7 +2627,7 @@ External Setpoint Generation:
</Properties> </Properties>
</DataType> </DataType>
</DataTypes> </DataTypes>
<Instance TmcHash="{00C5607E-7A34-8822-F938-2238C3FA34EE}"> <Instance TmcHash="{BEB1669A-FD40-47A8-2118-6427AD9B7C58}">
<Vars VarGrpType="1"> <Vars VarGrpType="1">
<Name>PlcTask Inputs</Name> <Name>PlcTask Inputs</Name>
<Var> <Var>
@@ -2931,6 +2931,10 @@ External Setpoint Generation:
</Vars> </Vars>
<Vars VarGrpType="2" AreaNo="1"> <Vars VarGrpType="2" AreaNo="1">
<Name>PlcTask Outputs</Name> <Name>PlcTask Outputs</Name>
<Var>
<Name>PRG_Main.xTriggerCamera</Name>
<Type>BOOL</Type>
</Var>
<Var> <Var>
<Name>PRG_Main._fbRobot.stCtrl</Name> <Name>PRG_Main._fbRobot.stCtrl</Name>
<Comment><![CDATA[ 0 - Nicht aus <Comment><![CDATA[ 0 - Nicht aus
@@ -3194,10 +3198,6 @@ External Setpoint Generation:
<Comment><![CDATA[ Use xCloseValve for normally open valves]]></Comment> <Comment><![CDATA[ Use xCloseValve for normally open valves]]></Comment>
<Type>BOOL</Type> <Type>BOOL</Type>
</Var> </Var>
<Var>
<Name>PRG_Main.xTriggerCamera</Name>
<Type>BOOL</Type>
</Var>
<Var> <Var>
<Name>PRG_Safety.xRun</Name> <Name>PRG_Safety.xRun</Name>
<Type>BOOL</Type> <Type>BOOL</Type>