a b/branches/PackMLState/Main_Escape_PLC/Plc Logic/Application/Function Blocks/Puzzle/BalastTankPuzzleStateMachine/svnobj
1
Gx_ljX!0…jüoB9ã|#§;I  )System.StringL{6f9dac99-8de1-4efc-8465-68ac443b7d08}SpecialFuncL{0db3d7bb-cde0-4416-9a7b-ce49a0124323}NoneImplementationL{3b83b776-fb25-43b8-99f2-3c507c9143fc}TextDocument   L{f3878285-8e4f-490b-bb1b-9acbb7eb04db}
2
TextLinesL{a5de0b0b-1cb5-4913-ac21-9d70293ec00d}Id
longTagText$IF NOT xInit THEN N UM            (    sName := 'Normal Operation', ì                    dwSupportedStates := PACK_ML.State.All - PACK_ML.State.Suspending - PACK_ML.State.Suspended - PACK_ML.State.UnSuspending - PACK_ML.Holding - PACK_ML.Held - PACK_ML.UnHolding, Ô                    dwAllowsLeavingFromStates := PACK_ML.State.Stopped OR PACK_ML.State.Aborted OR PACK_ML.State.Idle, Ö                    dwAllowsEnteringIntoStates := PACK_ML.State.Stopped OR PACK_ML.State.Aborted OR PACK_ML.State.Idle, \                   eInitialState := PACK_ML.State.Aborted,2                     xActive := TRUE);  xInit := TRUE; END_IF4IF Client.bReadyToPLC THEN:   CASE Client.iCommandToPLC OF" 0 :    //Handshake   1 :    //Lock       IF SysStrCmp(Client.sCommandToPLC, Client.LockCommands[0]) =  0 THEN       0       //First Lock Function!         ;"–     ELSIF SysStrCmp(Client.sCommandToPLC, Client.LockCommands[1]) =  0 THEN    #2       //Second Lock Function$
3
          ; %    END_IF& 2 :    //Key'   3 :    //IO( 4 :    //Media)   5 :    //Hint* 6 :    //State +p    IF SysStrCmp(Client.sCommandFromPLC, 'SC') =  0 THEN      ,&       StateComplete();-x    ELSIF SysStrCmp(Client.sCommandToPLC, 'Start') =  0 THEN      .       Start();/v    ELSIF SysStrCmp(Client.sCommandToPLC, 'Stop') =  0 THEN    0       Stop();1x      ELSIF SysStrCmp(Client.sCommandToPLC, 'Reset') =  0 THEN      2       Reset();3x    ELSIF SysStrCmp(Client.sCommandToPLC, 'Abort') =  0 THEN      4       Abort();5x    ELSIF SysStrCmp(Client.sCommandToPLC, 'Clear') =  0 THEN      6       Clear();7v    ELSIF SysStrCmp(Client.sCommandToPLC, 'Hold') =  0 THEN    8       Hold();9z      ELSIF SysStrCmp(Client.sCommandToPLC, 'UnHold') =  0 THEN    :       Unhold(); ;|    ELSIF SysStrCmp(Client.sCommandToPLC, 'Suspend') =  0 THEN      <       Suspend();=€       ELSIF SysStrCmp(Client.sCommandToPLC, 'UnSuspend') =  0 THEN      >       UnSuspend();?    @ END_CASEA6 Client.iCommandToPLC := 0;B8 Client.sCommandToPLC := '';C:   Client.bReadyToPLC := FALSE;D.CASE UM.CurrentState OFE,PACK_ML.State.Stopped:F   ;G,PACK_ML.State.Aborted:H&PACK_ML.State.Idle:I2PACK_ML.State.Complete : J.PACK_ML.State.Execute :KD IF CMMT_ST_Linear1.AxisError THENL      Abort();M    RETURN;N   END_IFO˜    // NOTE: Remember that most math has the Y axis as positive above the X.P”    // However, for screens we have Y as positive below. For this reason, Qz    // the Y values are inverted to get the expected results.RT    //final double deltaY = (p1.y - p2.y);ST    //final double deltaX = (p2.x - p1.x);T    //final double result = Math.toDegrees(Math.atan2(deltaY, deltaX)); Uj    //return (result < 0) ? (360d + result) : result;Vr    actualPositionLinear1 := CMMT_ST_Linear1.ActualPosition;WJ deltaY := actualPositionLinear1 - 0;XN deltaX := actualPositionLinear2 - 500;YV angle := OSCAT_BASIC.ATAN2(deltaY,deltaX);Z\ targetPositionBoat := angle * 180 / 3.1415;    [@ IF targetPositionBoat <= 0 THEN\4      targetPositionBoat := 0;]J ELSIF targetPositionBoat >= 360 THEN^8    targetPositionBoat := 360;_†    //CMMT_ST_Rotery_Boot_MoveAbsolute.Position:= targetPositionBoat ;`d //CMMT_ST_Rotery_Boot_MoveAbsolute.Execute:=TRUE;aD   BoatAngle :=  targetPositionBoat;b8   CASE Client.ActualStep OF    c
4
       0:   d,       CASE Client.Mode OFe            Mode.Mode1:f2               CASE Client.Level OFg,                Level.Beginner: h4                   speed := 100;                i2                Level.Placeholder1:j(                     speed := 200;k2                  Level.Intermediate:l(                     speed := 300;m2                  Level.Placeholder2:n(                     speed := 400;o*                  Level.Advanced:p(                     speed := 500;q               END_CASEr<             Client.ActualStep := 100;s2               executeBoat := TRUE;t(          Mode.Mode2:             u<             Client.ActualStep := 200;v(            Mode.Mode3:             wH             Client.ActualStep := 300;            x                y       END_CASE      z    100:{r       bMove := CMMT_ST_Linear1.MoveAbsolute(Position:= 50 , |,          Velocity:= speed, }0          Acceleration:= 500, ~0          Deceleration:= 500, "          Jerk:= 1000, €X           BufferMode:= MC_BUFFER_MODE.mcBuffered,               ErrorID=> , ‚(             ErrorString=> );ƒ           IF bMove THEN„^           Client.ActualStep := Client.ActualStep + 1;…        END_IF†       101:‡P          IF CMMT_ST_Linear1.TargetReached THENˆ        END_IF         ‰       102:Št          bMove := CMMT_ST_Linear1.MoveAbsolute(Position:= 550 , ‹     103:Œ:             Client.ActualStep := 100;        END_IF      Ž       200:       300:(          StateComplete();   ‘    END_CASE   ’2PACK_ML.State.Resetting :“d   CMMT_ST_Rotery_Boot_MoveAbsolute.Execute:=FALSE;   ”,    executeBoat := FALSE;•:  CMMT_ST_Linear1.ResetHalt();–&    StateComplete();      —0PACK_ML.State.Starting :˜L       IF NOT CMMT_ST_Linear1.Enabled THEN™@           Client.ActualStep := 100;       š          ELSE›@             Client.ActualStep := 10;            œ       10: T          IF NOT CMMT_ST_Linear1.HomingValid THENž:           Client.ActualStep := 110;ŸB           Client.ActualStep := 300;                     END_IF   ¡V          enable := CMMT_ST_Linear1.EnableDrive();¢"          IF enable THEN£6             Client.ActualStep := 0;¤           Abort();¥       110:¦‚         home := CMMT_ST_Linear1.Home(Position := 0,HomingMethod := 0);§&          IF home THEN            ¨b             Client.ActualStep := Client.ActualStep + 10;   ©       120:ªT          IF CMMT_ST_Linear1.HomingValid THEN          «:             Client.ActualStep := 10;   ¬
5
                ­4PACK_ML.State.Completing :®$ StateComplete();   ¯0PACK_ML.State.Aborting :°@ CMMT_ST_Linear1.DisableDrive();±"  StateComplete();².PACK_ML.State.Stopping:³4   CASE Client.ActualStep OF´     0:µ8          StopBoat.Execute := TRUE;¶<        StopLinear.Execute := TRUE;·6        Client.ActualStep := 10;¸
6
       10:¹r        IF BoatStatus.Stopping AND LinearStatus.Stopping THEN;º@             StopLinear.Execute := FALSE;»<             StopBoat.Execute := FALSE;¼:             Client.ActualStep := 20;   ½
7
       20:¾.PACK_ML.State.Clearing:¿H       IF CMMT_ST_Linear1.AxisError THENÀ6        CMMT_ST_Linear1.Reset();Á:          Client.ActualStep := 0;       ÂEND_CASEÃLClient.ActualState := UM.CurrentState;Äf(*IF NOT (x_EmergencyGF AND NOT x_EmergencyFF) THENÅ(  //Emergency Abort.Æ  Abort();   ÇEND_IF*)ÈäpuzzleTimer(xStartTimer := UM.CurrentState = PACK_ML.State.Execute ,xPauseTimer := ,xStopTimer:= NOT (UM.CurrentState = PACK_ML.State.Execute),tMaxPuzzleTime := Client.Duration);ÉPClient.Progress := puzzleTimer.iProcess;ÊHIF puzzleTimer.iProcess >= 100 THEN    Ë    Stop();ÌJ// couple axis to functionblocks hereÍnLinearStatus (Axis := CMMT_ST_Linear1, Enable := TRUE);ÎJStopLinear (Axis := CMMT_ST_Linear1);Ï~(*CMMT_ST_Rotery_Boot_MoveAbsolute(Axis:=CMMT_ST_Rotery_Boot , Ð6           ContinuousUpdate:=TRUE,Ñ*           Velocity:= 1000, Ò4           Acceleration:= 10000, Ó4             Deceleration:= 10000, Ô(             Jerk:= 1000000, Õ^             BufferMode:= MC_BUFFER_MODE.mcAborting );*)ÖInterface×L{a9ed5b7e-75c5-4651-af16-d2c27e98cb94}ØVFUNCTION_BLOCK BalastTankPuzzleStateMachineÙVAR_IN_OUTÚ.  Client : PuzzleClient;ÛEND_VARÜVARÝ0  UM   : PACK_ML.UnitMode; Þj    xInit          : BOOL := FALSE; // Flag for initializationß8  puzzleTimer    : PuzzleTimer;à áP  moveAbsolute  : MC_MoveAbsolute_Festo;â6    StopBoat      : MC_Stop_Festo;ã<    StopLinear     : MC_Stop_Festo;äF    BoatStatus      : MC_ReadStatus_Festo;åH    LinearStatus   : MC_ReadStatus_Festo;æ$    enable        : BOOL;ç   home        : BOOL;è"  bMove          : BOOL;é  speed          :INT;ê<  actualPositionLinear1 : REAL;ëJ  actualPositionLinear2 : REAL := 300;ì6    actualPositionBoat : REAL;í    deltaY : REAL;î    deltaX : REAL;ï    angle : REAL;ð(  executeBoat : BOOL;ñ6  targetPositionBoat : REAL;ò    bl : BLINK;ó  ii: INT;ôr    CMMT_ST_Rotery_Boot_MoveAbsolute :MC_MoveAbsolute_Festo;õ"UniqueIdGeneratorö1719÷POULeveløL{8e575c5b-1d37-49c6-941b-5c0ec7874787}ùStandardú ChildObjectGuidsû8System.Collections.ArrayListü,AddAttributeSubsequentýboolÐÐ-ÐÐ E
8
›ÐÐ
­AÚÐ-ÐÐ
­BÚÐ-ÐÐ
­CÚÐ-ÐÐ
­DÚÐ-ÐÐ
­EÚÐ-ÐÐ
­FÚÐ-ÐÐ
­GÚÐ-ÐÐ
­HÚÐ-ÐÐ
­IÚÐ-ÐÐ
­JÚÐ-ÐÐ
­KÚÐ-ÐÐ
­LÚÐ-ÐÐ
­MÚÐ-ÐÐ
­NÚÐ-ÐÐ
­OÚÐ-ÐÐ
­PÚÐ-ÐÐ
­QÚÐ-ÐÐ
­RÚÐ-ÐÐ
­SÚÐ- ÐÐ
­TÚÐ-!ÐÐ
­UÚÐ-"ÐÐ
­VÚÐ-#ÐÐ
­WÚÐ-$ÐÐ
­XÚÐ-%ÐÐ
­YÚÐ-&ÐÐ
­ZÚÐ-'ÐÐ
­[ÚÐ-(ÐÐ
­\ÚÐ-)ÐÐ
­]ÚÐ-*ÐÐ
­^ÚÐ-+ÐÐ
­_ÚÐ-,ÐÐ
­`ÚÐ--ÐÐ
­aÚÐ-.ÐÐ
­bÚÐ-/ÐÐ
­cÚÐ-0ÐÐ
­dÚÐ-1ÐÐ
­eÚÐ-2ÐÐ
­fÚÐ-3ÐÐ
­gÚÐ-4ÐÐ
­hÚÐ-5ÐÐ
­iÚÐ-6ÐÐ
­jÚÐ-7ÐÐ
­kÚÐ-8ÐÐ
­lÚÐ-9ÐÐ
­mÚÐ-:ÐÐ
­nÚÐ-;ÐÐ
­oÚÐ-<ÐÐ
­pÚÐ-=ÐÐ
­qÚÐ->ÐÐ
­rÚÐ-%ÐÐ
­sÚÐ-?ÐÐ
­tÚÐ-@ÐÐ
­uÚÐ-ÐÐ
­vÚÐ-AÐÐ
­wÚÐ-BÐÐ
­xÚÐ-CÐÐ
­yÚÐ-ÐÐ
­zÚÐ-ÐÐ
­{ÚÐ-ÐÐ
­|ÚÐ-ÐÐ
­}ÚÐ-ÐÐ
­~ÚÐ-ÐÐ
­ÚÐ-DÐÐ
­€ÚÐ-EÐÐ
­ÚÐ-FÐÐ
­‚ÚÐ-GÐÐ
­ƒÚÐ-FÐÐ
­„ÚÐ-HÐÐ
­…ÚÐ-FÐÐ
­†ÚÐ-IÐÐ
­‡ÚÐ-FÐÐ
­ˆÚÐ-JÐÐ
­‰ÚÐ-KÐÐ
­ŠÚÐ-LÐÐ
­‹ÚÐ-MÐÐ
­ŒÚÐ-NÐÐ
­ÚÐ-ÐÐ
­ŽÚÐ-ÐÐ
­ÚÐ-ÐÐ
­ÚÐ-ÐÐ
­‘ÚÐ-OÐÐ
­’ÚÐ-PÐÐ
­“ÚÐ-QÐÐ
­”ÚÐ-RÐÐ
­•ÚÐ-SÐÐ
­–ÚÐ-TÐÐ
­—ÚÐ-UÐÐ
­™ÚÐ-ÐÐ
­¬ÚÐ-VÐÐ
­›ÚÐ-ÐÐ
­œÚÐ-WÐÐ
­ÚÐ-XÐÐ
­žÚÐ-ÐÐ
­ŸÚÐ-YÐÐ
­ ÚÐ-ÐÐ
­¡ÚÐ-ZÐÐ
­¢ÚÐ-ÐÐ
­£ÚÐ-[ÐÐ
­¤ÚÐ-\ÐÐ
­¥ÚÐ-]ÐÐ
­¦ÚÐ-^ÐÐ
­§ÚÐ-NÐÐ
­¨ÚÐ-ÐÐ
­©ÚÐ-ÐÐ
­ªÚÐ-_ÐÐ
­«ÚÐ-`ÐÐ
­·ÚÐ-ÐÐ
­´ÚÐ-aÐÐ
­¶ÚÐ-ÐÐ
­´ÚÐ-bÐÐ
­¸ÚÐ-cÐÐ
­¹ÚÐ-dÐÐ
­ºÚÐ-eÐÐ
­»ÚÐ-fÐÐ
­¼ÚÐ-gÐÐ
­½ÚÐ-hÐÐ
­¾ÚÐ-iÐÐ
­¿ÚÐ-jÐÐ
­ÀÚÐ-kÐÐ
­ÁÚÐ-lÐÐ
­ÂÚÐ-mÐÐ
­ÃÚÐ-nÐÐ
­ÄÚÐ-oÐÐ
­ÅÚÐ-pÐÐ
­ÆÚÐ-qÐÐ
­ÇÚÐ-rÐÐ
­ÈÚÐ-sÐÐ
­ÉÚÐ-tÐÐ
­ÊÚÐ-uÐÐ
­ËÚÐ-vÐÐ
­ÌÚÐ-wÐÐ
­ÍÚÐ-xÐÐ
­ÎÚÐ-yÐÐ
­ÏÚÐ-?ÐÐ
­ÐÚÐ-zÐÐ
­ÑÚÐ-{ÐÐ
­ÒÚÐ-|ÐÐ
­ÓÚÐ-}ÐÐ
­ÔÚÐ-~ÐÐ
­ÕÚÐ-ÐÐ
­ÖÚÐ-€ÐÐ
­×ÚÐ-ÐÐ
­ØÚÐ-‚ÐÐ
­ÙÚÐ-ƒÐÐ
­ÚÚÐ-„ÐÐ
­ÛÚÐ-…ÐÐ
­ÜÚÐ-†ÐÐ
­ÝÚÐ-‡ÐÐ
­ÞÚÐ-„ÐÐ
­ßÚÐ-ˆÐÐ
­àÚÐ-‰ÐÐ
­áÚÐ-ŠÐÐ
­âÚÐ-|ÐÐ
­ãÚÐ-}ÐÐ
­äÚÐ-~ÐÐ
­åÚÐ-ÐÐ
­æÚÐ-€ÐÐ
­çÚÐ-ÐÐ
­èÚÐ-‚ÐÐ
­éÚÐ-ƒÐÐ
­êÚÐ-„ÐÐ
­ëÚÐ-…ÐÐ
­ìÚÐ-‹ÐÐ
­íÚÐ-‡ÐÐ
­îÚÐ-ŒÐÐ
­ïÚÐ-ÐÐ
­ðÚÐ-ŽÐÐ
­ñÚÐ-!ÐÐ
­òÚÐ-ÐÐ
­óÚÐ-ÐÐ
­ôÚÐ-‘ÐÐ
­õÚÐ-ÐÐ
­öÚÐ-’ÐÐ
­÷ÚÐ-“ÐÐ
­øÚÐ-”ÐÐ
­ùÚÐ-•ÐÐ
­ûÚÐ-–ÐÐ
­üÚÐ-—ÐÐ
­ýÚÐ-bÐÐ
­þÚÐ-cÐÐ
­ÿÚÐ-˜ÐÐ
­ÚÐ-™ÐÐ
­ÚÐ-šÐÐ
­ÚÐ-›ÐÐ
­ÚÐ-…ÐÐ
­ÚÐ-œÐÐ
­ÚÐ-ÐÐ
­
9
ÚÐ-žÐÐ
­ÚÐ-šÐÐ
­ÚÐ-ŸÐÐ
­
ÚÐ- ÐÐ
­ÚÐ-?ÐÐ
­ÚÐ-zÐÐ
­ÚÐ-¡ÐÐ
­ÚÐ-¢ÐÐ
­ÚÐ-£ÐÐ
­ÚÐ-šÐÐ
­ÚÐ-¤ÐÐ
­ÚÐ-…ÐÐ
­ÚÐ-¥ÐÐ
­ÚÐ-¦ÐÐ
­ÚÐ-§ÐÐ
­ÚÐ-¨ÐÐ
­ÚÐ-…ÐÐ
­ÚÐ-©ÐÐ
­ÚÐ-ªÐÐ
­ÚÐ-«ÐÐ
­ÚÐ-ÐÐ
­/ÚÐ-¬ÐÐ
­0ÚÐ-ÐÐ
­1ÚÐ-ÐÐ
­2ÚÐ-@ÐÐ
­3ÚÐ-­ÐÐ
­4ÚÐ-ÐÐ
­5ÚÐ-®ÐÐ
­6ÚÐ-ÐÐ
­7ÚÐ-¯ÐÐ
­8ÚÐ-ÐÐ
­9ÚÐ-°ÐÐ
­;ÚÐ-±ÐÐ
­<ÚÐ-ÐÐ
­=ÚÐ-²ÐÐ
­>ÚÐ-ÐÐ
­?ÚÐ-³ÐÐ
­@ÚÐ-´ÐÐ
­AÚÐ-µÐÐ
­BÚÐ-¶ÐÐ
­CÚÐ-·ÐÐ
­DÚÐ-¸ÐÐ
­EÚÐ-¹ÐÐ
­FÚÐ-ºÐÐ
­GÚÐ-»ÐÐ
­HÚÐ-¼ÐÐ
­IÚÐ-ˆÐÐ
­JÚÐ-½ÐÐ
­KÚÐ-,ÐÐ
­LÚÐ-@ÐÐ
­MÚÐ-ÐÐ
­NÚÐ-¾ÐÐ
­OÚÐ-ÐÐ
­PÚÐ-bÐÐ
­QÚÐ-cÐÐ
­RÚÐ-¿ÐÐ
­UÚÐ-ŒÐÐ
­VÚÐ-šÐÐ
­WÚÐ-ŸÐÐ
­XÚÐ-ˆÐÐ
­YÚÐ-?ÐÐ
­ZÚÐ-zÐÐ
­[ÚÐ-ÀÐÐ
­\ÚÐ-ÁÐÐ
­`ÚÐ-ÐÐ
­aÚÐ-ÐÐ
­bÚÐ-@ÐÐ
­cÚÐ-ÂÐÐ
­dÚÐ-ÐÐ
­eÚÐ-ÃÐÐ
­fÚÐ-ÐÐ
­gÚÐ-ÄÐÐ
­hÚÐ-ÅÐÐ
­iÚÐ-ÆÐÐ
­jÚÐ-ÇÐÐ
­kÚÐ-ÐÐ
­lÚÐ-ÈÐÐ
­mÚÐ-ÐÐ
­nÚÐ-ÉÐÐ
­oÚÐ-ÐÐ
­pÚÐ-ÊÐÐ
­qÚÐ-ËÐÐ
­rÚÐ-ÐÐ
­sÚÐ-ÌÐÐ
­tÚÐ-ÐÐ
­uÚÐ-ÍÐÐ
­wÚÐ-ÎÐÐ
­xÚÐ-ÐÐ
­yÚÐ-ÏÐÐ
­zÚÐ-ÐÐÐ
­{ÚÐ-ÑÐÐ
­|ÚÐ-ÒÐÐ
­}ÚÐ-ÓÐÐ
­~ÚÐ-ÔÐÐ
­ÚÐ-ÕÐÐ
­%ÚÐ-ÐÖ×Ð   E
10
'ÐÐ
­†ÚÐ-ØÐÐ
­‡ÚÐ-ÙÐÐ
­ˆÚÐ-ÚÐÐ
­‰ÚÐ-ÛÐÐ
­ŠÚÐ-ÜÐÐ
­‹ÚÐ-ÝÐÐ
­ŒÚÐ-ÐÐ
­ÚÐ-ÞÐÐ
­ŽÚÐ-ÐÐ
­ÚÐ-ÐÐ
­ÚÐ-ßÐÐ
­‘ÚÐ-àÐÐ
­’ÚÐ-áÐÐ
­“ÚÐ-âÐÐ
­”ÚÐ-ãÐÐ
­•ÚÐ-äÐÐ
­–ÚÐ-åÐÐ
­—ÚÐ-ÐÐ
­˜ÚÐ-æÐÐ
­™ÚÐ-çÐÐ
­šÚÐ-èÐÐ
­›ÚÐ-ÐÐ
­œÚÐ-éÐÐ
­ÚÐ-ÐÐ
­žÚÐ-êÐÐ
­ŸÚÐ-ëÐÐ
­ ÚÐ-ìÐÐ
­¡ÚÐ-ÐÐ
­¢ÚÐ-íÐÐ
­£ÚÐ-îÐÐ
­¤ÚÐ-ïÐÐ
­¥ÚÐ-ðÐÐ
­¦ÚÐ-ñÐÐ
­§ÚÐ-ÐÐ
­¨ÚÐ-òÐÐ
­©ÚÐ-óÐÐ
­ªÚÐ-ôÐÐ
­«ÚÐ-ÛÐÐ
­ÚÐ-Ðõ-öÐ÷ø-ùúûÐüý­