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 | PROGRAM BalastTank_PRG VAR UM : PACK_ML.UnitMode; xInit : BOOL := FALSE; // Flag for initialization ActualStep : INT :=0; moveAbsolute : MC_MoveAbsolute_Festo; StopBoat : MC_Stop_Festo; StopLinear : MC_Stop_Festo; BoatStatus : MC_ReadStatus_Festo; enable : BOOL; bMove : BOOL; END_VAR 413 {8e575c5b-1d37-49c6-941b-5c0ec7874787} ChildObjectGuids AddAttributeSubsequent IF NOT xInit THEN UM ( sName := 'Normal Operation', dwAllowsLeavingFromStates := PACK_ML.State.Stopped OR PACK_ML.State.Aborted OR PACK_ML.State.Idle, home := CMMT_ST_Rotery_Boot.Home(Position := 0,HomingMethod := 0); IF home THEN ActualStep := ActualStep + 10; 220: IF CMMT_ST_Rotery_Boot.HomingValid THEN ActualStep := 10; 300: ActualStep := 0; UM.ActingStateCompleted(); END_CASE PACK_ML.State.Completing : UM.ActingStateCompleted(); PACK_ML.State.Aborting : CMMT_ST_Rotery_Boot.DisableDrive(); PACK_ML.State.Stopping: CASE ActualStep OF 0: StopBoat.Execute := TRUE; StopLinear.Execute := TRUE; ActualStep := 10; 10: IF BoatStatus.Stopping AND LinearStatus.Stopping THEN; StopLinear.Execute := FALSE; StopBoat.Execute := FALSE; ActualStep := 20; END_IF 20: UM.ActingStateCompleted(); PACK_ML.State.Clearing: IF CMMT_ST_Rotery_Boot.AxisError THEN CMMT_ST_Rotery_Boot.Reset(); ActualStep := 0; UM.ActingStateCompleted(); END_CASE // couple axis to functionblocks here BoatStatus (Axis := CMMT_ST_Rotery_Boot, Enable := TRUE); StopBoat ( Axis := CMMT_ST_Rotery_Boot); |