FUNCTION_BLOCK FB2
CONST
Length :=5; //数据记录宽度(为奇数)
END_CONST
VAR_INPUT //定义输入参数
Realtime_Value :REAL; //实时采样值
END_VAR
VAR_OUTPUT //定义输出参数
Filted_Value :REAL; //滤波后采样值
END_VAR
VAR_TEMP //定义临时变量
Loop_Count :INT; //循环计数
Squence_Count :INT; //排序计数
Temp_Data :REAL; //临时数据
data_tmp :ARRAY[1..length] OF REAL;
END_VAR
VAR //定义静态变量
Data_Store :ARRAY[1..Length] OF REAL;
END_VAR
BEGIN
(* 先入先出堆栈 *)
FOR Loop_Count := 1 TO (Length - 1) BY 1 DO
Data_Store[Loop_Count] := Data_Store[Loop_Count + 1];
END_FOR;
Data_Store[Length] := Realtime_Value;
(* 将堆栈里的数据暂存到临时数组中*)
FOR Loop_Count := 1 TO Length BY 1 DO
Data_tmp[Loop_Count] := Data_Store[Loop_Count];
END_FOR;
(* 排序 *)
FOR Loop_Count := Length TO 2 BY -1 DO
FOR Squence_Count := 1 TO (Loop_Count - 1) BY 1 DO
IF data_tmp[Squence_Count] > data_tmp[Squence_Count + 1] THEN
Temp_Data := data_tmp[Squence_Count];
data_tmp[Squence_Count] := data_tmp[Squence_Count + 1];
data_tmp[Squence_Count + 1] := Temp_Data;
END_IF;
END_FOR;
END_FOR;
(* 取中间值 *)
Filted_Value := data_tmp[(Length + 1) / 2];
END_FUNCTION_BLOCK
以上程序在博图V13上为何各种错误?正确程序应该是怎样的
问题补充:
如图所示,有在声明表定义的,但还是各种错误啊
图片说明:
最佳答案
在博图V13中,上面的声明不需要在写了,博图中给出了声明表,直接在表中设置就可以了。
补充:不需要BEGIN了。
你图片中INPUT定义的是Realtime,而使用的确是Realtime_Value,所以报错变量未定义。估计data_tmp 也是使用的名称和定义的不一致。仔细检查你的程序变量名称。
图片说明:
提问者对于答案的评价:
OK
原创文章,作者:more0621,如若转载,请注明出处:https://www.zhaoplc.com/plc144723.html