关于冒泡法

最近在论坛学习冒泡排序,自己尝试写了下,特把程序贴出来,让让大神看看有什么问题,DB1之前的数据如图2,经过FC1排序之后数据数据如图3,但是我理解经过FC1,应该只能把最大的数排到最后,并不能把所有的数按从小到大排列(基于当前这个程序),希望大神帮我分析一
       A     #AA
      JCN   M004
      L     0
      T     #TEMP0
      T     #TEMP1
      OPN   DB     1
      LAR1  P#0.0
      L     9
M005: T     #TEMP0
      L     DBW [AR1,P#0.0]
      L     DBW [AR1,P#2.0]
      >=I   
      JCN   M002
      L     DBW [AR1,P#2.0]
      T     #TEMP1
      L     DBW [AR1,P#0.0]
      T     DBW [AR1,P#2.0]
      L     #TEMP1
      T     DBW [AR1,P#0.0]
M002: +AR1  P#2.0
      L     #TEMP0
      LOOP  M005
M004: NOP   0

问题补充:
艾星落尘  阿鸣  两位大师,你俩误会我的意思了,我想请教,为什么我仿真FC1这个程序就可以实现冒泡排序,我理解不能实现的,但是为什么仿真结果是正确的,你俩写的程序我可以看懂,

图片说明:

关于冒泡法    关于冒泡法    关于冒泡法   

最佳答案

A     #AA   //开始排序
      JCN   M004
      L     0
      T     #TEMP0
      T     #TEMP1 //初始化数据
      OPN   DB     1 //打开DB块
      LAR1  P#0.0 //加载开始地址,A
      L     9  //循环次数
M005: T     #TEMP0
      L     DBW [AR1,P#0.0] //判断 A和A+2地址大小
      L     DBW [AR1,P#2.0]
      >=I    
      JCN   M002  //如果A<A+2不用排序
      L     DBW [AR1,P#2.0] //如果大于了,进行排序
      T     #TEMP1  //temp1 = A+2
      L     DBW [AR1,P#0.0] 
      T     DBW [AR1,P#2.0] //A+2=A
      L     #TEMP1
      T     DBW [AR1,P#0.0] //A=temp1
M002: +AR1  P#2.0  //地址加2,A=A+2
      L     #TEMP0
      LOOP  M005  //temp0-1,继续循环
M004: NOP   0
这个需要多循环几次吧,PLC一个周期排不完,需要好几个周期才行
#aa什么时候被复位?

提问者对于答案的评价:
谢谢,可以这样理解吗,#AA这个信号一直有,你的意思一个扫描周期,排序不了,有可能需要九个扫描周期,才能正确排序(从小到大),而如果使用艾星落尘和阿鸣两位大师的方法,一个扫描周期就可以排列出来?,在这里也特别感谢艾星落尘和阿鸣。。。

最佳答案作者回复:
是的,你可以仿真一下试试
仿真器带有每个周期执行的功能,有扫描模式~旁边有个+1,点一下就是扫描一个周期

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

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2017年6月24日
下一篇 2017年6月24日

相关推荐