电工技术基础_电工基础知识_电工之家-电工学习网

欢迎来到电工学习网!

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

2017-09-30 17:37分类:PLC基础知识 阅读:

  在一些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外循环,假定外循环施行完毕,程序往下施行
上面代码底子选用暂时变量作运算的,正本还能够将其封装成一个子程序,完毕屡次调用。

上一篇:西门子PLC串联电路块的并联联接指令

下一篇:S7-300的RLO上升沿查看指令的效果是不是会受程序扫描时刻影响?

相关推荐

电工推荐

    电工技术基础_电工基础知识_电工之家-电工学习网
返回顶部