diff --git a/Infineon.sln b/Infineon.sln
index 9aefc93..d3f05e2 100644
--- a/Infineon.sln
+++ b/Infineon.sln
@@ -27,8 +27,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 RT (x86)
- {CB97A0B0-7E22-470D-8550-AA318EA46E50}.Debug|TwinCAT HMI.Build.0 = Debug|TwinCAT RT (x86)
+ {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 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)
@@ -43,8 +43,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 RT (x86)
- {CB97A0B0-7E22-470D-8550-AA318EA46E50}.Release|TwinCAT HMI.Build.0 = Release|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 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)
@@ -91,8 +91,8 @@ Global
{B4B0E423-9884-4277-82A6-6D7062793303}.Release|TwinCAT RT (x64).Build.0 = Release|TwinCAT HMI
{B4B0E423-9884-4277-82A6-6D7062793303}.Release|TwinCAT RT (x86).ActiveCfg = Release|TwinCAT HMI
{B4B0E423-9884-4277-82A6-6D7062793303}.Release|TwinCAT RT (x86).Build.0 = Release|TwinCAT HMI
- {384A40E7-3107-4D80-8361-04B00829260A}.Debug|TwinCAT HMI.ActiveCfg = Debug|TwinCAT RT (x86)
- {384A40E7-3107-4D80-8361-04B00829260A}.Debug|TwinCAT HMI.Build.0 = Debug|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 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)
@@ -107,8 +107,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 RT (x86)
- {384A40E7-3107-4D80-8361-04B00829260A}.Release|TwinCAT HMI.Build.0 = Release|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 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)
@@ -123,8 +123,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 RT (x86)
- {16E7B360-DCD5-431E-9380-EF0E96A38071}.Debug|TwinCAT HMI.Build.0 = Debug|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 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)
@@ -139,8 +139,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 RT (x86)
- {16E7B360-DCD5-431E-9380-EF0E96A38071}.Release|TwinCAT HMI.Build.0 = Release|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 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)
diff --git a/Infineon.tsproj b/Infineon.tsproj
index 6a70a44..36f65d6 100644
--- a/Infineon.tsproj
+++ b/Infineon.tsproj
@@ -1,6 +1,6 @@
-
+
@@ -13,6 +13,9 @@
PlcTask
+
+
+
@@ -36,10 +39,4 @@
-
-
-
-
-
-
diff --git a/PLC/00_Main/PRG_Main.TcPOU b/PLC/00_Main/PRG_Main.TcPOU
index a35bd68..1a0ab51 100644
--- a/PLC/00_Main/PRG_Main.TcPOU
+++ b/PLC/00_Main/PRG_Main.TcPOU
@@ -9,6 +9,7 @@ VAR
_fbEtcher2 : FB_Etcher;
_xFirstCycle : BOOL := TRUE;
+
END_VAR
]]>
diff --git a/PLC/01_Stationen/Kuka_Robot/E_KukaRobot_JobNumberRobot.TcDUT b/PLC/01_Stationen/Kuka_Robot/E_KukaRobot_JobNumberRobot.TcDUT
new file mode 100644
index 0000000..c54c7c4
--- /dev/null
+++ b/PLC/01_Stationen/Kuka_Robot/E_KukaRobot_JobNumberRobot.TcDUT
@@ -0,0 +1,67 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/PLC/01_Stationen/Kuka_Robot/E_KukaRobot_JobNumerPLC.TcDUT b/PLC/01_Stationen/Kuka_Robot/E_KukaRobot_JobNumerPLC.TcDUT
new file mode 100644
index 0000000..25e5b65
--- /dev/null
+++ b/PLC/01_Stationen/Kuka_Robot/E_KukaRobot_JobNumerPLC.TcDUT
@@ -0,0 +1,31 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/PLC/01_Stationen/Kuka_Robot/FB_KukaRobot.TcPOU b/PLC/01_Stationen/Kuka_Robot/FB_KukaRobot.TcPOU
index d68b662..7023e8d 100644
--- a/PLC/01_Stationen/Kuka_Robot/FB_KukaRobot.TcPOU
+++ b/PLC/01_Stationen/Kuka_Robot/FB_KukaRobot.TcPOU
@@ -1,10 +1,14 @@
- 0.001mm
+FUNCTION_BLOCK FINAL FB_KukaRobot EXTENDS FB_PackMLGeneric
VAR_INPUT
+ xConfirmAlarms : BOOL;
END_VAR
VAR_OUTPUT
+ xReady : BOOL;
+ xError : BOOL;
END_VAR
VAR
// 0 - Nicht aus
@@ -45,46 +49,106 @@ VAR
_asiMotorTemps1To4 AT %I* : ARRAY[0..3] OF SINT;
_asiMotorTemps5To8 AT %I* : ARRAY[0..3] OF SINT;
-END_VAR
-VAR CONSTANT
- // Bit indices for robot interface
- NOT_DISABLE_AXES : USINT := 0;
- ENABLE_AXES : USINT := 1;
- ENABLE_MOVE : USINT := 2;
- CONF_MESS : USINT := 3;
+ _eRobotJob : E_KukaRobot_JobNumberRobot;
+ _ePlcJob :E_KukaRobot_JobNumerPLC;
- // Array indices for Job interface
- ROBOT_JOB : USINT := 0;
- PLC_JOB_FINISHED : USINT := 1;
+ _xRobotReady : BOOL;
- // Array indices for tools and plate positions
- GRIPPER_NR : USINT := 0;
- TURN_TABLE_NR : USINT := 1;
- HEATING_PLATE_POS : USINT := 2;
- COOLING_PLATE_POS : USINT := 3;
+ _xError : BOOL;
+
+ // ======
+ // Alarms
+ // ======
+
+ _fbAlarmNotInExtMode : FB_AlarmMessage(stEventEntry := TC_EVENTS.RobotEvents.RobotNotInExtMode, xWithConfirmation := FALSE);
+ _fbAlarmEStopActive : FB_AlarmMessage(stEventEntry := TC_EVENTS.RobotEvents.RobotEStopActive, xWithConfirmation := FALSE);
+ _fbAlarmOperatorSafetyNotOk : FB_AlarmMessage(stEventEntry := TC_EVENTS.RobotEvents.OperatorSafetyNotOk, xWithConfirmation := FALSE);
END_VAR
]]>
- 0.001mm
+
+// =============================
+SUPER^();
+
+
+// ==============================
+// Handle general control outputs
+// ==============================
+
+// Allow robot to be moved with programming pendant
+_uCtrl.stCtrl.bNotDisableAxes := 1;
+
+// Disable move if in T2 for safety reasons
+IF (NOT _uState.stState.bT2) THEN
+ _uCtrl.stCtrl.bEnableMove := 1;
+ELSE
+ _uCtrl.stCtrl.bEnableMove := 0;
+END_IF
+
+
+// ==================
+// Write job outputs
+// ==================
+
+_uJobs.stJobs.wJobNrForRobot := _eRobotJob;
+_uJobs.stJobs.wFinishedJobNrFromPlc := _ePlcJob;
+
+
+// =================
+// Write fb outputs
+// =================
+
+xReady := _xRobotReady;
+xError := _xError;]]>
-
-
+
-
+_eRobotJob := E_KukaRobot_JobNumberRobot.NO_JOB;
+_ePlcJob := E_KukaRobot_JobNumerPLC.NO_JOB;
+]]>
diff --git a/PLC/01_Stationen/Kuka_Robot/InterfaceStructs/ST_KukaRobot_Ctrl.TcDUT b/PLC/01_Stationen/Kuka_Robot/InterfaceStructs/ST_KukaRobot_Ctrl.TcDUT
index be843ce..5a0bf11 100644
--- a/PLC/01_Stationen/Kuka_Robot/InterfaceStructs/ST_KukaRobot_Ctrl.TcDUT
+++ b/PLC/01_Stationen/Kuka_Robot/InterfaceStructs/ST_KukaRobot_Ctrl.TcDUT
@@ -4,9 +4,16 @@
-
-
-
-
-
\ No newline at end of file
diff --git a/PLC/LibraryCandidates/ISA88/E_Isa88_State.TcDUT b/PLC/LibraryCandidates/ISA88/E_Isa88_State.TcDUT
deleted file mode 100644
index 1a95b00..0000000
--- a/PLC/LibraryCandidates/ISA88/E_Isa88_State.TcDUT
+++ /dev/null
@@ -1,29 +0,0 @@
-
-
-
-
-
-
\ No newline at end of file
diff --git a/PLC/LibraryCandidates/ISA88/FB_Isa88_SM.TcPOU b/PLC/LibraryCandidates/ISA88/FB_Isa88_SM.TcPOU
deleted file mode 100644
index 357b53e..0000000
--- a/PLC/LibraryCandidates/ISA88/FB_Isa88_SM.TcPOU
+++ /dev/null
@@ -1,177 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/PLC/LibraryCandidates/ISA88/I_Isa88_SM.TcIO b/PLC/LibraryCandidates/ISA88/I_Isa88_SM.TcIO
deleted file mode 100644
index 80fb4a5..0000000
--- a/PLC/LibraryCandidates/ISA88/I_Isa88_SM.TcIO
+++ /dev/null
@@ -1,78 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/PLC/LibraryCandidates/PackML/E_PackMLCmd.TcDUT b/PLC/LibraryCandidates/PackML/E_PackMLCmd.TcDUT
new file mode 100644
index 0000000..f7965f9
--- /dev/null
+++ b/PLC/LibraryCandidates/PackML/E_PackMLCmd.TcDUT
@@ -0,0 +1,24 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/PLC/LibraryCandidates/PackML/E_PackMLState.TcDUT b/PLC/LibraryCandidates/PackML/E_PackMLState.TcDUT
new file mode 100644
index 0000000..337c9b1
--- /dev/null
+++ b/PLC/LibraryCandidates/PackML/E_PackMLState.TcDUT
@@ -0,0 +1,31 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/PLC/LibraryCandidates/PackML/E_PackMLUnitMode.TcDUT b/PLC/LibraryCandidates/PackML/E_PackMLUnitMode.TcDUT
new file mode 100644
index 0000000..9bf72ab
--- /dev/null
+++ b/PLC/LibraryCandidates/PackML/E_PackMLUnitMode.TcDUT
@@ -0,0 +1,21 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/PLC/LibraryCandidates/PackML/FB_PackMLGeneric.TcPOU b/PLC/LibraryCandidates/PackML/FB_PackMLGeneric.TcPOU
new file mode 100644
index 0000000..d01546f
--- /dev/null
+++ b/PLC/LibraryCandidates/PackML/FB_PackMLGeneric.TcPOU
@@ -0,0 +1,225 @@
+
+
+
+
+
+ _eState,
+ xError=> );
+
+
+// Call state method according to current state
+CASE _eState OF
+ E_PackMLState.CLEARING:
+ M_Clearing();
+
+ E_PackMLState.STOPPED:
+ M_Stopped();
+
+ E_PackMLState.STARTING:
+ M_Starting();
+
+ E_PackMLState.IDLE:
+ M_Idle();
+
+ E_PackMLState.SUSPENDED:
+ M_Suspended();
+
+ E_PackMLState.EXECUTE:
+ M_Execute();
+
+ E_PackMLState.STOPPING:
+ M_Stopping();
+
+ E_PackMLState.ABORTING:
+ M_Aborting();
+
+ E_PackMLState.ABORTED:
+ M_Aborted();
+
+ E_PackMLState.HOLDING:
+ M_Holding();
+
+ E_PackMLState.HELD:
+ M_Held();
+
+ E_PackMLState.UNHOLDING:
+ M_Unholding();
+
+ E_PackMLState.SUSPENDING:
+ M_Suspending();
+
+ E_PackMLState.UNSUSPENDING:
+ M_Unsuspending();
+
+ E_PackMLState.RESETTING:
+ M_Resetting();
+
+ E_PackMLState.COMPLETING:
+ M_Completing();
+
+ E_PackMLState.COMPLETE:
+ M_Complete();
+
+ ELSE
+
+ ;
+END_CASE
+
+// Copy internal flags to output
+eState := _eState;]]>
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/PLC/LibraryCandidates/PackML/FB_PackMLStateMachine.TcPOU b/PLC/LibraryCandidates/PackML/FB_PackMLStateMachine.TcPOU
new file mode 100644
index 0000000..214c952
--- /dev/null
+++ b/PLC/LibraryCandidates/PackML/FB_PackMLStateMachine.TcPOU
@@ -0,0 +1,244 @@
+
+
+
+
+
+ _eMode THEN
+ // Only allow mode switch in stopped state
+ // or in aborted state when target mode ist manual mode
+ IF (_eState = E_PackMLState.STOPPED) OR (_eState = E_PackMLState.ABORTED AND eMode = E_PackMLUnitMode.MANUAL) THEN
+ _eMode := eMode;
+ END_IF
+END_IF
+
+
+// Base state machine
+CASE _eState OF
+ E_PackMLState.STOPPING:
+ IF eCmd = E_PackMLCmd.ABORT THEN
+ _eState := E_PackMLState.ABORTING;
+ END_IF
+
+ E_PackMLState.STOPPED:
+ IF eCmd = E_PackMLCmd.RESET THEN
+ _eState := E_PackMLState.RESETTING;
+ END_IF
+
+ IF eCmd = E_PackMLCmd.ABORT THEN
+ _eState := E_PackMLState.ABORTING;
+ END_IF
+
+ E_PackMLState.RESETTING:
+ IF eCmd = E_PackMLCmd.STOP THEN
+ _eState := E_PackMLState.STOPPING;
+ END_IF
+
+ IF eCmd = E_PackMLCmd.ABORT THEN
+ _eState := E_PackMLState.ABORTING;
+ END_IF
+
+ E_PackMLState.IDLE:
+ IF eCmd = E_PackMLCmd.START THEN
+ _eState := E_PackMLState.STARTING;
+ END_IF
+
+ IF eCmd = E_PackMLCmd.STOP THEN
+ _eState := E_PackMLState.STOPPING;
+ END_IF
+
+ IF eCmd = E_PackMLCmd.ABORT THEN
+ _eState := E_PackMLState.ABORTING;
+ END_IF
+
+ E_PackMLState.STARTING:
+ IF eCmd = E_PackMLCmd.STOP THEN
+ _eState := E_PackMLState.STOPPING;
+ END_IF
+
+ IF eCmd = E_PackMLCmd.ABORT THEN
+ _eState := E_PackMLState.ABORTING;
+ END_IF
+
+ E_PackMLState.EXECUTE:
+ IF eCmd = E_PackMLCmd.SUSPEND THEN
+ _eState := E_PackMLState.SUSPENDING;
+ END_IF
+
+ IF eCmd = E_PackMLCmd.HOLD THEN
+ _eState := E_PackMLState.HOLDING;
+ END_IF
+
+ IF eCmd = E_PackMLCmd.STOP THEN
+ _eState := E_PackMLState.STOPPING;
+ END_IF
+
+ IF eCmd = E_PackMLCmd.ABORT THEN
+ _eState := E_PackMLState.ABORTING;
+ END_IF
+
+ E_PackMLState.SUSPENDING:
+ IF eCmd = E_PackMLCmd.STOP THEN
+ _eState := E_PackMLState.STOPPING;
+ END_IF
+
+ IF eCmd = E_PackMLCmd.ABORT THEN
+ _eState := E_PackMLState.ABORTING;
+ END_IF
+
+ E_PackMLState.SUSPENDED:
+ IF eCmd = E_PackMLCmd.UNSUSPEND THEN
+ _eState := E_PackMLState.UNSUSPENDING;
+ END_IF
+
+ IF eCmd = E_PackMLCmd.STOP THEN
+ _eState := E_PackMLState.STOPPING;
+ END_IF
+
+ IF eCmd = E_PackMLCmd.ABORT THEN
+ _eState := E_PackMLState.ABORTING;
+ END_IF
+
+ E_PackMLState.UNSUSPENDING:
+ IF eCmd = E_PackMLCmd.STOP THEN
+ _eState := E_PackMLState.STOPPING;
+ END_IF
+
+ IF eCmd = E_PackMLCmd.ABORT THEN
+ _eState := E_PackMLState.ABORTING;
+ END_IF
+
+ E_PackMLState.HOLDING:
+ IF eCmd = E_PackMLCmd.STOP THEN
+ _eState := E_PackMLState.STOPPING;
+ END_IF
+
+ IF eCmd = E_PackMLCmd.ABORT THEN
+ _eState := E_PackMLState.ABORTING;
+ END_IF
+
+ E_PackMLState.HELD:
+ IF eCmd = E_PackMLCmd.UNHOLD THEN
+ _eState := E_PackMLState.UNHOLDING;
+ END_IF
+
+ IF eCmd = E_PackMLCmd.STOP THEN
+ _eState := E_PackMLState.STOPPING;
+ END_IF
+
+ IF eCmd = E_PackMLCmd.ABORT THEN
+ _eState := E_PackMLState.ABORTING;
+ END_IF
+
+ E_PackMLState.UNHOLDING:
+ IF eCmd = E_PackMLCmd.STOP THEN
+ _eState := E_PackMLState.STOPPING;
+ END_IF
+
+ IF eCmd = E_PackMLCmd.ABORT THEN
+ _eState := E_PackMLState.ABORTING;
+ END_IF
+
+ E_PackMLState.COMPLETING:
+ IF eCmd = E_PackMLCmd.STOP THEN
+ _eState := E_PackMLState.STOPPING;
+ END_IF
+
+ IF eCmd = E_PackMLCmd.ABORT THEN
+ _eState := E_PackMLState.ABORTING;
+ END_IF
+
+ E_PackMLState.COMPLETE:
+ IF eCmd = E_PackMLCmd.RESET THEN
+ _eState := E_PackMLState.RESETTING;
+ END_IF
+
+ IF eCmd = E_PackMLCmd.STOP THEN
+ _eState := E_PackMLState.STOPPING;
+ END_IF
+
+ IF eCmd = E_PackMLCmd.ABORT THEN
+ _eState := E_PackMLState.ABORTING;
+ END_IF
+
+ E_PackMLState.ABORTED:
+ IF eCmd = E_PackMLCmd.CLEAR THEN
+ _eState := E_PackMLState.CLEARING;
+ END_IF
+
+ E_PackMLState.CLEARING:
+ IF eCmd = E_PackMLCmd.ABORT THEN
+ _eState := E_PackMLState.ABORTING;
+ END_IF
+
+ ELSE
+ ;
+END_CASE
+
+// Copy internal state value to fb output
+eState := _eState;
+eCurrentMode := _eMode;]]>
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/PLC/LibraryCandidates/PackML/ITFs/I_UnitState.TcIO b/PLC/LibraryCandidates/PackML/ITFs/I_UnitState.TcIO
new file mode 100644
index 0000000..26ecb43
--- /dev/null
+++ b/PLC/LibraryCandidates/PackML/ITFs/I_UnitState.TcIO
@@ -0,0 +1,109 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/PLC/LibraryCandidates/PackML/ITFs/I_UnitStateActing.TcIO b/PLC/LibraryCandidates/PackML/ITFs/I_UnitStateActing.TcIO
new file mode 100644
index 0000000..6e11ce1
--- /dev/null
+++ b/PLC/LibraryCandidates/PackML/ITFs/I_UnitStateActing.TcIO
@@ -0,0 +1,73 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/PLC/LibraryCandidates/PackML/ITFs/I_UnitStateWaiting.TcIO b/PLC/LibraryCandidates/PackML/ITFs/I_UnitStateWaiting.TcIO
new file mode 100644
index 0000000..b5edbc5
--- /dev/null
+++ b/PLC/LibraryCandidates/PackML/ITFs/I_UnitStateWaiting.TcIO
@@ -0,0 +1,43 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/PLC/LibraryCandidates/Unittests/FB_PackMLStateMachine_Test.TcPOU b/PLC/LibraryCandidates/Unittests/FB_PackMLStateMachine_Test.TcPOU
new file mode 100644
index 0000000..6e7e40f
--- /dev/null
+++ b/PLC/LibraryCandidates/Unittests/FB_PackMLStateMachine_Test.TcPOU
@@ -0,0 +1,569 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ RESETTING -> IDLE
+fbPackML(eMode := E_PackMLUnitMode.PRODUCTION, eCmd := E_PackMLCmd.RESET);
+fbPackML.M_StateComplete();
+AssertEquals_DINT(E_PackMLState.IDLE, fbPackML.eState, 'Should reach IDLE');
+
+// IDLE -> STARTING -> EXECUTE
+fbPackML(eCmd := E_PackMLCmd.START);
+fbPackML.M_StateComplete();
+AssertEquals_DINT(E_PackMLState.EXECUTE, fbPackML.eState, 'Should reach EXECUTE');
+
+// EXECUTE -> COMPLETING -> COMPLETE
+fbPackML.M_StateComplete();
+fbPackML.M_StateComplete();
+AssertEquals_DINT(E_PackMLState.COMPLETE, fbPackML.eState, 'Should reach COMPLETE');
+
+// COMPLETE -> RESETTING -> IDLE
+fbPackML(eCmd := E_PackMLCmd.RESET);
+fbPackML.M_StateComplete();
+AssertEquals_DINT(E_PackMLState.IDLE, fbPackML.eState, 'Should return to IDLE');
+
+TEST_FINISHED();]]>
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/PLC/LibraryCandidates/Unittests/PRG_Test.TcPOU b/PLC/LibraryCandidates/Unittests/PRG_Test.TcPOU
new file mode 100644
index 0000000..fbfef77
--- /dev/null
+++ b/PLC/LibraryCandidates/Unittests/PRG_Test.TcPOU
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/PLC/PLC.plcproj b/PLC/PLC.plcproj
index 604f851..191b583 100644
--- a/PLC/PLC.plcproj
+++ b/PLC/PLC.plcproj
@@ -33,6 +33,12 @@
Code
+
+ Code
+
+
+ Code
+
Code
@@ -64,16 +70,34 @@
Code
true
-
+
Code
-
+
Code
-
+
Code
-
+
+ Code
+
+
+ Code
+
+
+ Code
+
+
+ Code
+
+
+ Code
+
+
+ Code
+
+
Code
@@ -97,11 +121,17 @@
-
+
+
+
+
+ BaseComponents, * (Heisig GmbH)
+ BC
+
VisuElemMeter, 4.7.0.0 (System)
VisuElemMeter
@@ -161,6 +191,10 @@
Tc3_Module
true
+
+ TcUnit, * (www.tcunit.org)
+ TcUnit
+
diff --git a/PLC/PlcTask.TcTTO b/PLC/PlcTask.TcTTO
index 85ca8d4..2866370 100644
--- a/PLC/PlcTask.TcTTO
+++ b/PLC/PlcTask.TcTTO
@@ -5,7 +5,7 @@
10000
20
- PRG_Main
+ PRG_Test
{40eb18ee-d47c-458f-bba5-88b899fc1567}
{6e3535be-c313-4e44-9f98-4268a560c4bf}
diff --git a/_Config/IO/Device 1 (EtherCAT).xti b/_Config/IO/Device 1 (EtherCAT).xti
index 046ef84..d759226 100644
--- a/_Config/IO/Device 1 (EtherCAT).xti
+++ b/_Config/IO/Device 1 (EtherCAT).xti
@@ -544,7 +544,7 @@
424de6000000000000007600000028000000100000000e000000010004000000000070000000000000000000000010000000000000001c120800244aa500203262002462ee001c273f00245ad500243a7c001c222b001c1a1e002472fc00244fb7001c2a4d00243a7100246afc0024428d001c1a1300d5bbbbbbedddddddddb8777fcdd9dd9dd580ffffcddddddd9e7780f47b5dd9ddd3d35cb700e9ddd9ddd9d9de88a9ddddd9dddd9abb3dddddddddd99e04d9dd9dddddddd20adddddd9dd9d958b9ddd9ddddddd18cddddddd9dd5554e99d999d1dd9b07b2ee111e1add5bb777774bb6add
424de6000000000000007600000028000000100000000e000000010004000000000070000000000000000000000000000000000000000000000000008000008000000080800080000000800080008080000080808000c0c0c0000000ff0000ff000000ffff00ff000000ff00ff00ffff0000ffffff00bb1111113bbbbbbbbb1000001bbbbbbbbb0000001bbbbbbbb300000001bbbbbbbbbbb110003bbbbbbbbbbbb3003bbbbbbbbbbbb311bbbbbbbbbbbbb300bbbbbbbbbbbbb103bbbbbbbbbbbbb01bbbbbbbbbbbb301bbbbbbbbbbbbb03bbbbbbb3bbb1001133333333bb3110000001113bb
-
+
__FILENAME__
@@ -556,9 +556,6 @@
Image
-
- Prozessabbild-2
-
Etcher1ChuckPresent (EP1018-0001)
1000
@@ -35040,19 +35037,19 @@ Bit 8 - 15 : reserved]]>
HEAD
ECAT_HEAD
- 1184
+ 12416
DATA
ARRAY [0..511] OF BYTE
- 1264
+ 12496
CNT
UINT
- 5360
+ 16592
@@ -35060,19 +35057,19 @@ After receiving]]>
HEAD
ECAT_HEAD
- 1184
+ 12416
DATA
ARRAY [0..511] OF BYTE
- 1264
+ 12496
CNT
UINT
- 5360
+ 16592
diff --git a/_Config/IO/Device 11 (NOV-DP-RAM).xti b/_Config/IO/Device 11 (NOV-DP-RAM).xti
index c14437f..1d01070 100644
--- a/_Config/IO/Device 11 (NOV-DP-RAM).xti
+++ b/_Config/IO/Device 11 (NOV-DP-RAM).xti
@@ -1,6 +1,6 @@
-
+
__FILENAME__
diff --git a/_Config/PLC/PLC Instance.xti b/_Config/PLC/PLC Instance.xti
index 0cfc22e..4235036 100644
--- a/_Config/PLC/PLC Instance.xti
+++ b/_Config/PLC/PLC Instance.xti
@@ -18,55 +18,4 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-