昨天在网上找了好久关于在STEP7中数组排序的程序,没有找到,就自己写了一个,使用的是SCL,用梯形图和语句表编写起来不容易。
对温度的滤波比较有用,取中间大小的值为实际值。
FUNCTION FC625 : VOID
//冒泡法取温度的中间值
//作者:陈俊
CONST
number :=12;//数组存放的数据数量
END_CONST
VAR_INPUT
Tem_actual_input : REAL;//实际温度输入
Tem_actual_udt : UDT3;//存放12个温度的结构体变量
END_VAR
VAR_IN_OUT
Tem_array_1 :ARRAY[1..number] OF REAL;//从大到小排序的数组
END_VAR
VAR_TEMP
Index_1 : INT;
Index_2 : INT;
Tem_temp :REAL;
END_VAR
VAR_OUTPUT
Tem_actual_output :REAL;//实际值温度输出
END_VAR
BEGIN
//取11组温度放入中间数组
Tem_array_1[1] :=Tem_actual_udt.Tem_01;
Tem_array_1[2] :=Tem_actual_udt.Tem_02;
Tem_array_1[3] :=Tem_actual_udt.Tem_03;
Tem_array_1[4] :=Tem_actual_udt.Tem_04;
Tem_array_1[5] :=Tem_actual_udt.Tem_05;
Tem_array_1[6] :=Tem_actual_udt.Tem_06;
Tem_array_1[7] :=Tem_actual_udt.Tem_07;
Tem_array_1[8] :=Tem_actual_udt.Tem_08;
Tem_array_1[9] :=Tem_actual_udt.Tem_09;
Tem_array_1[10] :=Tem_actual_udt.Tem_10;
Tem_array_1[11] :=Tem_actual_udt.Tem_11;
Tem_array_1[12] :=Tem_actual_udt.Tem_12;
//开始冒泡程序
FOR Index_1 :=1 TO number-1 BY +1 DO
FOR Index_2 :=Index_1+1 TO number BY +1 DO
IF Tem_array_1[Index_1] < Tem_array_1[Index_2] THEN
Tem_temp :=Tem_array_1[Index_2];
Tem_array_1[Index_2] :=Tem_array_1[Index_1];
Tem_array_1[Index_1] :=Tem_temp;
END_IF;
END_FOR;
END_FOR;
//取中间大小的值作为温度的输出
Tem_actual_output :=Tem_array_1[6];
END_FUNCTION