故事作者:will666

最近创作

看看TA的故事

【没有咱工程师解决不了的事儿】一种简单FIFO堆栈的梯形图算法实现

已锁定

will666

西门子1847工业学习平台

  • 帖子

    2127
  • 精华

    12
  • 被关注

    113

论坛等级:奇侠

注册时间:2009-05-19

钻石 钻石 如何晋级?

【没有咱工程师解决不了的事儿】一种简单FIFO堆栈的梯形图算法实现

1154

3

2013-04-05 15:37:14

作者:will666 


         本人从事的是污水与自来水行业。在自来水厂V型滤池的控制工艺中有一个重要的工艺就是滤池反冲洗工序,一般规模水厂有6-8个V型滤池,所有滤池共用一套反冲洗设备,同时只能给一个滤池反冲洗,如果此时有其他滤池发起反冲洗要求必须将其编号请求保存起来,以便在当前滤池反冲结束后执行下一个最早发起反冲要求的滤池。


 


        基于以上工艺要求,使用FIFO堆栈可以很好的解决这个问题,当反冲请求到来时将其编号入栈保护,在允许反冲时将滤池编号从堆栈中弹出。基本所有PLC都有FIFO堆栈指令或程序块来完成堆栈操作,但是在滤池反冲调度实际应用中却有一下几个缺点:1、由于人为或仪表原因,滤池反冲洗请求可能会重复产生,如果每个滤池反冲请求上升沿都进行入栈操作将会在堆栈中出现重复的编号,影响反冲程序的执行,因此在入栈前必须检查堆栈内容,防止重复入栈;2、现有堆栈指令块用法较复杂,新手难以理解。为了实现堆栈功能,也有不少高手自己开发了堆栈功能块,但基本使用语句表开发,利用了指针功能,其他使用者更加难以理解。


 


        为了解决以上问题,我用梯形图语言开发一种简单的堆栈程序,使用基本的move指令完成堆栈操作,虽然办法笨,执行效率不高,但因为梯形图语言简单易懂,且能避免重复入栈,可以很好地解决滤池反冲控制的调度问题。


 


        下面以一个长度为6的堆栈为例简要说明堆栈的算法。程序共有5个参数:入栈脉冲、出栈脉冲、清零命令、入栈缓存、出栈缓存。


 


1、出栈算法:出栈脉冲到来——数据1 move 至出栈缓存——数据2 move 至数据1——以此类推直至数据6 move 至数据5,再将0 move 至数据6。


 


2、入栈算法:待入栈编号放入入栈缓存——入栈脉冲到来——判断数据1是否等于0或等于入栈缓存内容,如果等于0证明数据1即为栈底,将待入编号move给数据1;如果等于入栈缓存内容证明堆栈中已经有此编号,本次入栈属于重复入栈,仍将待入编号move给数据1。入栈缓存内容move至数据1后将0 move至入栈缓存。——与上一步相同判断数据2是否等于0或等于入栈缓存内容并执行相同操作直至数据6。


经入栈操作后如果是重复入栈会将本次入栈编号放置在原有编号位置,避免重复入栈;如果非重复入栈会将编号放置在栈底。


 


3、清零算法:清零命令到来——将0 move给所有数据。


       以上算法均可以使用梯形图完成,且简单易懂,易于实现。

【没有咱工程师解决不了的事儿】一种简单FIFO堆栈的梯形图算法实现 已锁定
编辑推荐: 关闭

请填写推广理由:

本版热门话题

网友专栏

共有3364条技术帖

相关推荐

热门标签

相关帖子推荐

guzhang

恭喜,你发布的帖子

评为精华帖!

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

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

  • 分享

  • 只看
    楼主

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