PLC数据做缓存,输出值为最早存储值

L     #db_no
      T     LW     0                    //装载DB块号至LW0
      OPN   DB [LW 0]                   //并打开该DB块

      L     #len
      L     1
      -I    
      L     4
      *I    
      SLD   3
      T     LD     2                    //装载第一个要计算的实数的32指针至LD2

      L     #len                        //长度
      L     1
      -I    
NEXT: T     LW     6                    //实数的个数装载至LW6, 并且进入一个LOOP循环

      L     LD     2
      L     P#4.0
      -D    
      T     LD     8

      L     DBD [LD 8]
      T     DBD [LD 2]                  //读取LD2指针位置的实数

      L     LD     2                    //装入指针
      L     P#4.0
      -D                                //指针加4个字节
      T     LD     2                    //结果仍存入LD2,此时LD2指针指向下一个实数

      L     LW     6                    //循环计数
      LOOP  NEXT                        //LOOP循环的结束

      L     0
      T     LD     2

      L     #input_value
      T     DBD [LD 2]

      L     #len
      L     1
      -I    
      L     4
      *I    
      T     LW     6
      L     DBD [LD 8]
      T     #output_value               //得到缓存最后一个值,通过output_value输出
///////------我以上程序一直得不到最早存储值,请大侠指点下,谢谢!

最佳答案

1、可以应用先进先出堆栈的方法,你看合适否?
FIFO: First in, First out.先进先出。
2、详见《基于Siemens S7-300/400 PLC的FIFO功能实现》连接:
http://blog.cechina.cn/xxkjfw/228942/message.aspx
《实现每次20字节FIFO功能FB200功能块的代码,以及实际应用举例》连接:
http://blog.cec.pandabuying.com/hylotus/228942.aspx

提问者对于答案的评价:
谢谢你的回答,虽然方法用起来比较麻烦。
方法是先进先出的原则,但用STL语言实现起来,还需要实验下。

专家置评

已阅,最佳答案正确。

原创文章,作者:more0621,如若转载,请注明出处:https://www.zhaoplc.com/plc234507.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2018年12月1日 下午2:29
下一篇 2018年12月1日 下午2:29

相关推荐