FUNCTION_BLOCK BS_EVC
VAR_EXTERNAL

END_VAR

VAR_INPUT
RUN   		 : BOOL ;		(* PID鍔熻兘鍧楀惎鐢� *)
SET   		 : REAL ;		(* 璋冭妭鐩爣鍊� *)
FB 	  		 : REAL ;		(* 璋冭妭鐩爣鍊肩殑鍙嶉鍊� *)
Dead_Band    : REAL :=0.5 ;	(* 姝诲尯 *)	
Delay		 : TIME :=t#30s;(* 寤舵椂鏃堕棿 *)
SW			 : INT ;		(* 瀛h妭妯″紡 0澶忓 1鍐 2杩囨浮 *)
END_VAR

VAR_OUTPUT
EVC			 : BOOL ;		(* 鐢电闃€鎺у埗 *)
END_VAR

VAR
ton1 		 : TON  ;
ton2 		 : TON  ;
END_VAR

(*Automatically declared*)
VAR_EXTERNAL
END_VAR
(** {*  **)
(**  **)
(** 时  间:20191003 **)
(** 版  本:1.0 **)
(** 作  者:姚立 **)
(** 名  称:电磁阀/开关阀值控程序 **)
(** 说  明:用于电磁阀/开关阀类的开关量阀门的值控程序 **)
(** 备  注:适用于温度、湿度等控制 **)
(** 依赖块:无 **)
(**  **)
(** 	输入变量 **)
(** 	RUN   		 : BOOL ;		 PID功能块启用  **)
(** 	SET   		 : REAL ;		 调节目标值  **)
(** 	FB 	  		 : REAL ;		 调节目标值的反馈值 **)
(** 	Dead_Band    : REAL ;	 	 死区,默认0.5	 **)
(** 	Delay		 : TIME ; 		 延时时间,默认30S **)
(** 	SW			 : INT ;		 季节模式 0夏季 1冬季 **)
(** 	输出变量  **)
(** 	EVC			 : BOOL ;		 电磁阀/开关阀控制输出 **)
(**  **)
(** *} **)
(**  **)
(** {*  **)
(** 	夏季:FB>SET EVC:=1 **)
(** 		  FB-(SET+D)>=0 EVC:=1 **)
(** 	      FB-(SET-D)<0  EVC:=0 **)
(** 	冬季:SET>FB EVC:=1 **)
(** 		  (SET-D)-FB>=0 EVC:=1 **)
(** 	      (SET+D)-FB<0  EVC:=0		 **)
(** *} **)
(** ton1(pt:=Delay); **)
	(* call - Stmt *)
	CAL ton1 (
		pt := Delay
	)

(** ton2(pt:=Delay); **)
	(* call - Stmt *)
	CAL ton2 (
		pt := Delay
	)

(**  **)
(** if RUN =1 then **)
	(* if - Cond *)
	LD RUN
	EQ 1
	JMPCN ODK_SKIP_000000000000001_000000000000001

		(* then - Stmts *)

(** 	if SW=0 then **)
		(* if - Cond *)
		LD SW
		EQ 0
		JMPCN ODK_SKIP_000000000000002_000000000000001

			(* then - Stmts *)

(** 		if FB-(SET+Dead_Band)>=0.0 then **)
			(* if - Cond *)
			LD FB
			SUB ( SET
				ADD Dead_Band
			)
			GE 0.0
			JMPCN ODK_SKIP_000000000000003_000000000000001

				(* then - Stmts *)

(** 			ton1.in:=1; **)
				(* assign - Stmt *)
				LD 1
				ST ton1.in

				JMP ODK_END_IF_000000000000003

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

				(* else - Stmts *)

(** 			ton1.in:=0; **)
				(* assign - Stmt *)
				LD 0
				ST ton1.in

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

(** 		if ton1.q=1 then **)
			(* if - Cond *)
			LD ton1.q
			EQ 1
			JMPCN ODK_SKIP_000000000000004_000000000000001

				(* then - Stmts *)

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

				JMP ODK_END_IF_000000000000004

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

(** 		if FB-(SET-Dead_Band)<0.0 then **)
			(* if - Cond *)
			LD FB
			SUB ( SET
				SUB Dead_Band
			)
			LT 0.0
			JMPCN ODK_SKIP_000000000000005_000000000000001

				(* then - Stmts *)

(** 			ton2.in:=1; **)
				(* assign - Stmt *)
				LD 1
				ST ton2.in

				JMP ODK_END_IF_000000000000005

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

				(* else - Stmts *)

(** 			ton2.in:=0; **)
				(* assign - Stmt *)
				LD 0
				ST ton2.in

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

(** 		if ton2.q=1 then **)
			(* if - Cond *)
			LD ton2.q
			EQ 1
			JMPCN ODK_SKIP_000000000000006_000000000000001

				(* then - Stmts *)

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

				JMP ODK_END_IF_000000000000006

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

			JMP ODK_END_IF_000000000000002

(** 	else **)
		(* else *) 
		ODK_SKIP_000000000000002_000000000000001:

			(* else - Stmts *)

(** 		if (SET-Dead_Band)-FB>=0.0 then **)
			(* if - Cond *)
			LD SET
			SUB Dead_Band
			SUB FB
			GE 0.0
			JMPCN ODK_SKIP_000000000000007_000000000000001

				(* then - Stmts *)

(** 			ton1.in:=1; **)
				(* assign - Stmt *)
				LD 1
				ST ton1.in

				JMP ODK_END_IF_000000000000007

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

				(* else - Stmts *)

(** 			ton1.in:=0; **)
				(* assign - Stmt *)
				LD 0
				ST ton1.in

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

(** 		if ton1.q=1 then **)
			(* if - Cond *)
			LD ton1.q
			EQ 1
			JMPCN ODK_SKIP_000000000000008_000000000000001

				(* then - Stmts *)

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

				JMP ODK_END_IF_000000000000008

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

(** 		if (SET+Dead_Band)-FB<0.0 then **)
			(* if - Cond *)
			LD SET
			ADD Dead_Band
			SUB FB
			LT 0.0
			JMPCN ODK_SKIP_000000000000009_000000000000001

				(* then - Stmts *)

(** 			ton2.in:=1; **)
				(* assign - Stmt *)
				LD 1
				ST ton2.in

				JMP ODK_END_IF_000000000000009

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

				(* else - Stmts *)

(** 			ton2.in:=0; **)
				(* assign - Stmt *)
				LD 0
				ST ton2.in

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

(** 		if ton2.q=1 then **)
			(* if - Cond *)
			LD ton2.q
			EQ 1
			JMPCN ODK_SKIP_00000000000000A_000000000000001

				(* then - Stmts *)

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

				JMP ODK_END_IF_00000000000000A

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

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

		JMP ODK_END_IF_000000000000001

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

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

END_FUNCTION_BLOCK