签到有奖
消息提醒
运维工程师专区
官方商城
扫码分享好友 任选多种周边
跟我一起玩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
我也乱入了。下面的程序是PDF的
平均值
流量累计
冒泡排序
电机运行时间
SORT_AVE_RTM_ACC.pdf
非常不错的资料,感谢宁侠。
分享
扫码分享好友 任选多种好礼
收藏
有帮助
欢迎您访问支持中心!
丰富的视频,全方位的文档,大量的网友交流精华……
为了更好的完善这些内容,我们诚邀您在浏览结束后,花20秒左右的时间,完成一个用户在线调查!
感谢您的支持!
密码至少8位,包含大、小写字母,数字和符号至少三种。
允许邮箱和手机接收来自支持中心网站的信息
我已同意《支持中心网站注册协议和隐私政策》
微信登录扫码一键登录
验证码登录
密码登录
二维码失效点击重试
打开微信扫一扫,快速登录/注册
未注册手机验证后自动登录,注册即代表同意《支持中心网站注册协议和隐私政策》
三日内免验证登录
短信登录
登录