关于DB块使用与M使用的区别问题

已锁定

Qxlyshy

  • 帖子

    24
  • 精华

    0
  • 被关注

    27

论坛等级:侠客

注册时间:2016-09-17

普通 普通 如何晋级?

关于DB块使用与M使用的区别问题

8124

4

2017-03-23 21:10:34

我原以为DB块和M的使用没有区别,都是作为存储数据的单元,直到今天在调试时出现了问题。具体描述如下:建立一个功能,然后在OB1重多次调用此功能,F1函数见下图:

其中本着先赋值后调用的原则,将形参add5定义为IN_OUT接口,这样只在sure为1,add4才输出两个输入量的和。

下图为OB1调用FC1的情况:


在此情况下发现问题:在I0.0为1时,两个调用输出都为各自两个值的和,单是i0.0为0,第一个DB1.dbd112的值不能保持,会变为db1.dbd28的值,再调用几个fc1,情况依然,在i0.0为0时,各输出值均变为最后一个调用FC1的输出值,后来我将所有的db数据更改为M区数据,即使i0.0为零,各输出依然为原值,不会变化。这说明M和DB在调用时是有区别的,即当形参sure处为0,如果使用M,则会保持上次sure为1的状态,只用DB块,则会输出所用调用中,最后一个FC1调用,的上一次输出值,这样相当于所有的FC1调用全部输出一个值。但是为什么会有这个差距?请各位大侠解疑



经过几天琢磨,基本搞清怎么回事了,具体见4楼分析。

结论:在重复调用FC功能时,如果使用DB块作为数据传输,其每次执行数据都是存放在L堆栈中(临时变量),如果说在fc中有输出未使用(例如我刚发帖时的情况,由于有一个开关点将输出的db块断开,不能每次讲输出赋值),则在调用此处时会将上一步输出(即B27-30存放的地址),也赋值给此次输出。

关于DB块使用与M使用的区别问题 已锁定
编辑推荐: 关闭

请填写推广理由:

本版热门话题

SIMATIC S7-300/400

共有54074条技术帖

相关推荐

热门标签

相关帖子推荐

guzhang

恭喜,你发布的帖子

评为精华帖!

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

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

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