plc300中使用ob35采集和储存数据的一些疑问

通过ob35循环中断,周期为10ms,在ob35中编写如图的程序,将采集的数据相应保存在DB数据块中的数组中(DB1如下图),想实现的效果是第一个10ms的数据存入DB_VAR1,第二个10ms的数据存入DB_VAR2,以此类推,存满后循环到DB_VAR1继续储存。在plcsim仿真,发现除了DB1.DBW2有数值,一直在变,其他的都为0,好像是程序没有起到循环储存作用京(指针没动),数据只储存在DB1.DBW2了,想知道哪里出错了,帮忙改正下。
注:因为采集的数据为real,而数组为int,所以要real转int,程序4那有一段就是这个程序,请顺便帮我看看对不对。
在此先谢过各位大佬了。

问题补充:
十分抱歉,我的疏忽,我的ob35的程序如下图,是一个调用fb71的程序,fb71用于产生模拟工业现场信号的正弦波信号,它的具体程序都在我上个问题。
我按照您说的方法做了,在ob100里加了对应程序(如下图,ob100中的其他程序也在我上个问题,是赋值给fb71各个参数的),但还是没用,我监视了DB1,还是怎样子,求助。

图片说明:

plc300中使用ob35采集和储存数据的一些疑问    plc300中使用ob35采集和储存数据的一些疑问    plc300中使用ob35采集和储存数据的一些疑问    plc300中使用ob35采集和储存数据的一些疑问    plc300中使用ob35采集和储存数据的一些疑问    plc300中使用ob35采集和储存数据的一些疑问   

最佳答案

1、MD20 这个指向当前数据存储的指针在哪初始化的? 是在 0B35 网络的网络 1 中吗?这部分你没有贴出。
将初始化这个指针的部挪到 OB100 上电初始化组织块,或者有条件地初始化。
我在 OB100 用了无条件初始化
L     P#0.0
T    MD20
2、贴出的最左边的图中,网络2,判断指针是否越界部分 L P#202.0,改成 L P#200.0,这样才可以结合你的程序中第三张图数据块的定义,才可使得指针不越界,否则寻址越界会造成 CPU 停机。
按上面所说修改后应当是可以的,我在 TIA 中做了测试。
另外下次提这样的问题时,请复制代码,并分好段,这样也方便大家帮助你找问题。
3、完整的程序如下:
第一部分
OB100:初始化部分
L     P#0.0
T    MD20
第二部分 OB35
网络1
A(
      L     P#2.0
      T     MD30
      SET
      SAVE
      CLR
      A BR
      )
      JNB   _001
      L     P#200.0        //这改了,与你原程序不一样的地方
      T    MD40
_001: NOP 0
网络2
     L     MD20
      L    MD40
      <D
      =     L20.0
      A     L20.0
      JNB   _002
      L     MD20
      L     MD30
      +D
      T     MD20
_002: NOP 0
      A     L20.0
      NOT
      JNB   _003
      L     P#0.0
      T     MD20
_003: NOP 0
网络3
OPN   DB2
      A(
      L    DB2.DBD12
      RND
      T     MD100
      AN OV
      SAVE
      CLR
      A BR
      )
      JNB   _004
      OPN   DB1
      L     MD100
      T DBW [ MD20]
_004: NOP 0
测试如图

图片说明:

plc300中使用ob35采集和储存数据的一些疑问  

提问者对于答案的评价:
大佬回答得挺好的,但我对MD20进行了如你说的那样初始化,但依然是老样子,没有解决问题,不过提供了思路,还是非常感谢大佬的。

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

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

相关推荐