| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628 | 
							- <?xml version="1.0" encoding="utf-8"?>
 
- <TcPlcObject Version="1.1.0.1" ProductVersion="3.1.4024.12">
 
-   <POU Name="FIMS" Id="{c49a8530-954d-4021-bf6f-7b9ddd515fb8}" SpecialFunc="None">
 
-     <Declaration><![CDATA[FUNCTION_BLOCK FIMS
 
- VAR_INPUT
 
- 	TP_EN:BOOL;
 
- END_VAR
 
- VAR_OUTPUT
 
- END_VAR
 
- VAR
 
- 	PODManMode	:	BOOL	;
 
- 	FIMS1O2Status_b	:	BOOL	;
 
- 	FIMS1	:	FIMSSequence	;
 
- 	FIMS1VacuumStatus_b	:	BOOL	;
 
- 	FIMS2	:	FIMSSequence	;
 
- 	FIMS2VacuumStatus_b	:	BOOL	;
 
- 	FIMS1LoadCmd_b	:	BOOL	;
 
- 	FIMS1UnloadCmd_b	:	BOOL	;
 
- 	FIMS2LoadCmd_b	:	BOOL	;
 
- 	FIMS2UnloadCmd_b	:	BOOL	;
 
- 	FIMS1AlarmReset_b	:	BOOL	;
 
- 	FIMS2AlarmReset_b	:	BOOL	;
 
- 	FIMS1StopCmd_b	:	BOOL	;
 
- 	FIMS2StopCmd_b	:	BOOL	;
 
- 	FIMS1FoupCheck_b	:	BOOL	;
 
- 	FIMS2FoupCheck_b	:	BOOL	;
 
- 	FIMS1N2PurgeBypass_b	:	BOOL	;
 
- 	FIMS2N2PurgeBypass_b	:	BOOL	;
 
- 	MANUALBYPASS1	:	BOOL	;
 
- 	MANUALBYPASS2	:	BOOL	;
 
- 	TPHOST	:	R_TRIG	;
 
- 	LA_O2_Check_Done	:	BOOL	;
 
- 	FIMS1_O2_Check_Start	:	BOOL	;
 
- 	FIMS2_O2_Check_Start	:	BOOL	;
 
- 	FIMS1_O2_Check_Done	:	BOOL	;
 
- 	FIMS2_O2_Check_Done	:	BOOL	;
 
- 	UI_LA_O2_Check_First_EN	:	BOOL	;
 
- 	UI_FIMS1_O2_Check_EN	:	BOOL	;
 
- 	UI_FIMS2_O2_Check_EN	:	BOOL	;
 
- 	UI_N2_PURGE_PROCESS	:	BOOL	;
 
- 	UI_LA_O2_Over_Time	:	INT	;
 
- 	UI_LA_O2_Check_Time	:	INT	;
 
- 	UI_FOUP_O2_Over_Time	:	INT	;
 
- 	UI_FOUP_O2_Check_Time	:	INT	;
 
- 	UI_Exchange_LA_TO_FOUP_Wait_Time	:	INT	;
 
- 	UI_Exchange_FOUP_TO_LA_Wait_Time	:	INT	;
 
- 	UI_Exchange_FOUP_TO_FOUP_Wait_Time	:	INT	;
 
- 	UI_LA_O2_Check_SV	:	REAL	;
 
- 	UI_FOUP_O2_Check_SV	:	REAL	;
 
- 	TO_UI_LA_O2_Check_OT	:	BOOL	;
 
- 	TO_UI_FIMS1_O2_Check_OT	:	BOOL	;
 
- 	TO_UI_FIMS2_O2_Check_OT	:	BOOL	;
 
- 	LA_O2_Over_Time	:	TIME	;
 
- 	LA_O2_Check_Time	:	TIME	;
 
- 	FOUP_O2_Over_Time	:	TIME	;
 
- 	FOUP_O2_Check_Time	:	TIME	;
 
- 	Exchange_LA_TO_FOUP_Wait_Time	:	TIME	;
 
- 	Exchange_FOUP_TO_LA_Wait_Time	:	TIME	;
 
- 	Exchange_FOUP_TO_FOUP_Wait_Time	:	TIME	;
 
- 	LA_O2_Arrival_Timer	:	TON	;
 
- 	LA_O2_Check_Timer	:	TON	;
 
- 	LA_O2_Exchange_Wait	:	TON	;
 
- 	FIMS1_O2_Arrival_Timer	:	TON	;
 
- 	FIMS1_O2_Check_Timer	:	TON	;
 
- 	FIMS1_O2_Exchange_Wait	:	TON	;
 
- 	FIMS2_O2_Arrival_Timer	:	TON	;
 
- 	FIMS2_O2_Check_Timer	:	TON	;
 
- 	FIMS2_O2_Exchange_Wait	:	TON	;
 
- 	O2_Detect_STEP	:	INT	;
 
- 	N2_PURGE_PROCESS_Trig	:	R_TRIG	;
 
- 	N2_PURGE_UI_SV: INT;		
 
- 	P_First_RunMode:BOOL;
 
- END_VAR
 
- ]]></Declaration>
 
-     <Implementation>
 
-       <ST><![CDATA[//FIMS控制切换  上位机/操作手柄
 
- 	IF NOT TP_EN AND GVL.FIMSManualSt.AutoOrManual_b THEN
 
- 		FIMS1LoadCmd_b := GVL.FIMSManualSt.FIMS1AutoLoadCmd_b ;
 
- 		FIMS1UnloadCmd_b := GVL.FIMSManualSt.FIMS1AutoUnloadCmd_b ;
 
- 		FIMS2LoadCmd_b := GVL.FIMSManualSt.FIMS2AutoLoadCmd_b ;
 
- 		FIMS2UnloadCmd_b := GVL.FIMSManualSt.FIMS2AutoUnloadCmd_b ;
 
- 		FIMS1AlarmReset_b := ( GVL.FIMSDI[0].LoadAlarm_b OR GVL.FIMSDI[0].UnloadAlarm_b ) AND GVL.FIMSManualSt.FIMSAlarmReset_b ;
 
- 		FIMS2AlarmReset_b := ( GVL.FIMSDI[1].LoadAlarm_b OR GVL.FIMSDI[1].UnloadAlarm_b ) AND GVL.FIMSManualSt.FIMSAlarmReset_b ;
 
- 		FIMS1StopCmd_b := GVL.FIMSManualSt.FIMS1Stop_b ;
 
- 		FIMS2StopCmd_b := GVL.FIMSManualSt.FIMS2Stop_b ;
 
- 		FIMS1FoupCheck_b := NDI.FIMS1_FOUP_exist OR GVL.FIMSManualSt.FIMS1FoupBypass_b ;
 
- 		FIMS2FoupCheck_b := NDI.FIMS2_FOUP_exist OR GVL.FIMSManualSt.FIMS2FoupBypass_b ;
 
- 		FIMS1N2PurgeBypass_b := NOT GVL.FIMSManualSt.FIMS1N2PurgeBypass_b ;
 
- 		FIMS2N2PurgeBypass_b := NOT GVL.FIMSManualSt.FIMS2N2PurgeBypass_b ;
 
- 	ELSIF TP_EN THEN
 
- 		FIMS1LoadCmd_b := GVL.FIMSDO[0].LoadCommand_b ;
 
- 		FIMS1UnloadCmd_b := GVL.FIMSDO[0].UnloadCommand_b ;
 
- 		FIMS2LoadCmd_b := GVL.FIMSDO[1].LoadCommand_b ;
 
- 		FIMS2UnloadCmd_b := GVL.FIMSDO[1].UnloadCommand_b ;
 
- 		FIMS1AlarmReset_b := GVL.FIMSDO[0].AlarmReset_b ;
 
- 		FIMS2AlarmReset_b := GVL.FIMSDO[1].AlarmReset_b ;
 
- 		FIMS1StopCmd_b := GVL.FIMSDO[0].Stop_b ;
 
- 		FIMS2StopCmd_b := GVL.FIMSDO[1].Stop_b ;
 
- 		FIMS1FoupCheck_b := MANUALBYPASS1 OR NDI.FIMS1_FOUP_exist ;
 
- 		FIMS2FoupCheck_b := MANUALBYPASS2 OR NDI.FIMS2_FOUP_exist ;
 
- 		FIMS1N2PurgeBypass_b := GVL.FIMSDO[0].N2PurgeBypass_b ;
 
- 		FIMS2N2PurgeBypass_b := GVL.FIMSDO[1].N2PurgeBypass_b ;
 
- 	END_IF;
 
- 	IF NOT P_First_RunMode OR TP_EN OR ( NOT TP_EN AND ( ANY_TO_UINT(AO.TPUINumber)<> 10#191 ) ) THEN
 
- 		GVL.FIMSManualSt.FIMS1LatchOff1_b := FALSE ;
 
- 		GVL.FIMSManualSt.FIMS1LatchOn1_b := FALSE ;
 
- 		GVL.FIMSManualSt.FIMS1LatchOff2_b := FALSE ;
 
- 		GVL.FIMSManualSt.FIMS1LatchOn2_b := FALSE ;
 
- 		GVL.FIMSManualSt.FIMS2LatchOff1_b := FALSE ;
 
- 		GVL.FIMSManualSt.FIMS2LatchOn1_b := FALSE ;
 
- 		GVL.FIMSManualSt.FIMS2LatchOff2_b := FALSE ;
 
- 		GVL.FIMSManualSt.FIMS2LatchOn2_b := FALSE ;
 
- 			
 
- 		GVL.FIMSManualSt.FIMS1Seal_b := FALSE ;
 
- 		GVL.FIMSManualSt.FIMS1Release_b := FALSE ;
 
- 		GVL.FIMSManualSt.FIMS2Seal_b := FALSE ;
 
- 		GVL.FIMSManualSt.FIMS2Release_b := FALSE ;
 
- 		GVL.FIMSManualSt.FIMS1DoorClose_b := FALSE ;
 
- 		GVL.FIMSManualSt.FIMS1DoorOpen_b := FALSE ;
 
- 		GVL.FIMSManualSt.FIMS2DoorClose_b := FALSE ;
 
- 		GVL.FIMSManualSt.FIMS2DoorOpen_b := FALSE ;
 
- 			
 
- 		GVL.FIMSManualSt.FIMS1AvoidanceDown_b := FALSE ;
 
- 		GVL.FIMSManualSt.FIMS1AvoidanceUp_b := FALSE ;
 
- 		GVL.FIMSManualSt.FIMS2AvoidanceDown_b := FALSE ;
 
- 		GVL.FIMSManualSt.FIMS2AvoidanceUp_b := FALSE ;
 
- 		GVL.FIMSManualSt.FIMS1Undock_b := FALSE ;
 
- 		GVL.FIMSManualSt.FIMS1Dock_b := FALSE ;
 
- 		GVL.FIMSManualSt.FIMS2Undock_b := FALSE ;
 
- 		GVL.FIMSManualSt.FIMS2Dock_b := FALSE ;
 
- 			
 
- 		GVL.FIMSManualSt.FIMS1VacuumClose_b := FALSE ;
 
- 		GVL.FIMSManualSt.FIMS1VacuumOpen_b := FALSE ;
 
- 		GVL.FIMSManualSt.FIMS2VacuumClose_b := FALSE ;
 
- 		GVL.FIMSManualSt.FIMS2VacuumOpen_b := FALSE ;
 
- 		
 
- 		P_First_RunMode:=TRUE;
 
- 	END_IF;
 
- 	
 
- //TP change mode from teach to host , reset all valve output
 
- 	TPHOST(Clk:=TP_EN(*, Q=>*));
 
- 	IF TPHOST.Q THEN
 
- 		GVL.FIMSValveAct.FIMS1VacuumClose_b := FALSE ;
 
- 		GVL.FIMSValveAct.FIMS1VacuumOpen_b := FALSE ;
 
- 		GVL.FIMSValveAct.FIMS2VacuumClose_b := FALSE ;
 
- 		GVL.FIMSValveAct.FIMS2VacuumOpen_b := FALSE ;
 
- 		
 
- 		GVL.FIMSValveAct.FIMS1LatchOff1_b := FALSE ;
 
- 		GVL.FIMSValveAct.FIMS1LatchOn1_b := FALSE ;
 
- 		GVL.FIMSValveAct.FIMS1LatchOff2_b := FALSE ;
 
- 		GVL.FIMSValveAct.FIMS1LatchOn2_b := FALSE ;
 
- 		GVL.FIMSValveAct.FIMS2LatchOff1_b := FALSE ;
 
- 		GVL.FIMSValveAct.FIMS2LatchOn1_b := FALSE ;
 
- 		GVL.FIMSValveAct.FIMS2LatchOff2_b := FALSE ;
 
- 		GVL.FIMSValveAct.FIMS2LatchOn2_b := FALSE ;
 
- 			
 
- 		GVL.FIMSValveAct.FIMS1Seal_b := FALSE ;
 
- 		GVL.FIMSValveAct.FIMS1Release_b := FALSE ;
 
- 		GVL.FIMSValveAct.FIMS2Seal_b := FALSE ;
 
- 		GVL.FIMSValveAct.FIMS2Release_b := FALSE ;
 
- 		GVL.FIMSValveAct.FIMS1DoorClose_b := FALSE ;
 
- 		GVL.FIMSValveAct.FIMS1DoorOpen_b := FALSE ;
 
- 		GVL.FIMSValveAct.FIMS2DoorClose_b := FALSE ;
 
- 		GVL.FIMSValveAct.FIMS2DoorOpen_b := FALSE ;
 
- 			
 
- 		GVL.FIMSValveAct.FIMS1AvoidanceDown_b := FALSE ;
 
- 		GVL.FIMSValveAct.FIMS1AvoidanceUp_b := FALSE ;
 
- 		GVL.FIMSValveAct.FIMS2AvoidanceDown_b := FALSE ;
 
- 		GVL.FIMSValveAct.FIMS2AvoidanceUp_b := FALSE ;
 
- 		GVL.FIMSValveAct.FIMS1Undock_b := FALSE ;
 
- 		GVL.FIMSValveAct.FIMS1Dock_b := FALSE ;
 
- 		//GVL.VTDO[9].Area3.BitData[6] := FALSE ;
 
- 		GVL.FIMSValveAct.FIMS2Dock_b := FALSE ;
 
- 	END_IF;
 
- 	
 
- //N2 PURGE 
 
- 	IF NDO.Sys_LA_O2_Check_First_EN 
 
- 		THEN 
 
- 			UI_LA_O2_Check_First_EN:=TRUE; 
 
- 			ELSE 
 
- 			UI_LA_O2_Check_First_EN:=FALSE; 
 
- 	END_IF;	
 
- 	
 
- 	IF NDO.Sys_FIMS1_O2_Check_EN 
 
- 		THEN 
 
- 			UI_FIMS1_O2_Check_EN:=TRUE; 
 
- 			ELSE 
 
- 			UI_FIMS1_O2_Check_EN:=FALSE; 
 
- 	END_IF;
 
- 	
 
- 	IF NDO.Sys_FIMS2_O2_Check_EN
 
- 		THEN 
 
- 			UI_FIMS2_O2_Check_EN:=TRUE; 
 
- 			ELSE 
 
- 			UI_FIMS2_O2_Check_EN:=FALSE; 
 
- 	END_IF;
 
- 	
 
- 	IF NDO.Sys_N2_PURGE_PROCESS
 
- 		THEN 
 
- 			UI_N2_PURGE_PROCESS:=TRUE; 
 
- 			ELSE 
 
- 			UI_N2_PURGE_PROCESS:=FALSE; 
 
- 	END_IF;
 
- 	
 
- 	IF TO_UI_LA_O2_Check_OT
 
- 		THEN 
 
- 			NDI.ILK_LA_O2_Check_OT:=TRUE; 
 
- 			ELSE 
 
- 			NDI.ILK_LA_O2_Check_OT:=FALSE; 
 
- 	END_IF;
 
- 	
 
- 	IF TO_UI_FIMS1_O2_Check_OT
 
- 		THEN 
 
- 			NDI.ILK_FIMS1_O2_Check_OT:=TRUE; 
 
- 			ELSE 
 
- 			NDI.ILK_FIMS1_O2_Check_OT:=FALSE; 
 
- 	END_IF;
 
- 	
 
- 	IF TO_UI_FIMS2_O2_Check_OT
 
- 		THEN 
 
- 			NDI.ILK_FIMS2_O2_Check_OT:=TRUE; 
 
- 			ELSE 
 
- 			NDI.ILK_FIMS2_O2_Check_OT:=FALSE; 
 
- 	END_IF;
 
- 	
 
- 	
 
- //UI 设定
 
- 	LA_O2_Over_Time:=REAL_TO_TIME(AO.UI_LA_O2_Over_Time);
 
- 	LA_O2_Check_Time:=REAL_TO_TIME(AO.UI_LA_O2_Check_Time);
 
- 	FOUP_O2_Over_Time:=REAL_TO_TIME(AO.UI_FOUP_O2_Over_Time);
 
- 	FOUP_O2_Check_Time:=REAL_TO_TIME(AO.UI_FOUP_O2_Check_Time);
 
- 	Exchange_LA_TO_FOUP_Wait_Time:=REAL_TO_TIME(AO.UI_Exchange_LA_TO_FOUP_Wait_Time);
 
- 	Exchange_FOUP_TO_LA_Wait_Time:=REAL_TO_TIME(AO.UI_Exchange_FOUP_TO_LA_Wait_Time);
 
- 	Exchange_FOUP_TO_FOUP_Wait_Time:=REAL_TO_TIME(AO.UI_Exchange_FOUP_TO_FOUP_Wait_Time);
 
- 	UI_LA_O2_Check_SV:=AO.UI_LA_O2_Check_SV;
 
- 	UI_FOUP_O2_Check_SV:=AO.UI_FOUP_O2_Check_SV;
 
- 	
 
- 	//O2 DETECT
 
- 	IF NOT NDI.FIMS1_FOUP_exist THEN FIMS1_O2_Check_Done:=FALSE;END_IF;					//FOUP1不在位, FIMS1 O2 check done复位
 
- 	IF NOT NDI.FIMS2_FOUP_exist THEN FIMS2_O2_Check_Done:=FALSE;END_IF;					//FOUP2不在位, FIMS2 O2 check done复位
 
- 	IF NOT UI_N2_PURGE_PROCESS 															//N2 PURGE过程结束, 所有O2 check done 复位
 
- 		THEN 
 
- 		LA_O2_Check_Done:=FALSE;
 
- 		FIMS1_O2_Check_Done:=FALSE;
 
- 		FIMS2_O2_Check_Done:=FALSE;
 
- 	END_IF;																													
 
- 	
 
- 	N2_PURGE_PROCESS_Trig(Clk:=UI_N2_PURGE_PROCESS);
 
- 	IF N2_PURGE_PROCESS_Trig.Q 															//N2 PURGE流程开始,初始化
 
- 		THEN 
 
- 		O2_Detect_STEP:=0; 
 
- 		TO_UI_LA_O2_Check_OT:=FALSE;
 
- 		TO_UI_FIMS1_O2_Check_OT:=FALSE;
 
- 		TO_UI_FIMS2_O2_Check_OT:=FALSE;
 
- 	END_IF;
 
- 	
 
- 	IF UI_N2_PURGE_PROCESS THEN
 
- 	CASE O2_Detect_STEP OF
 
- 		0:
 
- 		IF UI_LA_O2_Check_First_EN AND NOT LA_O2_Check_Done
 
- 			THEN O2_Detect_STEP:=10;
 
- 			ELSE
 
- 			O2_Detect_STEP:=1;
 
- 		END_IF;
 
- 		
 
- 		1:
 
- 		IF UI_FIMS1_O2_Check_EN AND NOT FIMS1_O2_Check_Done
 
- 			THEN 
 
- 			O2_Detect_STEP:=20;
 
- 			ELSIF
 
- 			UI_FIMS2_O2_Check_EN AND NOT FIMS2_O2_Check_Done
 
- 			THEN 
 
- 			O2_Detect_STEP:=30;
 
- 			ELSIF
 
- 			NOT LA_O2_Check_Done
 
- 			THEN
 
- 			O2_Detect_STEP:=10;
 
- 			ELSE
 
- 			O2_Detect_STEP:=0;
 
- 		END_IF;
 
- 		
 
- 		//LA
 
- 		10://判断
 
- 		IF NDO.POD1_exhaust_switch_open=TRUE 
 
- 			THEN 
 
- 			NDO.POD1_exhaust_switch_open:=FALSE; 
 
- 			LA_O2_Exchange_Wait.In:=TRUE;
 
- 			LA_O2_Exchange_Wait.PT:=Exchange_FOUP_TO_LA_Wait_Time;
 
- 			O2_Detect_STEP:=11;
 
- 			ELSE
 
- 			O2_Detect_STEP:=12;
 
- 		END_IF;
 
- 		
 
- 		11://阀切换等待
 
- 		LA_O2_Exchange_Wait();
 
- 		IF LA_O2_Exchange_Wait.Q
 
- 			THEN
 
- 			LA_O2_Exchange_Wait.In:=FALSE;
 
- 			O2_Detect_STEP:=12;
 
- 		END_IF;
 
- 		
 
- 		12:
 
- 			LA_O2_Arrival_Timer.In:=TRUE;
 
- 			LA_O2_Arrival_Timer.PT:=LA_O2_Over_Time;
 
- 			LA_O2_Check_Timer.In:=TRUE;
 
- 			LA_O2_Check_Timer.PT:=LA_O2_Check_Time;
 
- 			O2_Detect_STEP:=13;
 
- 		
 
- 		13://O2 DETECT确认及超时时间
 
- 		LA_O2_Arrival_Timer();
 
- 		LA_O2_Check_Timer();				
 
- 		IF LA_O2_Arrival_Timer.Q 
 
- 			THEN 
 
- 			TO_UI_LA_O2_Check_OT:=TRUE;
 
- 		END_IF;
 
- 		
 
- 		IF LA_O2_Check_Timer.Q AND GVL.O2.ActValPV_Real<=UI_LA_O2_Check_SV
 
- 			THEN
 
- 			LA_O2_Check_Done:=TRUE;		
 
- 			LA_O2_Check_Timer.In:=FALSE;
 
- 			LA_O2_Arrival_Timer.In:=FALSE;
 
- 			O2_Detect_STEP:=0;
 
- 		END_IF;
 
- 		
 
- 		//FIMS1
 
- 		20://判断	
 
- 		IF NDO.POD1_exhaust_switch_open=TRUE AND NDO.POD2_exhaust_switch_open=FALSE	//AV61开,AV62关
 
- 			THEN
 
- 			O2_Detect_STEP:=22;
 
- 		END_IF;
 
- 		IF NDO.POD1_exhaust_switch_open=FALSE AND NDO.POD2_exhaust_switch_open=FALSE	//AV61关,AV62关
 
- 			THEN
 
- 			NDO.POD1_exhaust_switch_open:=TRUE; 
 
- 			FIMS1_O2_Exchange_Wait.In:=TRUE;
 
- 			FIMS1_O2_Exchange_Wait.PT:=Exchange_LA_TO_FOUP_Wait_Time;
 
- 			O2_Detect_STEP:=21;
 
- 		END_IF;		
 
- 		IF NDO.POD1_exhaust_switch_open=FALSE AND NDO.POD2_exhaust_switch_open=TRUE	//AV61关,AV62开
 
- 			THEN
 
- 			NDO.POD1_exhaust_switch_open:=TRUE; 
 
- 			NDO.POD2_exhaust_switch_open:=FALSE;
 
- 			FIMS1_O2_Exchange_Wait.In:=TRUE;
 
- 			IF Exchange_LA_TO_FOUP_Wait_Time>Exchange_FOUP_TO_FOUP_Wait_Time		//时间选择较长者
 
- 					THEN
 
- 					FIMS1_O2_Exchange_Wait.PT:=Exchange_LA_TO_FOUP_Wait_Time;
 
- 					ELSE
 
- 					FIMS1_O2_Exchange_Wait.PT:=Exchange_FOUP_TO_FOUP_Wait_Time;
 
- 			END_IF;	
 
- 			O2_Detect_STEP:=21;
 
- 		END_IF;	
 
- 		IF NDO.POD1_exhaust_switch_open=TRUE AND NDO.POD2_exhaust_switch_open=TRUE	//AV61开,AV62开
 
- 			THEN
 
- 			NDO.POD2_exhaust_switch_open:=FALSE; 
 
- 			FIMS1_O2_Exchange_Wait.In:=TRUE;
 
- 			FIMS1_O2_Exchange_Wait.PT:=Exchange_FOUP_TO_FOUP_Wait_Time;
 
- 			O2_Detect_STEP:=21;
 
- 		END_IF;
 
- 		
 
- 		21://阀切换等待
 
- 		FIMS1_O2_Exchange_Wait();
 
- 		IF FIMS1_O2_Exchange_Wait.Q
 
- 			THEN
 
- 			FIMS1_O2_Exchange_Wait.In:=FALSE;			
 
- 			O2_Detect_STEP:=22;
 
- 		END_IF;
 
- 		
 
- 		22://O2 CHECK START
 
- 		IF FIMS1_O2_Check_Start
 
- 			THEN
 
- 			FIMS1_O2_Arrival_Timer.In:=TRUE;
 
- 			FIMS1_O2_Arrival_Timer.PT:=FOUP_O2_Over_Time;
 
- 			FIMS1_O2_Check_Timer.In:=TRUE;
 
- 			FIMS1_O2_Check_Timer.PT:=FOUP_O2_Check_Time;
 
- 			O2_Detect_STEP:=23;
 
- 		END_IF;
 
- 		
 
- 		23://O2 DETECT确认及超时时间
 
- 		FIMS1_O2_Arrival_Timer();
 
- 		FIMS1_O2_Check_Timer();
 
- 		IF FIMS1_O2_Arrival_Timer.Q 
 
- 			THEN 
 
- 			TO_UI_FIMS1_O2_Check_OT:=TRUE;
 
- 		END_IF;
 
- 		
 
- 		IF FIMS1_O2_Check_Timer.Q AND GVL.O2.ActValPV_Real<=UI_FOUP_O2_Check_SV
 
- 			THEN
 
- 			FIMS1_O2_Check_Done:=TRUE;		
 
- 			FIMS1_O2_Check_Timer.In:=FALSE;
 
- 			FIMS1_O2_Arrival_Timer.In:=FALSE;
 
- 			O2_Detect_STEP:=0;
 
- 		END_IF;
 
- 		
 
- 		
 
- 		//FIMS2
 
- 		30://判断	
 
- 		IF NDO.POD1_exhaust_switch_open=TRUE AND NDO.POD2_exhaust_switch_open=TRUE	//AV61开,AV62开
 
- 			THEN
 
- 			O2_Detect_STEP:=32;
 
- 		END_IF;
 
- 		IF NDO.POD1_exhaust_switch_open=FALSE AND NDO.POD2_exhaust_switch_open=TRUE	//AV61关,AV62开
 
- 			THEN
 
- 			NDO.POD1_exhaust_switch_open:=TRUE; 
 
- 			FIMS2_O2_Exchange_Wait.In:=TRUE;
 
- 			FIMS2_O2_Exchange_Wait.PT:=Exchange_LA_TO_FOUP_Wait_Time;
 
- 			O2_Detect_STEP:=31;
 
- 		END_IF;		
 
- 		IF NDO.POD1_exhaust_switch_open=FALSE AND NDO.POD2_exhaust_switch_open=FALSE	//AV61关,AV62关
 
- 			THEN
 
- 			NDO.POD1_exhaust_switch_open:=TRUE; 
 
- 			NDO.POD2_exhaust_switch_open:=TRUE;
 
- 			FIMS2_O2_Exchange_Wait.In:=TRUE;
 
- 			IF Exchange_LA_TO_FOUP_Wait_Time>Exchange_FOUP_TO_FOUP_Wait_Time		//时间选择较长者
 
- 					THEN
 
- 					FIMS2_O2_Exchange_Wait.PT:=Exchange_LA_TO_FOUP_Wait_Time;
 
- 					ELSE
 
- 					FIMS2_O2_Exchange_Wait.PT:=Exchange_FOUP_TO_FOUP_Wait_Time;
 
- 			END_IF;	
 
- 			O2_Detect_STEP:=31;
 
- 		END_IF;	
 
- 		IF NDO.POD1_exhaust_switch_open=TRUE AND NDO.POD2_exhaust_switch_open=FALSE	//AV61开,AV62关
 
- 			THEN
 
- 			NDO.POD2_exhaust_switch_open:=TRUE; 
 
- 			FIMS2_O2_Exchange_Wait.In:=TRUE;
 
- 			FIMS2_O2_Exchange_Wait.PT:=Exchange_FOUP_TO_FOUP_Wait_Time;
 
- 			O2_Detect_STEP:=31;
 
- 		END_IF;
 
- 		
 
- 		31://阀切换等待
 
- 		FIMS2_O2_Exchange_Wait();
 
- 		IF FIMS2_O2_Exchange_Wait.Q
 
- 			THEN
 
- 			FIMS2_O2_Exchange_Wait.In:=FALSE;
 
- 			O2_Detect_STEP:=32;
 
- 		END_IF;
 
- 		
 
- 		32://O2 CHECK START
 
- 		IF FIMS2_O2_Check_Start
 
- 			THEN
 
- 			FIMS2_O2_Arrival_Timer.In:=TRUE;
 
- 			FIMS2_O2_Arrival_Timer.PT:=FOUP_O2_Over_Time;
 
- 			FIMS2_O2_Check_Timer.In:=TRUE;
 
- 			FIMS2_O2_Check_Timer.PT:=FOUP_O2_Check_Time;
 
- 			O2_Detect_STEP:=33;
 
- 		END_IF;
 
- 		
 
- 		33://O2 DETECT确认及超时时间
 
- 		FIMS2_O2_Arrival_Timer();
 
- 		FIMS2_O2_Check_Timer();
 
- 		IF FIMS2_O2_Arrival_Timer.Q 
 
- 			THEN 
 
- 			TO_UI_FIMS2_O2_Check_OT:=TRUE;
 
- 		END_IF;
 
- 		
 
- 		IF FIMS2_O2_Check_Timer.Q AND GVL.O2.ActValPV_Real<=UI_FOUP_O2_Check_SV
 
- 			THEN
 
- 			FIMS2_O2_Check_Done:=TRUE;		
 
- 			FIMS2_O2_Check_Timer.In:=FALSE;
 
- 			FIMS2_O2_Arrival_Timer.In:=FALSE;
 
- 			O2_Detect_STEP:=0;
 
- 		END_IF;
 
- 	END_CASE;
 
- 	END_IF;		
 
- 		
 
- //FIMS1	
 
- 	FIMS1(
 
- 	Enable:= (TP_EN AND (FIMS1LoadCmd_b OR FIMS1UnloadCmd_b)) OR (NOT TP_EN AND GVL.FIMSManualSt.AutoOrManual_b), 
 
- 	StopCmd_In_b:= FIMS1StopCmd_b, 
 
- 	LoadCmd_In_b:= FIMS1LoadCmd_b, 
 
- 	UnloadCmd_In_b:= FIMS1UnloadCmd_b, 
 
- 	Open_Close_Cmd_In_b:= 0, 
 
- 	Open_Close_Count:= 0, 
 
- 	PodSeqAlmRst_In_b:= FIMS1AlarmReset_b, 
 
- 	N2PurgeBypassEN_In_b:= FIMS1N2PurgeBypass_b, 
 
- 	FoupInPodPos_In_b:= FIMS1FoupCheck_b, 
 
- 	FoupInRetractPos_In_b:= NDI.FIMS1_FOUP_undock, 
 
- 	FoupInExtendPos_In_b:= NDI.FIMS1_FOUP_dock, 
 
- 	FoupInSealPos_In_b:= NDI.FIMS1_seal, 
 
- 	FoupInRlsPos_In_b:= NDI.FIMS1_release, 
 
- 	FoupLatchOnPos_In_b:= NDI.FIMS1_FOUP_latch_on, 
 
- 	FoupLatchOffPos_In_b:= NDI.FIMS1_FOUP_latch_off, 
 
- 	PodVacStatus_In_b:= NDI.FIMS1_FOUP_negative_Pressure, 
 
- 	PodVacATM_In_b:= NDI.FIMS1_FOUP_ordinary_Pressure, 
 
- 	O2Check_EN:= UI_FIMS1_O2_Check_EN, 
 
- 	O2Check_Done_In_b:= FIMS1_O2_Check_Done, 
 
- 	PodDrXaxisAvoidInUpPos_In_b:= NDI.FIMS1_collision_avoidance_up, 
 
- 	PodDrXaxisAvoidInDnPos_In_b:= NDI.FIMS1_collision_avoidance_down, 
 
- 	PodDrYClsPos_In_b:= NDI.FIMS1_door_close, 
 
- 	PodDrYOpPos_In_b:= NDI.FIMS1_door_open, 
 
- 	N2PurgeValOpPos_In_b:= NDI.FIMS1_exhaust_open_position, 
 
- 	N2PurgeValClPos_In_b:= NDI.FIMS1_exhaust_close_position, 
 
- 	EnableOutput=> ,  
 
- 	LoadOTAlm_Out_b=> GVL.FIMSDI[0].LoadAlarm_b, 
 
- 	UnloadOTAlm_Out_b=> GVL.FIMSDI[0].UnloadAlarm_b, 
 
- 	PodLoadDone_Out_b=> GVL.FIMSDI[0].LoadComplete_b, 
 
- 	PodUnloadDone_Out_b=> GVL.FIMSDI[0].UnloadComplete_b, 
 
- 	PodRunning_Out_b=> GVL.FIMSDI[0].Running_b, 
 
- 	PodRetractVal_Out_b=> GVL.FIMSValveAct.FIMS1Undock_b, 
 
- 	PodExtendVal_Out_b=> GVL.FIMSValveAct.FIMS1Dock_b, 
 
- 	PodVacOpVal_Out_b=> GVL.FIMSValveAct.FIMS1VacuumOpen_b, 
 
- 	PodVacClsVal_Out_b=> GVL.FIMSValveAct.FIMS1VacuumClose_b, 
 
- 	PodFoupLatchOffVal_Out_b=> GVL.FIMSValveAct.FIMS1LatchOff1_b, 
 
- 	PodFoupLatchonVal_Out_b=> GVL.FIMSValveAct.FIMS1LatchOn1_b, 
 
- 	PodSealVal_Out_b=> GVL.FIMSValveAct.FIMS1Seal_b, 
 
- 	PodRealseVal_Out_b=> GVL.FIMSValveAct.FIMS1Release_b, 
 
- 	N2PurgePodOpVal_Out_b=> , 
 
- 	N2PurgePodClsVal_Out_b=> , 
 
- 	O2CheckVal_Out_b=> FIMS1_O2_Check_Start, 
 
- 	PodDrXaxisAvoidOpVal_Out_b=> GVL.FIMSValveAct.FIMS1AvoidanceUp_b, 
 
- 	PodDrXaxisAvoidClsVal_Out_b=> GVL.FIMSValveAct.FIMS1AvoidanceDown_b, 
 
- 	PodDrYOpVal_Out_b=> GVL.FIMSValveAct.FIMS1DoorOpen_b, 
 
- 	PodDrYClsVal_Out_b=> GVL.FIMSValveAct.FIMS1DoorClose_b);
 
- 	
 
- 	
 
- 	
 
- 	IF TP_EN THEN
 
- 	GVL.FIMSValveAct.FIMS1LatchOff2_b := GVL.FIMSValveAct.FIMS1LatchOff1_b ;
 
- 	GVL.FIMSValveAct.FIMS1LatchOn2_b := GVL.FIMSValveAct.FIMS1LatchOn1_b ;
 
- 	END_IF;
 
- 	
 
- //FIMS2	
 
- 	FIMS2(
 
- 	Enable:= (TP_EN AND (FIMS2LoadCmd_b OR FIMS2UnloadCmd_b)) OR (NOT TP_EN AND GVL.FIMSManualSt.AutoOrManual_b), 
 
- 	StopCmd_In_b:= FIMS2StopCmd_b, 
 
- 	LoadCmd_In_b:= FIMS2LoadCmd_b, 
 
- 	UnloadCmd_In_b:= FIMS2UnloadCmd_b, 
 
- 	Open_Close_Cmd_In_b:= 0, 
 
- 	Open_Close_Count:= 0, 
 
- 	PodSeqAlmRst_In_b:= FIMS2AlarmReset_b, 
 
- 	N2PurgeBypassEN_In_b:= FIMS2N2PurgeBypass_b, 
 
- 	FoupInPodPos_In_b:= FIMS2FoupCheck_b, 
 
- 	FoupInRetractPos_In_b:= NDI.FIMS2_FOUP_undock, 
 
- 	FoupInExtendPos_In_b:= NDI.FIMS2_FOUP_dock, 
 
- 	FoupInSealPos_In_b:= NDI.FIMS2_seal, 
 
- 	FoupInRlsPos_In_b:= NDI.FIMS2_release, 
 
- 	FoupLatchOnPos_In_b:= NDI.FIMS2_FOUP_latch_on, 
 
- 	FoupLatchOffPos_In_b:= NDI.FIMS2_FOUP_latch_off, 
 
- 	PodVacStatus_In_b:= NDI.FIMS2_FOUP_negative_Pressure, 
 
- 	PodVacATM_In_b:= NDI.FIMS2_FOUP_ordinary_Pressure, 
 
- 	O2Check_EN:= UI_FIMS2_O2_Check_EN, 
 
- 	O2Check_Done_In_b:= FIMS2_O2_Check_Done, 
 
- 	PodDrXaxisAvoidInUpPos_In_b:= NDI.FIMS2_collision_avoidance_up, 
 
- 	PodDrXaxisAvoidInDnPos_In_b:= NDI.FIMS2_collision_avoidance_down, 
 
- 	PodDrYClsPos_In_b:= NDI.FIMS2_door_close, 
 
- 	PodDrYOpPos_In_b:= NDI.FIMS2_door_open, 
 
- 	N2PurgeValOpPos_In_b:= NDI.FIMS2_exhaust_open_position, 
 
- 	N2PurgeValClPos_In_b:= NDI.FIMS2_exhaust_close_position, 
 
- 	EnableOutput=> , 
 
- 	LoadOTAlm_Out_b=> GVL.FIMSDI[0].LoadAlarm_b, 
 
- 	UnloadOTAlm_Out_b=> GVL.FIMSDI[0].UnloadAlarm_b, 
 
- 	PodLoadDone_Out_b=> GVL.FIMSDI[0].LoadComplete_b, 
 
- 	PodUnloadDone_Out_b=> GVL.FIMSDI[0].UnloadComplete_b, 
 
- 	PodRunning_Out_b=> GVL.FIMSDI[0].Running_b, 
 
- 	PodRetractVal_Out_b=> GVL.FIMSValveAct.FIMS2Undock_b, 
 
- 	PodExtendVal_Out_b=> GVL.FIMSValveAct.FIMS2Dock_b, 
 
- 	PodVacOpVal_Out_b=> GVL.FIMSValveAct.FIMS2VacuumOpen_b, 
 
- 	PodVacClsVal_Out_b=> GVL.FIMSValveAct.FIMS2VacuumClose_b, 
 
- 	PodFoupLatchOffVal_Out_b=> GVL.FIMSValveAct.FIMS2LatchOff1_b, 
 
- 	PodFoupLatchonVal_Out_b=> GVL.FIMSValveAct.FIMS2LatchOn1_b, 
 
- 	PodSealVal_Out_b=> GVL.FIMSValveAct.FIMS2Seal_b, 
 
- 	PodRealseVal_Out_b=> GVL.FIMSValveAct.FIMS2Release_b, 
 
- 	N2PurgePodOpVal_Out_b=> , 
 
- 	N2PurgePodClsVal_Out_b=> , 
 
- 	O2CheckVal_Out_b=> FIMS2_O2_Check_Start, 
 
- 	PodDrXaxisAvoidOpVal_Out_b=> GVL.FIMSValveAct.FIMS2AvoidanceUp_b, 
 
- 	PodDrXaxisAvoidClsVal_Out_b=> GVL.FIMSValveAct.FIMS2AvoidanceDown_b, 
 
- 	PodDrYOpVal_Out_b=> GVL.FIMSValveAct.FIMS2DoorOpen_b, 
 
- 	PodDrYClsVal_Out_b=> GVL.FIMSValveAct.FIMS2DoorClose_b);
 
- 	
 
- 	
 
- 	
 
- 	IF TP_EN THEN
 
- 	GVL.FIMSValveAct.FIMS2LatchOff2_b := GVL.FIMSValveAct.FIMS2LatchOff1_b ;
 
- 	GVL.FIMSValveAct.FIMS2LatchOn2_b := GVL.FIMSValveAct.FIMS2LatchOn1_b ;
 
- 	END_IF;
 
- 	
 
- //????	
 
- 	IF NOT TP_EN AND NOT GVL.FIMSManualSt.AutoOrManual_b THEN
 
- 	GVL.FIMSValveAct.FIMS1LatchOff1_b := GVL.FIMSManualSt.FIMS1LatchOff1_b ;
 
- 	GVL.FIMSValveAct.FIMS1LatchOn1_b := GVL.FIMSManualSt.FIMS1LatchOn1_b ;
 
- 	GVL.FIMSValveAct.FIMS1LatchOff2_b := GVL.FIMSManualSt.FIMS1LatchOff2_b ;
 
- 	GVL.FIMSValveAct.FIMS1LatchOn2_b := GVL.FIMSManualSt.FIMS1LatchOn2_b ;
 
- 	GVL.FIMSValveAct.FIMS2LatchOff1_b := GVL.FIMSManualSt.FIMS2LatchOff1_b ;
 
- 	GVL.FIMSValveAct.FIMS2LatchOn1_b := GVL.FIMSManualSt.FIMS2LatchOn1_b ;
 
- 	GVL.FIMSValveAct.FIMS2LatchOff2_b := GVL.FIMSManualSt.FIMS2LatchOff2_b ;
 
- 	GVL.FIMSValveAct.FIMS2LatchOn2_b := GVL.FIMSManualSt.FIMS2LatchOn2_b ;
 
- 	
 
- 	GVL.FIMSValveAct.FIMS1Seal_b := GVL.FIMSManualSt.FIMS1Seal_b ;
 
- 	GVL.FIMSValveAct.FIMS1Release_b := GVL.FIMSManualSt.FIMS1Release_b ;
 
- 	GVL.FIMSValveAct.FIMS2Seal_b := GVL.FIMSManualSt.FIMS2Seal_b ;
 
- 	GVL.FIMSValveAct.FIMS2Release_b := GVL.FIMSManualSt.FIMS2Release_b ;
 
- 	GVL.FIMSValveAct.FIMS1DoorClose_b := GVL.FIMSManualSt.FIMS1DoorClose_b ;
 
- 	GVL.FIMSValveAct.FIMS1DoorOpen_b := GVL.FIMSManualSt.FIMS1DoorOpen_b ;
 
- 	GVL.FIMSValveAct.FIMS2DoorClose_b := GVL.FIMSManualSt.FIMS2DoorClose_b ;
 
- 	GVL.FIMSValveAct.FIMS2DoorOpen_b := GVL.FIMSManualSt.FIMS2DoorOpen_b ;
 
- 	
 
- 	GVL.FIMSValveAct.FIMS1AvoidanceDown_b := GVL.FIMSManualSt.FIMS1AvoidanceDown_b ;
 
- 	GVL.FIMSValveAct.FIMS1AvoidanceUp_b := GVL.FIMSManualSt.FIMS1AvoidanceUp_b ;
 
- 	GVL.FIMSValveAct.FIMS2AvoidanceDown_b := GVL.FIMSManualSt.FIMS2AvoidanceDown_b ;
 
- 	GVL.FIMSValveAct.FIMS2AvoidanceUp_b := GVL.FIMSManualSt.FIMS2AvoidanceUp_b ;
 
- 	GVL.FIMSValveAct.FIMS1Undock_b := GVL.FIMSManualSt.FIMS1Undock_b ;
 
- 	GVL.FIMSValveAct.FIMS1Dock_b := GVL.FIMSManualSt.FIMS1Dock_b ;
 
- 	GVL.FIMSValveAct.FIMS2Undock_b := GVL.FIMSManualSt.FIMS2Undock_b ;
 
- 	GVL.FIMSValveAct.FIMS2Dock_b := GVL.FIMSManualSt.FIMS2Dock_b ;
 
- 	
 
- 	GVL.FIMSValveAct.FIMS1VacuumClose_b := GVL.FIMSManualSt.FIMS1VacuumClose_b ;
 
- 	GVL.FIMSValveAct.FIMS1VacuumOpen_b := GVL.FIMSManualSt.FIMS1VacuumOpen_b ;
 
- 	GVL.FIMSValveAct.FIMS2VacuumClose_b := GVL.FIMSManualSt.FIMS2VacuumClose_b ;
 
- 	GVL.FIMSValveAct.FIMS2VacuumOpen_b := GVL.FIMSManualSt.FIMS2VacuumOpen_b ;
 
- 	END_IF;
 
- 	
 
- 	
 
- 	]]></ST>
 
-     </Implementation>
 
-     <LineIds Name="FIMS">
 
-       <LineId Id="802" Count="59" />
 
-       <LineId Id="1535" Count="1" />
 
-       <LineId Id="862" Count="1" />
 
-       <LineId Id="1607" Count="0" />
 
-       <LineId Id="864" Count="33" />
 
-       <LineId Id="901" Count="82" />
 
-       <LineId Id="1608" Count="0" />
 
-       <LineId Id="984" Count="351" />
 
-       <LineId Id="1460" Count="1" />
 
-       <LineId Id="275" Count="0" />
 
-     </LineIds>
 
-   </POU>
 
- </TcPlcObject>
 
 
  |