FUNCTION_BLOCK IJ_EAF
VAR_EXTERNAL

END_VAR

VAR_INPUT
EAF_STRUCT_IN  :EAF_IN;
END_VAR

VAR_OUTPUT
EAF_STRUCT_OUT :EAF_OUT;
END_VAR

VAR

EAF_RunTime		 :BS_Runtime;
EAF_DevC		 :BS_DevC;
EAF_WVCTEMP		 :REAL;
RunTon1         	 :TON;
RunTof1         	 :TOF;
DevCheck1_time  	 :TIME :=t#15s;  (*设备运行状态反馈*)
Status0				 :INT;
Status1				 :INT;


END_VAR
(* 
时  间:20200220
版  本:1.0
作  者:
名  称:排风机组程序功能块
说  明:
		输入变量
		EAF_STRUCT_IN.
		CM              :BOOL; 运行模式 0手动 1联动 
		Run             :BOOL; 运行状态
		Auto            :BOOL; 自动状态
		Fault           :BOOL; 故障状态
		Control         :BOOL; 程序控制
		COSET			:REAL; CO设定
		COES			:REAL; 车库CO值
		ISO1   			:BOOL; 运行故障反馈隔离
		RST      		:BOOL; 运行时间累计重置
		RSTV			:REAL; 运行时间累计重置值
	
		EAF_STRUCT_OUT.
		Control         :BOOL; 启停控制
		RH        		:REAL; 运行小时
		SN        		:INT ; 设备状态代码
		
		包含以下几点功能
		1.运行故障回检,输出故障代码,支持故障报警隔离
		2.手动/联动运行模式控制
		3.运行时间累计
				
备  注:
依赖块:
		BS_Runtime;
        BS_DevC;
*)

(******************************************************运行故障回检******************************************************)
RunTon1( IN:=EAF_STRUCT_IN.Control , PT:=DevCheck1_time);
RunTof1( IN:=EAF_STRUCT_IN.Control , PT:=DevCheck1_time);


(*设备电气控制箱控制指令与设备运行反馈不一致故障检测,检测故障产生原因电箱没电、断路器断开、中间继电器与接触器故障等为Status0*);
if EAF_STRUCT_IN.ISO1=0 then
	if RunTon1.q or not RunTof1.q then		
		if EAF_STRUCT_OUT.Control<>EAF_STRUCT_IN.Run then
			Status0:=1;
			else
			Status0:=0;
		end_if;
		if EAF_STRUCT_IN.Fault=1 then
			Status1:=1;
			else
			Status1:=0;
		end_if;
	end_if;
	else
	Status0:=0;
	Status1:=0;
end_if;

(*输出故障代码*)
if EAF_STRUCT_OUT.Control<>0 then
	EAF_STRUCT_OUT.SN := Status0 * 1 + Status1* 4 ;
	else
	EAF_STRUCT_OUT.SN := 0 ;
end_if;


(******************************************************手动开关控制******************************************************)
if EAF_STRUCT_IN.CM=0 then	
   if EAF_STRUCT_IN.Control=1 then	
      EAF_STRUCT_OUT.Control:=1;
	else EAF_STRUCT_OUT.Control:=0;
   end_if;
end_if;

(******************************************************联动开关控制******************************************************)
if EAF_STRUCT_IN.CM=1 then		
   EAF_DevC(RUN :=EAF_STRUCT_IN.CM , SET :=EAF_STRUCT_IN.COSET , FB :=EAF_STRUCT_IN.COES , DEAD_BAND :=10.0 , DELAY :=t#20s   |  EAF_STRUCT_OUT.Control:= DevC);
end_if;


(******************************************************运行时间累计******************************************************)
EAF_RunTime(RUN :=EAF_STRUCT_IN.Run , RUNTIMESET :=EAF_STRUCT_IN.RSTV , RUNTIMERST :=EAF_STRUCT_IN.RST  |  EAF_STRUCT_OUT.RH:= RUNTIME);

END_FUNCTION_BLOCK