请教S7-300STL排序程序中的外循环的作用

大家好,在论坛中发现很多排序的程序,但是很不明白外循环的作用,外循环好像只是重复的走了规定次数,指针并没有变啊?而内循环中已经完成大小排序了啊(相邻两个数据比较),为什么还要在外循环。如果相同SCL程序比较的话,在SCL中,外循环每次都会改变下标。。。所以我比较好理解。
请大师帮帮我吧,刚开始学习STL。。和SCL。。。
下面我贴一个大家都见过的程序。
转帖::
假定十个数据,放在DB1中,安放顺序如下:
DBD0
DBD4

DBD36
下面是西门子的程序
OPN   DB    1                 /////打开DB1这个数据块
      L     10  ////装载10到MB0中,因为有十个数据,要进行十次排序,9次也可以的
LL0:  T     MB    0
      L     P#0.0   ////装载地址指针,这是关键,不要搞错了
      LAR1  
      L     9
LL1:  T     MB    2   ////内部循环,进行9次,直到把最大值排到最后
      L     DBD [AR1,P#0.0]
      L     DBD [AR1,P#4.0]
      <R    
      JC    LL2          ////比较前后两个值,如果前面大于后面的,则前后数据交换
      L     DBD [AR1,P#0.0]
      T     #m_temp
      L     DBD [AR1,P#4.0]
      T     DBD [AR1,P#0.0]
      L     #m_temp
      T     DBD [AR1,P#4.0]
LL2:  +AR1  P#4.0     ////指针自动进行加4,因为是浮点数,所以要跳过4个字节
      L     MB    2
      LOOP  LL1       ///这个指令自动的将A寄存器里的值减1
      L     MB    0
LOOP  LL0

最佳答案

这个也属于冒泡法排序,先找最小的
内循环就是每次拿一个数据比较,把小的放后面,然后再那小的和后面的比较,小了继续后移,内循环一次,找到一个最小的数放到最下面
外循环是有10个数,所以得比较10次,第一次找到一个最小的,放到最下面,第二次在剩下的9个里面再找到最小的,放到第9(其实也和第10比较了,因为第10已经最小了,直接跳过)
外循环的意思,就是在一个扫描周期里面把排序做好,如果你不加外循环,可能就需要10个扫描周期了~能明白吗?
您可以把外循环注释掉,模拟一下试试,模拟器有单次执行的功能

提问者对于答案的评价:
谢谢,我明白了。也谢谢艾星落尘

原创文章,作者:more0621,如若转载,请注明出处:https://www.zhaoplc.com/plc171891.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2017年6月12日 下午7:43
下一篇 2017年6月12日 下午7:44

相关推荐