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

已锁定

WWCWWC

西门子1847工业学习平台

  • 帖子

    8037
  • 精华

    145
  • 被关注

    1335

论坛等级:至圣

注册时间:2008-07-26

钻石 钻石 如何晋级?

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

3434

2

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中启动监控,图示:


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


跟我一起玩200 smart PLC 关于数据的排序1 已锁定
编辑推荐: 关闭

请填写推广理由:

本版热门话题

SIMATIC S7-200 SMART

共有7560条技术帖

相关推荐

热门标签

相关帖子推荐

guzhang

恭喜,你发布的帖子

评为精华帖!

快扫描右侧二维码晒一晒吧!

再发帖或跟帖交流2条,就能晋升VIP啦!开启更多专属权限!

top
您收到0封站内信:
×
×
信息提示
很抱歉!您所访问的页面不存在,或网址发生了变化,请稍后再试。