Some refactoring after static code analysis
This commit is contained in:
24
Infineon.sln
24
Infineon.sln
@@ -25,8 +25,8 @@ Global
|
||||
Release|TwinCAT RT (x86) = Release|TwinCAT RT (x86)
|
||||
EndGlobalSection
|
||||
GlobalSection(ProjectConfigurationPlatforms) = postSolution
|
||||
{CB97A0B0-7E22-470D-8550-AA318EA46E50}.Debug|TwinCAT HMI.ActiveCfg = Debug|TwinCAT OS (x64)
|
||||
{CB97A0B0-7E22-470D-8550-AA318EA46E50}.Debug|TwinCAT HMI.Build.0 = Debug|TwinCAT OS (x64)
|
||||
{CB97A0B0-7E22-470D-8550-AA318EA46E50}.Debug|TwinCAT HMI.ActiveCfg = Debug|TwinCAT RT (x64)
|
||||
{CB97A0B0-7E22-470D-8550-AA318EA46E50}.Debug|TwinCAT HMI.Build.0 = Debug|TwinCAT RT (x64)
|
||||
{CB97A0B0-7E22-470D-8550-AA318EA46E50}.Debug|TwinCAT OS (ARMV7-A).ActiveCfg = Debug|TwinCAT OS (ARMV7-A)
|
||||
{CB97A0B0-7E22-470D-8550-AA318EA46E50}.Debug|TwinCAT OS (ARMV7-A).Build.0 = Debug|TwinCAT OS (ARMV7-A)
|
||||
{CB97A0B0-7E22-470D-8550-AA318EA46E50}.Debug|TwinCAT OS (ARMV7-M).ActiveCfg = Debug|TwinCAT OS (ARMV7-M)
|
||||
@@ -41,8 +41,8 @@ Global
|
||||
{CB97A0B0-7E22-470D-8550-AA318EA46E50}.Debug|TwinCAT RT (x64).Build.0 = Debug|TwinCAT RT (x64)
|
||||
{CB97A0B0-7E22-470D-8550-AA318EA46E50}.Debug|TwinCAT RT (x86).ActiveCfg = Debug|TwinCAT RT (x86)
|
||||
{CB97A0B0-7E22-470D-8550-AA318EA46E50}.Debug|TwinCAT RT (x86).Build.0 = Debug|TwinCAT RT (x86)
|
||||
{CB97A0B0-7E22-470D-8550-AA318EA46E50}.Release|TwinCAT HMI.ActiveCfg = Release|TwinCAT OS (x64)
|
||||
{CB97A0B0-7E22-470D-8550-AA318EA46E50}.Release|TwinCAT HMI.Build.0 = Release|TwinCAT OS (x64)
|
||||
{CB97A0B0-7E22-470D-8550-AA318EA46E50}.Release|TwinCAT HMI.ActiveCfg = Release|TwinCAT RT (x64)
|
||||
{CB97A0B0-7E22-470D-8550-AA318EA46E50}.Release|TwinCAT HMI.Build.0 = Release|TwinCAT RT (x64)
|
||||
{CB97A0B0-7E22-470D-8550-AA318EA46E50}.Release|TwinCAT OS (ARMV7-A).ActiveCfg = Release|TwinCAT OS (ARMV7-A)
|
||||
{CB97A0B0-7E22-470D-8550-AA318EA46E50}.Release|TwinCAT OS (ARMV7-A).Build.0 = Release|TwinCAT OS (ARMV7-A)
|
||||
{CB97A0B0-7E22-470D-8550-AA318EA46E50}.Release|TwinCAT OS (ARMV7-M).ActiveCfg = Release|TwinCAT OS (ARMV7-M)
|
||||
@@ -57,8 +57,8 @@ Global
|
||||
{CB97A0B0-7E22-470D-8550-AA318EA46E50}.Release|TwinCAT RT (x64).Build.0 = Release|TwinCAT RT (x64)
|
||||
{CB97A0B0-7E22-470D-8550-AA318EA46E50}.Release|TwinCAT RT (x86).ActiveCfg = Release|TwinCAT RT (x86)
|
||||
{CB97A0B0-7E22-470D-8550-AA318EA46E50}.Release|TwinCAT RT (x86).Build.0 = Release|TwinCAT RT (x86)
|
||||
{384A40E7-3107-4D80-8361-04B00829260A}.Debug|TwinCAT HMI.ActiveCfg = Debug|TwinCAT OS (x64)
|
||||
{384A40E7-3107-4D80-8361-04B00829260A}.Debug|TwinCAT HMI.Build.0 = Debug|TwinCAT OS (x64)
|
||||
{384A40E7-3107-4D80-8361-04B00829260A}.Debug|TwinCAT HMI.ActiveCfg = Debug|TwinCAT RT (x64)
|
||||
{384A40E7-3107-4D80-8361-04B00829260A}.Debug|TwinCAT HMI.Build.0 = Debug|TwinCAT RT (x64)
|
||||
{384A40E7-3107-4D80-8361-04B00829260A}.Debug|TwinCAT OS (ARMV7-A).ActiveCfg = Debug|TwinCAT OS (ARMV7-A)
|
||||
{384A40E7-3107-4D80-8361-04B00829260A}.Debug|TwinCAT OS (ARMV7-A).Build.0 = Debug|TwinCAT OS (ARMV7-A)
|
||||
{384A40E7-3107-4D80-8361-04B00829260A}.Debug|TwinCAT OS (ARMV7-M).ActiveCfg = Debug|TwinCAT OS (ARMV7-M)
|
||||
@@ -73,8 +73,8 @@ Global
|
||||
{384A40E7-3107-4D80-8361-04B00829260A}.Debug|TwinCAT RT (x64).Build.0 = Debug|TwinCAT RT (x64)
|
||||
{384A40E7-3107-4D80-8361-04B00829260A}.Debug|TwinCAT RT (x86).ActiveCfg = Debug|TwinCAT RT (x86)
|
||||
{384A40E7-3107-4D80-8361-04B00829260A}.Debug|TwinCAT RT (x86).Build.0 = Debug|TwinCAT RT (x86)
|
||||
{384A40E7-3107-4D80-8361-04B00829260A}.Release|TwinCAT HMI.ActiveCfg = Release|TwinCAT OS (x64)
|
||||
{384A40E7-3107-4D80-8361-04B00829260A}.Release|TwinCAT HMI.Build.0 = Release|TwinCAT OS (x64)
|
||||
{384A40E7-3107-4D80-8361-04B00829260A}.Release|TwinCAT HMI.ActiveCfg = Release|TwinCAT RT (x64)
|
||||
{384A40E7-3107-4D80-8361-04B00829260A}.Release|TwinCAT HMI.Build.0 = Release|TwinCAT RT (x64)
|
||||
{384A40E7-3107-4D80-8361-04B00829260A}.Release|TwinCAT OS (ARMV7-A).ActiveCfg = Release|TwinCAT OS (ARMV7-A)
|
||||
{384A40E7-3107-4D80-8361-04B00829260A}.Release|TwinCAT OS (ARMV7-A).Build.0 = Release|TwinCAT OS (ARMV7-A)
|
||||
{384A40E7-3107-4D80-8361-04B00829260A}.Release|TwinCAT OS (ARMV7-M).ActiveCfg = Release|TwinCAT OS (ARMV7-M)
|
||||
@@ -89,8 +89,8 @@ Global
|
||||
{384A40E7-3107-4D80-8361-04B00829260A}.Release|TwinCAT RT (x64).Build.0 = Release|TwinCAT RT (x64)
|
||||
{384A40E7-3107-4D80-8361-04B00829260A}.Release|TwinCAT RT (x86).ActiveCfg = Release|TwinCAT RT (x86)
|
||||
{384A40E7-3107-4D80-8361-04B00829260A}.Release|TwinCAT RT (x86).Build.0 = Release|TwinCAT RT (x86)
|
||||
{16E7B360-DCD5-431E-9380-EF0E96A38071}.Debug|TwinCAT HMI.ActiveCfg = Debug|TwinCAT OS (x64)
|
||||
{16E7B360-DCD5-431E-9380-EF0E96A38071}.Debug|TwinCAT HMI.Build.0 = Debug|TwinCAT OS (x64)
|
||||
{16E7B360-DCD5-431E-9380-EF0E96A38071}.Debug|TwinCAT HMI.ActiveCfg = Debug|TwinCAT RT (x64)
|
||||
{16E7B360-DCD5-431E-9380-EF0E96A38071}.Debug|TwinCAT HMI.Build.0 = Debug|TwinCAT RT (x64)
|
||||
{16E7B360-DCD5-431E-9380-EF0E96A38071}.Debug|TwinCAT OS (ARMV7-A).ActiveCfg = Debug|TwinCAT OS (ARMV7-A)
|
||||
{16E7B360-DCD5-431E-9380-EF0E96A38071}.Debug|TwinCAT OS (ARMV7-A).Build.0 = Debug|TwinCAT OS (ARMV7-A)
|
||||
{16E7B360-DCD5-431E-9380-EF0E96A38071}.Debug|TwinCAT OS (ARMV7-M).ActiveCfg = Debug|TwinCAT OS (ARMV7-M)
|
||||
@@ -105,8 +105,8 @@ Global
|
||||
{16E7B360-DCD5-431E-9380-EF0E96A38071}.Debug|TwinCAT RT (x64).Build.0 = Debug|TwinCAT RT (x64)
|
||||
{16E7B360-DCD5-431E-9380-EF0E96A38071}.Debug|TwinCAT RT (x86).ActiveCfg = Debug|TwinCAT RT (x86)
|
||||
{16E7B360-DCD5-431E-9380-EF0E96A38071}.Debug|TwinCAT RT (x86).Build.0 = Debug|TwinCAT RT (x86)
|
||||
{16E7B360-DCD5-431E-9380-EF0E96A38071}.Release|TwinCAT HMI.ActiveCfg = Release|TwinCAT OS (x64)
|
||||
{16E7B360-DCD5-431E-9380-EF0E96A38071}.Release|TwinCAT HMI.Build.0 = Release|TwinCAT OS (x64)
|
||||
{16E7B360-DCD5-431E-9380-EF0E96A38071}.Release|TwinCAT HMI.ActiveCfg = Release|TwinCAT RT (x64)
|
||||
{16E7B360-DCD5-431E-9380-EF0E96A38071}.Release|TwinCAT HMI.Build.0 = Release|TwinCAT RT (x64)
|
||||
{16E7B360-DCD5-431E-9380-EF0E96A38071}.Release|TwinCAT OS (ARMV7-A).ActiveCfg = Release|TwinCAT OS (ARMV7-A)
|
||||
{16E7B360-DCD5-431E-9380-EF0E96A38071}.Release|TwinCAT OS (ARMV7-A).Build.0 = Release|TwinCAT OS (ARMV7-A)
|
||||
{16E7B360-DCD5-431E-9380-EF0E96A38071}.Release|TwinCAT OS (ARMV7-M).ActiveCfg = Release|TwinCAT OS (ARMV7-M)
|
||||
|
||||
@@ -1,14 +1,13 @@
|
||||
<?xml version="1.0"?>
|
||||
<TcSmProject xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="http://www.beckhoff.com/schemas/2012/07/TcSmProject" TcSmVersion="1.0" TcVersion="3.1.4026.20">
|
||||
<Project ProjectGUID="{CB97A0B0-7E22-470D-8550-AA318EA46E50}" TargetNetId="5.127.104.206.1.1" Target64Bit="true" ShowHideConfigurations="#x6">
|
||||
<Project ProjectGUID="{CB97A0B0-7E22-470D-8550-AA318EA46E50}" Target64Bit="true" ShowHideConfigurations="#x6">
|
||||
<System>
|
||||
<Settings MaxCpus="4" NonWinCpus="2">
|
||||
<Cpu CpuId="2"/>
|
||||
</Settings>
|
||||
<Settings MaxCpus="2"/>
|
||||
<Licenses>
|
||||
<Target>
|
||||
<ManualSelect>{2752D285-16AD-4E89-AE6C-80E72784D264}</ManualSelect>
|
||||
<LicenseDevice DongleHardwareId="2" DongleDevice="#x03020036" DongleLevel="60" DongleSystemId="{62CA069B-335C-D22F-33C1-C939EDC0FF9A}" DongleSerialNumber="000brrhk" DongleCacheLicense="true"/>
|
||||
<ManualSelect>{9FD32FC8-0CF9-4C5B-95FB-F35423496A77}</ManualSelect>
|
||||
<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"/>
|
||||
</Target>
|
||||
</Licenses>
|
||||
<Tasks>
|
||||
@@ -42,12 +41,4 @@
|
||||
<Device File="Device 5 (EtherCAT).xti" Id="5"/>
|
||||
</Io>
|
||||
</Project>
|
||||
<Mappings>
|
||||
<MappingInfo Identifier="{00000000-2001-0850-0020-500840000403}" Id="#x02030050"/>
|
||||
<MappingInfo Identifier="{00000000-2001-0850-0020-500851000403}" Id="#x02030030"/>
|
||||
<MappingInfo Identifier="{00000000-0010-0304-3000-040310000403}" Id="#x02030010"/>
|
||||
<MappingInfo Identifier="{00000000-0020-0304-3000-040322000403}" Id="#x02030040"/>
|
||||
<MappingInfo Identifier="{05000010-2001-0850-3000-040300205008}" Id="#x02030060" Watchdog="10000000040000000400000004000000"/>
|
||||
<MappingInfo Identifier="{03040050-0050-0304-5000-040350000403}" Id="#x02030020" Watchdog="04000000040000000400000004000000"/>
|
||||
</Mappings>
|
||||
</TcSmProject>
|
||||
|
||||
@@ -7,7 +7,7 @@ VAR
|
||||
_fbHVTester : FB_HVTester;
|
||||
_fbEtcher1 : FB_Etcher;
|
||||
_fbEtcher2 : FB_Etcher;
|
||||
_fbTrayFeederInput : FB_TrayFeeder(sIPAddr := '192.168.1.10', udiPort := 5000);
|
||||
_fbTrayFeederInput : FB_TrayFeeder(sIPAddr := '192.168.0.41', udiPort := 1337);
|
||||
_fbHeatCoolPlates : FB_HeatCoolPlates;
|
||||
_fbAligner : FB_Aligner;
|
||||
|
||||
@@ -20,7 +20,7 @@ VAR
|
||||
_stRobotJobParams : ST_KukaRobot_JobParams;
|
||||
_stUnitFeedbacks : ST_KukaRobot_UnitFeedbacks;
|
||||
|
||||
_stCamResult AT %I* : ST_TrayFeederCamPosData;
|
||||
stCamResult AT %I* : ST_TrayFeederCamPosData;
|
||||
|
||||
_rtStopRobotFromSafety : R_TRIG;
|
||||
|
||||
@@ -36,8 +36,8 @@ VAR
|
||||
_xStartCycle : BOOL;
|
||||
|
||||
_xStartTrigger : BOOL;
|
||||
_tofTriggerTime : TOF := (PT := T#1S);
|
||||
_xTriggerCamera AT %Q* : BOOL;
|
||||
_tofTriggerTime : TOF;
|
||||
xTriggerCamera AT %Q* : BOOL;
|
||||
|
||||
_iState : INT;
|
||||
END_VAR
|
||||
@@ -177,17 +177,22 @@ CASE _iState OF
|
||||
|
||||
// Align blank
|
||||
40:
|
||||
;
|
||||
|
||||
ELSE
|
||||
// Nothing to do here
|
||||
;
|
||||
END_CASE
|
||||
|
||||
// =====
|
||||
// DEBUG
|
||||
// =====
|
||||
|
||||
_tofTriggerTime(IN := _xStartTrigger);
|
||||
_tofTriggerTime(IN := _xStartTrigger, PT := T#1S);
|
||||
IF _xStartTrigger THEN
|
||||
_xStartTrigger := FALSE;
|
||||
END_IF
|
||||
_xTriggerCamera := _tofTriggerTime.Q;
|
||||
xTriggerCamera := _tofTriggerTime.Q;
|
||||
|
||||
// Reset alarm reset request
|
||||
GVL_SCADA.xErrAck := FALSE;
|
||||
@@ -383,6 +388,10 @@ CASE _iState OF
|
||||
ELSE
|
||||
_iState := 90;
|
||||
END_CASE
|
||||
|
||||
ELSE
|
||||
// Nothing to do here
|
||||
;
|
||||
END_CASE]]></ST>
|
||||
</Implementation>
|
||||
</Method>
|
||||
|
||||
@@ -8,34 +8,37 @@ VAR_INPUT
|
||||
END_VAR
|
||||
VAR_OUTPUT
|
||||
xStopRobot : BOOL := FALSE;
|
||||
xEStopOk AT %I* : BOOL;
|
||||
END_VAR
|
||||
VAR
|
||||
_xRun AT %Q* : BOOL;
|
||||
_xEStopOk AT %I* : BOOL;
|
||||
xComStartup AT %I* : BOOL;
|
||||
|
||||
xRequestOpenDoor AT %I* : BOOL;
|
||||
|
||||
_xRequestOpenDoor AT %I* : BOOL;
|
||||
_rtrigDoorUnlock : R_TRIG;
|
||||
xRun AT %Q* : BOOL;
|
||||
xErrorAck AT %Q* : BOOL;
|
||||
xLockDoor AT %Q* : BOOL := TRUE;
|
||||
|
||||
_xLockDoor AT %Q* : BOOL := TRUE;
|
||||
_rtDoorUnlock : R_TRIG;
|
||||
_tofErrorAck : TOF;
|
||||
|
||||
_xComStartup AT %I* : BOOL;
|
||||
|
||||
_xErrorAck AT %Q* : BOOL;
|
||||
_tofErrorAck : TOF := (PT := T#500MS);
|
||||
_xStopRobot : BOOL;
|
||||
END_VAR
|
||||
]]></Declaration>
|
||||
<Implementation>
|
||||
<ST><![CDATA[_xRun := NOT _xComStartup;
|
||||
<ST><![CDATA[xRun := NOT xComStartup;
|
||||
|
||||
_rtrigDoorUnlock(CLK := _xRequestOpenDoor AND xRobotStopped);
|
||||
IF _rtrigDoorUnlock.Q THEN
|
||||
xStopRobot := (NOT xStopRobot);
|
||||
_xLockDoor := (NOT _xLockDoor);
|
||||
_rtDoorUnlock(CLK := xRequestOpenDoor AND xRobotStopped);
|
||||
IF _rtDoorUnlock.Q THEN
|
||||
_xStopRobot := (NOT _xStopRobot);
|
||||
xLockDoor := (NOT xLockDoor);
|
||||
END_IF
|
||||
|
||||
// Reset safety group errors
|
||||
_tofErrorAck(IN:= xConfirmAlarms, PT:= T#500MS, Q=> _xErrorAck, ET=> );]]></ST>
|
||||
_tofErrorAck(IN:= xConfirmAlarms, PT:= T#500MS, Q=> xErrorAck, ET=> );
|
||||
|
||||
// Copy internal signals to outputs
|
||||
xStopRobot := _xStopRobot;]]></ST>
|
||||
</Implementation>
|
||||
</POU>
|
||||
</TcPlcObject>
|
||||
@@ -4,8 +4,8 @@
|
||||
<Declaration><![CDATA[{attribute 'pack_mode' := '1'}
|
||||
TYPE ST_PosData :
|
||||
STRUCT
|
||||
wPosX : INT;
|
||||
wPosY : INT;
|
||||
iPosX : INT;
|
||||
iPosY : INT;
|
||||
END_STRUCT
|
||||
END_TYPE
|
||||
]]></Declaration>
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
<Declaration><![CDATA[FUNCTION_BLOCK FB_Aligner EXTENDS FB_PackMLGeneric
|
||||
VAR_INPUT
|
||||
xEnableVacuum : BOOL;
|
||||
xAlign : BOOL;
|
||||
xExecute : BOOL;
|
||||
|
||||
xConfirmAlarms : BOOL;
|
||||
END_VAR
|
||||
@@ -12,18 +12,21 @@ VAR_OUTPUT
|
||||
xVacuumEnabled : BOOL;
|
||||
END_VAR
|
||||
VAR
|
||||
xActivateVacuum AT %Q* : BOOL := FALSE;
|
||||
xDeactivateVacuum AT %Q* : BOOL := TRUE;
|
||||
xVacuumOk AT %I* : BOOL;
|
||||
|
||||
diXOffset AT %I* : DINT;
|
||||
diYOffset AT %I* : DINT;
|
||||
|
||||
_fbXAxis : FB_AxisPTP;
|
||||
_fbYAxis : FB_AxisPTP;
|
||||
|
||||
_xEnableVacuum AT %Q* : BOOL := FALSE;
|
||||
_xDisableVacuum AT %Q* : BOOL := TRUE;
|
||||
_xVacuumOk AT %I* : BOOL;
|
||||
|
||||
_udiXOffset AT %I* : DINT;
|
||||
_udiYOffset AT %I* : DINT;
|
||||
|
||||
_rXPosToGo : REAL;
|
||||
_rYPosToGo : REAL;
|
||||
|
||||
_rtExecute : R_TRIG;
|
||||
_xStartAlign : BOOL;
|
||||
END_VAR
|
||||
]]></Declaration>
|
||||
<Implementation>
|
||||
@@ -51,12 +54,13 @@ _fbYAxis(
|
||||
lrJerk:= 0,
|
||||
xConfirmAlarms:= xConfirmAlarms);
|
||||
|
||||
// Drei mal ausführen damit die Position genau ist
|
||||
IF xAlign THEN
|
||||
xAlign := FALSE;
|
||||
_rtExecute(CLK:= xExecute, Q=> _xStartAlign);
|
||||
|
||||
_rXPosToGo := DINT_TO_REAL(_udiXOffset) * -0.001;
|
||||
_rYPosToGo := ((DINT_TO_REAL(_udiYOffset) * 0.001) - 37.5) * -1;
|
||||
// Drei mal ausführen damit die Position genau ist
|
||||
IF _xStartAlign THEN
|
||||
|
||||
_rXPosToGo := DINT_TO_REAL(diXOffset) * -0.001;
|
||||
_rYPosToGo := ((DINT_TO_REAL(diYOffset) * 0.001) - 37.5) * -1;
|
||||
|
||||
IF (ABS(_rXPosToGo) < 10.0) AND (ABS(_rYPosToGo) < 10.0) AND (NOT _fbXAxis.xError) AND (NOT _fbYAxis.xError) THEN
|
||||
_fbXAxis.M_MoveRel(lrRelDist := _rXPosToGo);
|
||||
@@ -65,9 +69,9 @@ IF xAlign THEN
|
||||
END_IF
|
||||
|
||||
// Handle enable disable vacuum command
|
||||
_xEnableVacuum := xEnableVacuum;
|
||||
_xDisableVacuum := (NOT xEnableVacuum);
|
||||
xVacuumEnabled := _xVacuumOk;]]></ST>
|
||||
xActivateVacuum := xEnableVacuum;
|
||||
xDeactivateVacuum := (NOT xEnableVacuum);
|
||||
xVacuumEnabled := xVacuumOk;]]></ST>
|
||||
</Implementation>
|
||||
</POU>
|
||||
</TcPlcObject>
|
||||
@@ -64,16 +64,16 @@ VAR
|
||||
// Sensors
|
||||
// =======
|
||||
|
||||
_xVacuumOk AT %I* : BOOL;
|
||||
xVacuumOk AT %I* : BOOL;
|
||||
|
||||
// Spinner vibration sensor
|
||||
_xVibrationSensor AT %I* : BOOL;
|
||||
xVibrationSensor AT %I* : BOOL;
|
||||
|
||||
// =========
|
||||
// Actuators
|
||||
// =========
|
||||
|
||||
_xDisableVacuum AT %Q* : BOOL;
|
||||
xDisableVacuum AT %Q* : BOOL;
|
||||
END_VAR
|
||||
]]></Declaration>
|
||||
<Implementation>
|
||||
@@ -128,7 +128,7 @@ _fbEjectBack(
|
||||
xConfirmAlarms:= xConfirmAlarms,
|
||||
stHMIInterface:= stHMIInterface.stEjectBackHMIInterface);
|
||||
|
||||
_xDisableVacuum := (NOT xEnableVacuum);
|
||||
xDisableVacuum := (NOT xEnableVacuum);
|
||||
|
||||
// Call base sm
|
||||
SUPER^();
|
||||
@@ -136,7 +136,7 @@ SUPER^();
|
||||
// Copy internal signals to output
|
||||
xDoorOpen := _fbValveDoor.IsOpen;
|
||||
xChuckClampOpen := _fbUnlockLeft.IsOpen AND _fbUnlockRight.IsOpen;
|
||||
xVacuumEnabled := _xVacuumOk;]]></ST>
|
||||
xVacuumEnabled := xVacuumOk;]]></ST>
|
||||
</Implementation>
|
||||
<Method Name="FB_Init" Id="{afcda70c-3e52-4a32-9ca9-670a6b854f24}">
|
||||
<Declaration><![CDATA[//FB_Init is always available implicitly and it is used primarily for initialization.
|
||||
|
||||
@@ -8,33 +8,33 @@ END_VAR
|
||||
VAR_OUTPUT
|
||||
END_VAR
|
||||
VAR
|
||||
_xOpenDoor1 AT %Q* : BOOL;
|
||||
_xOpenDoor2 AT %Q* : BOOL;
|
||||
xOpenDoor1 AT %Q* : BOOL;
|
||||
xOpenDoor2 AT %Q* : BOOL;
|
||||
|
||||
_xCloseDoor1 AT %Q* : BOOL;
|
||||
_xCloseDoor2 AT %Q* : BOOL;
|
||||
xCloseDoor1 AT %Q* : BOOL;
|
||||
xCloseDoor2 AT %Q* : BOOL;
|
||||
|
||||
// Chamber is the big cylinder not the door
|
||||
_xOpenChamber1 AT %Q* : BOOL;
|
||||
_xOpenChamber2 AT %Q* : BOOL;
|
||||
xOpenChamber1 AT %Q* : BOOL;
|
||||
xOpenChamber2 AT %Q* : BOOL;
|
||||
|
||||
_xCloseChamber1 AT %Q* : BOOL;
|
||||
_xCloseChamber2 AT %Q* : BOOL;
|
||||
xCloseChamber1 AT %Q* : BOOL;
|
||||
xCloseChamber2 AT %Q* : BOOL;
|
||||
END_VAR
|
||||
]]></Declaration>
|
||||
<Implementation>
|
||||
<ST><![CDATA[IF xOpenChambers THEN
|
||||
_xOpenDoor1 := TRUE;
|
||||
_xOpenDoor2 := TRUE;
|
||||
xOpenDoor1 := TRUE;
|
||||
xOpenDoor2 := TRUE;
|
||||
|
||||
_xCloseDoor1 := FALSE;
|
||||
_xCloseDoor2 := FALSE;
|
||||
xCloseDoor1 := FALSE;
|
||||
xCloseDoor2 := FALSE;
|
||||
ELSE
|
||||
_xOpenDoor1 := FALSE;
|
||||
_xOpenDoor2 := FALSE;
|
||||
xOpenDoor1 := FALSE;
|
||||
xOpenDoor2 := FALSE;
|
||||
|
||||
_xCloseDoor1 := TRUE;
|
||||
_xCloseDoor2 := TRUE;
|
||||
xCloseDoor1 := TRUE;
|
||||
xCloseDoor2 := TRUE;
|
||||
END_IF
|
||||
|
||||
// Call base sm
|
||||
|
||||
@@ -12,12 +12,12 @@ VAR_IN_OUT
|
||||
END_VAR
|
||||
VAR
|
||||
// Card inputs
|
||||
_stStatus AT %I* : ST_SerialStatus;
|
||||
_byDataIn AT %I* : ARRAY[0..21] OF BYTE;
|
||||
stStatus AT %I* : ST_SerialStatus;
|
||||
//abyDataIn AT %I* : ARRAY[0..21] OF BYTE;
|
||||
|
||||
// Card outputs
|
||||
_stCtrl AT %Q* : ST_SerialCrl;
|
||||
_byDataOut AT %Q* : ARRAY[0..21] OF BYTE;
|
||||
stCtrl AT %Q* : ST_SerialCrl;
|
||||
abyDataOut AT %Q* : ARRAY[0..21] OF BYTE;
|
||||
|
||||
// Internal temp setpoint
|
||||
_rTempSetpoint : REAL;
|
||||
@@ -25,9 +25,6 @@ VAR
|
||||
// Send trigger
|
||||
_xSend : BOOL;
|
||||
|
||||
// Send temp test
|
||||
_xTempTest : BOOL;
|
||||
|
||||
// Init trigger
|
||||
_xInit : BOOL;
|
||||
END_VAR
|
||||
@@ -48,21 +45,21 @@ END_IF
|
||||
// Init card on first run
|
||||
IF _xInit THEN
|
||||
_xInit := FALSE;
|
||||
_stCtrl.bInitRequest := 1;
|
||||
stCtrl.bInitRequest := 1;
|
||||
END_IF
|
||||
|
||||
IF _stStatus.bInitAccepted THEN
|
||||
_stCtrl.bInitRequest := 0;
|
||||
IF stStatus.bInitAccepted THEN
|
||||
stCtrl.bInitRequest := 0;
|
||||
END_IF
|
||||
|
||||
// Send
|
||||
IF _xSend THEN
|
||||
_xSend := FALSE;
|
||||
_stCtrl.bTransmitRequest := 1;
|
||||
stCtrl.bTransmitRequest := 1;
|
||||
END_IF
|
||||
|
||||
IF _stStatus.bTransmitAccepted THEN
|
||||
_stCtrl.bTransmitRequest := 0;
|
||||
IF stStatus.bTransmitAccepted THEN
|
||||
stCtrl.bTransmitRequest := 0;
|
||||
END_IF
|
||||
|
||||
// Debug test
|
||||
@@ -91,10 +88,19 @@ VAR
|
||||
END_VAR
|
||||
]]></Declaration>
|
||||
<Implementation>
|
||||
<ST><![CDATA[// Calculate sum
|
||||
<ST><![CDATA[// Check end index
|
||||
IF uiEndIndex > 21 THEN
|
||||
byHigh := 0;
|
||||
byLow := 0;
|
||||
RETURN;
|
||||
END_IF
|
||||
|
||||
// Calculate sum
|
||||
{analysis -81}
|
||||
FOR _uiCounter := uiStartIndex TO uiEndIndex DO
|
||||
_dwChecksum := _dwChecksum + _byDataOut[_uiCounter];
|
||||
_dwChecksum := _dwChecksum + abyDataOut[_uiCounter];
|
||||
END_FOR
|
||||
{analysis +81}
|
||||
|
||||
// Use lower bytes
|
||||
_byHigh := SHR(_dwChecksum.%B0 AND 16#F0, 4);
|
||||
@@ -115,12 +121,7 @@ VAR_INPUT
|
||||
END_VAR
|
||||
VAR
|
||||
_dwTemp : DWORD;
|
||||
_sTemp : STRING(4);
|
||||
|
||||
_byHigh : BYTE;
|
||||
_byLow : BYTE;
|
||||
_sHexString : STRING(4);
|
||||
|
||||
_sTemp : STRING;
|
||||
END_VAR
|
||||
]]></Declaration>
|
||||
<Implementation>
|
||||
@@ -128,23 +129,23 @@ END_VAR
|
||||
_dwTemp := REAL_TO_DWORD(rTemp * 10 )*10;
|
||||
_sTemp := DWORD_TO_STRING(_dwTemp);
|
||||
|
||||
_byDataOut[0] := 16#02; // STX
|
||||
_byDataOut[1] := 16#31; // Command code
|
||||
_byDataOut[2] := _sTemp[0];
|
||||
_byDataOut[3] := _sTemp[1];
|
||||
_byDataOut[4] := _sTemp[2];
|
||||
_byDataOut[5] := _sTemp[3];
|
||||
_byDataOut[6] := 16#03; // ETX
|
||||
abyDataOut[0] := 16#02; // STX
|
||||
abyDataOut[1] := 16#31; // Command code
|
||||
abyDataOut[2] := _sTemp[0];
|
||||
abyDataOut[3] := _sTemp[1];
|
||||
abyDataOut[4] := _sTemp[2];
|
||||
abyDataOut[5] := _sTemp[3];
|
||||
abyDataOut[6] := 16#03; // ETX
|
||||
|
||||
M_CalcChecksum(
|
||||
uiStartIndex:= 1,
|
||||
uiEndIndex:= 5,
|
||||
byHigh=> _byDataOut[7],
|
||||
byLow=> _byDataOut[8]);
|
||||
byHigh=> abyDataOut[7],
|
||||
byLow=> abyDataOut[8]);
|
||||
|
||||
_byDataOut[9] := 16#0D; // <CR>
|
||||
abyDataOut[9] := 16#0D; // <CR>
|
||||
|
||||
_stCtrl.byOutputLength := 10;]]></ST>
|
||||
stCtrl.byOutputLength := 10;]]></ST>
|
||||
</Implementation>
|
||||
</Method>
|
||||
</POU>
|
||||
|
||||
@@ -5,7 +5,6 @@
|
||||
VAR_INPUT
|
||||
xEnable : BOOL;
|
||||
rTargetTemp : REAL;
|
||||
rDeadBand : REAL := 5.0;
|
||||
|
||||
xConfirmAlarms : BOOL;
|
||||
END_VAR
|
||||
@@ -17,10 +16,10 @@ VAR_IN_OUT
|
||||
stHMIInterface : ST_HCPlateHMIInterface;
|
||||
END_VAR
|
||||
VAR
|
||||
_xEnableHotplate AT %Q* : BOOL;
|
||||
xEnableHotplate AT %Q* : BOOL;
|
||||
|
||||
_axSlotFree : ARRAY [0..(GVL_HeatCoolConfig.HEAT_COOL_PLATES_NUM_SLOTS - 1)] OF BOOL;
|
||||
_tonSlotTimer : ARRAY[0..(GVL_HeatCoolConfig.HEAT_COOL_PLATES_NUM_SLOTS - 1)] OF TON;
|
||||
// _axSlotFree : ARRAY [0..(GVL_HeatCoolConfig.HEAT_COOL_PLATES_NUM_SLOTS - 1)] OF BOOL;
|
||||
// _atonSlotTimer : ARRAY[0..(GVL_HeatCoolConfig.HEAT_COOL_PLATES_NUM_SLOTS - 1)] OF TON;
|
||||
|
||||
// Temp sensor
|
||||
_fbTempSensor : FB_AnalogInput('Temp sensor');
|
||||
@@ -39,10 +38,7 @@ VAR
|
||||
timHardwareSignalLevelOff := T#1S));
|
||||
|
||||
_fbPITempControl : FB_PI;
|
||||
_xSaturatedUpper : BOOL;
|
||||
_xSaturatedLower : BOOL;
|
||||
_rMV : REAL;
|
||||
_fbPulsOut : TP;
|
||||
_fbLimit : FB_Limit;
|
||||
_fbPWMOut : FB_PWM;
|
||||
END_VAR
|
||||
]]></Declaration>
|
||||
@@ -73,28 +69,18 @@ _fbPITempControl(
|
||||
rKp:= 6,
|
||||
rTn:= 0,
|
||||
xEnable:= stHMIInterface.xEnable,
|
||||
xSaturatedUpper:= _xSaturatedUpper,
|
||||
xSaturatedLower:= _xSaturatedLower,
|
||||
rMV=> _rMV);
|
||||
rMV=> _fbLimit.rIn);
|
||||
|
||||
IF _rMV >= 100.0 THEN
|
||||
_rMV := 100.0;
|
||||
_xSaturatedUpper := TRUE;
|
||||
ELSE
|
||||
_xSaturatedUpper := FALSE;
|
||||
END_IF
|
||||
|
||||
IF _rMV <=0 THEN
|
||||
_rMV := 0.0;
|
||||
_xSaturatedLower := TRUE;
|
||||
ELSE
|
||||
_xSaturatedLower := FALSE;
|
||||
END_IF
|
||||
_fbLimit(
|
||||
rMin:= 0,
|
||||
rMax:= 100.0,
|
||||
rOut=> _fbPWMOut.rPWM,
|
||||
xClampedUpper=> _fbPITempControl.xSaturatedUpper,
|
||||
xClampedLower=> _fbPITempControl.xSaturatedLower);
|
||||
|
||||
_fbPWMOut(
|
||||
rPWM:= _rMV,
|
||||
timPeriod:= T#10S,
|
||||
xOutput=> _xEnableHotplate);
|
||||
xOutput=> xEnableHotplate);
|
||||
|
||||
// Output HMI Interface
|
||||
stHMIInterface.rPV := _fbTempSensor.rScaledValue;
|
||||
|
||||
@@ -14,7 +14,13 @@ VAR
|
||||
END_VAR
|
||||
]]></Declaration>
|
||||
<Implementation>
|
||||
<ST><![CDATA[_tonTimer(IN := TRUE, PT := timPeriod);
|
||||
<ST><![CDATA[// Check for possible division by zero
|
||||
IF TIME_TO_REAL(timPeriod) = 0 THEN
|
||||
xOutput := FALSE;
|
||||
RETURN;
|
||||
END_IF
|
||||
|
||||
_tonTimer(IN := TRUE, PT := timPeriod);
|
||||
IF _tonTimer.Q THEN
|
||||
_tonTimer(IN := FALSE);
|
||||
END_IF
|
||||
|
||||
@@ -2,6 +2,8 @@
|
||||
<TcPlcObject Version="1.1.0.1">
|
||||
<GVL Name="GVL_HeatCoolConfig" Id="{865917de-a2fa-49b0-b682-05395fd01971}">
|
||||
<Declaration><![CDATA[{attribute 'qualified_only'}
|
||||
{attribute 'naming' := 'off'}
|
||||
{attribute 'analysis' := '-43'}
|
||||
VAR_GLOBAL CONSTANT
|
||||
HEAT_COOL_PLATES_NUM_SLOTS : UINT := 9;
|
||||
END_VAR]]></Declaration>
|
||||
|
||||
@@ -2,6 +2,7 @@
|
||||
<TcPlcObject Version="1.1.0.1">
|
||||
<DUT Name="ST_SerialCrl" Id="{02e99166-5c76-4fb3-84cc-719c63e20136}">
|
||||
<Declaration><![CDATA[{attribute 'pack_mode' := '1'}
|
||||
{attribute 'analysis' := '-33'}
|
||||
TYPE ST_SerialCrl :
|
||||
STRUCT
|
||||
bTransmitRequest : BIT;
|
||||
|
||||
@@ -2,6 +2,7 @@
|
||||
<TcPlcObject Version="1.1.0.1">
|
||||
<DUT Name="ST_SerialStatus" Id="{e37399e0-7acb-4d91-826f-26258cabab1c}">
|
||||
<Declaration><![CDATA[{attribute 'pack_mode' := '1'}
|
||||
{attribute 'analysis' := '-33'}
|
||||
TYPE ST_SerialStatus :
|
||||
STRUCT
|
||||
bTransmitAccepted : BIT;
|
||||
|
||||
@@ -28,44 +28,44 @@ VAR
|
||||
// 1 - Enable
|
||||
// 2 - Enable move
|
||||
// 3 - Conf_Mess (Reset)
|
||||
_uCtrl AT %Q* : U_KukaRobot_Ctrl;
|
||||
stCtrl AT %Q* : ST_KukaRobot_Ctrl;
|
||||
|
||||
// 0 -> Robot job to do
|
||||
// 1 -> PLC job which is finished
|
||||
_uJobs AT %Q* : U_KukaRobot_Jobs;
|
||||
stJobs AT %Q* : ST_KukaRobot_Jobs;
|
||||
|
||||
// 0 - Greifer nummer
|
||||
// 1 - Drehteller Nummer
|
||||
// 2 - Position Heizplatte
|
||||
// 3 - Position Kuehlplatte
|
||||
_abToolsAndPositions AT %Q* : ARRAY[0..3] OF BYTE;
|
||||
abyToolsAndPositions AT %Q* : ARRAY[0..3] OF BYTE;
|
||||
|
||||
// Positions in um
|
||||
_diOffsetPosX AT %Q* : DINT;
|
||||
_diOffsetPosY AT %Q* : DINT;
|
||||
_diThickness AT %Q* : DINT;
|
||||
diOffsetPosX AT %Q* : DINT;
|
||||
diOffsetPosY AT %Q* : DINT;
|
||||
diThickness AT %Q* : DINT;
|
||||
|
||||
// Inputs
|
||||
_uState AT %I* : U_KukaRobot_State;
|
||||
_dwErrorBits AT %I* : DWORD;
|
||||
_awJobStatesFromRobot AT %I* : ARRAY[0..1] OF WORD;
|
||||
_eJobForPLC AT %I* : E_KukaRobot_JobNumerPLC;
|
||||
stState AT %I* : ST_KukaRobot_State;
|
||||
dwErrorBits AT %I* : DWORD;
|
||||
awJobStatesFromRobot AT %I* : ARRAY[0..1] OF WORD;
|
||||
eJobForPLC AT %I* : E_KukaRobot_JobNumerPLC;
|
||||
|
||||
_abMirrorToolsAndPositions AT %I* : ARRAY[0..3] OF BYTE;
|
||||
{attribute 'analysis' := '-33'}
|
||||
abyMirrorToolsAndPositions AT %I* : ARRAY[0..3] OF BYTE;
|
||||
|
||||
// Position mirrors
|
||||
_diMirrorOffsetPosX AT %I* : DINT;
|
||||
_diMirrorOffsetPosY AT %I* : DINT;
|
||||
_diMirrorThickness AT %I* : DINT;
|
||||
diMirrorOffsetPosX AT %I* : DINT;
|
||||
diMirrorOffsetPosY AT %I* : DINT;
|
||||
diMirrorThickness AT %I* : DINT;
|
||||
{attribute 'analysis' := '+33'}
|
||||
|
||||
// Motortemperaturen
|
||||
_asiMotorTemps1To4 AT %I* : ARRAY[0..3] OF SINT;
|
||||
_asiMotorTemps5To8 AT %I* : ARRAY[0..3] OF SINT;
|
||||
asiMotorTemps1To4 AT %I* : ARRAY[0..3] OF SINT;
|
||||
asiMotorTemps5To8 AT %I* : ARRAY[0..3] OF SINT;
|
||||
|
||||
_ePlcJob :E_KukaRobot_JobNumerPLC;
|
||||
|
||||
_iState : INT;
|
||||
|
||||
_xRobotReady : BOOL;
|
||||
|
||||
_xError : BOOL;
|
||||
@@ -91,21 +91,21 @@ END_VAR
|
||||
// =============
|
||||
|
||||
_fbAlarmNotInExtMode(
|
||||
xActive:= (NOT _uState.stState.bExt),
|
||||
xActive:= (NOT stState.bExt),
|
||||
xRelease:= TRUE,
|
||||
xAcknowledge:= xConfirmAlarms,
|
||||
timOnDelay:= T#0S,
|
||||
timOffDelay:= T#0S);
|
||||
|
||||
_fbAlarmEStopActive(
|
||||
xActive:= (NOT _uState.stState.bAlarmStop),
|
||||
xActive:= (NOT stState.bAlarmStop),
|
||||
xRelease:= TRUE,
|
||||
xAcknowledge:= xConfirmAlarms,
|
||||
timOnDelay:= T#0S,
|
||||
timOffDelay:= T#0S);
|
||||
|
||||
_fbAlarmOperatorSafetyNotOk(
|
||||
xActive:= (NOT _uState.stState.bUserSAF) AND (_uState.stState.bExt),
|
||||
xActive:= (NOT stState.bUserSAF) AND (stState.bExt),
|
||||
xRelease:= TRUE,
|
||||
xAcknowledge:= xConfirmAlarms,
|
||||
timOnDelay:= T#0S,
|
||||
@@ -126,12 +126,12 @@ _fbAlarmRobotErrorResetTimeout(
|
||||
// Check if robot is ready
|
||||
// =======================
|
||||
|
||||
_xRobotReady := _uState.stState.bExt
|
||||
AND _uState.stState.bAlarmStop
|
||||
AND _uState.stState.bUserSAF
|
||||
AND _uState.stState.bPeriRdy
|
||||
AND _uState.stState.bIOActConf
|
||||
AND (NOT _uState.stState.bStopMess);
|
||||
_xRobotReady := stState.bExt
|
||||
AND stState.bAlarmStop
|
||||
AND stState.bUserSAF
|
||||
AND stState.bPeriRdy
|
||||
AND stState.bIOActConf
|
||||
AND (NOT stState.bStopMess);
|
||||
|
||||
|
||||
// =============================
|
||||
@@ -145,7 +145,7 @@ SUPER^();
|
||||
// ==============================
|
||||
|
||||
// Allow robot to be moved with programming pendant
|
||||
_uCtrl.stCtrl.bNotDisableAxes := 1;
|
||||
stCtrl.bNotDisableAxes := 1;
|
||||
|
||||
// Disable move if in T2 for safety reasons
|
||||
// IF _uState.stState.bT2 THEN
|
||||
@@ -157,10 +157,10 @@ _uCtrl.stCtrl.bNotDisableAxes := 1;
|
||||
// Write unit feedbacks outputs
|
||||
// ============================
|
||||
|
||||
_uCtrl.stCtrl.bDoorEtcher1Open := stUnitFeedbacks.xDoorEtcher1Open;
|
||||
_uCtrl.stCtrl.bDoorEtcher2Open := stUnitFeedbacks.xDoorEtcher2Open;
|
||||
_uCtrl.stCtrl.bDoorHVTestHotOpen := stUnitFeedbacks.xDoorHVTestHotOpen;
|
||||
_uCtrl.stCtrl.bDoorHVTestColdOpen := stUnitFeedbacks.xDoorHVTestColdOpen;
|
||||
stCtrl.bDoorEtcher1Open := stUnitFeedbacks.xDoorEtcher1Open;
|
||||
stCtrl.bDoorEtcher2Open := stUnitFeedbacks.xDoorEtcher2Open;
|
||||
stCtrl.bDoorHVTestHotOpen := stUnitFeedbacks.xDoorHVTestHotOpen;
|
||||
stCtrl.bDoorHVTestColdOpen := stUnitFeedbacks.xDoorHVTestColdOpen;
|
||||
|
||||
M_HandlePLCJobs();
|
||||
|
||||
@@ -196,16 +196,16 @@ _stSMConfig.xAbortingDisabled := TRUE;]]></ST>
|
||||
]]></Declaration>
|
||||
<Implementation>
|
||||
<ST><![CDATA[// Reset all relevant robot control signals
|
||||
_uCtrl.stCtrl.bConfMess := 0;
|
||||
_uCtrl.stCtrl.bExtStart := 0;
|
||||
_uCtrl.stCtrl.bEnableAxes := 0;
|
||||
_uCtrl.stCtrl.bEnableMove := 0;
|
||||
_uCtrl.stCtrl.bNotDisableAxes := 1;
|
||||
_uCtrl.stCtrl.bAbortJob := 1;
|
||||
stCtrl.bConfMess := 0;
|
||||
stCtrl.bExtStart := 0;
|
||||
stCtrl.bEnableAxes := 0;
|
||||
stCtrl.bEnableMove := 0;
|
||||
stCtrl.bNotDisableAxes := 1;
|
||||
stCtrl.bAbortJob := 1;
|
||||
|
||||
// Reset robot program and plc job number
|
||||
_uJobs.stJobs.wJobNrForRobot := E_KukaRobot_JobNumberRobot.NO_JOB;
|
||||
_uJobs.stJobs.wFinishedJobNrFromPlc := E_KukaRobot_JobNumerPLC.NO_JOB;]]></ST>
|
||||
stJobs.wJobNrForRobot := E_KukaRobot_JobNumberRobot.NO_JOB;
|
||||
stJobs.wFinishedJobNrFromPlc := E_KukaRobot_JobNumerPLC.NO_JOB;]]></ST>
|
||||
</Implementation>
|
||||
</Method>
|
||||
<Method Name="M_Clearing" Id="{e6152288-8c7d-4b38-bfbc-4f861d76ccc5}">
|
||||
@@ -215,8 +215,8 @@ VAR_INST
|
||||
END_VAR]]></Declaration>
|
||||
<Implementation>
|
||||
<ST><![CDATA[_tonWait(IN := TRUE, PT := T#1S);
|
||||
_uCtrl.stCtrl.bEnableMove := 1;
|
||||
_uCtrl.stCtrl.bAbortJob := 0;
|
||||
stCtrl.bEnableMove := 1;
|
||||
stCtrl.bAbortJob := 0;
|
||||
|
||||
IF _tonWait.Q THEN
|
||||
_tonWait(IN := FALSE, PT := T#1S);
|
||||
@@ -234,8 +234,8 @@ END_IF
|
||||
E_KukaRobot_JobNumberRobot.WARMUP:
|
||||
CASE _iSSM OF
|
||||
0: // Wait for program to end
|
||||
IF _awJobStatesFromRobot[0] = 0 THEN
|
||||
IF _asiMotorTemps1To4[3] < 40 THEN
|
||||
IF awJobStatesFromRobot[0] = 0 THEN
|
||||
IF asiMotorTemps1To4[3] < 40 THEN
|
||||
_iSSM := 10;
|
||||
ELSE
|
||||
_eCmd := E_PackMLCmd.COMPLETE;
|
||||
@@ -243,17 +243,20 @@ END_IF
|
||||
END_IF
|
||||
|
||||
10: // Write robot number 0
|
||||
_uJobs.stJobs.wJobNrForRobot := stJobParams.eJob;
|
||||
IF _awJobStatesFromRobot[0] = _uJobs.stJobs.wJobNrForRobot THEN
|
||||
_uJobs.stJobs.wJobNrForRobot := E_KukaRobot_JobNumberRobot.NO_JOB;
|
||||
stJobs.wJobNrForRobot := stJobParams.eJob;
|
||||
IF awJobStatesFromRobot[0] = stJobs.wJobNrForRobot THEN
|
||||
stJobs.wJobNrForRobot := E_KukaRobot_JobNumberRobot.NO_JOB;
|
||||
_iSSM := 0;
|
||||
END_IF
|
||||
|
||||
ELSE
|
||||
;
|
||||
END_CASE
|
||||
|
||||
ELSE
|
||||
// Wait for robot to be done
|
||||
IF _awJobStatesFromRobot[0] = 0 THEN
|
||||
_uJobs.stJobs.wJobNrForRobot := E_KukaRobot_JobNumberRobot.NO_JOB;
|
||||
IF awJobStatesFromRobot[0] = 0 THEN
|
||||
stJobs.wJobNrForRobot := E_KukaRobot_JobNumberRobot.NO_JOB;
|
||||
_eCmd := E_PackMLCmd.COMPLETE;
|
||||
END_IF
|
||||
END_CASE
|
||||
@@ -264,35 +267,35 @@ END_CASE
|
||||
<Method Name="M_HandlePLCJobs" Id="{4e3710b4-697b-42e8-86b1-31b19b3023db}">
|
||||
<Declaration><![CDATA[METHOD M_HandlePLCJobs
|
||||
VAR_INST
|
||||
_rtrigNewJob : R_TRIG;
|
||||
_rtNewJob : R_TRIG;
|
||||
END_VAR
|
||||
]]></Declaration>
|
||||
<Implementation>
|
||||
<ST><![CDATA[_rtrigNewJob(CLK := (_eJobForPLC <> E_KukaRobot_JobNumberRobot.NO_JOB));
|
||||
<ST><![CDATA[_rtNewJob(CLK := (eJobForPLC <> E_KukaRobot_JobNumerPLC.NO_JOB));
|
||||
|
||||
IF _rtrigNewJob.Q THEN
|
||||
eCmdFromRobot := _eJobForPLC;
|
||||
IF _rtNewJob.Q THEN
|
||||
eCmdFromRobot := eJobForPLC;
|
||||
xNewCmdRequested := TRUE;
|
||||
END_IF
|
||||
|
||||
IF xNewCmdRequested AND xAckPLCCmd THEN
|
||||
IF xAckPLCCmd THEN
|
||||
xNewCmdRequested := FALSE;
|
||||
|
||||
IF (NOT xPLCJobFailed) THEN
|
||||
_uJobs.stJobs.wFinishedJobNrFromPlc := _eJobForPLC;
|
||||
stJobs.wFinishedJobNrFromPlc := eJobForPLC;
|
||||
ELSE
|
||||
_uJobs.stJobs.wFinishedJobNrFromPlc := E_KukaRobot_JobNumerPLC.JOB_FAILED;
|
||||
stJobs.wFinishedJobNrFromPlc := E_KukaRobot_JobNumerPLC.JOB_FAILED;
|
||||
END_IF
|
||||
|
||||
eCmdFromRobot := E_KukaRobot_JobNumberRobot.NO_JOB;
|
||||
eCmdFromRobot := E_KukaRobot_JobNumerPLC.NO_JOB;
|
||||
END_IF
|
||||
|
||||
// Reset plc job done
|
||||
IF (_eJobForPLC = E_KukaRobot_JobNumberRobot.NO_JOB)
|
||||
AND (_uJobs.stJobs.wFinishedJobNrFromPlc <> E_KukaRobot_JobNumberRobot.NO_JOB)
|
||||
IF (eJobForPLC = E_KukaRobot_JobNumerPLC.NO_JOB)
|
||||
AND (stJobs.wFinishedJobNrFromPlc <> E_KukaRobot_JobNumberRobot.NO_JOB)
|
||||
AND (NOT xPLCJobFailed)
|
||||
THEN
|
||||
_uJobs.stJobs.wFinishedJobNrFromPlc := E_KukaRobot_JobNumberRobot.NO_JOB;
|
||||
stJobs.wFinishedJobNrFromPlc := E_KukaRobot_JobNumerPLC.NO_JOB;
|
||||
END_IF]]></ST>
|
||||
</Implementation>
|
||||
</Method>
|
||||
@@ -307,9 +310,9 @@ END_IF]]></ST>
|
||||
<Declaration><![CDATA[METHOD PROTECTED M_Holding
|
||||
]]></Declaration>
|
||||
<Implementation>
|
||||
<ST><![CDATA[_uCtrl.stCtrl.bEnableMove := 0;
|
||||
<ST><![CDATA[stCtrl.bEnableMove := 0;
|
||||
|
||||
IF _uState.stState.bRobStopped THEN
|
||||
IF stState.bRobStopped THEN
|
||||
M_StateComplete();
|
||||
END_IF
|
||||
]]></ST>
|
||||
@@ -333,37 +336,37 @@ END_VAR]]></Declaration>
|
||||
CASE _iSSM OF
|
||||
// Check if com interface is ok
|
||||
0:
|
||||
_uCtrl.stCtrl.bEnableMove := 1;
|
||||
_uCtrl.stCtrl.bConfMess := 1;
|
||||
stCtrl.bEnableMove := 1;
|
||||
stCtrl.bConfMess := 1;
|
||||
_tonTimeout.IN := TRUE;
|
||||
|
||||
IF _uState.stState.bIOActConf THEN
|
||||
_uCtrl.stCtrl.bConfMess := 0;
|
||||
IF stState.bIOActConf THEN
|
||||
stCtrl.bConfMess := 0;
|
||||
_iSSM := 10;
|
||||
END_IF
|
||||
|
||||
// Timeout io_Act_conf ready
|
||||
IF _tonTimeout.Q THEN
|
||||
_uCtrl.stCtrl.bConfMess := 0;
|
||||
stCtrl.bConfMess := 0;
|
||||
_tonTimeout(IN := FALSE);
|
||||
_eCmd := E_PackMLCmd.ABORT;
|
||||
END_IF
|
||||
|
||||
// Enable axes
|
||||
10:
|
||||
_uCtrl.stCtrl.bEnableAxes := 1;
|
||||
stCtrl.bEnableAxes := 1;
|
||||
_tonTimeout.IN := TRUE;
|
||||
|
||||
// Wait for drives to be ready
|
||||
IF _uState.stState.bPeriRdy THEN
|
||||
_uCtrl.stCtrl.bEnableAxes := 0;
|
||||
IF stState.bPeriRdy THEN
|
||||
stCtrl.bEnableAxes := 0;
|
||||
_tonTimeout(IN := FALSE);
|
||||
_iSSM := 20;
|
||||
END_IF
|
||||
|
||||
// Timeout drives ready
|
||||
IF _tonTimeout.Q THEN
|
||||
_uCtrl.stCtrl.bEnableAxes := 0;
|
||||
stCtrl.bEnableAxes := 0;
|
||||
_fbAlarmDrivesEnableTimeout.xRelease := TRUE;
|
||||
_tonTimeout(IN := FALSE);
|
||||
_eCmd := E_PackMLCmd.ABORT;
|
||||
@@ -371,12 +374,12 @@ CASE _iSSM OF
|
||||
|
||||
// Reset move stop
|
||||
20:
|
||||
_uCtrl.stCtrl.bConfMess := 1;
|
||||
stCtrl.bConfMess := 1;
|
||||
_tonTimeout.IN := TRUE;
|
||||
|
||||
// Wait for errors to be reset
|
||||
IF (NOT _uState.stState.bStopMess) THEN
|
||||
_uCtrl.stCtrl.bConfMess := 0;
|
||||
IF (NOT stState.bStopMess) THEN
|
||||
stCtrl.bConfMess := 0;
|
||||
_tonTimeout(IN := FALSE);
|
||||
_iSSM := 30;
|
||||
END_IF
|
||||
@@ -390,7 +393,7 @@ CASE _iSSM OF
|
||||
|
||||
// Start program
|
||||
30:
|
||||
_uCtrl.stCtrl.bExtStart := 1;
|
||||
stCtrl.bExtStart := 1;
|
||||
_tonTimeout.IN := TRUE;
|
||||
|
||||
IF _tonTimeout.Q THEN
|
||||
@@ -398,12 +401,14 @@ CASE _iSSM OF
|
||||
_eCmd := E_PackMLCmd.ABORT;
|
||||
END_IF
|
||||
|
||||
IF _uState.stState.bProAct THEN
|
||||
_uCtrl.stCtrl.bExtStart := 0;
|
||||
IF stState.bProAct THEN
|
||||
stCtrl.bExtStart := 0;
|
||||
_tonTimeout(IN := FALSE);
|
||||
M_StateComplete();
|
||||
END_IF
|
||||
|
||||
ELSE
|
||||
;
|
||||
END_CASE]]></ST>
|
||||
</Implementation>
|
||||
</Method>
|
||||
@@ -416,7 +421,7 @@ END_VAR]]></Declaration>
|
||||
<ST><![CDATA[CASE _iSSM OF
|
||||
// Check job parameters
|
||||
0:
|
||||
IF (_stJobParams.byGripperNumber < 0) OR (_stJobParams.byGripperNumber > 4) // Wrong gripper number
|
||||
IF (_stJobParams.byGripperNumber > 4) // Wrong gripper number
|
||||
//OR (_stJobParams.byChuckNumber < 1) OR (_stJobParams.byChuckNumber > 6) // Wrong chuck number
|
||||
OR (_stJobParams.byGripperSide < 1) OR (_stJobParams.byGripperSide > 6) // Wrong gripper side
|
||||
THEN
|
||||
@@ -433,38 +438,38 @@ END_VAR]]></Declaration>
|
||||
// Transfer job data to robot
|
||||
10:
|
||||
// Pos x in um
|
||||
_diOffsetPosX := REAL_TO_DINT(_stJobParams.rPosX * 1000);
|
||||
diOffsetPosX := REAL_TO_DINT(_stJobParams.rPosX * 1000);
|
||||
|
||||
// Pos y in um
|
||||
_diOffsetPosY := REAL_TO_DINT(_stJobParams.rPosY * 1000);
|
||||
diOffsetPosY := REAL_TO_DINT(_stJobParams.rPosY * 1000);
|
||||
|
||||
// Thickness
|
||||
_diThickness := REAL_TO_DINT(_stJobParams.rThickness * 1000);
|
||||
diThickness := REAL_TO_DINT(_stJobParams.rThickness * 1000);
|
||||
|
||||
// Gripper side
|
||||
_uCtrl.stCtrl.byGripperSide := _stJobParams.byGripperSide;
|
||||
stCtrl.byGripperSide := _stJobParams.byGripperSide;
|
||||
|
||||
// Scan QR code
|
||||
IF stJobParams.xScanQRCode THEN
|
||||
_uCtrl.stCtrl.bScanQRCode := 1;
|
||||
stCtrl.bScanQRCode := 1;
|
||||
ELSE
|
||||
_uCtrl.stCtrl.bScanQRCode := 0;
|
||||
stCtrl.bScanQRCode := 0;
|
||||
END_IF
|
||||
|
||||
// Position on hotplate
|
||||
_abToolsAndPositions[2] := stJobParams.byPlaceOnHotplate;
|
||||
abyToolsAndPositions[2] := stJobParams.byPlaceOnHotplate;
|
||||
|
||||
// Position on coolplate
|
||||
_abToolsAndPositions[3] := stJobParams.byPlaceOnCoolPlate;
|
||||
abyToolsAndPositions[3] := stJobParams.byPlaceOnCoolPlate;
|
||||
|
||||
// Gripper number
|
||||
_abToolsAndPositions[0] := stJobParams.byGripperNumber;
|
||||
abyToolsAndPositions[0] := stJobParams.byGripperNumber;
|
||||
|
||||
// Chuck for etcher to load
|
||||
_abToolsAndPositions[1] := stJobParams.byChuckNumber;
|
||||
abyToolsAndPositions[1] := stJobParams.byChuckNumber;
|
||||
|
||||
// Write robot job number
|
||||
_uJobs.stJobs.wJobNrForRobot := DINT_TO_WORD(_stJobParams.eJob);
|
||||
stJobs.wJobNrForRobot := DINT_TO_WORD(_stJobParams.eJob);
|
||||
|
||||
// Safety reset timout fb
|
||||
_tonTimeout(IN := FALSE);
|
||||
@@ -476,8 +481,8 @@ END_VAR]]></Declaration>
|
||||
_tonTimeout(IN := TRUE, PT := T#5S);
|
||||
|
||||
// If job number is read back correct, go to next state
|
||||
IF _awJobStatesFromRobot[0] = _uJobs.stJobs.wJobNrForRobot THEN
|
||||
_uJobs.stJobs.wJobNrForRobot := E_KukaRobot_JobNumberRobot.NO_JOB;
|
||||
IF awJobStatesFromRobot[0] = stJobs.wJobNrForRobot THEN
|
||||
stJobs.wJobNrForRobot := E_KukaRobot_JobNumberRobot.NO_JOB;
|
||||
_tonTimeout(IN := FALSE);
|
||||
M_StateComplete();
|
||||
END_IF
|
||||
@@ -489,10 +494,13 @@ END_VAR]]></Declaration>
|
||||
END_IF
|
||||
|
||||
// Robot has error
|
||||
IF _dwErrorBits <> 0 THEN
|
||||
IF dwErrorBits <> 0 THEN
|
||||
_tonTimeout(IN := FALSE);
|
||||
_eCmd := E_PackMLCmd.ABORT;
|
||||
END_IF
|
||||
|
||||
ELSE
|
||||
;
|
||||
END_CASE
|
||||
|
||||
|
||||
@@ -509,11 +517,11 @@ END_CASE
|
||||
]]></Declaration>
|
||||
<Implementation>
|
||||
<ST><![CDATA[// _uCtrl.stCtrl.bConfMess := 0;
|
||||
_uCtrl.stCtrl.bEnableAxes := 0;
|
||||
_uCtrl.stCtrl.bNotDisableAxes := 1;
|
||||
_uCtrl.stCtrl.bExtStart := 0;
|
||||
stCtrl.bEnableAxes := 0;
|
||||
stCtrl.bNotDisableAxes := 1;
|
||||
stCtrl.bExtStart := 0;
|
||||
|
||||
_uJobs.stJobs.wJobNrForRobot := E_KukaRobot_JobNumberRobot.NO_JOB;
|
||||
stJobs.wJobNrForRobot := E_KukaRobot_JobNumberRobot.NO_JOB;
|
||||
_ePlcJob := E_KukaRobot_JobNumerPLC.NO_JOB;]]></ST>
|
||||
</Implementation>
|
||||
</Method>
|
||||
@@ -541,33 +549,33 @@ END_VAR]]></Declaration>
|
||||
|
||||
CASE _iSSM OF
|
||||
0:
|
||||
_uCtrl.stCtrl.bEnableMove := 1;
|
||||
_uCtrl.stCtrl.bEnableAxes := 1;
|
||||
stCtrl.bEnableMove := 1;
|
||||
stCtrl.bEnableAxes := 1;
|
||||
_tonTimeout.IN := TRUE;
|
||||
|
||||
// Wait for drives to be ready
|
||||
IF _uState.stState.bPeriRdy THEN
|
||||
_uCtrl.stCtrl.bEnableAxes := 0;
|
||||
IF stState.bPeriRdy THEN
|
||||
stCtrl.bEnableAxes := 0;
|
||||
_tonTimeout(IN := FALSE);
|
||||
_iSSM := 10;
|
||||
END_IF
|
||||
|
||||
// Timeout drives ready
|
||||
IF _tonTimeout.Q THEN
|
||||
_uCtrl.stCtrl.bEnableAxes := 0;
|
||||
stCtrl.bEnableAxes := 0;
|
||||
_fbAlarmDrivesEnableTimeout.xRelease := TRUE;
|
||||
_tonTimeout(IN := FALSE);
|
||||
_eCmd := E_PackMLCmd.ABORT;
|
||||
END_IF
|
||||
|
||||
10:
|
||||
_uCtrl.stCtrl.bConfMess := 1;
|
||||
stCtrl.bConfMess := 1;
|
||||
|
||||
_tonTimeout.IN := TRUE;
|
||||
|
||||
// Wait for errors to be reset
|
||||
IF (NOT _uState.stState.bStopMess) THEN
|
||||
_uCtrl.stCtrl.bConfMess := 0;
|
||||
IF (NOT stState.bStopMess) THEN
|
||||
stCtrl.bConfMess := 0;
|
||||
_tonTimeout(IN := FALSE);
|
||||
_iSSM := 20;
|
||||
END_IF
|
||||
@@ -581,7 +589,7 @@ CASE _iSSM OF
|
||||
|
||||
20:
|
||||
// Start main program
|
||||
_uCtrl.stCtrl.bExtStart := 1;
|
||||
stCtrl.bExtStart := 1;
|
||||
|
||||
_tonTimeout.IN := TRUE;
|
||||
|
||||
@@ -590,12 +598,14 @@ CASE _iSSM OF
|
||||
_eCmd := E_PackMLCmd.ABORT;
|
||||
END_IF
|
||||
|
||||
IF _uState.stState.bProAct THEN
|
||||
_uCtrl.stCtrl.bExtStart := 0;
|
||||
IF stState.bProAct THEN
|
||||
stCtrl.bExtStart := 0;
|
||||
_tonTimeout(IN := FALSE);
|
||||
M_StateComplete();
|
||||
END_IF
|
||||
|
||||
ELSE
|
||||
;
|
||||
END_CASE]]></ST>
|
||||
</Implementation>
|
||||
</Method>
|
||||
|
||||
@@ -2,6 +2,7 @@
|
||||
<TcPlcObject Version="1.1.0.1">
|
||||
<DUT Name="ST_KukaRobot_Ctrl" Id="{6a4fb617-ed87-4838-8f9a-7e8618b6ad47}">
|
||||
<Declaration><![CDATA[{attribute 'pack_mode' := '0'}
|
||||
{attribute 'analysis' := '-33'}
|
||||
TYPE ST_KukaRobot_Ctrl :
|
||||
STRUCT
|
||||
// DRIVES_OFF
|
||||
|
||||
@@ -2,6 +2,7 @@
|
||||
<TcPlcObject Version="1.1.0.1">
|
||||
<DUT Name="ST_KukaRobot_State" Id="{a63ba4ed-f6ed-4d69-91eb-1236a87f0780}">
|
||||
<Declaration><![CDATA[{attribute 'pack_mode' := '0'}
|
||||
{attribute 'analysis' := '-33'}
|
||||
TYPE ST_KukaRobot_State :
|
||||
STRUCT
|
||||
bUserSAF : BIT;
|
||||
|
||||
@@ -1,12 +0,0 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<TcPlcObject Version="1.1.0.1">
|
||||
<DUT Name="U_KukaRobot_Ctrl" Id="{c0890327-8227-4b1a-8f53-5fe8dcabd304}">
|
||||
<Declaration><![CDATA[TYPE U_KukaRobot_Ctrl :
|
||||
UNION
|
||||
dwCtrl : DWORD;
|
||||
stCtrl : ST_KukaRobot_Ctrl;
|
||||
END_UNION
|
||||
END_TYPE
|
||||
]]></Declaration>
|
||||
</DUT>
|
||||
</TcPlcObject>
|
||||
@@ -1,12 +0,0 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<TcPlcObject Version="1.1.0.1">
|
||||
<DUT Name="U_KukaRobot_Jobs" Id="{590c2205-ccc7-4ffe-977e-f7594d299bfd}">
|
||||
<Declaration><![CDATA[TYPE U_KukaRobot_Jobs :
|
||||
UNION
|
||||
dwJobs : DWORD;
|
||||
stJobs : ST_KukaRobot_Jobs;
|
||||
END_UNION
|
||||
END_TYPE
|
||||
]]></Declaration>
|
||||
</DUT>
|
||||
</TcPlcObject>
|
||||
@@ -1,12 +0,0 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<TcPlcObject Version="1.1.0.1">
|
||||
<DUT Name="U_KukaRobot_State" Id="{955531d4-f458-4580-a2f2-ab760c7d37eb}">
|
||||
<Declaration><![CDATA[TYPE U_KukaRobot_State :
|
||||
UNION
|
||||
dwState : DWORD;
|
||||
stState : ST_KukaRobot_State;
|
||||
END_UNION
|
||||
END_TYPE
|
||||
]]></Declaration>
|
||||
</DUT>
|
||||
</TcPlcObject>
|
||||
@@ -3,7 +3,7 @@
|
||||
<POU Name="FB_TFProtocol" Id="{f0c44f0b-70b8-45d0-8720-9bd7e08b6aa6}" SpecialFunc="None">
|
||||
<Declaration><![CDATA[FUNCTION_BLOCK FB_TFProtocol
|
||||
VAR_INPUT
|
||||
sIpAddr : STRING;
|
||||
sIpAddr : STRING(15);
|
||||
udiPort : UDINT;
|
||||
|
||||
xConfirmAlarms : BOOL;
|
||||
@@ -18,30 +18,27 @@ END_VAR
|
||||
VAR
|
||||
// Connection settings
|
||||
_fbTcpConnection : FB_ClientServerConnection;
|
||||
_sIpAddr : STRING;
|
||||
_udiPort : UDINT;
|
||||
_hSocket : T_HSOCKET;
|
||||
_xConnect : BOOL := TRUE;
|
||||
_xConnected : BOOL;
|
||||
|
||||
// Socket send
|
||||
_fbSocketSend : FB_SocketSend;
|
||||
_iCmdLength : INT;
|
||||
_timSendTimeout : TIME := T#5S;
|
||||
|
||||
// Socket receive
|
||||
_fbSocketReceive : FB_SocketReceive;
|
||||
_timReceiveTimeout : TIME := T#5S;
|
||||
_abReceivedBuffer : ARRAY[0..100] OF BYTE;
|
||||
_asReceivedResponse : ARRAY[0..9] OF STRING;
|
||||
_uiBufferPos : UINT;
|
||||
_udiCounterReceive : UDINT;
|
||||
_abyReceivedBuffer : ARRAY[0..100] OF BYTE;
|
||||
_sReceivedResponse : STRING(255);
|
||||
_udiResponseLength : UDINT;
|
||||
_udiReceivedBytes : UDINT;
|
||||
_timPollingTime : TIME := T#1S;
|
||||
_tonPollTimer : TON;
|
||||
_xEnableReceiveTimeout : BOOL;
|
||||
_timReceiveTimeoutTime : TIME := T#5S;
|
||||
_tonReceiveTimeout : TON;
|
||||
_uiLastReceivedResponseId : UINT := 0;
|
||||
|
||||
// Receive state machine
|
||||
_iStateReceive : INT;
|
||||
@@ -49,16 +46,15 @@ VAR
|
||||
// Command data
|
||||
_uiCmdId : UINT := 1;
|
||||
_sCmd : STRING(255);
|
||||
_sAck : STRING(255);
|
||||
_sAck : STRING(11);
|
||||
|
||||
// Main state machine
|
||||
_iState : INT := 0;
|
||||
_xRunSMAgain : BOOL;
|
||||
_diCounter : DINT;
|
||||
_xSendCmd : BOOL;
|
||||
_uiRetries : UINT;
|
||||
_xCmdReceived : BOOL;
|
||||
_iPlaceCmdSeperator : INT;
|
||||
_sTmp : STRING;
|
||||
_xReceivedResponseOk : BOOL;
|
||||
_uiReceivedCommandId : UINT;
|
||||
|
||||
@@ -67,7 +63,9 @@ VAR
|
||||
_xError : BOOL;
|
||||
END_VAR
|
||||
VAR CONSTANT
|
||||
{attribute 'naming' := 'off'}
|
||||
MAX_RETRIES : UINT := 3;
|
||||
{attribute 'naming' := 'on'}
|
||||
END_VAR
|
||||
]]></Declaration>
|
||||
<Implementation>
|
||||
@@ -101,17 +99,19 @@ CASE _iStateReceive OF
|
||||
|
||||
// Call receive
|
||||
10:
|
||||
{analysis -64}
|
||||
_fbSocketReceive(
|
||||
sSrvNetId:= '',
|
||||
hSocket:= _hSocket,
|
||||
cbLen:= SIZEOF(_abReceivedBuffer) - _udiReceivedBytes,
|
||||
pDest:= ADR(_abReceivedBuffer) + _udiReceivedBytes,
|
||||
cbLen:= SIZEOF(_abyReceivedBuffer) - _udiReceivedBytes,
|
||||
pDest:= ADR(_abyReceivedBuffer) + _udiReceivedBytes,
|
||||
bExecute:= TRUE,
|
||||
tTimeout:= _timReceiveTimeout,
|
||||
bBusy=> ,
|
||||
bError=> ,
|
||||
nErrId=> ,
|
||||
nRecBytes=> );
|
||||
{analysis +64}
|
||||
|
||||
IF (NOT _fbSocketReceive.bBusy) AND (NOT _fbSocketReceive.bError) THEN
|
||||
_fbSocketReceive(bExecute := FALSE);
|
||||
@@ -149,374 +149,197 @@ CASE _iStateReceive OF
|
||||
// Check received data
|
||||
20:
|
||||
// Check if received command is complete
|
||||
MEMCPY(destAddr := ADR(_asReceivedResponse[_uiBufferPos]), srcAddr := ADR(_abReceivedBuffer), n := _udiReceivedBytes);
|
||||
_uiBufferPos := _uiBufferPos + 1;
|
||||
IF _uiBufferPos > 9 THEN
|
||||
_uiBufferPos := 0;
|
||||
END_IF
|
||||
MEMCPY(destAddr := ADR(_sReceivedResponse), srcAddr := ADR(_abyReceivedBuffer), n := _udiReceivedBytes);
|
||||
_udiResponseLength := _udiReceivedBytes;
|
||||
_udiReceivedBytes := 0;
|
||||
_xCmdReceived := TRUE;
|
||||
|
||||
// Go back to polling wait state
|
||||
_iStateReceive := 15;
|
||||
|
||||
ELSE
|
||||
;
|
||||
END_CASE
|
||||
|
||||
// CASE _iState OF
|
||||
// // Wait for active connection to tray feeder
|
||||
// 0:
|
||||
// IF _xConnected THEN
|
||||
// _iState := 10;
|
||||
// END_IF
|
||||
//
|
||||
// // Connected and idle
|
||||
// 10:
|
||||
// // Got to disconnected state if connection is lost
|
||||
// IF (NOT _xConnected) THEN
|
||||
// _iState := 0;
|
||||
// END_IF
|
||||
//
|
||||
// IF _xSendCmd THEN
|
||||
// _xSendCmd := FALSE;
|
||||
// _xBusy := TRUE;
|
||||
// _iState := 20;
|
||||
// END_IF
|
||||
//
|
||||
// // Check if we received a response without sending a command
|
||||
// IF _xCmdReceived THEN
|
||||
// _xCmdReceived := FALSE;
|
||||
// _iState := 50;
|
||||
// END_IF
|
||||
//
|
||||
// // Send command
|
||||
// 20:
|
||||
// _fbSocketSend(
|
||||
// sSrvNetId:= '',
|
||||
// hSocket:= _hSocket,
|
||||
// cbLen:= SIZEOF(_sCmd),
|
||||
// pSrc:= ADR(_sCmd),
|
||||
// bExecute:= TRUE,
|
||||
// tTimeout:= _timSendTimeout,
|
||||
// bBusy=> ,
|
||||
// bError=> ,
|
||||
// nErrId=> );
|
||||
//
|
||||
// IF (NOT _fbSocketSend.bBusy) AND (NOT _fbSocketSend.bError) THEN
|
||||
// _fbSocketSend(bExecute := FALSE);
|
||||
// _xEnableReceiveTimeout := TRUE;
|
||||
// _iState := 30;
|
||||
// END_IF
|
||||
//
|
||||
// IF _fbSocketSend.bError THEN
|
||||
// _fbSocketSend(bExecute := FALSE);
|
||||
// _iState := 90;
|
||||
// END_IF
|
||||
//
|
||||
// // Wait for response
|
||||
// 30:
|
||||
// // Received a response
|
||||
// IF _xCmdReceived THEN
|
||||
// _xCmdReceived := FALSE;
|
||||
// _xEnableReceiveTimeout := FALSE;
|
||||
// _uiRetries := 0;
|
||||
// _iState := 40;
|
||||
// END_IF
|
||||
//
|
||||
// // Didnt receive command ack in time
|
||||
// // So resend the command if max retries are not reached
|
||||
// IF _tonReceiveTimeout.Q THEN
|
||||
// _xEnableReceiveTimeout := FALSE;
|
||||
// _uiRetries := _uiRetries + 1;
|
||||
//
|
||||
// // Check if we reached the max number of retries
|
||||
// IF _uiRetries > MAX_RETRIES THEN
|
||||
// _iState := 90;
|
||||
// ELSE
|
||||
// // Retry by sendind command again
|
||||
// _iState := 20;
|
||||
// END_IF
|
||||
// END_IF
|
||||
//
|
||||
// // Check response
|
||||
// 40:
|
||||
// // Check for cmd id
|
||||
// IF (TO_STRING(_sReceivedResponse[0]) <> UINT_TO_STRING(_uiCmdId)) THEN
|
||||
// // Wrong command id received
|
||||
// _iState := 900;
|
||||
// END_IF
|
||||
//
|
||||
// // For for response indicator
|
||||
// IF _sReceivedResponse[1] <> F_ToASC('<') THEN
|
||||
// // Wrong response indicator
|
||||
// _iState := 901;
|
||||
// END_IF
|
||||
//
|
||||
// // Check for correct cmd
|
||||
// _xReceivedResponseOk := TRUE;
|
||||
// FOR _diCounter := 2 TO 10 DO
|
||||
// IF _sReceivedResponse[_diCounter] <> _sCmd[_diCounter] THEN
|
||||
// _xReceivedResponseOk := FALSE;
|
||||
// EXIT;
|
||||
// END_IF
|
||||
// END_FOR
|
||||
//
|
||||
// IF _xReceivedResponseOk THEN
|
||||
// _xBusy := FALSE;
|
||||
// _iState := 10;
|
||||
// ELSE
|
||||
// _iState := 902;
|
||||
// END_IF
|
||||
//
|
||||
// 50:
|
||||
// // Get command id
|
||||
// _uiReceivedCommandId := _sReceivedResponse[0] - 16#30;
|
||||
//
|
||||
// // Check if it is a new command
|
||||
// IF (_uiReceivedCommandId <> _uiLastReceivedResponseId) OR (_uiReceivedCommandId = 0) THEN
|
||||
// _uiLastReceivedResponseId := _uiReceivedCommandId;
|
||||
// xNewResponseReady := FALSE;
|
||||
//
|
||||
// // Send acknowledgement
|
||||
// _iState := 60;
|
||||
// END_IF
|
||||
//
|
||||
// // Prepare ack response
|
||||
// 60:
|
||||
// FOR _diCounter := 0 TO 10 DO
|
||||
// _sAck[_diCounter] := _sReceivedResponse[_diCounter];
|
||||
// END_FOR
|
||||
// _sAck[11] := 0;
|
||||
//
|
||||
// IF _sReceivedResponse[1] = F_ToAsc('>') THEN
|
||||
// _iState := 70;
|
||||
// ELSE
|
||||
// _iState := 10;
|
||||
// END_IF
|
||||
//
|
||||
//
|
||||
// // Send ack response
|
||||
// 70:
|
||||
// _fbSocketSend(
|
||||
// sSrvNetId:= '',
|
||||
// hSocket:= _hSocket,
|
||||
// cbLen:= SIZEOF(_sAck),
|
||||
// pSrc:= ADR(_sAck),
|
||||
// bExecute:= TRUE,
|
||||
// tTimeout:= _timSendTimeout,
|
||||
// bBusy=> ,
|
||||
// bError=> ,
|
||||
// nErrId=> );
|
||||
//
|
||||
// IF (NOT _fbSocketSend.bBusy) AND (NOT _fbSocketSend.bError) THEN
|
||||
// _fbSocketSend(bExecute := FALSE);
|
||||
// _xEnableReceiveTimeout := TRUE;
|
||||
// _xBusy := FALSE;
|
||||
// _iState := 10;
|
||||
// END_IF
|
||||
//
|
||||
// IF _fbSocketSend.bError THEN
|
||||
// _fbSocketSend(bExecute := FALSE);
|
||||
// _iState := 90;
|
||||
// END_IF
|
||||
//
|
||||
// // Error
|
||||
// 90:
|
||||
// _xError := TRUE;
|
||||
// _xBusy := FALSE;
|
||||
//
|
||||
// IF xConfirmAlarms THEN
|
||||
// _xError := FALSE;
|
||||
// _uiRetries := 0;
|
||||
// _iState := 0;
|
||||
// END_IF
|
||||
// END_CASE
|
||||
REPEAT
|
||||
_xRunSMAgain := FALSE;
|
||||
CASE _iState OF
|
||||
// Wait for active connection to tray feeder
|
||||
0:
|
||||
IF _xConnected THEN
|
||||
_iState := 10;
|
||||
END_IF
|
||||
|
||||
// Connected and idle
|
||||
10:
|
||||
// Got to disconnected state if connection is lost
|
||||
IF (NOT _xConnected) THEN
|
||||
_iState := 0;
|
||||
END_IF
|
||||
|
||||
IF _xSendCmd THEN
|
||||
_xSendCmd := FALSE;
|
||||
_xBusy := TRUE;
|
||||
_iState := 20;
|
||||
END_IF
|
||||
|
||||
// Check if we received a response without sending a command
|
||||
IF _xCmdReceived THEN
|
||||
_xCmdReceived := FALSE;
|
||||
_xRunSMAgain := TRUE;
|
||||
_iState := 50;
|
||||
END_IF
|
||||
|
||||
// Send command
|
||||
20:
|
||||
_fbSocketSend(
|
||||
sSrvNetId:= '',
|
||||
hSocket:= _hSocket,
|
||||
cbLen:= INT_TO_UDINT(_iCmdLength),
|
||||
pSrc:= ADR(_sCmd),
|
||||
bExecute:= TRUE,
|
||||
tTimeout:= _timSendTimeout,
|
||||
bBusy=> ,
|
||||
bError=> ,
|
||||
nErrId=> );
|
||||
|
||||
IF (NOT _fbSocketSend.bBusy) AND (NOT _fbSocketSend.bError) THEN
|
||||
_fbSocketSend(bExecute := FALSE);
|
||||
_xEnableReceiveTimeout := TRUE;
|
||||
_iState := 30;
|
||||
END_IF
|
||||
|
||||
IF _fbSocketSend.bError THEN
|
||||
_fbSocketSend(bExecute := FALSE);
|
||||
_iState := 90;
|
||||
END_IF
|
||||
|
||||
// Wait for response
|
||||
30:
|
||||
// Received a response
|
||||
IF _xCmdReceived THEN
|
||||
_xCmdReceived := FALSE;
|
||||
_xEnableReceiveTimeout := FALSE;
|
||||
_uiRetries := 0;
|
||||
_xRunSMAgain := TRUE;
|
||||
_iState := 40;
|
||||
END_IF
|
||||
|
||||
// Didnt receive command ack in time
|
||||
// So resend the command if max retries are not reached
|
||||
IF _tonReceiveTimeout.Q THEN
|
||||
_xEnableReceiveTimeout := FALSE;
|
||||
_uiRetries := _uiRetries + 1;
|
||||
|
||||
// Check if we reached the max number of retries
|
||||
IF _uiRetries > MAX_RETRIES THEN
|
||||
_iState := 90;
|
||||
ELSE
|
||||
// Retry by sendind command again
|
||||
_iState := 20;
|
||||
END_IF
|
||||
END_IF
|
||||
|
||||
// Check response
|
||||
40:
|
||||
// Check for cmd id
|
||||
IF (_sReceivedResponse[0] <> UINT_TO_BYTE(_uiCmdId+16#30)) THEN
|
||||
// Wrong command id received
|
||||
_iState := 900;
|
||||
END_IF
|
||||
|
||||
// For for response indicator
|
||||
IF _sReceivedResponse[1] <> F_ToASC('<') THEN
|
||||
// Wrong response indicator
|
||||
_iState := 901;
|
||||
END_IF
|
||||
|
||||
// Check for correct cmd
|
||||
_xReceivedResponseOk := TRUE;
|
||||
FOR _diCounter := 2 TO 10 DO
|
||||
IF _sReceivedResponse[_diCounter] <> _sCmd[_diCounter] THEN
|
||||
_xReceivedResponseOk := FALSE;
|
||||
EXIT;
|
||||
END_IF
|
||||
END_FOR
|
||||
|
||||
IF _xReceivedResponseOk THEN
|
||||
_xBusy := FALSE;
|
||||
_iState := 10;
|
||||
ELSE
|
||||
_iState := 902;
|
||||
END_IF
|
||||
|
||||
// Got command from tray feeder which needs to be acknowledged
|
||||
50:
|
||||
// Copy first 11 bytes
|
||||
FOR _diCounter := 0 TO 10 DO
|
||||
_sAck[_diCounter] := _sReceivedResponse[_diCounter];
|
||||
END_FOR
|
||||
|
||||
// Switch command indicator to ack indicator
|
||||
_sAck[1] := F_ToASC('<');
|
||||
|
||||
// Check if it is something we need to acknowledge
|
||||
IF _sReceivedResponse[1] = F_ToASC('>') THEN
|
||||
// Get command id
|
||||
_uiReceivedCommandId := _sReceivedResponse[0] - 16#30;
|
||||
_xRunSMAgain := TRUE;
|
||||
_iState := 60;
|
||||
ELSE
|
||||
_xRunSMAgain := TRUE;
|
||||
_iState := 10;
|
||||
END_IF
|
||||
|
||||
|
||||
// Send ack response
|
||||
60:
|
||||
// Ack is always 11 bytes long (11 characters)
|
||||
_fbSocketSend(
|
||||
sSrvNetId:= '',
|
||||
hSocket:= _hSocket,
|
||||
cbLen:= 11,
|
||||
pSrc:= ADR(_sAck),
|
||||
bExecute:= TRUE,
|
||||
tTimeout:= _timSendTimeout,
|
||||
bBusy=> ,
|
||||
bError=> ,
|
||||
nErrId=> );
|
||||
|
||||
IF (NOT _fbSocketSend.bBusy) AND (NOT _fbSocketSend.bError) THEN
|
||||
_fbSocketSend(bExecute := FALSE);
|
||||
_xEnableReceiveTimeout := TRUE;
|
||||
_xBusy := FALSE;
|
||||
_iState := 10;
|
||||
END_IF
|
||||
|
||||
IF _fbSocketSend.bError THEN
|
||||
_fbSocketSend(bExecute := FALSE);
|
||||
_iState := 90;
|
||||
END_IF
|
||||
|
||||
// Error
|
||||
90:
|
||||
_xError := TRUE;
|
||||
_xBusy := FALSE;
|
||||
|
||||
IF xConfirmAlarms THEN
|
||||
_xError := FALSE;
|
||||
_uiRetries := 0;
|
||||
_iState := 0;
|
||||
END_IF
|
||||
|
||||
ELSE
|
||||
;
|
||||
END_CASE
|
||||
UNTIL (NOT _xRunSMAgain)
|
||||
END_REPEAT
|
||||
|
||||
// Copy output buffers to outputs
|
||||
xConnected := _xConnected;
|
||||
xBusy := _xBusy;
|
||||
xError := _xError;]]></ST>
|
||||
</Implementation>
|
||||
<Method Name="M_Debug" Id="{24e700f8-310e-46c8-98c0-8a10312afeda}">
|
||||
<Declaration><![CDATA[METHOD M_Debug
|
||||
VAR_INPUT
|
||||
END_VAR
|
||||
]]></Declaration>
|
||||
<Implementation>
|
||||
<ST><![CDATA[// CASE _iState OF
|
||||
// // Wait for active connection to tray feeder
|
||||
// 0:
|
||||
// IF _xConnected THEN
|
||||
// _iState := 10;
|
||||
// END_IF
|
||||
//
|
||||
// // Connected and idle
|
||||
// 10:
|
||||
// // Got to disconnected state if connection is lost
|
||||
// IF (NOT _xConnected) THEN
|
||||
// _iState := 0;
|
||||
// END_IF
|
||||
//
|
||||
// IF _xSendCmd THEN
|
||||
// _xSendCmd := FALSE;
|
||||
// _xBusy := TRUE;
|
||||
// _iState := 20;
|
||||
// END_IF
|
||||
//
|
||||
// // Send command
|
||||
// 20:
|
||||
// _fbSocketSend(
|
||||
// sSrvNetId:= '',
|
||||
// hSocket:= _hSocket,
|
||||
// cbLen:= SIZEOF(_sCmd),
|
||||
// pSrc:= ADR(_sCmd),
|
||||
// bExecute:= TRUE,
|
||||
// tTimeout:= _timSendTimeout,
|
||||
// bBusy=> ,
|
||||
// bError=> ,
|
||||
// nErrId=> );
|
||||
//
|
||||
// IF (NOT _fbSocketSend.bBusy) AND (NOT _fbSocketSend.bError) THEN
|
||||
// _fbSocketSend(bExecute := FALSE);
|
||||
// _xEnableReceiveTimeout := TRUE;
|
||||
// _iState := 30;
|
||||
// END_IF
|
||||
//
|
||||
// IF _fbSocketSend.bError THEN
|
||||
// _fbSocketSend(bExecute := FALSE);
|
||||
// _iState := 90;
|
||||
// END_IF
|
||||
//
|
||||
// // Wait for response
|
||||
// 30:
|
||||
// // Received a response
|
||||
// IF _xCmdReceived THEN
|
||||
// _xCmdReceived := FALSE;
|
||||
// _xEnableReceiveTimeout := FALSE;
|
||||
// _uiRetries := 0;
|
||||
// _iState := 40;
|
||||
// END_IF
|
||||
//
|
||||
// // Didnt receive command ack in time
|
||||
// // So resend the command if max retries are not reached
|
||||
// IF _tonReceiveTimeout.Q THEN
|
||||
// _xEnableReceiveTimeout := FALSE;
|
||||
// _uiRetries := _uiRetries + 1;
|
||||
//
|
||||
// // Check if we reached the max number of retries
|
||||
// IF _uiRetries > MAX_RETRIES THEN
|
||||
// _iState := 90;
|
||||
// ELSE
|
||||
// // Retry by sendind command again
|
||||
// _iState := 20;
|
||||
// END_IF
|
||||
// END_IF
|
||||
//
|
||||
// // Check response
|
||||
// 40:
|
||||
// // Check for cmd id
|
||||
// IF (TO_STRING(_asReceivedResponse[0]) <> UINT_TO_STRING(_uiCmdId)) THEN
|
||||
// // Wrong command id received
|
||||
// _iState := 900;
|
||||
// END_IF
|
||||
//
|
||||
// // For for response indicator
|
||||
// IF _asReceivedResponse[1] <> F_ToASC('<') THEN
|
||||
// // Wrong response indicator
|
||||
// _iState := 901;
|
||||
// END_IF
|
||||
//
|
||||
// // Check for correct cmd
|
||||
// _xReceivedResponseOk := TRUE;
|
||||
// FOR _diCounter := 2 TO 10 DO
|
||||
// IF _asReceivedResponse[_diCounter] <> _sCmd[_diCounter] THEN
|
||||
// _xReceivedResponseOk := FALSE;
|
||||
// EXIT;
|
||||
// END_IF
|
||||
// END_FOR
|
||||
//
|
||||
// IF _xReceivedResponseOk THEN
|
||||
// _xBusy := FALSE;
|
||||
// _iState := 10;
|
||||
// ELSE
|
||||
// _iState := 902;
|
||||
// END_IF
|
||||
//
|
||||
// 50:
|
||||
// // Get command id
|
||||
// _uiReceivedCommandId := _asReceivedResponse[0] - 16#30;
|
||||
//
|
||||
// // Check if it is a new command
|
||||
// IF (_uiReceivedCommandId <> _uiLastReceivedResponseId) OR (_uiReceivedCommandId = 0) THEN
|
||||
// _uiLastReceivedResponseId := _uiReceivedCommandId;
|
||||
// xNewResponseReady := FALSE;
|
||||
//
|
||||
// // Send acknowledgement
|
||||
// _iState := 60;
|
||||
// END_IF
|
||||
//
|
||||
// // Prepare ack response
|
||||
// 60:
|
||||
// FOR _diCounter := 0 TO 10 DO
|
||||
// _sAck[_diCounter] := _asReceivedResponse[_diCounter];
|
||||
// END_FOR
|
||||
// _sAck[11] := 0;
|
||||
//
|
||||
// IF _asReceivedResponse[1] = F_ToAsc('>') THEN
|
||||
// _iState := 70;
|
||||
// ELSE
|
||||
// _iState := 10;
|
||||
// END_IF
|
||||
//
|
||||
//
|
||||
// // Send ack response
|
||||
// 70:
|
||||
// _fbSocketSend(
|
||||
// sSrvNetId:= '',
|
||||
// hSocket:= _hSocket,
|
||||
// cbLen:= SIZEOF(_sAck),
|
||||
// pSrc:= ADR(_sAck),
|
||||
// bExecute:= TRUE,
|
||||
// tTimeout:= _timSendTimeout,
|
||||
// bBusy=> ,
|
||||
// bError=> ,
|
||||
// nErrId=> );
|
||||
//
|
||||
// IF (NOT _fbSocketSend.bBusy) AND (NOT _fbSocketSend.bError) THEN
|
||||
// _fbSocketSend(bExecute := FALSE);
|
||||
// _xEnableReceiveTimeout := TRUE;
|
||||
// _xBusy := FALSE;
|
||||
// _iState := 10;
|
||||
// END_IF
|
||||
//
|
||||
// IF _fbSocketSend.bError THEN
|
||||
// _fbSocketSend(bExecute := FALSE);
|
||||
// _iState := 90;
|
||||
// END_IF
|
||||
//
|
||||
// // Error
|
||||
// 90:
|
||||
// _xError := TRUE;
|
||||
// _xBusy := FALSE;
|
||||
//
|
||||
// IF xConfirmAlarms THEN
|
||||
// _xError := FALSE;
|
||||
// _uiRetries := 0;
|
||||
// _iState := 0;
|
||||
// END_IF
|
||||
// END_CASE]]></ST>
|
||||
</Implementation>
|
||||
</Method>
|
||||
<Method Name="M_GetResponse" Id="{48f8719d-7ed0-4fb1-824a-0bf475fcfc2c}">
|
||||
<Declaration><![CDATA[METHOD M_GetResponse : STRING
|
||||
VAR
|
||||
_sTmp : STRING(255);
|
||||
END_VAR
|
||||
]]></Declaration>
|
||||
<Implementation>
|
||||
<ST><![CDATA[xNewResponseReady := FALSE;
|
||||
//MEMCPY(destAddr := ADR(_sTmp), ADR(_asReceivedResponse) + 2, n := INT_TO_UDINT(LEN(_asReceivedResponse) - 2));
|
||||
M_GetResponse := _sTmp;]]></ST>
|
||||
</Implementation>
|
||||
</Method>
|
||||
<Method Name="M_SendCmd" Id="{d00a8c1a-c183-4659-9c9e-be5b30566b7c}">
|
||||
<Declaration><![CDATA[METHOD M_SendCmd : BOOL
|
||||
VAR_INPUT
|
||||
@@ -541,6 +364,7 @@ END_IF
|
||||
// Create command with id
|
||||
_sCmd := CONCAT(UINT_TO_STRING(_uiCmdId), '>');
|
||||
_sCmd := CONCAT(_sCmd, sCmd);
|
||||
_iCmdLength := LEN(sCmd);
|
||||
|
||||
// start sendind command state machine
|
||||
_xSendCmd := TRUE;
|
||||
|
||||
@@ -8,14 +8,14 @@ END_VAR
|
||||
VAR_OUTPUT
|
||||
END_VAR
|
||||
VAR
|
||||
_sIpAddr : STRING;
|
||||
_sIpAddr : STRING(15);
|
||||
_udiPort : UDINT;
|
||||
|
||||
_fbProtocolHandler : FB_TFProtocol;
|
||||
|
||||
_xTest : BOOL;
|
||||
_xSendResult : BOOL;
|
||||
_sCmd : STRING := 'STAT-FEED';
|
||||
_sCmd : STRING := 'STAT-FEED:';
|
||||
END_VAR
|
||||
]]></Declaration>
|
||||
<Implementation>
|
||||
@@ -50,7 +50,7 @@ VAR_INPUT
|
||||
bInitRetains: BOOL; // TRUE: Die Retain-Variablen werden initialisiert (Reset warm / Reset kalt)
|
||||
bInCopyCode: BOOL; // TRUE: Die Instanz wird danach in den Kopiercode kopiert (Online-Change)
|
||||
|
||||
sIPAddr : STRING;
|
||||
sIPAddr : STRING(15);
|
||||
udiPort : UDINT;
|
||||
END_VAR]]></Declaration>
|
||||
<Implementation>
|
||||
|
||||
@@ -2,6 +2,7 @@
|
||||
<TcPlcObject Version="1.1.0.1">
|
||||
<GVL Name="GVL_SCADA" Id="{bb0d1251-7abb-4971-bbc9-72bee3b1c668}">
|
||||
<Declaration><![CDATA[{attribute 'qualified_only'}
|
||||
{attribute 'analysis' := '-43'}
|
||||
VAR_GLOBAL
|
||||
xErrAck : BOOL;
|
||||
|
||||
|
||||
@@ -1,82 +0,0 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<TcPlcObject Version="1.1.0.1">
|
||||
<POU Name="FB_PI" Id="{d504557e-7fd7-4784-a00a-5d7d1bed0c95}" SpecialFunc="None">
|
||||
<Declaration><![CDATA[FUNCTION_BLOCK FB_PI
|
||||
VAR_INPUT
|
||||
rSP : REAL;
|
||||
rPV : REAL;
|
||||
rKp : REAL;
|
||||
rTn : REAL;
|
||||
|
||||
xEnable : BOOL;
|
||||
xSaturatedUpper : BOOL := FALSE;
|
||||
xSaturatedLower : BOOL := FALSE;
|
||||
END_VAR
|
||||
VAR_OUTPUT
|
||||
rMV : REAL;
|
||||
END_VAR
|
||||
VAR
|
||||
|
||||
_rError : REAL := 0.0;
|
||||
_rIntegral : REAL := 0.0;
|
||||
_rProportinal : REAL := 0.0;
|
||||
|
||||
_rDeltaIntegral : REAL := 0.0;
|
||||
|
||||
_fbGetCurTaskIdx : GETCURTASKINDEX;
|
||||
_rT : REAL;
|
||||
|
||||
_xFirstCylce : BOOL := TRUE;
|
||||
END_VAR
|
||||
]]></Declaration>
|
||||
<Implementation>
|
||||
<ST><![CDATA[IF _xFirstCylce THEN
|
||||
_xFirstCylce := FALSE;
|
||||
|
||||
// Get current task time
|
||||
_fbGetCurTaskIdx();
|
||||
_rT := LREAL_TO_REAL(UDINT_TO_LREAL(TwinCAT_SystemInfoVarList._TASKInfo[_fbGetCurTaskIdx.index].CycleTime) * 10E-5);
|
||||
END_IF
|
||||
|
||||
|
||||
IF xEnable THEN
|
||||
_rError := rSP - rPV;
|
||||
ELSE
|
||||
_rError := 0.0;
|
||||
_rIntegral := 0.0;
|
||||
rMV := 0.0;
|
||||
RETURN;
|
||||
END_IF
|
||||
|
||||
// Calculate proportinal part
|
||||
_rProportinal := rKp * _rError;
|
||||
|
||||
// Calculate controller output
|
||||
rMV := _rProportinal + _rIntegral;
|
||||
|
||||
// Calculate integral for this step
|
||||
IF rTn <> 0 THEN
|
||||
_rDeltaIntegral := (rKp * _rT / rTn) * _rError;
|
||||
ELSE
|
||||
_rDeltaIntegral := 0;
|
||||
END_IF
|
||||
|
||||
// Only add new integral part if we are going away from the upper or lower bound
|
||||
IF (xSaturatedUpper AND (_rDeltaIntegral > 0.0)) THEN
|
||||
_rDeltaIntegral := 0.0;
|
||||
END_IF
|
||||
|
||||
IF (xSaturatedLower AND (_rDeltaIntegral < 0.0)) THEN
|
||||
_rDeltaIntegral := 0.0;
|
||||
END_IF
|
||||
|
||||
// Calculate integral part
|
||||
_rIntegral := _rIntegral + _rDeltaIntegral;
|
||||
|
||||
// Reset integral with deactivated integral time
|
||||
IF (rTn = 0.0) AND (_rIntegral <> 0) THEN
|
||||
_rIntegral := 0.0;
|
||||
END_IF]]></ST>
|
||||
</Implementation>
|
||||
</POU>
|
||||
</TcPlcObject>
|
||||
@@ -1,7 +1,8 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<TcPlcObject Version="1.1.0.1">
|
||||
<DUT Name="ST_PMLa" Id="{16746b45-38ff-4f58-95c8-eb6734adb976}">
|
||||
<Declaration><![CDATA[TYPE ST_PMLa :
|
||||
<Declaration><![CDATA[{attribute 'analysis' := '-33'}
|
||||
TYPE ST_PMLa :
|
||||
STRUCT
|
||||
astProductData : ARRAY[0..(GVL_PackML_Conf.MAX_PRODUCT_DATA-1)] OF ST_PackML_ProductData;
|
||||
diStopReason : DINT;
|
||||
|
||||
@@ -1,7 +1,8 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<TcPlcObject Version="1.1.0.1">
|
||||
<DUT Name="ST_PMLc" Id="{5cf4c850-57ba-42f8-9986-b146207e1b2f}">
|
||||
<Declaration><![CDATA[TYPE ST_PMLc :
|
||||
<Declaration><![CDATA[{attribute 'analysis' := '-33'}
|
||||
TYPE ST_PMLc :
|
||||
STRUCT
|
||||
eUnitMode : E_PackMLUnitMode;
|
||||
xUnitModeChangeRequest : BOOL;
|
||||
|
||||
@@ -1,7 +1,8 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<TcPlcObject Version="1.1.0.1">
|
||||
<DUT Name="ST_PMLs" Id="{dace328e-4599-42b5-ac3b-2a705ec8e2f3}">
|
||||
<Declaration><![CDATA[TYPE ST_PMLs :
|
||||
<Declaration><![CDATA[{attribute 'analysis' := '-33'}
|
||||
TYPE ST_PMLs :
|
||||
STRUCT
|
||||
eUnitModeCurrent : E_PackMLUnitMode;
|
||||
eStateCurrent : E_PackMLState;
|
||||
|
||||
@@ -1,7 +1,8 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<TcPlcObject Version="1.1.0.1">
|
||||
<DUT Name="ST_PackMLPI" Id="{e7198eb6-2cd3-41c0-be59-e7dbcf10a569}">
|
||||
<Declaration><![CDATA[TYPE ST_PackMLPI :
|
||||
<Declaration><![CDATA[{attribute 'analysis' := '-33'}
|
||||
TYPE ST_PackMLPI :
|
||||
STRUCT
|
||||
astParameterReal : ARRAY[0..(GVL_PackML_Conf.MAX_PARAMS-1)] OF ST_PackMLParamREAL;
|
||||
astParameterString : ARRAY[0..(GVL_PackML_Conf.MAX_PARAMS-1)] OF ST_PackMLParamSTRING;
|
||||
|
||||
@@ -1,11 +1,13 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<TcPlcObject Version="1.1.0.1">
|
||||
<DUT Name="ST_PackMLParamDINT" Id="{f9801bf5-a73d-450f-b9fc-a5d8229e4946}">
|
||||
<Declaration><![CDATA[TYPE ST_PackMLParamDINT :
|
||||
<Declaration><![CDATA[{attribute 'naming' := 'off'}
|
||||
{attribute 'analysis' := '-33'}
|
||||
TYPE ST_PackMLParamDINT :
|
||||
STRUCT
|
||||
diID : DINT;
|
||||
sName : STRING;
|
||||
sUnit : STRING(6);
|
||||
ID : DINT;
|
||||
Name : STRING;
|
||||
Unit : STRING(6);
|
||||
Value : DINT;
|
||||
END_STRUCT
|
||||
END_TYPE
|
||||
|
||||
@@ -1,11 +1,13 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<TcPlcObject Version="1.1.0.1">
|
||||
<DUT Name="ST_PackMLParamLREAL" Id="{195fabe8-44c0-43ec-8434-75e38b68efb7}">
|
||||
<Declaration><![CDATA[TYPE ST_PackMLParamLREAL :
|
||||
<Declaration><![CDATA[{attribute 'naming' := 'off'}
|
||||
{attribute 'analysis' := '-33'}
|
||||
TYPE ST_PackMLParamLREAL :
|
||||
STRUCT
|
||||
diID : DINT;
|
||||
sName : STRING;
|
||||
sUnit : STRING(6);
|
||||
ID : DINT;
|
||||
Name : STRING;
|
||||
Unit : STRING(6);
|
||||
Value : LREAL;
|
||||
END_STRUCT
|
||||
END_TYPE
|
||||
|
||||
@@ -1,11 +1,13 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<TcPlcObject Version="1.1.0.1">
|
||||
<DUT Name="ST_PackMLParamREAL" Id="{373303ba-9979-4979-a439-c899a36baa12}">
|
||||
<Declaration><![CDATA[TYPE ST_PackMLParamREAL :
|
||||
<Declaration><![CDATA[{attribute 'naming' := 'off'}
|
||||
{attribute 'analysis' := '-33'}
|
||||
TYPE ST_PackMLParamREAL :
|
||||
STRUCT
|
||||
diID : DINT;
|
||||
sName : STRING;
|
||||
sUnit : STRING(6);
|
||||
ID : DINT;
|
||||
Name : STRING;
|
||||
Unit : STRING(6);
|
||||
Value : REAL;
|
||||
END_STRUCT
|
||||
END_TYPE
|
||||
|
||||
@@ -1,11 +1,13 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<TcPlcObject Version="1.1.0.1">
|
||||
<DUT Name="ST_PackMLParamSTRING" Id="{85353d3e-e4c9-4e83-857e-8ce7ed43abaf}">
|
||||
<Declaration><![CDATA[TYPE ST_PackMLParamSTRING :
|
||||
<Declaration><![CDATA[{attribute 'naming' := 'off'}
|
||||
{attribute 'analysis' := '-33'}
|
||||
TYPE ST_PackMLParamSTRING :
|
||||
STRUCT
|
||||
diID : DINT;
|
||||
sName : STRING;
|
||||
sUnit : STRING(6);
|
||||
ID : DINT;
|
||||
Name : STRING;
|
||||
Unit : STRING(6);
|
||||
Value : STRING;
|
||||
END_STRUCT
|
||||
END_TYPE
|
||||
|
||||
@@ -1,7 +1,8 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<TcPlcObject Version="1.1.0.1">
|
||||
<DUT Name="ST_PackMLRecipe" Id="{b453a4b5-bb40-4669-97f2-8d8ab8d3dc26}">
|
||||
<Declaration><![CDATA[TYPE ST_PackMLRecipe :
|
||||
<Declaration><![CDATA[{attribute 'analysis' := '-33'}
|
||||
TYPE ST_PackMLRecipe :
|
||||
STRUCT
|
||||
diID : DINT;
|
||||
sName : STRING;
|
||||
|
||||
@@ -1,7 +1,8 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<TcPlcObject Version="1.1.0.1">
|
||||
<DUT Name="ST_PackML_ProductData" Id="{2af30e31-0927-41d2-9df4-7ed222070c13}">
|
||||
<Declaration><![CDATA[TYPE ST_PackML_ProductData :
|
||||
<Declaration><![CDATA[{attribute 'analysis' := '-33'}
|
||||
TYPE ST_PackML_ProductData :
|
||||
STRUCT
|
||||
diProcessedCount : DINT;
|
||||
diDefectiveCount : DINT;
|
||||
|
||||
@@ -4,14 +4,14 @@
|
||||
<Declaration><![CDATA[TYPE ST_PackMLStateMachineConfig :
|
||||
STRUCT
|
||||
xClearingDisabled : BOOL;
|
||||
// xStoppedDisabled : BOOL;
|
||||
// xStoppedDisabled required state
|
||||
xStartingDisabled : BOOL;
|
||||
// xIdleDisabled : BOOL;
|
||||
// xIdleDisabled required state
|
||||
xSuspededDisabled : BOOL;
|
||||
// xExecuteDisabled : BOOL;
|
||||
// xExecuteDisabled required state
|
||||
xStoppingDisabled : BOOL;
|
||||
xAbortingDisabled : BOOL;
|
||||
// xAbortedDisabled : BOOL;
|
||||
// xAbortedDisabled required state
|
||||
xHoldingDisabled : BOOL;
|
||||
xHeldDisabled : BOOL;
|
||||
xUnholdingDisabled : BOOL;
|
||||
|
||||
@@ -2,6 +2,8 @@
|
||||
<TcPlcObject Version="1.1.0.1">
|
||||
<GVL Name="GVL_PackML_Conf" Id="{b46d8e14-5a19-467d-bb78-56321e43ef47}">
|
||||
<Declaration><![CDATA[{attribute 'qualified_only'}
|
||||
{attribute 'naming' := 'off'}
|
||||
{attribute 'analysis' := '-43'}
|
||||
VAR_GLOBAL CONSTANT
|
||||
MAX_PARAMS : UINT := 10;
|
||||
MAX_PRODUCT_DATA : UINT := 10;
|
||||
|
||||
@@ -28,9 +28,6 @@ VAR
|
||||
// Internal unit mode
|
||||
_eMode : E_PackMLUnitMode;
|
||||
|
||||
// Internal unit state
|
||||
_eState : E_PackMLState;
|
||||
|
||||
// Last state
|
||||
_eLastState : E_PackMLState;
|
||||
|
||||
|
||||
@@ -1,7 +1,8 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<TcPlcObject Version="1.1.0.1">
|
||||
<POU Name="FB_PackMLStateMachine" Id="{784ceb84-1721-424f-89d1-422a24198e57}" SpecialFunc="None">
|
||||
<Declaration><![CDATA[FUNCTION_BLOCK FB_PackMLStateMachine
|
||||
<Declaration><![CDATA[{attribute 'analysis' := '-178'}
|
||||
FUNCTION_BLOCK FB_PackMLStateMachine
|
||||
VAR_INPUT
|
||||
eMode : E_PackMLUnitMode;
|
||||
eCmd : E_PackMLCmd;
|
||||
@@ -419,6 +420,9 @@ END_VAR
|
||||
|
||||
E_PackMLState.CLEARING:
|
||||
_eState := E_PackMLState.STOPPED;
|
||||
|
||||
ELSE
|
||||
;
|
||||
END_CASE
|
||||
|
||||
eState := _eState;]]></ST>
|
||||
|
||||
2585
PLC/PLC.plcproj
2585
PLC/PLC.plcproj
File diff suppressed because it is too large
Load Diff
308
PLC/PLC.tmc
308
PLC/PLC.tmc
File diff suppressed because one or more lines are too long
@@ -171,7 +171,7 @@
|
||||
</ArrayInfo>
|
||||
</DataType>
|
||||
<DataType>
|
||||
<Name GUID="{18071995-0000-0000-0000-002000000006}" IecBaseType="true" BitType="true" AutoDeleteType="true" HideSubItems="true">ARRAY [0..5] OF BIT</Name>
|
||||
<Name GUID="{18071995-0000-0000-0000-002000000006}" IecBaseType="true" AutoDeleteType="true" HideSubItems="true">ARRAY [0..5] OF BIT</Name>
|
||||
<BitSize>6</BitSize>
|
||||
<BaseType GUID="{18071995-0000-0000-0000-000000000010}">BIT</BaseType>
|
||||
<ArrayInfo>
|
||||
@@ -326,7 +326,7 @@
|
||||
</ArrayInfo>
|
||||
</DataType>
|
||||
<DataType>
|
||||
<Name GUID="{18071995-0000-0000-0000-002000000004}" IecBaseType="true" BitType="true" AutoDeleteType="true" HideSubItems="true">ARRAY [0..3] OF BIT</Name>
|
||||
<Name GUID="{18071995-0000-0000-0000-002000000004}" IecBaseType="true" AutoDeleteType="true" HideSubItems="true">ARRAY [0..3] OF BIT</Name>
|
||||
<BitSize>4</BitSize>
|
||||
<BaseType GUID="{18071995-0000-0000-0000-000000000010}">BIT</BaseType>
|
||||
<ArrayInfo>
|
||||
@@ -371,7 +371,7 @@
|
||||
</ArrayInfo>
|
||||
</DataType>
|
||||
<DataType>
|
||||
<Name GUID="{18071995-0000-0000-0000-00200000000D}" IecBaseType="true" BitType="true" AutoDeleteType="true" HideSubItems="true">ARRAY [0..12] OF BIT</Name>
|
||||
<Name GUID="{18071995-0000-0000-0000-00200000000D}" IecBaseType="true" AutoDeleteType="true" HideSubItems="true">ARRAY [0..12] OF BIT</Name>
|
||||
<BitSize>13</BitSize>
|
||||
<BaseType GUID="{18071995-0000-0000-0000-000000000010}">BIT</BaseType>
|
||||
<ArrayInfo>
|
||||
@@ -380,7 +380,7 @@
|
||||
</ArrayInfo>
|
||||
</DataType>
|
||||
<DataType>
|
||||
<Name GUID="{18071995-0000-0000-0000-00200000000E}" IecBaseType="true" BitType="true" AutoDeleteType="true" HideSubItems="true">ARRAY [0..13] OF BIT</Name>
|
||||
<Name GUID="{18071995-0000-0000-0000-00200000000E}" IecBaseType="true" AutoDeleteType="true" HideSubItems="true">ARRAY [0..13] OF BIT</Name>
|
||||
<BitSize>14</BitSize>
|
||||
<BaseType GUID="{18071995-0000-0000-0000-000000000010}">BIT</BaseType>
|
||||
<ArrayInfo>
|
||||
@@ -389,7 +389,7 @@
|
||||
</ArrayInfo>
|
||||
</DataType>
|
||||
<DataType>
|
||||
<Name GUID="{18071995-0000-0000-0000-00200000000F}" IecBaseType="true" BitType="true" AutoDeleteType="true" HideSubItems="true">ARRAY [0..14] OF BIT</Name>
|
||||
<Name GUID="{18071995-0000-0000-0000-00200000000F}" IecBaseType="true" AutoDeleteType="true" HideSubItems="true">ARRAY [0..14] OF BIT</Name>
|
||||
<BitSize>15</BitSize>
|
||||
<BaseType GUID="{18071995-0000-0000-0000-000000000010}">BIT</BaseType>
|
||||
<ArrayInfo>
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
<?xml version="1.0"?>
|
||||
<TcSmItem xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="http://www.beckhoff.com/schemas/2012/07/TcSmProject" TcSmVersion="1.0" TcVersion="3.1.4026.20" ClassName="CDevDpRamDef" SubType="121">
|
||||
<Device Id="11" DevType="121">
|
||||
<Device Id="11" Disabled="true" DevType="121">
|
||||
<Name>__FILENAME__</Name>
|
||||
<AddressInfo>
|
||||
<Pci>
|
||||
|
||||
@@ -6,24 +6,24 @@
|
||||
<UnrestoredVarLinks ImportTime="2026-02-01T12:34:23">
|
||||
<OwnerA Name="OutputSrc" Prefix="TIPC^PLC^PLC Instance" Type="2">
|
||||
<OwnerB Name="TIID^Device 1 (EtherCAT)^K20_QM01 (EX260-SEC1)">
|
||||
<Link VarA="PRG_Main._fbEtcher2._xCloseDoor" TypeA="BOOL" InOutA="1" GuidA="{18071995-0000-0000-0000-000000000030}" VarB="Byte 0^Output[1]" Size="1" RestoreInfo="ANotFound"/>
|
||||
<Link VarA="PRG_Main._fbEtcher2._xOpenDoor" TypeA="BOOL" InOutA="1" GuidA="{18071995-0000-0000-0000-000000000030}" VarB="Byte 0^Output[0]" Size="1" RestoreInfo="ANotFound"/>
|
||||
<Link VarA="PRG_Main._fbEtcher2.xCloseDoor" TypeA="BOOL" InOutA="1" GuidA="{18071995-0000-0000-0000-000000000030}" VarB="Byte 0^Output[1]" Size="1" RestoreInfo="ANotFound"/>
|
||||
<Link VarA="PRG_Main._fbEtcher2.xOpenDoor" TypeA="BOOL" InOutA="1" GuidA="{18071995-0000-0000-0000-000000000030}" VarB="Byte 0^Output[0]" Size="1" RestoreInfo="ANotFound"/>
|
||||
</OwnerB>
|
||||
</OwnerA>
|
||||
</UnrestoredVarLinks>
|
||||
<UnrestoredVarLinks ImportTime="2026-02-04T18:53:56">
|
||||
<OwnerA Name="InputDst" Prefix="TIPC^PLC^PLC Instance" Type="1">
|
||||
<OwnerB Name="TIID^Device 1 (EtherCAT)^Box 26 (TM-X5K_CB-NEC20E)">
|
||||
<Link VarA="PRG_Main._fbAligner._rXOffset" TypeA="REAL" InOutA="0" GuidA="{18071995-0000-0000-0000-00000000000D}" VarB="Module 1 (Result Data 128Byte)^Result Data 128Byte^Result Data7" RestoreInfo="ANotFound"/>
|
||||
<Link VarA="PRG_Main._fbAligner._rYOffset" TypeA="REAL" InOutA="0" GuidA="{18071995-0000-0000-0000-00000000000D}" VarB="Module 1 (Result Data 128Byte)^Result Data 128Byte^Result Data8" RestoreInfo="ANotFound"/>
|
||||
<Link VarA="PRG_Main._fbAligner.rXOffset" TypeA="REAL" InOutA="0" GuidA="{18071995-0000-0000-0000-00000000000D}" VarB="Module 1 (Result Data 128Byte)^Result Data 128Byte^Result Data7" RestoreInfo="ANotFound"/>
|
||||
<Link VarA="PRG_Main._fbAligner.rYOffset" TypeA="REAL" InOutA="0" GuidA="{18071995-0000-0000-0000-00000000000D}" VarB="Module 1 (Result Data 128Byte)^Result Data 128Byte^Result Data8" RestoreInfo="ANotFound"/>
|
||||
</OwnerB>
|
||||
</OwnerA>
|
||||
</UnrestoredVarLinks>
|
||||
<UnrestoredVarLinks ImportTime="2026-02-05T10:33:22">
|
||||
<OwnerA Name="InputDst" Prefix="TIPC^PLC^PLC Instance" Type="1">
|
||||
<OwnerB Name="TIID^Device 1 (EtherCAT)^Box 26 (TM-X5K_CB-NEC20E)">
|
||||
<Link VarA="PRG_Main._fbAligner._udiXOffset" TypeA="UDINT" InOutA="0" GuidA="{18071995-0000-0000-0000-000000000008}" VarB="Module 1 (Result Data 128Byte)^Result Data 128Byte^Result Data7" RestoreInfo="TypeMismatch" OldTypeA="UDINT" OldGuidA="{18071995-0000-0000-0000-000000000008}" NewTypeA="DINT" NewGuidA="{18071995-0000-0000-0000-000000000009}"/>
|
||||
<Link VarA="PRG_Main._fbAligner._udiYOffset" TypeA="UDINT" InOutA="0" GuidA="{18071995-0000-0000-0000-000000000008}" VarB="Module 1 (Result Data 128Byte)^Result Data 128Byte^Result Data8" RestoreInfo="TypeMismatch" OldTypeA="UDINT" OldGuidA="{18071995-0000-0000-0000-000000000008}" NewTypeA="DINT" NewGuidA="{18071995-0000-0000-0000-000000000009}"/>
|
||||
<Link VarA="PRG_Main._fbAligner.diXOffset" TypeA="UDINT" InOutA="0" GuidA="{18071995-0000-0000-0000-000000000008}" VarB="Module 1 (Result Data 128Byte)^Result Data 128Byte^Result Data7" RestoreInfo="TypeMismatch" OldTypeA="UDINT" OldGuidA="{18071995-0000-0000-0000-000000000008}" NewTypeA="DINT" NewGuidA="{18071995-0000-0000-0000-000000000009}"/>
|
||||
<Link VarA="PRG_Main._fbAligner.diYOffset" TypeA="UDINT" InOutA="0" GuidA="{18071995-0000-0000-0000-000000000008}" VarB="Module 1 (Result Data 128Byte)^Result Data 128Byte^Result Data8" RestoreInfo="TypeMismatch" OldTypeA="UDINT" OldGuidA="{18071995-0000-0000-0000-000000000008}" NewTypeA="DINT" NewGuidA="{18071995-0000-0000-0000-000000000009}"/>
|
||||
</OwnerB>
|
||||
</OwnerA>
|
||||
</UnrestoredVarLinks>
|
||||
@@ -45,89 +45,45 @@
|
||||
<Mappings>
|
||||
<OwnerA>
|
||||
<OwnerB Name="TIID^Device 1 (EtherCAT)^Box 26 (TM-X5K_CB-NEC20E)">
|
||||
<Link VarA="PlcTask Inputs^PRG_Main._fbAligner._udiXOffset" VarB="Module 1 (Result Data 128Byte)^Result Data 128Byte^Result Data7"/>
|
||||
<Link VarA="PlcTask Inputs^PRG_Main._fbAligner._udiYOffset" VarB="Module 1 (Result Data 128Byte)^Result Data 128Byte^Result Data8"/>
|
||||
<Link VarA="PlcTask Inputs^PRG_Main._fbAligner.diXOffset" VarB="Module 1 (Result Data 128Byte)^Result Data 128Byte^Result Data7"/>
|
||||
<Link VarA="PlcTask Inputs^PRG_Main._fbAligner.diYOffset" VarB="Module 1 (Result Data 128Byte)^Result Data 128Byte^Result Data8"/>
|
||||
</OwnerB>
|
||||
<OwnerB Name="TIID^Device 1 (EtherCAT)^Box 44 (EX260-SEC1)">
|
||||
<Link VarA="PlcTask Outputs^PRG_Main._fbHVTester._xCloseDoor1" VarB="Byte 0^Output[3]" Size="1"/>
|
||||
<Link VarA="PlcTask Outputs^PRG_Main._fbHVTester._xCloseDoor2" VarB="Byte 0^Output[1]" Size="1"/>
|
||||
<Link VarA="PlcTask Outputs^PRG_Main._fbHVTester._xOpenDoor1" VarB="Byte 0^Output[2]" Size="1"/>
|
||||
<Link VarA="PlcTask Outputs^PRG_Main._fbHVTester._xOpenDoor2" VarB="Byte 0^Output[0]" Size="1"/>
|
||||
<Link VarA="PlcTask Outputs^PRG_Main._fbHVTester.xCloseDoor1" VarB="Byte 0^Output[3]" Size="1"/>
|
||||
<Link VarA="PlcTask Outputs^PRG_Main._fbHVTester.xCloseDoor2" VarB="Byte 0^Output[1]" Size="1"/>
|
||||
<Link VarA="PlcTask Outputs^PRG_Main._fbHVTester.xOpenDoor1" VarB="Byte 0^Output[2]" Size="1"/>
|
||||
<Link VarA="PlcTask Outputs^PRG_Main._fbHVTester.xOpenDoor2" VarB="Byte 0^Output[0]" Size="1"/>
|
||||
</OwnerB>
|
||||
<OwnerB Name="TIID^Device 1 (EtherCAT)^Box 7 (EX600-SEC#)">
|
||||
<Link VarA="PlcTask Outputs^PRG_Main._fbAligner._xDisableVacuum" VarB="Module 1 (EX600-SEC#, 32 Valves)^Valve Outputs^Aligner disable vacuum" Size="1"/>
|
||||
<Link VarA="PlcTask Outputs^PRG_Main._fbAligner._xEnableVacuum" 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"/>
|
||||
</OwnerB>
|
||||
<OwnerB Name="TIID^Device 1 (EtherCAT)^HP (EK1100)^Term 47 (EL2004)">
|
||||
<Link VarA="PlcTask Outputs^PRG_Main._fbHeatCoolPlates._fbHeatingPlate._xEnableHotplate" VarB="Channel 1^HotplateControl" Size="1"/>
|
||||
<Link VarA="PlcTask Outputs^PRG_Main._fbHeatCoolPlates._fbHeatingPlate.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._fbHeatCoolPlates._fbHeatingPlate._fbTempSensor.iAnalogValue" VarB="RTD Inputs Channel 1^HOTPLATE_CurrentTemp"/>
|
||||
</OwnerB>
|
||||
<OwnerB Name="TIID^Device 1 (EtherCAT)^HP (EK1100)^Term 49 (EL6021)">
|
||||
<Link VarA="PlcTask Inputs^PRG_Main._fbHeatCoolPlates._fbCoolPlate._byDataIn[0]" VarB="COM TxPDO-Map Inputs^Data In 0"/>
|
||||
<Link VarA="PlcTask Inputs^PRG_Main._fbHeatCoolPlates._fbCoolPlate._byDataIn[10]" VarB="COM TxPDO-Map Inputs^Data In 10"/>
|
||||
<Link VarA="PlcTask Inputs^PRG_Main._fbHeatCoolPlates._fbCoolPlate._byDataIn[11]" VarB="COM TxPDO-Map Inputs^Data In 11"/>
|
||||
<Link VarA="PlcTask Inputs^PRG_Main._fbHeatCoolPlates._fbCoolPlate._byDataIn[12]" VarB="COM TxPDO-Map Inputs^Data In 12"/>
|
||||
<Link VarA="PlcTask Inputs^PRG_Main._fbHeatCoolPlates._fbCoolPlate._byDataIn[13]" VarB="COM TxPDO-Map Inputs^Data In 13"/>
|
||||
<Link VarA="PlcTask Inputs^PRG_Main._fbHeatCoolPlates._fbCoolPlate._byDataIn[14]" VarB="COM TxPDO-Map Inputs^Data In 14"/>
|
||||
<Link VarA="PlcTask Inputs^PRG_Main._fbHeatCoolPlates._fbCoolPlate._byDataIn[15]" VarB="COM TxPDO-Map Inputs^Data In 15"/>
|
||||
<Link VarA="PlcTask Inputs^PRG_Main._fbHeatCoolPlates._fbCoolPlate._byDataIn[16]" VarB="COM TxPDO-Map Inputs^Data In 16"/>
|
||||
<Link VarA="PlcTask Inputs^PRG_Main._fbHeatCoolPlates._fbCoolPlate._byDataIn[17]" VarB="COM TxPDO-Map Inputs^Data In 17"/>
|
||||
<Link VarA="PlcTask Inputs^PRG_Main._fbHeatCoolPlates._fbCoolPlate._byDataIn[18]" VarB="COM TxPDO-Map Inputs^Data In 18"/>
|
||||
<Link VarA="PlcTask Inputs^PRG_Main._fbHeatCoolPlates._fbCoolPlate._byDataIn[19]" VarB="COM TxPDO-Map Inputs^Data In 19"/>
|
||||
<Link VarA="PlcTask Inputs^PRG_Main._fbHeatCoolPlates._fbCoolPlate._byDataIn[1]" VarB="COM TxPDO-Map Inputs^Data In 1"/>
|
||||
<Link VarA="PlcTask Inputs^PRG_Main._fbHeatCoolPlates._fbCoolPlate._byDataIn[20]" VarB="COM TxPDO-Map Inputs^Data In 20"/>
|
||||
<Link VarA="PlcTask Inputs^PRG_Main._fbHeatCoolPlates._fbCoolPlate._byDataIn[21]" VarB="COM TxPDO-Map Inputs^Data In 21"/>
|
||||
<Link VarA="PlcTask Inputs^PRG_Main._fbHeatCoolPlates._fbCoolPlate._byDataIn[2]" VarB="COM TxPDO-Map Inputs^Data In 2"/>
|
||||
<Link VarA="PlcTask Inputs^PRG_Main._fbHeatCoolPlates._fbCoolPlate._byDataIn[3]" VarB="COM TxPDO-Map Inputs^Data In 3"/>
|
||||
<Link VarA="PlcTask Inputs^PRG_Main._fbHeatCoolPlates._fbCoolPlate._byDataIn[4]" VarB="COM TxPDO-Map Inputs^Data In 4"/>
|
||||
<Link VarA="PlcTask Inputs^PRG_Main._fbHeatCoolPlates._fbCoolPlate._byDataIn[5]" VarB="COM TxPDO-Map Inputs^Data In 5"/>
|
||||
<Link VarA="PlcTask Inputs^PRG_Main._fbHeatCoolPlates._fbCoolPlate._byDataIn[6]" VarB="COM TxPDO-Map Inputs^Data In 6"/>
|
||||
<Link VarA="PlcTask Inputs^PRG_Main._fbHeatCoolPlates._fbCoolPlate._byDataIn[7]" VarB="COM TxPDO-Map Inputs^Data In 7"/>
|
||||
<Link VarA="PlcTask Inputs^PRG_Main._fbHeatCoolPlates._fbCoolPlate._byDataIn[8]" VarB="COM TxPDO-Map Inputs^Data In 8"/>
|
||||
<Link VarA="PlcTask Inputs^PRG_Main._fbHeatCoolPlates._fbCoolPlate._byDataIn[9]" VarB="COM TxPDO-Map Inputs^Data In 9"/>
|
||||
<Link VarA="PlcTask Inputs^PRG_Main._fbHeatCoolPlates._fbCoolPlate._stStatus" VarB="COM TxPDO-Map Inputs^Status"/>
|
||||
<Link VarA="PlcTask Outputs^PRG_Main._fbHeatCoolPlates._fbCoolPlate._byDataOut[0]" VarB="COM RxPDO-Map Outputs^Data Out 0"/>
|
||||
<Link VarA="PlcTask Outputs^PRG_Main._fbHeatCoolPlates._fbCoolPlate._byDataOut[10]" VarB="COM RxPDO-Map Outputs^Data Out 10"/>
|
||||
<Link VarA="PlcTask Outputs^PRG_Main._fbHeatCoolPlates._fbCoolPlate._byDataOut[11]" VarB="COM RxPDO-Map Outputs^Data Out 11"/>
|
||||
<Link VarA="PlcTask Outputs^PRG_Main._fbHeatCoolPlates._fbCoolPlate._byDataOut[12]" VarB="COM RxPDO-Map Outputs^Data Out 12"/>
|
||||
<Link VarA="PlcTask Outputs^PRG_Main._fbHeatCoolPlates._fbCoolPlate._byDataOut[13]" VarB="COM RxPDO-Map Outputs^Data Out 13"/>
|
||||
<Link VarA="PlcTask Outputs^PRG_Main._fbHeatCoolPlates._fbCoolPlate._byDataOut[14]" VarB="COM RxPDO-Map Outputs^Data Out 14"/>
|
||||
<Link VarA="PlcTask Outputs^PRG_Main._fbHeatCoolPlates._fbCoolPlate._byDataOut[15]" VarB="COM RxPDO-Map Outputs^Data Out 15"/>
|
||||
<Link VarA="PlcTask Outputs^PRG_Main._fbHeatCoolPlates._fbCoolPlate._byDataOut[16]" VarB="COM RxPDO-Map Outputs^Data Out 16"/>
|
||||
<Link VarA="PlcTask Outputs^PRG_Main._fbHeatCoolPlates._fbCoolPlate._byDataOut[17]" VarB="COM RxPDO-Map Outputs^Data Out 17"/>
|
||||
<Link VarA="PlcTask Outputs^PRG_Main._fbHeatCoolPlates._fbCoolPlate._byDataOut[18]" VarB="COM RxPDO-Map Outputs^Data Out 18"/>
|
||||
<Link VarA="PlcTask Outputs^PRG_Main._fbHeatCoolPlates._fbCoolPlate._byDataOut[19]" VarB="COM RxPDO-Map Outputs^Data Out 19"/>
|
||||
<Link VarA="PlcTask Outputs^PRG_Main._fbHeatCoolPlates._fbCoolPlate._byDataOut[1]" VarB="COM RxPDO-Map Outputs^Data Out 1"/>
|
||||
<Link VarA="PlcTask Outputs^PRG_Main._fbHeatCoolPlates._fbCoolPlate._byDataOut[20]" VarB="COM RxPDO-Map Outputs^Data Out 20"/>
|
||||
<Link VarA="PlcTask Outputs^PRG_Main._fbHeatCoolPlates._fbCoolPlate._byDataOut[21]" VarB="COM RxPDO-Map Outputs^Data Out 21"/>
|
||||
<Link VarA="PlcTask Outputs^PRG_Main._fbHeatCoolPlates._fbCoolPlate._byDataOut[2]" VarB="COM RxPDO-Map Outputs^Data Out 2"/>
|
||||
<Link VarA="PlcTask Outputs^PRG_Main._fbHeatCoolPlates._fbCoolPlate._byDataOut[3]" VarB="COM RxPDO-Map Outputs^Data Out 3"/>
|
||||
<Link VarA="PlcTask Outputs^PRG_Main._fbHeatCoolPlates._fbCoolPlate._byDataOut[4]" VarB="COM RxPDO-Map Outputs^Data Out 4"/>
|
||||
<Link VarA="PlcTask Outputs^PRG_Main._fbHeatCoolPlates._fbCoolPlate._byDataOut[5]" VarB="COM RxPDO-Map Outputs^Data Out 5"/>
|
||||
<Link VarA="PlcTask Outputs^PRG_Main._fbHeatCoolPlates._fbCoolPlate._byDataOut[6]" VarB="COM RxPDO-Map Outputs^Data Out 6"/>
|
||||
<Link VarA="PlcTask Outputs^PRG_Main._fbHeatCoolPlates._fbCoolPlate._byDataOut[7]" VarB="COM RxPDO-Map Outputs^Data Out 7"/>
|
||||
<Link VarA="PlcTask Outputs^PRG_Main._fbHeatCoolPlates._fbCoolPlate._byDataOut[8]" VarB="COM RxPDO-Map Outputs^Data Out 8"/>
|
||||
<Link VarA="PlcTask Outputs^PRG_Main._fbHeatCoolPlates._fbCoolPlate._byDataOut[9]" VarB="COM RxPDO-Map Outputs^Data Out 9"/>
|
||||
<Link VarA="PlcTask Outputs^PRG_Main._fbHeatCoolPlates._fbCoolPlate._stCtrl" VarB="COM RxPDO-Map Outputs^Ctrl"/>
|
||||
<Link VarA="PlcTask Inputs^PRG_Main._fbHeatCoolPlates._fbCoolPlate.stStatus" VarB="COM TxPDO-Map Inputs^Status"/>
|
||||
<Link VarA="PlcTask Outputs^PRG_Main._fbHeatCoolPlates._fbCoolPlate.stCtrl" VarB="COM RxPDO-Map Outputs^Ctrl"/>
|
||||
</OwnerB>
|
||||
<OwnerB Name="TIID^Device 1 (EtherCAT)^HV_K01_KL01^HV_K01_KL07 (EL2008)">
|
||||
<Link VarA="PlcTask Outputs^PRG_Main._fbHVTester._xCloseChamber1" VarB="Channel 6^HV Hot_CloseChamber" Size="1"/>
|
||||
<Link VarA="PlcTask Outputs^PRG_Main._fbHVTester._xCloseChamber2" VarB="Channel 3^HV Cold_CloseChamber" Size="1"/>
|
||||
<Link VarA="PlcTask Outputs^PRG_Main._fbHVTester._xOpenChamber1" VarB="Channel 5^HV Hot_OpenChamber" Size="1"/>
|
||||
<Link VarA="PlcTask Outputs^PRG_Main._fbHVTester._xOpenChamber2" VarB="Channel 2^HV Cold_OpenChamber" Size="1"/>
|
||||
<Link VarA="PlcTask Outputs^PRG_Main._fbHVTester.xCloseChamber1" VarB="Channel 6^HV Hot_CloseChamber" Size="1"/>
|
||||
<Link VarA="PlcTask Outputs^PRG_Main._fbHVTester.xCloseChamber2" VarB="Channel 3^HV Cold_CloseChamber" Size="1"/>
|
||||
<Link VarA="PlcTask Outputs^PRG_Main._fbHVTester.xOpenChamber1" VarB="Channel 5^HV Hot_OpenChamber" Size="1"/>
|
||||
<Link VarA="PlcTask Outputs^PRG_Main._fbHVTester.xOpenChamber2" VarB="Channel 2^HV Cold_OpenChamber" Size="1"/>
|
||||
</OwnerB>
|
||||
<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 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 Name="TIID^Device 1 (EtherCAT)^K20_A1 (EP1018-0001)">
|
||||
<Link VarA="PlcTask Inputs^PRG_Main._fbEtcher1._fbValveDoor.xCloseFeedback" VarB="Channel 3^ShutterClosed" Size="1"/>
|
||||
<Link VarA="PlcTask Inputs^PRG_Main._fbEtcher1._fbValveDoor.xOpenFeedback" VarB="Channel 2^ShutterOpened" Size="1"/>
|
||||
<Link VarA="PlcTask Inputs^PRG_Main._fbEtcher1._xVacuumOk" VarB="Channel 1^ChuckVacuumOn" Size="1"/>
|
||||
<Link VarA="PlcTask Inputs^PRG_Main._fbEtcher1.xVacuumOk" VarB="Channel 1^ChuckVacuumOn" Size="1"/>
|
||||
</OwnerB>
|
||||
<OwnerB Name="TIID^Device 1 (EtherCAT)^K20_A2 (EP1018-0001)">
|
||||
<Link VarA="PlcTask Inputs^PRG_Main._fbEtcher1._fbEjectBack.xCloseFeedback" VarB="Channel 7^Clamping fixture ejector back retracted" Size="1"/>
|
||||
@@ -150,12 +106,12 @@
|
||||
<Link VarA="PlcTask Outputs^PRG_Main._fbEtcher1._fbUnlockRight.xOpenValve" VarB="Byte 1^Output[2]" Size="1"/>
|
||||
<Link VarA="PlcTask Outputs^PRG_Main._fbEtcher1._fbValveDoor.xCloseValve" VarB="Byte 0^Output[1]" Size="1"/>
|
||||
<Link VarA="PlcTask Outputs^PRG_Main._fbEtcher1._fbValveDoor.xOpenValve" VarB="Byte 0^Output[0]" Size="1"/>
|
||||
<Link VarA="PlcTask Outputs^PRG_Main._fbEtcher1._xDisableVacuum" VarB="Byte 0^Output[2]" Size="1"/>
|
||||
<Link VarA="PlcTask Outputs^PRG_Main._fbEtcher1.xDisableVacuum" VarB="Byte 0^Output[2]" Size="1"/>
|
||||
</OwnerB>
|
||||
<OwnerB Name="TIID^Device 1 (EtherCAT)^K21_A1 (EP1018-0001)">
|
||||
<Link VarA="PlcTask Inputs^PRG_Main._fbEtcher2._fbValveDoor.xCloseFeedback" VarB="Channel 3^ShutterClosed" Size="1"/>
|
||||
<Link VarA="PlcTask Inputs^PRG_Main._fbEtcher2._fbValveDoor.xOpenFeedback" VarB="Channel 2^ShutterOpened" Size="1"/>
|
||||
<Link VarA="PlcTask Inputs^PRG_Main._fbEtcher2._xVacuumOk" VarB="Channel 1^ChuckVacuumOn" Size="1"/>
|
||||
<Link VarA="PlcTask Inputs^PRG_Main._fbEtcher2.xVacuumOk" VarB="Channel 1^ChuckVacuumOn" Size="1"/>
|
||||
</OwnerB>
|
||||
<OwnerB Name="TIID^Device 1 (EtherCAT)^K21_A2 (EP1018-0001)">
|
||||
<Link VarA="PlcTask Inputs^PRG_Main._fbEtcher2._fbEjectBack.xCloseFeedback" VarB="Channel 7^Clamping fixture ejector back retracted" Size="1"/>
|
||||
@@ -178,34 +134,34 @@
|
||||
<Link VarA="PlcTask Outputs^PRG_Main._fbEtcher2._fbUnlockRight.xOpenValve" VarB="Byte 1^Output[2]" Size="1"/>
|
||||
<Link VarA="PlcTask Outputs^PRG_Main._fbEtcher2._fbValveDoor.xCloseValve" VarB="Byte 0^Output[1]" Size="1"/>
|
||||
<Link VarA="PlcTask Outputs^PRG_Main._fbEtcher2._fbValveDoor.xOpenValve" VarB="Byte 0^Output[0]" Size="1"/>
|
||||
<Link VarA="PlcTask Outputs^PRG_Main._fbEtcher2._xDisableVacuum" VarB="Byte 0^Output[2]" Size="1"/>
|
||||
<Link VarA="PlcTask Outputs^PRG_Main._fbEtcher2.xDisableVacuum" VarB="Byte 0^Output[2]" Size="1"/>
|
||||
</OwnerB>
|
||||
<OwnerB Name="TIID^Device 1 (EtherCAT)^PC_K01_KL01 (EK1100)^PC_K01_KL02 (EL1918)">
|
||||
<Link VarA="PlcTask Inputs^PRG_Safety._xComStartup" VarB="StandardInputs^Standard Out Var 12" Size="1"/>
|
||||
<Link VarA="PlcTask Outputs^PRG_Safety._xErrorAck" VarB="StandardOutputs^Standard In Var 212" Size="1"/>
|
||||
<Link VarA="PlcTask Outputs^PRG_Safety._xLockDoor" VarB="StandardOutputs^Standard In Var 192" Size="1"/>
|
||||
<Link VarA="PlcTask Inputs^PRG_Safety.xComStartup" VarB="StandardInputs^Standard Out Var 12" Size="1"/>
|
||||
<Link VarA="PlcTask Outputs^PRG_Safety.xErrorAck" VarB="StandardOutputs^Standard In Var 212" Size="1"/>
|
||||
<Link VarA="PlcTask Outputs^PRG_Safety.xLockDoor" VarB="StandardOutputs^Standard In Var 192" Size="1"/>
|
||||
</OwnerB>
|
||||
<OwnerB Name="TIID^Device 1 (EtherCAT)^RobotMain">
|
||||
<Link VarA="PlcTask Inputs^PRG_Main._fbRobot._abMirrorToolsAndPositions" VarB="Module 3 (Default IO)^Std. In (64 Bytes)^Input DWORD 4 (Greifer/Drehteller/Positionen)"/>
|
||||
<Link VarA="PlcTask Inputs^PRG_Main._fbRobot._asiMotorTemps1To4" VarB="Module 3 (Default IO)^Std. In (64 Bytes)^Input DWORD 8 (Motor Temp)"/>
|
||||
<Link VarA="PlcTask Inputs^PRG_Main._fbRobot._asiMotorTemps5To8" VarB="Module 3 (Default IO)^Std. In (64 Bytes)^Input DWORD 9 (Motor Temp)"/>
|
||||
<Link VarA="PlcTask Inputs^PRG_Main._fbRobot._awJobStatesFromRobot" VarB="Module 3 (Default IO)^Std. In (64 Bytes)^Input DWORD 2 (JobAktiv/JobEnde)"/>
|
||||
<Link VarA="PlcTask Inputs^PRG_Main._fbRobot._diMirrorOffsetPosX" VarB="Module 3 (Default IO)^Std. In (64 Bytes)^Input DWORD 5 (Offset X)"/>
|
||||
<Link VarA="PlcTask Inputs^PRG_Main._fbRobot._diMirrorOffsetPosY" VarB="Module 3 (Default IO)^Std. In (64 Bytes)^Input DWORD 6 (Offset Y)"/>
|
||||
<Link VarA="PlcTask Inputs^PRG_Main._fbRobot._diMirrorThickness" VarB="Module 3 (Default IO)^Std. In (64 Bytes)^Input DWORD 7 (Thickness)"/>
|
||||
<Link VarA="PlcTask Inputs^PRG_Main._fbRobot._dwErrorBits" VarB="Module 3 (Default IO)^Std. In (64 Bytes)^Input DWORD 1 (Errorbits)"/>
|
||||
<Link VarA="PlcTask Inputs^PRG_Main._fbRobot._eJobForPLC" VarB="Module 3 (Default IO)^Std. In (64 Bytes)^Input DWORD 3 (JobForPLC)" Size="16"/>
|
||||
<Link VarA="PlcTask Inputs^PRG_Main._fbRobot._uState" VarB="Module 3 (Default IO)^Std. In (64 Bytes)^Input DWORD 0 (Status)"/>
|
||||
<Link VarA="PlcTask Outputs^PRG_Main._fbRobot._abToolsAndPositions" VarB="Module 3 (Default IO)^Std. Out (64 Bytes)^Output DWORD 2 (Greifer/Drehteller/Positionen)"/>
|
||||
<Link VarA="PlcTask Outputs^PRG_Main._fbRobot._diOffsetPosX" VarB="Module 3 (Default IO)^Std. Out (64 Bytes)^Output DWORD 3 (Offset X)"/>
|
||||
<Link VarA="PlcTask Outputs^PRG_Main._fbRobot._diOffsetPosY" VarB="Module 3 (Default IO)^Std. Out (64 Bytes)^Output DWORD 4 (Offset Y)"/>
|
||||
<Link VarA="PlcTask Outputs^PRG_Main._fbRobot._diThickness" VarB="Module 3 (Default IO)^Std. Out (64 Bytes)^ Output DWORD 5 (Thickness)"/>
|
||||
<Link VarA="PlcTask Outputs^PRG_Main._fbRobot._uCtrl" VarB="Module 3 (Default IO)^Std. Out (64 Bytes)^Output DWORD 0 (CMDs)"/>
|
||||
<Link VarA="PlcTask Outputs^PRG_Main._fbRobot._uJobs" VarB="Module 3 (Default IO)^Std. Out (64 Bytes)^Output DWORD 1 (JobNr/PLCJobNr)"/>
|
||||
<Link VarA="PlcTask Inputs^PRG_Main._fbRobot.abyMirrorToolsAndPositions" VarB="Module 3 (Default IO)^Std. In (64 Bytes)^Input DWORD 4 (Greifer/Drehteller/Positionen)"/>
|
||||
<Link VarA="PlcTask Inputs^PRG_Main._fbRobot.asiMotorTemps1To4" VarB="Module 3 (Default IO)^Std. In (64 Bytes)^Input DWORD 8 (Motor Temp)"/>
|
||||
<Link VarA="PlcTask Inputs^PRG_Main._fbRobot.asiMotorTemps5To8" VarB="Module 3 (Default IO)^Std. In (64 Bytes)^Input DWORD 9 (Motor Temp)"/>
|
||||
<Link VarA="PlcTask Inputs^PRG_Main._fbRobot.awJobStatesFromRobot" VarB="Module 3 (Default IO)^Std. In (64 Bytes)^Input DWORD 2 (JobAktiv/JobEnde)"/>
|
||||
<Link VarA="PlcTask Inputs^PRG_Main._fbRobot.diMirrorOffsetPosX" VarB="Module 3 (Default IO)^Std. In (64 Bytes)^Input DWORD 5 (Offset X)"/>
|
||||
<Link VarA="PlcTask Inputs^PRG_Main._fbRobot.diMirrorOffsetPosY" VarB="Module 3 (Default IO)^Std. In (64 Bytes)^Input DWORD 6 (Offset Y)"/>
|
||||
<Link VarA="PlcTask Inputs^PRG_Main._fbRobot.diMirrorThickness" VarB="Module 3 (Default IO)^Std. In (64 Bytes)^Input DWORD 7 (Thickness)"/>
|
||||
<Link VarA="PlcTask Inputs^PRG_Main._fbRobot.dwErrorBits" VarB="Module 3 (Default IO)^Std. In (64 Bytes)^Input DWORD 1 (Errorbits)"/>
|
||||
<Link VarA="PlcTask Inputs^PRG_Main._fbRobot.eJobForPLC" VarB="Module 3 (Default IO)^Std. In (64 Bytes)^Input DWORD 3 (JobForPLC)" Size="16"/>
|
||||
<Link VarA="PlcTask Inputs^PRG_Main._fbRobot.stState" VarB="Module 3 (Default IO)^Std. In (64 Bytes)^Input DWORD 0 (Status)" Size="16"/>
|
||||
<Link VarA="PlcTask Outputs^PRG_Main._fbRobot.abyToolsAndPositions" VarB="Module 3 (Default IO)^Std. Out (64 Bytes)^Output DWORD 2 (Greifer/Drehteller/Positionen)"/>
|
||||
<Link VarA="PlcTask Outputs^PRG_Main._fbRobot.diOffsetPosX" VarB="Module 3 (Default IO)^Std. Out (64 Bytes)^Output DWORD 3 (Offset X)"/>
|
||||
<Link VarA="PlcTask Outputs^PRG_Main._fbRobot.diOffsetPosY" VarB="Module 3 (Default IO)^Std. Out (64 Bytes)^Output DWORD 4 (Offset Y)"/>
|
||||
<Link VarA="PlcTask Outputs^PRG_Main._fbRobot.diThickness" VarB="Module 3 (Default IO)^Std. Out (64 Bytes)^ Output DWORD 5 (Thickness)"/>
|
||||
<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)"/>
|
||||
</OwnerB>
|
||||
<OwnerB Name="TIID^Device 2 (Profinet Controller)^vs-0001">
|
||||
<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 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.stCamResult" VarB="API^Term 4 (Result Data 128Byte)^Subterm 6 (Result Data 128Byte)^Inputs^Result Data" Size="264" OffsB="224"/>
|
||||
<Link VarA="PlcTask Outputs^PRG_Main.xTriggerCamera" VarB="API^Term 10 (Control)^Subterm 12 (Control)^Outputs^Control Register[0]^Trigger" Size="1"/>
|
||||
</OwnerB>
|
||||
<OwnerB Name="TINC^NC-Task 1 SAF^Axes^AlignerXAxis">
|
||||
<Link VarA="PlcTask Inputs^PRG_Main._fbAligner._fbXAxis._fbAxis.NcToPlc" VarB="Outputs^ToPlc"/>
|
||||
|
||||
Reference in New Issue
Block a user