1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 | IF NOT xInit THEN UM ( sName := 'Normal Operation', dwAllowsLeavingFromStates := PACK_ML.State.Stopped OR PACK_ML.State.Aborted OR PACK_ML.State.Idle, IF SysStrCmp(Client.sCommandToPLC, Client.LockCommands[0]) = 0 THEN _open := TRUE; ELSIF SysStrCmp(Client.sCommandToPLC, 'UnSuspend') = 0 THEN UnSuspend(); END_CASE Client.iCommandToPLC := 0; Client.sCommandToPLC := ''; Client.bReadyToPLC := FALSE; CASE UM.CurrentState OF PACK_ML.State.Stopped: ; PACK_ML.State.Aborted: PACK_ML.State.Idle: PACK_ML.State.Complete : PACK_ML.State.Execute : CASE Client.ActualStep OF 0: Client.ActualStep := 300; 300: IF _open THEN Client.Message:='Opening the door.'; //Open Door Client.ActualStep := 301; _open := FALSE; IF _close THEN Client.Message:='Closing the door.'; //Close Door Client.ActualStep := 311; _close := FALSE; END_IF 301: IF FHPP_CTRL_Door.Ready AND FHPP_CTRL_Door.ActualPosition < iTest_Door_Close_Pos THEN Client.ActualStep := 312; ELSIF FHPP_CTRL_Door.Ready THEN 312: FHPP_CTRL_Door.SetValuePosition := iTest_Door_Close_Pos; Client.ActualStep := 313; 313: Client.ActualStep := 314; 314: Client.Message:='Closed the door.'; END_IF; END_CASE PACK_ML.State.Resetting : 0: Client.ActualStep := 100; 100: IF NOT FHPP_CTRL_Door.Fault AND FHPP_CTRL_Door.SupplyVoltagePresent THEN Client.ActualStep := 101; END_IF; Client.ActualStep := 111; ELSIF FHPP_CTRL_Door.DriveEnabled AND NOT FHPP_CTRL_Door.HomingValid THEN END_IF; IF FHPP_CTRL_Door.Fault THEN 102: (*Homing*) IF FHPP_CTRL_Door.HomingValid THEN END_IF; Client.Message:='Closing the door.'; IF FHPP_CTRL_Door.Ready AND FHPP_CTRL_Door.ActualPosition >= iTest_Door_Close_Pos THEN Client.ActualStep := 0; ELSIF FHPP_CTRL_Door.Ready THEN END_IF; Client.Message:='Closing the door.'; Client.ActualStep := 113; 113: Client.Message:='Waiting for AckStart.'; Client.ActualStep := 114; END_IF; IF FHPP_CTRL_Door.MC THEN END_CASE Client.Message:=''; StateComplete(); PACK_ML.State.Aborting : PACK_ML.State.Stopping: END_CASE // Emergency Abort. END_IF messageQueue(Client := Client); b2(ENABLE := TRUE,TIMELOW := T#100MS,TIMEHIGH:= T#100MS); IF Client.ActualStep = 100 AND Client.ActualState = PACK_ML.Resetting THEN ELSE END_IF; FHPP_CTRL_Door.EnableDrive := TRUE; Abort(); (* Start task *) |