恭喜,你发布的帖子
发布于 2021-10-10 11:05:02
8楼
FUNCTION_BLOCK FB44
CONST
load_cout:= 20; //本例采集10个
END_CONST
VAR_INPUT
WriteReq:BOOL; // 写请求 每10秒发一次 写入请求
New_value:INT:=0; // 需要写入的数据
reset:BOOL:=false; // 复位
END_VAR
VAR_IN_OUT
Last_WriteReq:BOOL;
END_VAR
VAR_OUTPUT
average_out:REAL; // 平均值输出
max_data:REAL; // 分拣出最大值
min_data:REAL; // 分拣出最小值
sum_data:REAL; // 总和值
number:INT; // 计数值
END_VAR
VAR
WriteReq_P:BOOL; // 写请求上升沿
Index :INT; // 压入数据的个数记录
stop_write:BOOL; // 停止写入
store:ARRAY[0..load_cout] OF REAL; //存储数据组
num:INT;
I:INT;
END_VAR
WriteReq_P:= WriteReq AND NOT Last_WriteReq;
Last_WriteReq:= WriteReq;
IF Index >= load_cout THEN
stop_write:= true;
ELSE
stop_write:= false;
END_IF;
IF NOT stop_write THEN
IF WriteReq_P THEN
store[Index]:= New_value;
Index := Index + 1;
END_IF;
END_IF;
//以上为数据周期采集并存储。
min_data:= store[0]; ////每次运行默认第一个为最小值,开始进行比较
FOR I:= 0 TO load_cout BY 1 DO
IF store[I] <= min_data THEN min_data:= store[I]; END_IF; //求最小值
IF store[I] >= max_data THEN max_data:= store[I]; END_IF; //求最大值
IF I=0 THEN sum_data:= store[1];
ELSE
sum_data:= sum_data + store[I];
END_IF;
IF Index = load_cout THEN
average_out:= sum_data / INT_TO_REAL(Index);
END_IF;
IF reset THEN
Index:=0;
store[I]:=0;
sum_data:=0.0;
min_data:=0.0;
max_data:=0.0;
average_out:=0.0;
END_IF;
END_FOR;
number:= Index;
END_FUNCTION_BLOCK
DATA_BLOCK DB44 FB44
//
// Block Comment...
//
BEGIN
END_DATA_BLOCK
请填写推广理由:
分享
只看
楼主