发布于 2012-09-26 00:29:38
2楼
楼主:你的数据是不是存在DB块中的浮点数组?化了点时间给你写了一个FC,你可以参考一下。将此复制到STL Sources文件里面,然后编译一下生成FC8就可以调用了。
FUNCTION FC 8 : VOID
TITLE =REAL DATA MIN TO MAX
//下沉法排序:数据从小到大排序或者从大到小排序。
//原理:数据从起始地址开始往下比较,通过内、外循环比较数据大小并移动数据排序。
VERSION : 0.1
VAR_INPUT
Data : ANY ; //ANY形参指针
END_VAR
VAR_OUTPUT
Error : INT ; //程序错误输出信息
END_VAR
BEGIN
NETWORK
TITLE =
//╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬将输出错误标志清零╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬
L 0;
T #Error; //将输出错误标志清零
//╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬将ANY指针复制到LB0-LB9╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬
L P##Data; //将ANY指针复制到LB0-LB9
LAR1 ;
L D [AR1,P#0.0];
T LD 0;
L D [AR1,P#4.0];
T LD 4;
L W [AR1,P#8.0];
T LW 8;
//╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬判断ANY指针是否输入错误╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬
L LB 0;
L B#16#10;
==I ;
JCN ERR1; //如果输入指针类型错误,跳转到ERR1
L LB 6;
L B#16#84;
==I ;
JCN ERR2; //如果输入数据区是不是DB块,跳转到ERR2
L LB 1;
L B#16#8;
==I ;
JCN ERR3; //如果输入数据类型不是REAL,跳转到ERR3
//╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬(读取起始地址)╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬
OPN DB [LW 4]; //打开当前的数据块
L LD 6; //32位交叉区域指针
SLD 8; //数据起始地址去掉数据区标识部分
SRD 8; //只保留数据起始地址
T LD 10; //将数据起始地址保存至LD10
//╬╬╬╬╬╬╬╬╬╬╬(内、外循环判断数据大小并从小到大排序)╬╬╬╬╬╬╬╬╬╬╬╬
L LW 2; //数据个数
L 1;
-I ;
NXT2: T LW 20; //外循环次数
LAR1 LD 10; //内外循环从数据起始地址开始寻址
NXT1: T LW 18; //内循环次数
L D [AR1,P#0.0];
L D [AR1,P#4.0];
<R ; //将小于改为大于数据从大到小排序!注意:将中文小于字符改成英文字符小于
JC M001;
T D [AR1,P#0.0];
TAK ;
T D [AR1,P#4.0];
M001: +AR1 P#4.0; //内循环地址向前推进
L LW 18;
LOOP NXT1;
L LW 20;
LOOP NXT2;
JU GOOD;
//╬╬╬╬╬╬╬╬╬╬╬╬╬╬(程序的故障处理和退出)╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬
ERR1: L 1; //输入指针类型错误
T #Error;
JU EXIT;
ERR2: L 2; //输入数据区不是DB块
T #Error;
JU EXIT;
ERR3: L 3; //输入数据类型不是REAL
T #Error;
EXIT: CLR ;
SAVE ;
BE ;
GOOD: SET ;
SAVE ;
BE ;
//╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬
END_FUNCTION
佛对我说:“你的痛苦来自于你的欲望,没有欲望也就没有痛苦!”