您好!欢迎光临工博士商城

工博士北京分公司

产品:1307    

咨询热线:13262727362

QQ QQ
您当前的位置:首页 » 新闻中心 » 跟我一起玩200 smart PLC
产品分类
新闻中心
跟我一起玩200 smart PLC
发布时间:2017-05-24        浏览次数:146        返回列表

关于数据的排序

   之前,看到过论坛上的大侠们做过一些关于数据的排序程序段子,最让我记忆犹新的是阿鸣老师发帖的那个“冒泡法”程序。其中心思想是利用指针的地址偏移及循环指令特性,将一组准备好了的数据逐个循环轮询一次,每一个数据都进行一次比较,如果大于了怎么样,小于了又怎么样的处理。前几天论坛上又见到类似的问题,由季侠热心地回复了编程思路,不知道那位网友是否已经做出了该数据排序的程序。

   今天晚上闲来无事,想起了那个问题,打算再做一次。因为这个程序差不多已经成为比较经典的程序段子,编程思路与前面的前辈们比起来显得不成熟的多了,难免的一些失误,或者不足之处望包涵。

假设,有10个数据(估计做这样的程序都是以10个数据来比较排序的,可能是出于常人的习惯思维),数据地址假设是VW100开始的,具体数据如下表所示:

 

编程思路:

1)  初始化所需要调用的数据区数据,这步对于多次调用该程序段非常重要。

2)  定义数据排序起始指针地址,&VB100取指针的起始地址。

3)  利用循环指令,做9个数据的循环,因为是10个数据比较9次循环就完全可以将全部的数据比较完成逐个进行数据的比较。

4)  第一次,循环中先将2个数据比较,如果比较数据的结果VW100大于VW102,则,交换数据存储地址的数据,反之,不交换数据。

5)  无论怎样均指针下移一个字的地址区后,循环返回到循环起始,再取小的数据与第三个数据进行比较,比较结果仍然按第3步方式进行排序。

6)  同样的方式,直到循环9次,循环指令9次数到达后,跳出循环指令,并将比较结果单独存放到指定的地址VW200中。

如果编辑的程序运行结果VW200的数据地址中是48,说明程序是按编程思路是可行的,当然如果把这个程序稍加修改,也可以做成自己的数据排序库文件,以方便今后遇见类似的程序复制调用之需要,或者稍加修改后,将比较结果的最大数据存放在VW200中,编程思路就是这样的过程。

为了方便比较数据,特在软件系统块中编辑了表中的数据,图示:

 

 

在主程序中编辑数据排序程序:为压缩页面将程序转换为STL语言方式显示

 

 

为检测程序的比较运行结果,新建一个“状态图表”将程序编译、保存、下载到cpu,启动M0.0 = 1,监控这些数据的变化规律,图示:

 

 

程序运行的结果VW200 = 48符合当初的控制要求,当然结果取指针的首地址VW100也是可以的。

实际上,类似的程序很方便做比较最大数或者最小数,区别仅仅是将取指针数据的比较的指令稍加变换,图示:

 

 

重新编译、保存程序,并将修改后的程序下载到cpu,验证结果,图示:

 

 

验证结果VW200 = 120仍然符合比较最大数据的需要。反过来看,如果需要比较更多的数据,仅仅只需要将所需要的数据录入后,通过按比较数据的个数减1的方式启用循环指令,类似的“冒泡法”比较编程适用于一串连续的数据区比较结果,所谓的“冒泡法”实际就是循环指令的循环。该程序适宜于那些风机、泵类运行时间数据的比较,来判断所需要启动风机、泵的其中一个优先启动条件。

注:

   如果需要将此类型的程序做成自己的库文件形式或多次调用,则在调用该程序段前必须先进行数据区的初始化操作,然后录入新的数据再进行比较,以免引起数据处理时的结果错乱。比如,利用M0.0的上升沿初始化数据区,下降沿进行数据的比较等方式。

 



 

联系热线:13262727362   联系人:黄婷 联系地址:北京市朝阳区东土城路4号3幢4层

技术和报价服务:星期一至星期六8:00-22:00 工博士北京分公司