背景数据块DB里的数据可以在不调用它的程序块里修改它的值?
刘玉蓉
发布于2014-10-17 16:52
25
0
标签:
背景数据块的值只能在所使用其的程序块FB里使用和修改,其它的程序块应该来说是不能修改背景数据块的值了,但是如图:我建了一个FB1,然后在FB1所带的背景数据块DB1和DB2里有一些数据如(DB2.DBW2)。这里的值可以在OB1里通过MOVE对它进行赋值?我的意思就是说背景数据块的值其它块应该修改不了的。但是我这里仿真了一下,确实可以修改,也就是说即使不调用这个FB1,也可以单独用指令修改这个背景数据块的值。我觉得要修改应该只能修改这个共享数据块的值吧?
佳答案
背景数据块是专门指定给某功能块FB或系统功能块SFB使用的数据块,它是FB或SFB运行时的工作存储区。背景数据块用来保存FB和SFB的实参和静态数据,背景数据块中的数据是自动产生的。
操作系统在编译功能块时,将自动生成与功能块FB对应的背景数据块中的数据,其变量与对应的功能块中的变量声明表中的变量相同,不能在背景数据块中增减变量,只能在数据显示方式下修改其实际值(打开相应的数据块,选择菜单View(浏览)/Data View(数据显示)),或者通过对应的功能块中的变量声明表来修改(双击打开相应的FB,如可以修改上面变量声明表中静态变量STAT中静态变量中的“Initial Value”(初始值))。
从上面的分析可以知道,背景数据块中的变量不能增减,但背景数据块中的数据是可以修改的,但很少这样做,因为背景数据块的内部结构与其对应的FB的变量声明表一致,又被称为私有存储器区,有些功能块FB的初始值不能随便改变,一般通过对应的FB的变量声明表中为形式参数赋初值,它被自动写入相应的背景数据块中;如果你人为改变背景数据块中的数据(FB形式参数的实参),尤其是修改FB变量声明表中输出、输入-输出参数(中间运行结果),可能影响程序的执行,产生严重的后果。