FUNCTION_BLOCK BS_DevScan VAR_EXTERNAL END_VAR VAR_INPUT Dev_Scan_Hex :DWORD; (*设备状态输入值,转化成二进制对应模块在线状态*) Dev_Array :ARRAY[0..31] of byte;(*设备状态通道输入*) END_VAR VAR_OUTPUT Dev_Status :DWORD; (*设备状态输出值,转化成二进制对应模块在线状态*) Dev_Ratio :REAL; (*设备在线比例*) Dev_Ready :BOOL; (*设备准备就绪,0为存在不运行模块,1为全部正常运行*) Dev_Total :INT; (*设备总计数量*) Dev_Error :INT; (*设备故障数量*) HeartVavle :int; END_VAR VAR i :UINT; Dev_Scan_temp :DWORD; Dev_Error_Flag :BOOL; Dev_Status_temp :DWORD; SHR_D :SHR_DWORD; SHR_L :SHL_DWORD; ton1 :ton; END_VAR (*Automatically declared*) VAR_EXTERNAL END_VAR (** {* **) (** **) (** ʱ 䣺20190905 **) (** 1.0 **) (** ߣҦ **) (** ƣ豸ɨ蹦ܿ **) (** ˵ ɨģ״̬ģֵȲ **) (** ע **) (** 飺 **) (** **) (** *} **) (** **) (** {*ʼ*} **) (** Dev_Error_Flag := 0; **) (* assign - Stmt *) LD 0 ST Dev_Error_Flag (** Dev_Status := 0; **) (* assign - Stmt *) LD 0 ST Dev_Status (** Dev_Total := 0; **) (* assign - Stmt *) LD 0 ST Dev_Total (** Dev_Error := 0; **) (* assign - Stmt *) LD 0 ST Dev_Error (** **) (** for i:= 0 to 31 by 1 do **) (* for - Init *) LD 0 ST i EQ 31 JMPC ODK_FOR_STMTS_000000000000001 (* for - Cond *) ODK_FOR_000000000000001: LD 0 GT 31 JMPC ODK_FOR_DOWN_000000000000001 LD 0 GT 1 JMPC ODK_END_FOR_000000000000001 LD 31 LT i JMPC ODK_END_FOR_000000000000001 JMP ODK_FOR_STMTS_000000000000001 ODK_FOR_DOWN_000000000000001: LD 31 GT i JMPC ODK_END_FOR_000000000000001 LD 0 LT 1 JMPC ODK_END_FOR_000000000000001 (* for - Stmts *) ODK_FOR_STMTS_000000000000001: (** Dev_Scan_temp := 0; **) (* assign - Stmt *) LD 0 ST Dev_Scan_temp (** SHR_D(EN :=1 , IN := Dev_Scan_Hex , N := i | Dev_Scan_temp:= OUT); **) (* call - Stmt *) CAL SHR_D ( EN := 1, IN := Dev_Scan_Hex, N := i | Dev_Scan_temp := OUT ) (** {*iλ1ַλ16#1ANDȽϣΪ1iַλ豸Ԥ趨Ҫж*} **) (** if (Dev_Scan_temp and 16#1) = 1 then **) (* if - Cond *) LD Dev_Scan_temp AND 16#1 EQ 1 JMPCN ODK_SKIP_000000000000002_000000000000001 (* then - Stmts *) (** Dev_Total := Dev_Total+1; **) (* assign - Stmt *) LD Dev_Total ADD 1 ST Dev_Total (** {*iַλжֵǷΪ16#4ǵĻ״̬д*} **) (** if Dev_Array[i] = 16#4 then **) (* if - Cond *) LD Dev_Array[i] EQ 16#4 JMPCN ODK_SKIP_000000000000003_000000000000001 (* then - Stmts *) (** Dev_Status_temp := 1; **) (* assign - Stmt *) LD 1 ST Dev_Status_temp (** {*1ַλiλֵORȽϣ״ֵ̬Ӧiַλ*} **) (** SHR_L(EN :=1 , IN := Dev_Status_temp, N := i | Dev_Status_temp := OUT); **) (* call - Stmt *) CAL SHR_L ( EN := 1, IN := Dev_Status_temp, N := i | Dev_Status_temp := OUT ) (** Dev_Status :=Dev_Status_temp or Dev_Status ; **) (* assign - Stmt *) LD Dev_Status_temp OR Dev_Status ST Dev_Status JMP ODK_END_IF_000000000000003 (** else **) (* else *) ODK_SKIP_000000000000003_000000000000001: (* else - Stmts *) (** {*һԤ趨ַ豸ڣǴ*} **) (** Dev_Error_Flag := 1; **) (* assign - Stmt *) LD 1 ST Dev_Error_Flag (** Dev_Error:= Dev_Error+1; **) (* assign - Stmt *) LD Dev_Error ADD 1 ST Dev_Error (** end_if; **) (* if - End *) ODK_END_IF_000000000000003: JMP ODK_END_IF_000000000000002 (** end_if; **) (* if - End *) ODK_SKIP_000000000000002_000000000000001: ODK_END_IF_000000000000002: (* for - By *) LD 1 ADD i ST i (** end_for; **) JMP ODK_FOR_000000000000001 (* for - End *) ODK_END_FOR_000000000000001: (** **) (** if Dev_Scan_Hex<>0 then **) (* if - Cond *) LD Dev_Scan_Hex NE 0 JMPCN ODK_SKIP_000000000000004_000000000000001 (* then - Stmts *) (** {*Ԥ趨ֵ£޴󱨾豸*} **) (** Dev_Ready := not Dev_Error_Flag; **) (* assign - Stmt *) LD Dev_Error_Flag NOT ST Dev_Ready JMP ODK_END_IF_000000000000004 (** end_if; **) (* if - End *) ODK_SKIP_000000000000004_000000000000001: ODK_END_IF_000000000000004: (** if Dev_Total<>0 then **) (* if - Cond *) LD Dev_Total NE 0 JMPCN ODK_SKIP_000000000000005_000000000000001 (* then - Stmts *) (** {*豸߱*} **) (** Dev_Ratio := 1.0-INT_TO_REAL(Dev_Error)/INT_TO_REAL(Dev_Total); **) (* assign - Stmt *) LD 1.0 SUB ( Dev_Error INT_TO_REAL DIV ( Dev_Total INT_TO_REAL ) ) ST Dev_Ratio JMP ODK_END_IF_000000000000005 (** end_if; **) (* if - End *) ODK_SKIP_000000000000005_000000000000001: ODK_END_IF_000000000000005: (** **) (** ton1(pt:=t#2s); **) (* call - Stmt *) CAL ton1 ( pt := t#2s ) (** ton1.in:=not ton1.q; **) (* assign - Stmt *) LD ton1.q NOT ST ton1.IN (** if ton1.q=1 then **) (* if - Cond *) LD ton1.q EQ 1 JMPCN ODK_SKIP_000000000000006_000000000000001 (* then - Stmts *) (** HeartVavle :=HeartVavle+1; **) (* assign - Stmt *) LD HeartVavle ADD 1 ST HeartVavle JMP ODK_END_IF_000000000000006 (** end_if; **) (* if - End *) ODK_SKIP_000000000000006_000000000000001: ODK_END_IF_000000000000006: (** if HeartVavle =99 then **) (* if - Cond *) LD HeartVavle EQ 99 JMPCN ODK_SKIP_000000000000007_000000000000001 (* then - Stmts *) (** HeartVavle:=0; **) (* assign - Stmt *) LD 0 ST HeartVavle JMP ODK_END_IF_000000000000007 (** end_if; **) (* if - End *) ODK_SKIP_000000000000007_000000000000001: ODK_END_IF_000000000000007: (** **) (** **) END_FUNCTION_BLOCK