--- a/branches/PackMLState/Display_Escape_PLC/Plc Logic/Application/Function Blocks/Puzzle/BalastTankPuzzleStateMachine/svnobj
+++ b/branches/PackMLState/Display_Escape_PLC/Plc Logic/Application/Function Blocks/Puzzle/BalastTankPuzzleStateMachine/svnobj
@@ -1,10 +1,10 @@
-Gx_l™b!0…jüoÒ?Ø5꽟"ãE4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}
+Gx_lÙ@!0…jüo·*˜ì&˜úZp’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}
 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$
-			;	%		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 :K†	IF CMMT_ST_Linear1.AxisError OR CMMT_ST_Rotery_Boot.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;Vt	actualPositionBoat := CMMT_ST_Rotery_Boot.ActualPosition;Wr	actualPositionLinear1 := CMMT_ST_Linear1.ActualPosition;XJ	deltaY := actualPositionLinear1 - 0;YN	deltaX := actualPositionLinear2 - 500;ZV	angle := OSCAT_BASIC.ATAN2(deltaY,deltaX);[\	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 ;ad	//CMMT_ST_Rotery_Boot_MoveAbsolute.Execute:=TRUE;b„	CMMT_ST_Rotery_Boot.MoveAbsolute(Position:= targetPositionBoat , c,				Velocity:= 10000, d6				Acceleration:= 100000, e6				Deceleration:= 100000, f*				Jerk:= 10000000, gX				BufferMode:= MC_BUFFER_MODE.mcAborting, h 				ErrorID=> , i(				ErrorString=> );j8	CASE Client.ActualStep OF		k
-		0:	l,			CASE Client.Mode OFm				Mode.Mode1:n2					CASE Client.Level OFo,						Level.Beginner:	p4							speed := 100;						q2						Level.Placeholder1:r(							speed := 200;s2						Level.Intermediate:t(							speed := 300;u2						Level.Placeholder2:v(							speed := 400;w*						Level.Advanced:x(							speed := 500;y					END_CASEz<					Client.ActualStep := 100;{2					executeBoat := TRUE;|(				Mode.Mode2:					}<					Client.ActualStep := 200;~(				Mode.Mode3:					H					Client.ActualStep := 300;				 	€									END_CASE		‚		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, ‰ 			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();œB	CMMT_ST_Rotery_Boot.ResetHalt();&	StateComplete();		ž0PACK_ML.State.Starting :ŸL			IF NOT CMMT_ST_Linear1.Enabled THEN Z			ELSIF NOT CMMT_ST_Rotery_Boot.Enabled THEN¡:				Client.ActualStep := 200;¢			ELSE£@				Client.ActualStep := 10;				¤		10:	¥T			IF NOT CMMT_ST_Linear1.HomingValid THEN¦:				Client.ActualStep := 110;§b			ELSIF NOT CMMT_ST_Rotery_Boot.HomingValid THEN¨:				Client.ActualStep := 210;©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;	¶^			enable := CMMT_ST_Rotery_Boot.EnableDrive();·			ELSE				¸		210:¹Š			home := CMMT_ST_Rotery_Boot.Home(Position := 0,HomingMethod := 0);º		220:»\			IF CMMT_ST_Rotery_Boot.HomingValid THEN				¼
-					½4PACK_ML.State.Completing :¾$	StateComplete();	¿0PACK_ML.State.Aborting :À@	CMMT_ST_Linear1.DisableDrive();ÁH	CMMT_ST_Rotery_Boot.DisableDrive();Â"	StateComplete();Ã.PACK_ML.State.Stopping:Ä4	CASE Client.ActualStep OFÅ		0:Æ8			StopBoat.Execute := TRUE;Ç<			StopLinear.Execute := TRUE;È6			Client.ActualStep := 10;É
-		10:Êr			IF BoatStatus.Stopping AND LinearStatus.Stopping THEN;Ë@				StopLinear.Execute := FALSE;Ì<				StopBoat.Execute := FALSE;Í:				Client.ActualStep := 20;	Î
-		20:Ï.PACK_ML.State.Clearing:ÐH			IF CMMT_ST_Linear1.AxisError THENÑV			ELSIF CMMT_ST_Rotery_Boot.AxisError THENÒ6			CMMT_ST_Linear1.Reset();Ó6			Client.ActualStep := 0;	Ô>			CMMT_ST_Rotery_Boot.Reset();Õ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àrBoatStatus (Axis := CMMT_ST_Rotery_Boot, Enable := TRUE);ánLinearStatus (Axis := CMMT_ST_Linear1, Enable := TRUE);âPStopBoat ( Axis := CMMT_ST_Rotery_Boot);ã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‹1707ŒPOULevelL{8e575c5b-1d37-49c6-941b-5c0ec7874787}ŽStandard ChildObjectGuids8System.Collections.ArrayList‘,AddAttributeSubsequent’boolÐÐ-ÐÐ	E
-ÀÐÐ
­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ÐÐ
­ÈÚÐ-{ÐÐ
­ÉÚÐ-|ÐÐ
­ÊÚÐ-}ÐÐ
­ËÚÐ-~ÐÐ
­ÌÚÐ-ÐÐ
­ÍÚÐ-€ÐÐ
­ÎÚÐ-ÐÐ
­ÏÚÐ-?ÐÐ
­ÐÚÐ-‚ÐÐ
­ÑÚÐ-ƒÐÐ
­ÒÚÐ-„ÐÐ
­ÓÚÐ-…ÐÐ
­ÔÚÐ-†ÐÐ
­ÕÚÐ-‡ÐÐ
­ÖÚÐ-ˆÐÐ
­×ÚÐ-hÐÐ
­ØÚÐ-iÐÐ
­ÙÚÐ-‰ÐÐ
­ÚÚÐ-ŠÐÐ
­ÛÚÐ-‹ÐÐ
­ÜÚÐ-ŒÐÐ
­ÝÚÐ-ÐÐ
­ÞÚÐ-ŠÐÐ
­ßÚÐ-ŽÐÐ
­àÚÐ-ÐÐ
­áÚÐ-ÐÐ
­âÚÐ-„ÐÐ
­ãÚÐ-…ÐÐ
­äÚÐ-†ÐÐ
­åÚÐ-‡ÐÐ
­æÚÐ-ˆÐÐ
­çÚÐ-hÐÐ
­èÚÐ-iÐÐ
­éÚÐ-‰ÐÐ
­êÚÐ-ŠÐÐ
­ëÚÐ-‹ÐÐ
­ìÚÐ-‘ÐÐ
­íÚÐ-ÐÐ
­îÚÐ-’ÐÐ
­ïÚÐ-“ÐÐ
­ðÚÐ-”ÐÐ
­ñÚÐ-!ÐÐ
­òÚÐ-•ÐÐ
­óÚÐ-–ÐÐ
­ôÚÐ-—ÐÐ
­õÚÐ-ÐÐ
­öÚÐ-˜ÐÐ
­÷ÚÐ-™ÐÐ
­øÚÐ-šÐÐ
­ùÚÐ-›ÐÐ
­úÚÐ-œÐÐ
­ûÚÐ-ÐÐ
­üÚÐ-žÐÐ
­ýÚÐ-jÐÐ
­þÚÐ-kÐÐ
­ÿÚÐ-ŸÐÐ
­ÚÐ-’ÐÐ
­ÚÐ- ÐÐ
­ÚÐ-¡ÐÐ
­ÚÐ-¢ÐÐ
­ÚÐ-£ÐÐ
­ÚÐ-‹ÐÐ
­ÚÐ-¤ÐÐ
­ÚÐ-¥ÐÐ
­ÚÐ-¦ÐÐ
­	ÚÐ-§ÐÐ
­
-ÚÐ-¨ÐÐ
­ÚÐ-¢ÐÐ
­ÚÐ-©ÐÐ
­
ÚÐ-ªÐÐ
­ÚÐ-?ÐÐ
­ÚÐ-‚ÐÐ
­ÚÐ-«ÐÐ
­ÚÐ-¬ÐÐ
­ÚÐ-­ÐÐ
­ÚÐ-¢ÐÐ
­ÚÐ-®ÐÐ
­ÚÐ-‹ÐÐ
­ÚÐ-¯ÐÐ
­ÚÐ-°ÐÐ
­ÚÐ-±ÐÐ
­ÚÐ-²ÐÐ
­ÚÐ-‹ÐÐ
­ÚÐ-³ÐÐ
­ÚÐ-´ÐÐ
­ÚÐ-µÐÐ
­ÚÐ-‹ÐÐ
­ÚÐ-”ÐÐ
­ ÚÐ-¶ÐÐ
­!ÚÐ-¬ÐÐ
­"ÚÐ-­ÐÐ
­#ÚÐ-·ÐÐ
­$ÚÐ-®ÐÐ
­%ÚÐ-“ÐÐ
­&ÚÐ-¸ÐÐ
­'ÚÐ-¹ÐÐ
­(ÚÐ-±ÐÐ
­)ÚÐ-²ÐÐ
­*ÚÐ-‹ÐÐ
­+ÚÐ-ºÐÐ
­,ÚÐ-»ÐÐ
­-ÚÐ-µÐÐ
­.ÚÐ-ªÐÐ
­/ÚÐ-¼ÐÐ
­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ÚÐ-jÐÐ
­QÚÐ-kÐÐ
­RÚÐ-ÐÐÐ
­SÚÐ-’ÐÐ
­TÚÐ-ÑÐÐ
­UÚÐ-¡ÐÐ
­VÚÐ-¢ÐÐ
­WÚÐ-©ÐÐ
­XÚÐ-ŽÐÐ
­YÚÐ-?ÐÐ
­ZÚÐ-‚ÐÐ
­[ÚÐ-ÒÐÐ
­\ÚÐ-ÓÐÐ
­]ÚÐ-”ÐÐ
­^ÚÐ-ÔÐÐ
­_ÚÐ-ÓÐÐ
­`ÚÐ-•ÐÐ
­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ÚÐ-åÐÐ
­{ÚÐ-æÐÐ
­|ÚÐ-çÐÐ
­}ÚÐ-èÐÐ
­~ÚÐ-éÐÐ
­ÚÐ-êÐÐ
­%ÚÐ-ÐëìÐ	E
-'ÐÐ
­†ÚÐ-íÐÐ
­‡ÚÐ-îÐÐ
­ˆÚÐ-ïÐÐ
­‰ÚÐ-ðÐÐ
­ŠÚÐ-ñÐÐ
­‹ÚÐ-òÐÐ
­ŒÚÐ-ÐÐ
­ÚÐ-óÐÐ
­ŽÚÐ-ÐÐ
­ÚÐ-ÐÐ
­ÚÐ-ôÐÐ
­‘ÚÐ-õÐÐ
­’ÚÐ-öÐÐ
­“ÚÐ-÷ÐÐ
­”ÚÐ-øÐÐ
­•ÚÐ-ùÐÐ
­–ÚÐ-úÐÐ
­—ÚÐ-ÐÐ
­˜ÚÐ-ûÐÐ
­™ÚÐ-üÐÐ
­šÚÐ-ýÐÐ
­›ÚÐ-ÐÐ
­œÚÐ-þÐÐ
­ÚÐ-ÐÐ
­žÚÐ-ÿÐÐ
­ŸÚÐ-€ÐÐ
­ ÚÐ-ÐÐ
­¡ÚÐ-ÐÐ
­¢ÚÐ-‚ÐÐ
­£ÚÐ-ƒÐÐ
­¤ÚÐ-„ÐÐ
­¥ÚÐ-…ÐÐ
­¦ÚÐ-†ÐÐ
­§ÚÐ-ÐÐ
­¨ÚÐ-‡ÐÐ
­©ÚÐ-ˆÐÐ
­ªÚÐ-‰ÐÐ
­«ÚÐ-ðÐÐ
­ÚÐ-Њ-‹Ќ-ŽБ’­
\ No newline at end of file
+			;	%		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 :KL	IF CMMT_ST_Rotery_Boot.AxisError THENL		Abort();M		RETURN;N	END_IFO„	CMMT_ST_Rotery_Boot.MoveAbsolute(Position:= targetPositionBoat , P,				Velocity:= 10000, Q6				Acceleration:= 100000, R6				Deceleration:= 100000, S*				Jerk:= 10000000, TX				BufferMode:= MC_BUFFER_MODE.mcAborting, U 				ErrorID=> , V(				ErrorString=> );W2PACK_ML.State.Resetting :Xd	CMMT_ST_Rotery_Boot_MoveAbsolute.Execute:=FALSE;	Y,	executeBoat := FALSE;ZB	CMMT_ST_Rotery_Boot.ResetHalt();[&	StateComplete();		\0PACK_ML.State.Starting :]8	CASE Client.ActualStep OF		^
+		0:	_			`T			IF NOT CMMT_ST_Rotery_Boot.Enabled THENa:				Client.ActualStep := 200;b			ELSEc@				Client.ActualStep := 10;				d			END_IFe		10:	f\			IF NOT CMMT_ST_Rotery_Boot.HomingValid THENg:				Client.ActualStep := 210;hB				Client.ActualStep := 300;				i			END_IF	j		200:k^			enable := CMMT_ST_Rotery_Boot.EnableDrive();l"			IF enable THENm6				Client.ActualStep := 0;n			ELSE				o				Abort();p			END_IF		q		210:rŠ			home := CMMT_ST_Rotery_Boot.Home(Position := 0,HomingMethod := 0);s&			IF home THEN				tb				Client.ActualStep := Client.ActualStep + 10;	u		220:v\			IF CMMT_ST_Rotery_Boot.HomingValid THEN				w:				Client.ActualStep := 10;	x
+					y		300:z(			StateComplete();	{4PACK_ML.State.Completing :|$	StateComplete();	}0PACK_ML.State.Aborting :~H	CMMT_ST_Rotery_Boot.DisableDrive();"	StateComplete();€.PACK_ML.State.Stopping:4	CASE Client.ActualStep OF‚		0:ƒ8			StopBoat.Execute := TRUE;„<			StopLinear.Execute := TRUE;…6			Client.ActualStep := 10;†
+		10:‡r			IF BoatStatus.Stopping AND LinearStatus.Stopping THEN;ˆ@				StopLinear.Execute := FALSE;‰<				StopBoat.Execute := FALSE;Š:				Client.ActualStep := 20;	‹			END_IF			Œ
+		20:.PACK_ML.State.Clearing:ŽP			IF CMMT_ST_Rotery_Boot.AxisError THEN>			CMMT_ST_Rotery_Boot.Reset();6			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œrBoatStatus (Axis := CMMT_ST_Rotery_Boot, Enable := TRUE);PStopBoat ( Axis := CMMT_ST_Rotery_Boot);ž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¾1708¿POULevelÀL{8e575c5b-1d37-49c6-941b-5c0ec7874787}ÁStandard ChildObjectGuidsÃ8System.Collections.ArrayListÄ,AddAttributeSubsequentÅboolÐÐ-ÐÐ	E
+¾ÐÐ
­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ÐÐ
­ûÚÐ-[ÐÐ
­üÚÐ-\ÐÐ
­ýÚÐ-]ÐÐ
­þÚÐ-^ÐÐ
­ÿÚÐ-_ÐÐ
­ÚÐ-`ÐÐ
­ÚÐ-aÐÐ
­ÚÐ-bÐÐ
­ÚÐ-cÐÐ
­ÚÐ-dÐÐ
­ÚÐ-eÐÐ
­	ÚÐ-fÐÐ
­
+ÚÐ-gÐÐ
­ÚÐ-bÐÐ
­ÚÐ-hÐÐ
­
ÚÐ-iÐÐ
­ÚÐ-?ÐÐ
­ÚÐ-jÐÐ
­ ÚÐ-kÐÐ
­!ÚÐ-lÐÐ
­"ÚÐ-mÐÐ
­#ÚÐ-nÐÐ
­$ÚÐ-oÐÐ
­%ÚÐ-pÐÐ
­&ÚÐ-qÐÐ
­'ÚÐ-rÐÐ
­(ÚÐ-sÐÐ
­)ÚÐ-tÐÐ
­*ÚÐ-dÐÐ
­+ÚÐ-uÐÐ
­,ÚÐ-vÐÐ
­-ÚÐ-wÐÐ
­.ÚÐ-iÐÐ
­/ÚÐ-xÐÐ
­0ÚÐ-yÐÐ
­1ÚÐ-zÐÐ
­2ÚÐ-@ÐÐ
­3ÚÐ-{ÐÐ
­4ÚÐ-ÐÐ
­5ÚÐ-|ÐÐ
­6ÚÐ-ÐÐ
­7ÚÐ-}ÐÐ
­8ÚÐ-~ÐÐ
­;ÚÐ-ÐÐ
­<ÚÐ-ÐÐ
­=ÚÐ-€ÐÐ
­>ÚÐ-ÐÐ
­?ÚÐ-ÐÐ
­@ÚÐ-‚ÐÐ
­AÚÐ-ƒÐÐ
­BÚÐ-„ÐÐ
­CÚÐ-…ÐÐ
­DÚÐ-†ÐÐ
­EÚÐ-‡ÐÐ
­FÚÐ-ˆÐÐ
­GÚÐ-‰ÐÐ
­HÚÐ-ŠÐÐ
­IÚÐ-‹ÐÐ
­JÚÐ-ŒÐÐ
­KÚÐ-,ÐÐ
­LÚÐ-@ÐÐ
­MÚÐ-ÐÐ
­NÚÐ-ÐÐ
­OÚÐ-ÐÐ
­PÚÐ-]ÐÐ
­QÚÐ-^ÐÐ
­RÚÐ-ŽÐÐ
­UÚÐ-aÐÐ
­VÚÐ-bÐÐ
­WÚÐ-hÐÐ
­XÚÐ-‹ÐÐ
­YÚÐ-?ÐÐ
­\ÚÐ-jÐÐ
­^ÚÐ-ÐÐ
­_ÚÐ-ÐÐ
­`ÚÐ-yÐÐ
­aÚÐ-zÐÐ
­bÚÐ-@ÐÐ
­cÚÐ-‘ÐÐ
­dÚÐ-ÐÐ
­eÚÐ-’ÐÐ
­fÚÐ-ÐÐ
­gÚÐ-“ÐÐ
­hÚÐ-”ÐÐ
­iÚÐ-•ÐÐ
­jÚÐ-–ÐÐ
­kÚÐ-ÐÐ
­lÚÐ-—ÐÐ
­mÚÐ-ÐÐ
­nÚÐ-˜ÐÐ
­oÚÐ-ÐÐ
­pÚÐ-™ÐÐ
­qÚÐ-šÐÐ
­rÚÐ-ÐÐ
­¬ÚÐ-ÐÐ
­sÚÐ-›ÐÐ
­tÚÐ-œÐÐ
­%ÚÐ-ОŸÐ	E
+'ÐÐ
­†ÚÐ- ÐÐ
­‡ÚÐ-¡ÐÐ
­ˆÚÐ-¢ÐÐ
­‰ÚÐ-£ÐÐ
­ŠÚÐ-¤ÐÐ
­‹ÚÐ-¥ÐÐ
­ŒÚÐ-ÐÐ
­ÚÐ-¦ÐÐ
­ŽÚÐ-ÐÐ
­ÚÐ-ÐÐ
­ÚÐ-§ÐÐ
­‘ÚÐ-¨ÐÐ
­’ÚÐ-©ÐÐ
­“ÚÐ-ªÐÐ
­”ÚÐ-«ÐÐ
­•ÚÐ-¬ÐÐ
­–ÚÐ-­ÐÐ
­—ÚÐ-ÐÐ
­˜ÚÐ-®ÐÐ
­™ÚÐ-¯ÐÐ
­šÚÐ-°ÐÐ
­›ÚÐ-ÐÐ
­œÚÐ-±ÐÐ
­ÚÐ-ÐÐ
­žÚÐ-²ÐÐ
­ŸÚÐ-³ÐÐ
­ ÚÐ-´ÐÐ
­¡ÚÐ-ÐÐ
­¢ÚÐ-µÐÐ
­£ÚÐ-¶ÐÐ
­¤ÚÐ-·ÐÐ
­¥ÚÐ-¸ÐÐ
­¦ÚÐ-¹ÐÐ
­§ÚÐ-ÐÐ
­¨ÚÐ-ºÐÐ
­©ÚÐ-»ÐÐ
­ªÚÐ-¼ÐÐ
­«ÚÐ-£ÐÐ
­ÚÐ-н-¾пÀ-ÁÂÃÐÄÅ­
\ No newline at end of file