//CPU 临时错误:FB 5 中的区域长度错误
//将影响 OB 1 的执行
//读访问 保持性 DB 区域
//地址错误,已更换操作数
// 继续处理(无 OB 处理)
// Input
// #analog_in DInt
// #simple_time Time
// #simple_no Int
// #simple_hi_no Int
// #simple_lo_no Int
// Output
// #analog_out DInt
// InOut
// Static
// #analog_array Array[1..50] OF DInt
// #ok_array Array[1..50] OF DInt
// #data_num Int
// #max_value DInt
// #min_value DInt
// #CurrTimer TON_TIME
// #data_calculate Bool
// Temp
// #i Int
// #i_1 Int
// #j Int
// #j_1 Int
// #j_2 Int
// #Sum DInt
// #tmpReal DInt
// #tmpReal_1 DInt
// #fc_Data_digit Int
// #fc_Array_Length Int
// Constant
#CurrTimer(IN := NOT #data_calculate, //延时
PT := #simple_time);
#data_calculate := #CurrTimer.Q;
IF #data_calculate THEN
//采样数
IF #simple_no > 50 THEN
#data_num := 50;
ELSE
#data_num := #simple_no;
END_IF;
//数据采集
FOR #i := 0 TO #data_num DO
#analog_array[#i] := 0;
END_FOR;
//数据排序
#ok_array := #analog_array;
FOR #i := 0 TO #data_num BY 1 DO
#ok_array[#i] := 0;
FOR #i_1 := 1 TO #data_num - 1 BY +1 DO
FOR #j_1 := #i_1 + 1 TO #data_num BY +1 DO
IF #ok_array[#i_1] < #ok_array[#j_1] THEN
#tmpReal := #ok_array[#j_1];
#ok_array[#j_1] := #ok_array[#i_1];
#ok_array[#i_1] := #tmpReal;
END_IF;
#ok_array[#i_1] := #tmpReal;
END_FOR;
END_FOR;
END_FOR;
//计算小值和
FOR #i_1 := 0 TO #simple_lo_no BY 1 DO
#min_value := #min_value + #ok_array[#i_1];
END_FOR;
//计算大值和
FOR #j_1 := #data_num - #simple_hi_no TO #data_num BY 1 DO
#max_value := #max_value + #ok_array[#j_1];
END_FOR;
//计算累计和
#Sum := 0;
FOR #i_1 := 0 TO #data_num BY 1 DO
#Sum := #Sum + #ok_array[#i_1]; // ( #ok_array ) 一直报错 修改数组长度无效
END_FOR;
#analog_out := (#Sum - #max_value - #min_value) / (#data_num - #simple_hi_no - #simple_lo_no);
END_IF;
最后第二行一直报错 修改数组长度无效
监控时数组变量无数据 出现
改写的第一个程序,里面问题肯定很多。幸苦老师了。