恭喜,你发布的帖子
发布于 2020-05-22 22:38:01
5楼
设定触发时钟 ,例如1秒钟一次,取上升沿,然后依次比较
VAR_INPUT
clock:BOOL; //采样时钟 更加具体情况设定
data_in : REAL; //采集数据组 数量20个 类型 浮点数
error_1:REAL; //偏差值 当前值与上一个周期值 是变大 执行动作1 例如报警
error_2:REAL; //偏差值 当前值与上一个周期值 是变小 执行动作2 例如报警
reset:BOOL; //故障复位
END_VAR
VAR_OUTPUT
// Output Parameters
alarm1:ARRAY[1..20] OF BOOL;
alarm2:ARRAY[1..20] OF BOOL;
END_VAR
VAR
cout:INT;
NO:INT;
store_p:BOOL;
store_data:ARRAY[1..20] OF REAL;
END_VAR
FOR NO:= 1 TO 20 BY 1 DO
// Statement Section
IF clock AND NOT store_p THEN
store_p:= true;
cout:= cout +1;
store_data[cout] := data_in;
store_data[cout+1]:= store_data[cout];
ELSIF NOT clock THEN
store_p:= false;
END_IF;
IF cout >= 20 THEN
cout:= 0;
store_data[cout]:=0.0;
END_IF;
IF (store_data[cout+1] - store_data[cout]) > error_1 THEN
alarm1[ cout] := true;
END_IF;
IF (store_data[cout+1] - store_data[cout]) < error_2 THEN
alarm2[ cout] := true;
END_IF;
IF reset THEN
alarm1[ cout] := false;
alarm2[ cout] := false;
store_data[cout]:=0.0;
END_IF;
END_FOR;
END_FUNCTION_BLOCK
DATA_BLOCK DB74 FB74
//
// Block Comment...
//
BEGIN
END_DATA_BLOCK
请填写推广理由:
分享
只看
楼主