技术论坛

跟我一起玩200 smart PLC 关于数据的排序1

作者 主题
至圣

经验值: 72012
发帖数: 8043
精华帖: 145
主题:跟我一起玩200 smart PLC 关于数据的排序1


只看楼主 楼主 2017-05-25 11:35:12

跟我一起玩200 smart PLC

关于数据的排序1

   前面几次做了几个所谓的数据排序的程序,实际上严格意义上说是找数据的最小值,或者是找数据的最大值,其中,最小值或者最大值的数据将被覆盖掉,当然,你可以先操作一步,将待排列的数据转存出来后,再进行一次数据的比较。

在“找答案”或“论坛”上,时不时的看到对类似问题的一些提问和讨论,一直来想做一个类似于第三方PLC指令的那个数据的排序程序,记得第三方PLC编程指令中有一个 “SORT” 指令,该指令通过找行与列的定义数据范围,实现范围内的数据并按顺序排列。

编程思路:

   假设,有10个数据,首地址为VW100开始的10个地址连续的数据,通过设置的定时中断SMB34(中断事件10)= 10 mS间隔定时时间,当中断10次后(相当于0.1秒)待排列的10组数据完成数据排列。

1)  首先,调用定时中断,SMB34 = 10(mS),连接中断并开中断,在主程序中调用

2)  在定时连接的中断中编辑:

A) 定义中断次数寄存器在VB0中记录

B) 启用指针&VB100,并启用地址VW100和VW102中的指针地址

C) 比较这2个数据的大小,如果小于,则数据不调换并将指针下移到VW104,准备下一个中断再比较;如果大于,则数据调换数据地址寄存器,同时,仍然执行指针下移一个地址区,准备下一个中断到来后再比较

D)数据地址的调换:首先,将指针*AC1的数据暂时存放在AC0,这样原指针*AC1中的数据被“清空”,然后方便*AC2的数据放入*AC1中,最后,把刚刚暂时存放在AC0累加器中的数据返还给*AC1实现数据的交换

E) 当中断10次到达后,指针返回到原位置,清空中断次数,为下一次数据排列做好准备

程序:

在“数据块”定义好一串数据,任意的自定义数据,图示:


在子程序中定义定时中断SMB = 10(mS),连接中断子程序INT_0,中断事件号10,开中断,图示:


在定时中断中编辑数据排序程序,图示:


为方便监控新建一个“状态图表”,监控上述数据排序程序是否能够满足最初的程序思想要求,将编辑的程序编译、保存、下载到cpu中启动监控,图示:


   程序运行的结果符合初始的编程要求。当然,如果控制要求需要降幂排序,仅仅只修改数据比较的内容即可。每次当看到状态图表中显示出结果结束程序的验证时,总会想起那句手工编程的魅力在于编程前有充足的准备编程思路,对每条指令的理解及子程序调用、特殊标志位的应用,望这段小程序能够提供给编程者做一些类似的参考。



 
以下网友喜欢您的帖子:

  
重要声明:

著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

帖子链接:https://www.ad.siemens.com.cn/club/bbs/post.aspx?a_id=1397065&b_id=64&s_id=0&num=2

至圣

经验值: 11495
发帖数: 1028
精华帖: 39
回复:跟我一起玩200 smart PLC 关于数据的排序1


只看楼主 1楼 2017-05-25 15:54:39

我也乱入了。下面的程序是PDF的

平均值

流量累计

冒泡排序

电机运行时间

SORT_AVE_RTM_ACC.pdf



 
以下网友喜欢您的帖子:

  
至圣

经验值: 72012
发帖数: 8043
精华帖: 145
回复:跟我一起玩200 smart PLC 关于数据的排序1


只看楼主 楼主 2楼 2017-05-26 17:08:08
以下是引用宁超在2017-05-25 15:54:39的发言 >1楼

我也乱入了。下面的程序是PDF的

平均值

流量累计

冒泡排序

电机运行时间

SORT_AVE_RTM_ACC.pdf


非常不错的资料,感谢宁侠。


 
以下网友喜欢您的帖子:

  
  • 上一页
  • 1
  • 下一页
收起
跟我一起玩200 smart PLC 关于数据的排序1
您收到0封站内信:
×
×
信息提示
很抱歉!您所访问的页面不存在,或网址发生了变化,请稍后再试。