| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413 | <?xml version="1.0" encoding="utf-8"?><TcPlcObject Version="1.1.0.1" ProductVersion="3.1.4024.12">  <POU Name="FIMSSEQUENCE" Id="{ccd53ff0-004a-4e41-8b19-d824f47f7c88}" SpecialFunc="None">    <Declaration><![CDATA[FUNCTION_BLOCK FIMSSEQUENCEVAR_INPUT	Enable	:BOOL;	StopCmd_In_b	:BOOL;	LoadCmd_In_b	:BOOL;	UnloadCmd_In_b	:BOOL;	Open_Close_Cmd_In_b	:BOOL;	Open_Close_Count	:BOOL;	PodSeqAlmRst_In_b	:BOOL;	N2PurgeBypassEN_In_b	:BOOL;	FoupInPodPos_In_b	:BOOL;	FoupInRetractPos_In_b	:BOOL;	FoupInExtendPos_In_b	:BOOL;	FoupInSealPos_In_b	:BOOL;	FoupInRlsPos_In_b	:BOOL;	FoupLatchOnPos_In_b	:BOOL;	FoupLatchOffPos_In_b	:BOOL;	PodVacStatus_In_b	:BOOL;	PodVacATM_In_b	:BOOL;	O2Check_EN	:BOOL;	O2Check_Done_In_b	:BOOL;	PodDrXaxisAvoidInUpPos_In_b	:BOOL;	PodDrXaxisAvoidInDnPos_In_b	:BOOL;	PodDrYClsPos_In_b	:BOOL;	PodDrYOpPos_In_b	:BOOL;	N2PurgeValOpPos_In_b	:BOOL;	N2PurgeValClPos_In_b	:BOOL;END_VARVAR_OUTPUT	EnableOutput	:BOOL;	LoadOTAlm_Out_b	:BOOL;	UnloadOTAlm_Out_b	:BOOL;	PodLoadDone_Out_b	:BOOL;	PodUnloadDone_Out_b	:BOOL;	PodRunning_Out_b	:BOOL;	PodRetractVal_Out_b	:BOOL;	PodExtendVal_Out_b	:BOOL;	PodVacOpVal_Out_b	:BOOL;	PodVacClsVal_Out_b	:BOOL;	PodFoupLatchOffVal_Out_b	:BOOL;	PodFoupLatchonVal_Out_b	:BOOL;	PodSealVal_Out_b	:BOOL;	PodRealseVal_Out_b	:BOOL;	N2PurgePodOpVal_Out_b	:BOOL;	N2PurgePodClsVal_Out_b	:BOOL;	O2CheckVal_Out_b	:BOOL;	PodDrXaxisAvoidOpVal_Out_b	:BOOL;	PodDrXaxisAvoidClsVal_Out_b	:BOOL;	PodDrYOpVal_Out_b	:BOOL;	PodDrYClsVal_Out_b	:BOOL;END_VARVAR	UnloadStage	:	INT	;	FIMSUnloadTrig	:	R_TRIG	;	UnloadOTAlm	:	TON	;	LoadStage	:	INT	;	FIMSLoadTrig	:	R_TRIG	;	LoadOTAlm	:	TON	;	FIMSTrigDleyOn	:	TON	;	FIMSUnloadDlyOn	:	TON	;	PodLoadRunning_b	:	BOOL	;	PodUnloadRunning_b	:	BOOL	;	loadottime	:	TIME	;	unloadottime	:	TIME	;	KeyStatusTON	:	TON	;	KeyStatusTON1	:	TON	;	UnloadVacOffDly	:	TON	;	UNLOAD_STEP_DELAY_EN	:	BOOL	;	UNLOAD_STEP_NEXT	:	INT	;	UNLOAD_STEP_DELAY	:	TON	;	UNLOAD_STEP_DELAY_TIME	:	TIME	;	LOAD_STEP_DELAY_EN	:	BOOL	;	LOAD_STEP_NEXT	:	INT	;	LOAD_STEP_DELAY	:	TON	;	LOAD_STEP_DELAY_TIME	:	TIME	;END_VAR]]></Declaration>    <Implementation>      <ST><![CDATA[	IF NOT LoadCmd_In_b OR ( LoadOTAlm_Out_b AND PodSeqAlmRst_In_b ) OR StopCmd_In_b THEN		LoadOTAlm(	In:= FALSE , PT:= T#60s , Q=> LoadOTAlm_Out_b , ET=>loadottime );		LoadStage := 0 ;		PodLoadRunning_b := FALSE ;		LOAD_STEP_DELAY_EN:=FALSE;		LOAD_STEP_NEXT:=0;	END_IF ;		IF NOT UnloadCmd_In_b OR ( UnloadOTAlm_Out_b AND PodSeqAlmRst_In_b ) OR StopCmd_In_b THEN		UnloadOTAlm(	In:= FALSE , PT:= T#60s , Q=> UnloadOTAlm_Out_b , ET=>unloadottime );		UnloadStage := 0 ;		PodUnloadRunning_b := FALSE ;		UNLOAD_STEP_DELAY_EN:=FALSE;		UNLOAD_STEP_NEXT:=0;	END_IF;		IF Enable THEN	//Alarm	IF LoadCmd_In_b AND NOT StopCmd_In_b AND LoadStage>0 THEN 		LoadOTAlm(	In:= TRUE , PT:= T#60s , Q=> LoadOTAlm_Out_b , ET=>loadottime );	(*ELSIF NOT LoadCmd_In_b OR ( LoadOTAlm_Out_b AND PodSeqAlmRst_In_b ) OR StopCmd_In_b THEN		LoadOTAlm(	In:= FALSE , PT:= T#60s , Q=> LoadOTAlm_Out_b , ET=>loadottime );		LoadStage := 0 ;		PodLoadRunning_b := FALSE ;*)	END_IF;		IF UnloadCmd_In_b AND NOT StopCmd_In_b AND UnloadStage>0 THEN 		UnloadOTAlm(	In:= TRUE , PT:= T#60s , Q=> UnloadOTAlm_Out_b , ET=>unloadottime );	(*ELSIF NOT UnloadCmd_In_b OR ( UnloadOTAlm_Out_b AND PodSeqAlmRst_In_b ) OR StopCmd_In_b THEN		UnloadOTAlm(	In:= FALSE , PT:= T#60s , Q=> UnloadOTAlm_Out_b , ET=>unloadottime );		UnloadStage := 0 ;		PodUnloadRunning_b := FALSE ;*)	END_IF;		//Unload	FIMSUnloadDlyOn.In := UnloadCmd_In_b ;	FIMSUnloadDlyOn((*In:=,*) PT:=T#100MS(*, Q=>, ET=>*));	UNLOAD_STEP_DELAY(In:=UNLOAD_STEP_DELAY_EN,PT:=UNLOAD_STEP_DELAY_TIME);	IF UnloadCmd_In_b THEN		FIMSUnloadTrig(	Clk:= FIMSUnloadDlyOn.Q );		IF FIMSUnloadTrig.Q THEN			UnloadStage := 0 ;		END_IF;		CASE UnloadStage OF			0://门板Y轴归位				PodLoadDone_Out_b := FALSE ;				PodUnloadDone_Out_b := FALSE ;				PodUnloadRunning_b := TRUE ;				PodDrYClsVal_Out_b := TRUE ;				PodDrYOpVal_Out_b := FALSE ;				(*UnloadOTAlm(	In:= PodDrYClsVal_Out_b AND NOT PodSeqAlmRst_In_b , PT:= T#60s , Q=> UnloadOTAlm_Out_b [*, ET=>*] );*)				IF PodDrYClsVal_Out_b AND PodDrYClsPos_In_b AND NOT PodDrYOpPos_In_b AND NOT UnloadOTAlm_Out_b 				 THEN					UNLOAD_STEP_DELAY_EN:=TRUE;					UNLOAD_STEP_NEXT:=10;					UNLOAD_STEP_DELAY_TIME:=T#200ms;					UnloadStage := 200 ;				END_IF;			10://Pod 门板移动 seal				PodSealVal_Out_b := TRUE ;				PodRealseVal_Out_b := FALSE ;				(*UnloadOTAlm(	In:= PodSealVal_Out_b AND NOT PodSeqAlmRst_In_b , PT:= T#60s , Q=> UnloadOTAlm_Out_b [*, ET=>*] );*)				IF PodSealVal_Out_b AND FoupInSealPos_In_b AND NOT FoupInRlsPos_In_b AND NOT UnloadOTAlm_Out_b THEN					N2PurgePodClsVal_Out_b := TRUE ;					UNLOAD_STEP_DELAY_EN:=TRUE;					UNLOAD_STEP_NEXT:=30;					UNLOAD_STEP_DELAY_TIME:=T#200ms;					UnloadStage := 200 ;				END_IF;			(*20://pod门板x轴避让归位				PodDrXaxisAvoidClsVal_Out_b :=TRUE ;				PodDrXaxisAvoidOpVal_Out_b := FALSE ;				[*UnloadOTAlm(	In:= PodDrXaxisAvoidClsVal_Out_b AND NOT PodSeqAlmRst_In_b , PT:= T#60s , Q=> UnloadOTAlm_Out_b [*, ET=>*] );*]				IF PodDrXaxisAvoidClsVal_Out_b AND PodDrXaxisAvoidInDnPos_In_b AND NOT PodDrXaxisAvoidInUpPos_In_b AND NOT UnloadOTAlm_Out_b THEN 					UnloadStage := 30;				END_IF;*)			30://foup latch on				PodFoupLatchonVal_Out_b := TRUE ;				PodFoupLatchoffVal_Out_b  := FALSE ;				KeyStatusTON(In:=PodFoupLatchonVal_Out_b, PT:=T#1s(*, Q=>, ET=>*));				(*UnloadOTAlm(	In:= PodFoupLatchonVal_Out_b AND NOT PodSeqAlmRst_In_b , PT:= T#60s , Q=> UnloadOTAlm_Out_b [*, ET=>*] );*)				IF PodFoupLatchonVal_Out_b AND FoupLatchOnPos_In_b AND NOT FoupLatchOffPos_In_b AND NOT UnloadOTAlm_Out_b AND KeyStatusTON.Q THEN					UNLOAD_STEP_DELAY_EN:=TRUE;					UNLOAD_STEP_NEXT:=40;					UNLOAD_STEP_DELAY_TIME:=T#200ms;					UnloadStage := 200 ;				END_IF;						40://Vacuum off				PodVacClsVal_Out_b := TRUE ;				PodVacOpVal_Out_b := FALSE ;				UnloadVacOffDly(In:=PodVacClsVal_Out_b, PT:=T#1.5s(*, Q=>, ET=>*));				IF PodVacATM_In_b OR UnloadVacOffDly.Q(*PodVacClsVal_Out_b AND PodVacStatus_In_b*) THEN					UNLOAD_STEP_DELAY_EN:=TRUE;					UNLOAD_STEP_NEXT:=50;					UNLOAD_STEP_DELAY_TIME:=T#200ms;					UnloadStage := 200 ;				END_IF;						50:// retract				KeyStatusTON(In:=FALSE, PT:=T#1s(*, Q=>, ET=>*));				PodRetractVal_Out_b := TRUE ;				PodExtendVal_Out_b := FALSE ;				(*UnloadOTAlm(	In:= PodRetractVal_Out_b AND NOT PodSeqAlmRst_In_b , PT:= T#60s , Q=> UnloadOTAlm_Out_b [*, ET=>*] );*)				IF PodRetractVal_Out_b AND FoupInRetractPos_In_b AND NOT FoupInExtendPos_In_b AND NOT UnloadOTAlm_Out_b (*AND FoupInPodPos_In_b*)THEN					UNLOAD_STEP_DELAY_EN:=TRUE;					UNLOAD_STEP_NEXT:=100;					UNLOAD_STEP_DELAY_TIME:=T#200ms;					UnloadStage := 200 ;				END_IF;			100://Unload done				UnloadOTAlm(	In:= FALSE , PT:= T#60s , Q=> UnloadOTAlm_Out_b (*, ET=>*));				PodUnloadRunning_b := FALSE ;				PodUnloadDone_Out_b := TRUE ;				UNLOAD_STEP_DELAY_EN:=FALSE;							200://each step delay time				 IF UNLOAD_STEP_DELAY.Q					 THEN					 UNLOAD_STEP_DELAY_EN:=FALSE;					 UnloadStage := UNLOAD_STEP_NEXT ;				 END_IF;		END_CASE;	END_IF;		//Load	(*FIMSTrigDleyOn.In := LoadCmd_In_b ;*)	FIMSTrigDleyOn.In := LoadCmd_In_b ;	FIMSTrigDleyOn((*In:= LoadCmd_In_b ,*) PT:= T#100MS (*, Q=>, ET=>*));	LOAD_STEP_DELAY(In:=LOAD_STEP_DELAY_EN,PT:=LOAD_STEP_DELAY_TIME);	IF LoadCmd_In_b THEN		FIMSLoadTrig(	Clk:= FIMSTrigDleyOn.Q );		IF FIMSLoadTrig.Q=TRUE THEN			LoadStage:= 0;		END_IF;		CASE LoadStage OF			0://载台上foup有无检测				PodUnloadDone_Out_b := FALSE ;				PodLoadDone_Out_b := FALSE ;				PodLoadRunning_b := TRUE ;				(*LoadOTAlm.In := NOT PodSeqAlmRst_In_b ;*)				(*LoadOTAlm([*In:=,*] PT:=T#60s, Q=>LoadOTAlm_Out_b[*, ET=>*]);*)				IF FoupInPodPos_In_b AND NOT LoadOTAlm_Out_b THEN					LoadOTAlm.In :=FALSE ;					LOAD_STEP_DELAY_EN:=TRUE;					LOAD_STEP_NEXT:=10;					LOAD_STEP_DELAY_TIME:=T#200ms;					loadStage := 200 ;				END_IF;			10: //dock				PodExtendVal_Out_b :=TRUE;				PodRetractVal_Out_b:=FALSE;				(*LoadOTAlm1(In:= PodExtendVal_Out_b AND NOT PodSeqAlmRst_In_b , PT:= T#60s, Q=> LoadOTAlm_Out_b [*, ET=>*] );*)				IF PodExtendVal_Out_b=TRUE AND FoupInExtendPos_In_b=TRUE AND NOT FoupInRetractPos_In_b=TRUE AND NOT LoadOTAlm_Out_b=TRUE THEN					LOAD_STEP_DELAY_EN:=TRUE;					LOAD_STEP_NEXT:=20;					LOAD_STEP_DELAY_TIME:=T#200ms;					loadStage := 200 ;				END_IF;			20: //vacuum on				PodVacOpVal_Out_b := TRUE ;				PodVacClsVal_Out_b := FALSE ;				IF PodVacOpVal_Out_b=TRUE (* AND PodVacStatus_In_b=TRUE *) THEN					LOAD_STEP_DELAY_EN:=TRUE;					LOAD_STEP_NEXT:=30;					LOAD_STEP_DELAY_TIME:=T#200ms;					loadStage := 200 ;				END_IF;			30: //foup latch off				PodFoupLatchoffVal_Out_b := TRUE ;				PodFoupLatchonVal_Out_b := FALSE ;				KeyStatusTON1(In:=PodFoupLatchoffVal_Out_b, PT:=T#1s(*, Q=>, ET=>*));				(*LoadOTAlm2(	In:= PodFoupLatchoffVal_Out_b AND NOT PodSeqAlmRst_In_b , PT:= T#60s , Q=> LoadOTAlm_Out_b [*, ET=>*] );*)				IF PodFoupLatchoffVal_Out_b AND FoupLatchOffPos_In_b AND NOT FoupLatchOnPos_In_b AND NOT LoadOTAlm_Out_b AND KeyStatusTON1.Q THEN					LOAD_STEP_DELAY_EN:=TRUE;					LOAD_STEP_NEXT:=31;					LOAD_STEP_DELAY_TIME:=T#200ms;					loadStage := 200 ;				END_IF;						31://N2 Purge Judge				IF N2PurgeBypassEN_In_b AND O2Check_EN					THEN 					loadStage := 40 ;				ELSE					loadStage := 50;				END_IF;									40://pod门板x轴避让归位   N2 SEAL				PodDrXaxisAvoidClsVal_Out_b :=TRUE ;				PodDrXaxisAvoidOpVal_Out_b := FALSE ;				(*UnloadOTAlm(	In:= PodDrXaxisAvoidClsVal_Out_b AND NOT PodSeqAlmRst_In_b , PT:= T#60s , Q=> UnloadOTAlm_Out_b [*, ET=>*] );*)				IF PodDrXaxisAvoidClsVal_Out_b AND PodDrXaxisAvoidInDnPos_In_b AND NOT PodDrXaxisAvoidInUpPos_In_b AND NOT UnloadOTAlm_Out_b THEN 					LOAD_STEP_DELAY_EN:=TRUE;					LOAD_STEP_NEXT:=41;					LOAD_STEP_DELAY_TIME:=T#0ms;					loadStage := 41 ;				END_IF;			41: //Pod 门板移动 release				PodRealseVal_Out_b := TRUE ;				PodSealVal_Out_b := FALSE ;				(*LoadOTAlm3(	In:= PodRealseVal_Out_b AND NOT PodSeqAlmRst_In_b , PT:= T#60s , Q=> LoadOTAlm_Out_b [*, ET=>*] );*)						IF PodRealseVal_Out_b AND FoupInRlsPos_In_b AND NOT FoupInSealPos_In_b AND NOT LoadOTAlm_Out_b THEN					N2PurgePodClsVal_Out_b := TRUE ;					LOAD_STEP_DELAY_EN:=TRUE;					LOAD_STEP_NEXT:=42;					LOAD_STEP_DELAY_TIME:=T#0ms;					loadStage := 42 ;				END_IF;			42: //N2 Purge and O2 detect				N2PurgePodOpVal_Out_b := TRUE ;				N2PurgePodClsVal_Out_b :=FALSE ;				O2CheckVal_Out_b := TRUE ;				IF N2PurgePodOpVal_Out_b AND N2PurgeValOpPos_In_b AND NOT N2PurgeValClPos_In_b AND O2Check_Done_In_b AND NOT LoadOTAlm_Out_b THEN					LOAD_STEP_DELAY_EN:=TRUE;					LOAD_STEP_NEXT:=43;					LOAD_STEP_DELAY_TIME:=T#0ms;					loadStage := 43 ;				END_IF;			43://Pod 门板移动 seal				PodSealVal_Out_b := TRUE ;				PodRealseVal_Out_b := FALSE ;				(*UnloadOTAlm(	In:= PodSealVal_Out_b AND NOT PodSeqAlmRst_In_b , PT:= T#60s , Q=> UnloadOTAlm_Out_b [*, ET=>*] );*)				IF PodSealVal_Out_b AND FoupInSealPos_In_b AND NOT FoupInRlsPos_In_b AND NOT UnloadOTAlm_Out_b THEN					N2PurgePodClsVal_Out_b := TRUE ;					LOAD_STEP_DELAY_EN:=TRUE;					LOAD_STEP_NEXT:=50;					LOAD_STEP_DELAY_TIME:=T#200ms;					loadStage := 200 ;				END_IF;			50: // X轴避让				PodDrXaxisAvoidOpVal_Out_b := TRUE ;				PodDrXaxisAvoidClsVal_Out_b := FALSE ;				(*LoadOTAlm4(	In:= PodDrXaxisAvoidOpVal_Out_b AND NOT PodSeqAlmRst_In_b , PT:= T#60s , Q=> LoadOTAlm_Out_b [*, ET=>*] );*)				IF PodDrXaxisAvoidOpVal_Out_b AND PodDrXaxisAvoidInUpPos_In_b AND NOT PodDrXaxisAvoidInDnPos_In_b AND NOT LoadOTAlm_Out_b THEN 					LOAD_STEP_DELAY_EN:=TRUE;					LOAD_STEP_NEXT:=51;					LOAD_STEP_DELAY_TIME:=T#0ms;					loadStage := 51 ;				END_IF;			51: //Pod 门板移动 release				PodRealseVal_Out_b := TRUE ;				PodSealVal_Out_b := FALSE ;				(*LoadOTAlm3(	In:= PodRealseVal_Out_b AND NOT PodSeqAlmRst_In_b , PT:= T#60s , Q=> LoadOTAlm_Out_b [*, ET=>*] );*)				IF PodRealseVal_Out_b AND FoupInRlsPos_In_b AND NOT FoupInSealPos_In_b AND NOT LoadOTAlm_Out_b THEN					LOAD_STEP_DELAY_EN:=TRUE;					LOAD_STEP_NEXT:=52;					LOAD_STEP_DELAY_TIME:=T#200ms;					loadStage := 200 ;				END_IF;			52://X轴避让				PodDrXaxisAvoidOpVal_Out_b := TRUE ;				PodDrXaxisAvoidClsVal_Out_b := FALSE ;				//LoadOTAlm4(	In:= PodDrXaxisAvoidOpVal_Out_b AND NOT PodSeqAlmRst_In_b , PT:= T#60s , Q=> LoadOTAlm_Out_b [*, ET=>*] );				IF PodDrXaxisAvoidOpVal_Out_b AND PodDrXaxisAvoidInUpPos_In_b AND NOT PodDrXaxisAvoidInDnPos_In_b AND NOT LoadOTAlm_Out_b THEN 					LOAD_STEP_DELAY_EN:=TRUE;					LOAD_STEP_NEXT:=60;					LOAD_STEP_DELAY_TIME:=T#200ms;					loadStage := 200 ;				END_IF;							 (*53://vacuum off				KeyStatusTON(In:=FALSE, PT:=T#1s[*, Q=>, ET=>*]);				PodVacClsVal_Out_b := TRUE ;				PodVacOpVal_Out_b := FALSE ;				IF PodVacClsVal_Out_b AND PodVacStatus_In_b THEN					LoadStage := 60 ;				END_IF; *)			60://Y轴移动				PodDrYOpVal_Out_b := TRUE ;				PodDrYClsVal_Out_b := FALSE ;				(*LoadOTAlm5(	In:= PodDrYOpVal_Out_b AND NOT PodSeqAlmRst_In_b , PT:= T#60s , Q=> UnloadOTAlm_Out_b [*, ET=>*] );*)				IF PodDrYOpVal_Out_b AND PodDrYOpPos_In_b AND NOT PodDrYClsPos_In_b AND NOT UnloadOTAlm_Out_b THEN					LOAD_STEP_DELAY_EN:=TRUE;					LOAD_STEP_NEXT:=100;					LOAD_STEP_DELAY_TIME:=T#0ms;					loadStage := 100 ;				END_IF;			100://Load done				LoadOTAlm(	In:= FALSE , PT:= T#60s , Q=> LoadOTAlm_Out_b (*, ET=>*));				PodLoadRunning_b := FALSE ;				PodLoadDone_Out_b := TRUE ;									200://each step delay time				 IF LOAD_STEP_DELAY.Q					 THEN					 LOAD_STEP_DELAY_EN:=FALSE;					 loadStage := LOAD_STEP_NEXT ;				 END_IF;		END_CASE;	END_IF;																						PodRunning_Out_b := PodLoadRunning_b OR PodUnloadRunning_b ;		END_IF;]]></ST>    </Implementation>    <LineIds Name="FIMSSEQUENCE">      <LineId Id="17" Count="36" />      <LineId Id="412" Count="0" />      <LineId Id="54" Count="78" />      <LineId Id="134" Count="11" />      <LineId Id="411" Count="0" />      <LineId Id="146" Count="154" />      <LineId Id="302" Count="29" />      <LineId Id="9" Count="0" />    </LineIds>  </POU></TcPlcObject>
 |