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 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -