电工学习网

 找回密码
 立即注册

西门子S7-200PLC由“冒泡法”排序算法的逆向思考

2014-2-16 15:55| 编辑:电工学习网| 查看: 26522| 评论: 0

在一些C语言资料上看到,“冒泡法”排序一般是从最后一个数据开始,向地址小的方向相邻两个数据比较,并按照从小到大或者从大到小排序的一种算法。在数据比较、移动的过程中,数据的运动,看起来好像水中的气泡向上运动。故而称之为“冒泡法”排序。
 “冒泡法”排序,在知道数据的起始地址、数据个数、数据类型后,需要算出最后一个数据的地址,并从最后的一个地址开始运算排序。我在想,为什么不能从数据的起始地址开始排序呢,如果采用这种“下沉法”排序,还能省去计算数据的结束地址,程序应该会更简洁。于是自己就试着写了一下“下沉法”排序的plc程序代码,并测试通过。
 排序环境:224CPU,从VB1000开始连续20个整数,从小到大排序。“下沉法”排序算法参考代码如下:
 
 //******************给外循环体、内循环体的循环次数赋初值***********************
 LD     SM0.0                              //开始执行从小到大的排序程序
 MOVW   19, LW2                     //给外循环次数(数据个数-1)赋初值
 MOVW   19, LW6                     //给内循环次数(数据个数-1)赋初值
 
//*******************建立外循环体并定义排序的其实地址*****************************
 FOR    LW0, +1, LW2                //FOR外循环体循执行LW2次
 MOVD   &VB1000, AC1            //将V区的起始地址赋给AC1,定义排序的起始地址

 //**************建立内循环体并开始进行相邻的两个数据比较、移动****************
 FOR    LW4, +1, LW6              //FOR内循环体循执行LW6次
 MOVD   AC1, AC2                    //把当前AC1里面的地址存储到AC2里面
 +D     +2, AC2                           //AC2当前地址+2,存入AC2
 LDW<   *AC2, *AC1                //如果AC2指向的地址里面的内容小于AC1指向的地址里面的内容
 MOVW   *AC1, LW8                //那么将当前两个地址里面的内容互换
 MOVW   *AC2, LW10              //如果AC2指向的地址里面的内容不小于AC1指向的地址里面的内容
 MOVW   LW8, *AC2                //那么当前两个地址里面的内容保持不变
 MOVW   LW10, *AC1             //如果把小于比较指令改成大于比较指令,那么数据就是从大到小排序
 LD     SM0.0
 +D     +2, AC1                          //AC1当前地址+2,存入AC1
 NEXT                                        //跳转到FOR内循环,如果内循环执行结束,程序往下执行

 //*******************内循环执行结束,进入外循环执行*****************************
 DECW   LW6                          //内循环体执行结束,将内循环体的循环次数减1
 NEXT                                       //跳转到FOR外循环,如果外循环执行结束,程序往下执行
 上面代码基本采用临时变量作运算的,其实还可以将其封装成一个子程序,实现多次调用。

看过《西门子S7-200PLC由“冒泡法”排序算法的逆向思考》的人还看了以下文章:

发表评论

最新评论

  • PLC输入端和输出端怎么接线
  • 什么是COM端口?PLC中COM端口如何接线?
  • plc控制电动机正反转梯形图
  • 西门子S7-200系列PLC全套接线图
  • PLC十字路口的交通灯控制编程实例
  • plc基础知识指令27个
热点文章

电工学习网 ( )

GMT+8, 2023-3-10 12:53

Powered by © 2011-2022 www.shop-samurai.com 版权所有 免责声明 不良信息举报

技术驱动未来! 电工学习网—专业电工基础知识电工技术学习网站。

栏目导航: 工控家园 | 三菱plc | 西门子plc | 欧姆龙plc | plc视频教程

返回顶部