plc300中ob35程序的改进

通过ob35循环中断,周期为10ms,在ob35中编写的程序如下:
Network1: (这段程序是调用fb71,fb71的作用是一个模拟工业现场信号的正弦波信号,用于采集数据的,跟我的问题没有太大的联系,程序就不放出来了)
Network2:      A(    
      L     P#2.0
      T     MD    30
      SET   
      SAVE  
      CLR   
      A     BR
      )     
      JNB   _001
      L     P#200.0
      T     MD    40
_001: NOP   0
Network3:      L     MD    50
      L     MD    40
      <D    
      =     L     20.0
      A     L     20.0
      JNB   _002
      L     MD    50
      L     MD    30
      +D    
      T     MD    50
_002: NOP   0
      A     L     20.0
      NOT   
      JNB   _003
      L     P#0.0
      T     MD    50
_003: NOP   0
Network4:      OPN   DB     2
      A(    
      L     DB2.DBD   12
      RND   
      T     MD   100
      AN    OV
      SAVE  
      CLR   
      A     BR
      )     
      JNB   _004
      OPN   DB     1
      L     MD   100
      T     DBW [MD 50]
_004: NOP   0
将采集的数据相应保存在DB数据块中的数组中(DB1如下图),想实现的效果是第一个10ms的数据存入DB_VAR1,第二个10ms的数据存入DB_VAR2,以此类推,存满后循环到DB_VAR1继续储存。运行plcsim后监视db1情况如下图,效果是实现了,但有所偏差,在循环到第二圈的时候MD50也会储存有数据,但我只想数据储存在DB_VAR1至DB_VAR100中,希望大佬们能在我的程序上少做改进,以实现我所需效果,在此先多谢了。

图片说明:

plc300中ob35程序的改进    plc300中ob35程序的改进   

最佳答案

L     MD    40
      <=D                             //<D    这里改为小于等于
      =     L     20.0
      A     L     20.0
      JNB   _002
      L     MD    50
      L     MD    30
      +D    
      T     MD    50
_002: NOP   0
      A     L     20.0
      NOT   
      JNB   _003
     L  P#2.0               // L     P#0.0这里改为从2.0开始
      T     MD    50

提问者对于答案的评价:
感谢大佬,我已经解决了,不过不需要改两个地方,只要将p#0.0改成p#2.0就行了,如果还将<D改成<=D的话会造成指针越界,导致cpu停机。其实以前我就改对过,只有看数据一直保持不变觉得错了,现在一想,不变才是对的,采集的是一个周期为1000ms的正弦波信号,10ms采集一次,正好100组,数据确实不会变化,当我采集的是周期为2000ms,要200组,正好一半,在db1看到的数据才会变化。还是很感谢大佬的,让我突然想明白了。

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

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2020年10月30日 下午11:17
下一篇 2020年10月30日 下午11:17

相关推荐