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