FUNCTION_BLOCK IJ_DAHUPID
VAR_EXTERNAL

END_VAR

VAR_INPUT
DAHU_STRUCT_IN  :DAHU_IN;
END_VAR

VAR_OUTPUT
DAHU_STRUCT_OUT :DAHU_OUT;
END_VAR

VAR

DAHU_SPID       	 :BS_PID;
DAHU_WPID			 :BS_PID;
DAHU_RunTime		 :BS_Runtime;
DAHU_WVCTEMP		 :REAL;
RunTon1         	 :TON;
RunTon2         	 :TON;
RunTof1         	 :TOF;
RunTof2         	 :TOF;
DevCheck1_time  	 :TIME :=t#15s;  (*璁惧杩愯鐘舵€佸弽棣�*)
DevCheck2_time  	 :TIME :=t#15s;  (*璁惧杩愯鐘舵€佸弽棣�*)
Status0				 :INT;
Status1				 :INT;
Status2				 :INT;
Status3				 :INT;
DAHU_SPID_VP		 :REAL;
DAHU_SPID_VI		 :REAL;
DAHU_WPID_VP		 :REAL;
DAHU_WPID_VI		 :REAL;
PID_in				 :BOOL;
PID_timer			 :TON;

END_VAR

(*Automatically declared*)
VAR_EXTERNAL
END_VAR
(** {*  **)
(**  **)
(** 时  间:20200603 **)
(** 版  本:1.3 **)
(** 作  者:姚立 **)
(** 名  称:吾悦定制吊顶空调机组程序功能块 **)
(** 说  明: **)
(** 		修正设定温度与目标温度关系为负值时,水阀输出0 **)
(** 		 **)
(** 		输入变量 **)
(** 		DAHU_STRUCT_IN. **)
(** 		SM              :INT ; 		季节模式 0夏季 1冬季 2过渡  **)
(** 		Run             :BOOL; 		运行状态 **)
(** 		Fault           :BOOL; 		故障状态 **)
(** 		Auto            :BOOL; 		自动状态 **)
(** 		Control         :BOOL; 		程序控制 **)
(** 		TSET			:REAL; 		温度设定 **)
(** 		WVMC			:BOOL; 		水阀手动控制 **)
(** 		WVMV    		:REAL; 		水阀手动控制值 **)
(** 		RTS         	:REAL; 		回风温度 **)
(** 		RST      		:BOOL; 		运行时间累计重置 **)
(** 		RSTV			:REAL; 		运行时间累计重置值 **)
(** 		FPS 			:BOOL; 		风机压差 **)
(** 		ISO1   			:BOOL; 		运行故障反馈隔离 **)
(** 		ISO2   			:BOOL; 		风机压差反馈隔离 **)
(** 		VP				:REAL; 		PI设定值P **)
(** 		VI				:REAL; 		PI设定值I **)
(** 	 **)
(** 		DAHU_STRUCT_OUT. **)
(** 		WVCS     		:INT ; 水阀控制转换值,放大100倍 **)
(** 		Control         :BOOL; 启停控制 **)
(** 		RH        		:REAL; 运行小时 **)
(** 		SN        		:INT ; 设备状态代码	 **)
(** 		 **)
(** 		包含以下几点功能 **)
(** 		1.运行故障回检,输出故障代码,支持故障报警隔离 **)
(** 		2.水阀PID调节/手动调节 **)
(** 		3.运行时间累计 **)
(** 				 **)
(** 备  注: **)
(** 依赖块: **)
(** 		BS_PID; **)
(** 		BS_Runtime; **)
(**  **)
(** *} **)
(**  **)
(** {******************************************************运行故障回检******************************************************} **)
(** RunTon1( IN:=DAHU_STRUCT_IN.Control , PT:=DevCheck1_time ); **)
	(* call - Stmt *)
	CAL RunTon1 (
		IN := DAHU_STRUCT_IN.Control,
		PT := DevCheck1_time
	)

(** RunTof1( IN:=DAHU_STRUCT_IN.Control , PT:=DevCheck1_time ); **)
	(* call - Stmt *)
	CAL RunTof1 (
		IN := DAHU_STRUCT_IN.Control,
		PT := DevCheck1_time
	)

(** RunTon2( IN:=DAHU_STRUCT_IN.Control , PT:=DevCheck2_time ); **)
	(* call - Stmt *)
	CAL RunTon2 (
		IN := DAHU_STRUCT_IN.Control,
		PT := DevCheck2_time
	)

(** RunTof2( IN:=DAHU_STRUCT_IN.Control , PT:=DevCheck2_time ); **)
	(* call - Stmt *)
	CAL RunTof2 (
		IN := DAHU_STRUCT_IN.Control,
		PT := DevCheck2_time
	)

(**  **)
(** {*设备电气控制箱控制指令与设备运行反馈不一致故障检测,检测故障产生原因电箱没电、断路器断开、中间继电器与接触器故障等为Status0*}; **)
(** DAHU_STRUCT_OUT.Control:=DAHU_STRUCT_IN.Control; **)
	(* assign - Stmt *)
	LD DAHU_STRUCT_IN.Control
	ST DAHU_STRUCT_OUT.Control

(** if DAHU_STRUCT_IN.ISO1=0 then **)
	(* if - Cond *)
	LD DAHU_STRUCT_IN.ISO1
	EQ 0
	JMPCN ODK_SKIP_000000000000001_000000000000001

		(* then - Stmts *)

(** 	if RunTon1.q or not RunTof1.q then		 **)
		(* if - Cond *)
		LD RunTon1.q
		OR ( RunTof1.q
			NOT
		)
		JMPCN ODK_SKIP_000000000000002_000000000000001

			(* then - Stmts *)

(** 		if DAHU_STRUCT_OUT.Control<>DAHU_STRUCT_IN.Run then **)
			(* if - Cond *)
			LD DAHU_STRUCT_OUT.Control
			NE DAHU_STRUCT_IN.Run
			JMPCN ODK_SKIP_000000000000003_000000000000001

				(* then - Stmts *)

(** 			Status0:=1; **)
				(* assign - Stmt *)
				LD 1
				ST Status0

				JMP ODK_END_IF_000000000000003

(** 			else **)
			(* else *) 
			ODK_SKIP_000000000000003_000000000000001:

				(* else - Stmts *)

(** 			Status0:=0; **)
				(* assign - Stmt *)
				LD 0
				ST Status0

(** 		end_if; **)
			(* if - End *) 
			ODK_END_IF_000000000000003:

(** 		if DAHU_STRUCT_IN.Fault=1 then **)
			(* if - Cond *)
			LD DAHU_STRUCT_IN.Fault
			EQ 1
			JMPCN ODK_SKIP_000000000000004_000000000000001

				(* then - Stmts *)

(** 			Status1:=1; **)
				(* assign - Stmt *)
				LD 1
				ST Status1

				JMP ODK_END_IF_000000000000004

(** 			else **)
			(* else *) 
			ODK_SKIP_000000000000004_000000000000001:

				(* else - Stmts *)

(** 			Status1:=0; **)
				(* assign - Stmt *)
				LD 0
				ST Status1

(** 		end_if; **)
			(* if - End *) 
			ODK_END_IF_000000000000004:

			JMP ODK_END_IF_000000000000002

(** 	end_if; **)
		(* if - End *) 
		ODK_SKIP_000000000000002_000000000000001:
		ODK_END_IF_000000000000002:

		JMP ODK_END_IF_000000000000001

(** 	else **)
	(* else *) 
	ODK_SKIP_000000000000001_000000000000001:

		(* else - Stmts *)

(** 	Status0:=0; **)
		(* assign - Stmt *)
		LD 0
		ST Status0

(** 	Status1:=0; **)
		(* assign - Stmt *)
		LD 0
		ST Status1

(** end_if; **)
	(* if - End *) 
	ODK_END_IF_000000000000001:

(**  **)
(** {*设备电气控制箱控制指令与设备运行反馈不一致故障检测,检测故障产生风机压差无回检信号*}; **)
(** if DAHU_STRUCT_IN.ISO2=0 then **)
	(* if - Cond *)
	LD DAHU_STRUCT_IN.ISO2
	EQ 0
	JMPCN ODK_SKIP_000000000000005_000000000000001

		(* then - Stmts *)

(** 	if RunTon2.q or not RunTof2.q then		 **)
		(* if - Cond *)
		LD RunTon2.q
		OR ( RunTof2.q
			NOT
		)
		JMPCN ODK_SKIP_000000000000006_000000000000001

			(* then - Stmts *)

(** 		if DAHU_STRUCT_OUT.Control<>DAHU_STRUCT_IN.FPS then **)
			(* if - Cond *)
			LD DAHU_STRUCT_OUT.Control
			NE DAHU_STRUCT_IN.FPS
			JMPCN ODK_SKIP_000000000000007_000000000000001

				(* then - Stmts *)

(** 			Status2:=1; **)
				(* assign - Stmt *)
				LD 1
				ST Status2

				JMP ODK_END_IF_000000000000007

(** 			else **)
			(* else *) 
			ODK_SKIP_000000000000007_000000000000001:

				(* else - Stmts *)

(** 			Status2:=0; **)
				(* assign - Stmt *)
				LD 0
				ST Status2

(** 		end_if; **)
			(* if - End *) 
			ODK_END_IF_000000000000007:

			JMP ODK_END_IF_000000000000006

(** 	end_if; **)
		(* if - End *) 
		ODK_SKIP_000000000000006_000000000000001:
		ODK_END_IF_000000000000006:

		JMP ODK_END_IF_000000000000005

(** 	else **)
	(* else *) 
	ODK_SKIP_000000000000005_000000000000001:

		(* else - Stmts *)

(** 	Status2:=0; **)
		(* assign - Stmt *)
		LD 0
		ST Status2

(** end_if; **)
	(* if - End *) 
	ODK_END_IF_000000000000005:

(**  **)
(**  **)
(** {*输出故障代码*} **)
(** if DAHU_STRUCT_OUT.Control<>0 then **)
	(* if - Cond *)
	LD DAHU_STRUCT_OUT.Control
	NE 0
	JMPCN ODK_SKIP_000000000000008_000000000000001

		(* then - Stmts *)

(** 	DAHU_STRUCT_OUT.SN := Status0*1 + Status1*4 + Status2*8; **)
		(* assign - Stmt *)
		LD Status0
		MUL 1
		ADD ( Status1
			MUL 4
		)
		ADD ( Status2
			MUL 8
		)
		ST DAHU_STRUCT_OUT.SN

		JMP ODK_END_IF_000000000000008

(** 	else **)
	(* else *) 
	ODK_SKIP_000000000000008_000000000000001:

		(* else - Stmts *)

(** 	DAHU_STRUCT_OUT.SN := 0 ; **)
		(* assign - Stmt *)
		LD 0
		ST DAHU_STRUCT_OUT.SN

(** end_if; **)
	(* if - End *) 
	ODK_END_IF_000000000000008:

(**  **)
(** {******************************************************水阀控制******************************************************} **)
(**  **)
(** PID_in:= not PID_timer.q; **)
	(* assign - Stmt *)
	LD PID_timer.q
	NOT
	ST PID_in

(** PID_timer(in:=PID_in, pt:=t#1s );{*PID积分时间*} **)
	(* call - Stmt *)
	CAL PID_timer (
		IN := PID_in,
		PT := t#1s
	)

(**  **)
(** if DAHU_STRUCT_IN.WVMC=0 then **)
	(* if - Cond *)
	LD DAHU_STRUCT_IN.WVMC
	EQ 0
	JMPCN ODK_SKIP_000000000000009_000000000000001

		(* then - Stmts *)

(** 	if DAHU_STRUCT_IN.Run=1 then **)
		(* if - Cond *)
		LD DAHU_STRUCT_IN.Run
		EQ 1
		JMPCN ODK_SKIP_00000000000000A_000000000000001

			(* then - Stmts *)

(** 		if DAHU_STRUCT_IN.VP<>0.0 and DAHU_STRUCT_IN.VI<>0.0 then **)
			(* if - Cond *)
			LD DAHU_STRUCT_IN.VP
			NE 0.0
			AND ( DAHU_STRUCT_IN.VI
				NE 0.0
			)
			JMPCN ODK_SKIP_00000000000000B_000000000000001

				(* then - Stmts *)

(** 		DAHU_SPID_VP:=-DAHU_STRUCT_IN.VP; **)
				(* assign - Stmt *)
				LD DAHU_STRUCT_IN.VP
				NEG
				ST DAHU_SPID_VP

(** 		DAHU_SPID_VI:=-DAHU_STRUCT_IN.VI; **)
				(* assign - Stmt *)
				LD DAHU_STRUCT_IN.VI
				NEG
				ST DAHU_SPID_VI

(** 		DAHU_WPID_VP:=DAHU_STRUCT_IN.VP; **)
				(* assign - Stmt *)
				LD DAHU_STRUCT_IN.VP
				ST DAHU_WPID_VP

(** 		DAHU_WPID_VI:=DAHU_STRUCT_IN.VI; **)
				(* assign - Stmt *)
				LD DAHU_STRUCT_IN.VI
				ST DAHU_WPID_VI

				JMP ODK_END_IF_00000000000000B

(** 		else **)
			(* else *) 
			ODK_SKIP_00000000000000B_000000000000001:

				(* else - Stmts *)

(** 		DAHU_SPID_VP:=-30.0; **)
				(* assign - Stmt *)
				LD -30.0
				ST DAHU_SPID_VP

(** 		DAHU_SPID_VI:=-150.0; **)
				(* assign - Stmt *)
				LD -150.0
				ST DAHU_SPID_VI

(** 		DAHU_WPID_VP:=30.0; **)
				(* assign - Stmt *)
				LD 30.0
				ST DAHU_WPID_VP

(** 		DAHU_WPID_VI:=150.0; **)
				(* assign - Stmt *)
				LD 150.0
				ST DAHU_WPID_VI

(** 		end_if; **)
			(* if - End *) 
			ODK_END_IF_00000000000000B:

(** 		{*制冷季*} **)
(** 		if DAHU_STRUCT_IN.SM=0 then		 **)
			(* if - Cond *)
			LD DAHU_STRUCT_IN.SM
			EQ 0
			JMPCN ODK_SKIP_00000000000000C_000000000000001

				(* then - Stmts *)

(** 			if  DAHU_STRUCT_IN.RTS-DAHU_STRUCT_IN.TSET>=3.0 then **)
				(* if - Cond *)
				LD DAHU_STRUCT_IN.RTS
				SUB DAHU_STRUCT_IN.TSET
				GE 3.0
				JMPCN ODK_SKIP_00000000000000D_000000000000001

					(* then - Stmts *)

(** 				DAHU_WVCTEMP:=100.0; **)
					(* assign - Stmt *)
					LD 100.0
					ST DAHU_WVCTEMP

					JMP ODK_END_IF_00000000000000D

(** 			end_if; **)
				(* if - End *) 
				ODK_SKIP_00000000000000D_000000000000001:
				ODK_END_IF_00000000000000D:

(** 			if  DAHU_STRUCT_IN.RTS-DAHU_STRUCT_IN.TSET<=0.0 then **)
				(* if - Cond *)
				LD DAHU_STRUCT_IN.RTS
				SUB DAHU_STRUCT_IN.TSET
				LE 0.0
				JMPCN ODK_SKIP_00000000000000E_000000000000001

					(* then - Stmts *)

(** 				DAHU_WVCTEMP:=0.0; **)
					(* assign - Stmt *)
					LD 0.0
					ST DAHU_WVCTEMP

					JMP ODK_END_IF_00000000000000E

(** 			end_if; **)
				(* if - End *) 
				ODK_SKIP_00000000000000E_000000000000001:
				ODK_END_IF_00000000000000E:

(** 			if PID_timer.q then **)
				(* if - Cond *)
				LD PID_timer.q
				JMPCN ODK_SKIP_00000000000000F_000000000000001

					(* then - Stmts *)

(** 				DAHU_SPID(RUN:= DAHU_STRUCT_IN.RUN,STOP_D:=1,STOP_I:=0,SET:=DAHU_STRUCT_IN.TSET,FB:=DAHU_STRUCT_IN.RTS,KFB:=1.0,KP:=DAHU_SPID_VP,TI:=DAHU_SPID_VI,TD:=-1.0,DEAD_BAND:=0.2,YMAX:=100.0,YMIN:=0.0 | DAHU_WVCTEMP:=OUT); **)
					(* call - Stmt *)
					CAL DAHU_SPID (
						Run := DAHU_STRUCT_IN.Run,
						STOP_D := 1,
						STOP_I := 0,
						SET := DAHU_STRUCT_IN.TSET,
						FB := DAHU_STRUCT_IN.RTS,
						KFB := 1.0,
						KP := DAHU_SPID_VP,
						TI := DAHU_SPID_VI,
						TD := -1.0,
						DEAD_BAND := 0.2,
						YMAX := 100.0,
						YMIN := 0.0
						|
						DAHU_WVCTEMP := OUT
					)

					JMP ODK_END_IF_00000000000000F

(** 			end_if; **)
				(* if - End *) 
				ODK_SKIP_00000000000000F_000000000000001:
				ODK_END_IF_00000000000000F:

				JMP ODK_END_IF_00000000000000C

(** 			 **)
(** 		end_if; **)
			(* if - End *) 
			ODK_SKIP_00000000000000C_000000000000001:
			ODK_END_IF_00000000000000C:

(** 		{*制热季*} **)
(** 		if DAHU_STRUCT_IN.SM=1 then **)
			(* if - Cond *)
			LD DAHU_STRUCT_IN.SM
			EQ 1
			JMPCN ODK_SKIP_00000000000000G_000000000000001

				(* then - Stmts *)

(** 			if  DAHU_STRUCT_IN.TSET-DAHU_STRUCT_IN.RTS>=3.0 then **)
				(* if - Cond *)
				LD DAHU_STRUCT_IN.TSET
				SUB DAHU_STRUCT_IN.RTS
				GE 3.0
				JMPCN ODK_SKIP_00000000000000H_000000000000001

					(* then - Stmts *)

(** 				DAHU_WVCTEMP:=100.0; **)
					(* assign - Stmt *)
					LD 100.0
					ST DAHU_WVCTEMP

					JMP ODK_END_IF_00000000000000H

(** 			end_if; **)
				(* if - End *) 
				ODK_SKIP_00000000000000H_000000000000001:
				ODK_END_IF_00000000000000H:

(** 			if  DAHU_STRUCT_IN.TSET-DAHU_STRUCT_IN.RTS<=0.0 then **)
				(* if - Cond *)
				LD DAHU_STRUCT_IN.TSET
				SUB DAHU_STRUCT_IN.RTS
				LE 0.0
				JMPCN ODK_SKIP_00000000000000I_000000000000001

					(* then - Stmts *)

(** 				DAHU_WVCTEMP:=0.0; **)
					(* assign - Stmt *)
					LD 0.0
					ST DAHU_WVCTEMP

					JMP ODK_END_IF_00000000000000I

(** 			end_if; **)
				(* if - End *) 
				ODK_SKIP_00000000000000I_000000000000001:
				ODK_END_IF_00000000000000I:

(** 			if PID_timer.q then **)
				(* if - Cond *)
				LD PID_timer.q
				JMPCN ODK_SKIP_00000000000000J_000000000000001

					(* then - Stmts *)

(** 				DAHU_WPID(RUN:= DAHU_STRUCT_IN.RUN,STOP_D:=1,STOP_I:=0,SET:=DAHU_STRUCT_IN.TSET,FB:=DAHU_STRUCT_IN.RTS,KFB:=1.0,KP:=DAHU_WPID_VP,TI:=DAHU_WPID_VI,TD:=1.0,DEAD_BAND:=0.2,YMAX:=100.0,YMIN:=0.0 | DAHU_WVCTEMP:=OUT); **)
					(* call - Stmt *)
					CAL DAHU_WPID (
						Run := DAHU_STRUCT_IN.Run,
						STOP_D := 1,
						STOP_I := 0,
						SET := DAHU_STRUCT_IN.TSET,
						FB := DAHU_STRUCT_IN.RTS,
						KFB := 1.0,
						KP := DAHU_WPID_VP,
						TI := DAHU_WPID_VI,
						TD := 1.0,
						DEAD_BAND := 0.2,
						YMAX := 100.0,
						YMIN := 0.0
						|
						DAHU_WVCTEMP := OUT
					)

					JMP ODK_END_IF_00000000000000J

(** 			end_if; **)
				(* if - End *) 
				ODK_SKIP_00000000000000J_000000000000001:
				ODK_END_IF_00000000000000J:

				JMP ODK_END_IF_00000000000000G

(** 		end_if; **)
			(* if - End *) 
			ODK_SKIP_00000000000000G_000000000000001:
			ODK_END_IF_00000000000000G:

(** 		{*过渡季*} **)
(** 		if DAHU_STRUCT_IN.SM=2 then 	 **)
			(* if - Cond *)
			LD DAHU_STRUCT_IN.SM
			EQ 2
			JMPCN ODK_SKIP_00000000000000K_000000000000001

				(* then - Stmts *)

(** 			DAHU_WVCTEMP:=0.0; **)
				(* assign - Stmt *)
				LD 0.0
				ST DAHU_WVCTEMP

				JMP ODK_END_IF_00000000000000K

(** 		end_if; **)
			(* if - End *) 
			ODK_SKIP_00000000000000K_000000000000001:
			ODK_END_IF_00000000000000K:

			JMP ODK_END_IF_00000000000000A

(** 	else **)
		(* else *) 
		ODK_SKIP_00000000000000A_000000000000001:

			(* else - Stmts *)

(** 		DAHU_WVCTEMP:=0.0;		 **)
			(* assign - Stmt *)
			LD 0.0
			ST DAHU_WVCTEMP

(** 	end_if; **)
		(* if - End *) 
		ODK_END_IF_00000000000000A:

		JMP ODK_END_IF_000000000000009

(** else **)
	(* else *) 
	ODK_SKIP_000000000000009_000000000000001:

		(* else - Stmts *)

(** 	DAHU_WVCTEMP:=DAHU_STRUCT_IN.WVMV; **)
		(* assign - Stmt *)
		LD DAHU_STRUCT_IN.WVMV
		ST DAHU_WVCTEMP

(** end_if; **)
	(* if - End *) 
	ODK_END_IF_000000000000009:

(**  **)
(** {*水阀赋值量程转换*} **)
(** DAHU_STRUCT_OUT.WVCS:=REAL_TO_INT(DAHU_WVCTEMP*100.0); **)
	(* assign - Stmt *)
	LD DAHU_WVCTEMP
	MUL 100.0
	REAL_TO_INT 
	ST DAHU_STRUCT_OUT.WVCS

(**  **)
(** {******************************************************运行时间累计******************************************************} **)
(** DAHU_RunTime(RUN :=DAHU_STRUCT_IN.Run , RUNTIMESET :=DAHU_STRUCT_IN.RSTV , RUNTIMERST :=DAHU_STRUCT_IN.RST ,RunTimeRec_In :=DAHU_STRUCT_OUT.RH |  DAHU_STRUCT_OUT.RH:= RUNTIME); **)
	(* call - Stmt *)
	CAL DAHU_RunTime (
		Run := DAHU_STRUCT_IN.Run,
		RUNTIMESET := DAHU_STRUCT_IN.RSTV,
		RUNTIMERST := DAHU_STRUCT_IN.RST,
		RunTimeRec_In := DAHU_STRUCT_OUT.RH
		|
		DAHU_STRUCT_OUT.RH := RUNTIME
	)

(**  **)
(**  **)

END_FUNCTION_BLOCK