You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
317 lines
5.8 KiB
317 lines
5.8 KiB
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#1进行AND比较,如果为1,代表i地址位设备有预设定,需要判断在线情况*} **)
|
|
(** 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
|