您的位置:控制工程论坛网论坛 » PLC与PAC » 数组排序程序(SCL)

masscer

masscer   |   当前状态:在线

总积分:822  2024年可用积分:0

注册时间: 2008-01-22

最后登录时间: 2016-07-21

空间 发短消息加为好友

数组排序程序(SCL)

masscer  发表于 2008/3/16 12:58:15      939 查看 0 回复  [上一主题]  [下一主题]

手机阅读


昨天在网上找了好久关于在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

1楼 0 0 回复