我们知道,调用STEP7的功能块(FB)时,需要为其指定一个背景数据块(Instance DB),用来存放功能块的输入、输出参数变量及静态变量。在一个大型的程序中,往往会有很多的功能块。如果为每一个功能块(FB)都创建一个背景数据块(Instance DB),不仅费时费力,而且会使程序结构变得混乱,不易理解。为了简化编程,提高程序的可读性,西门子STEP7支持使用多重背景数据块(Multi-instance DB)。
多重背景数据(Multi-instance DB)块本质上也属于背景数据块(Instance DB),不同之处在于它可以作为多个功能块(FB)的背景数据块。比如,在组织块OB1中调用功能块FB1,并且为FB1分配背景数据块DB1;在FB1中调用功能块FB10,通常情况下,我们需要为FB10重新创建一个背景数据块;如果我们不创建新的背景数据块,而是把FB10的父级功能块(FB1)的背景数据块(DB1)分配给FB10使用,那么,DB1就是一个多重背景的数据块。如下图:
西门子的开发环境STEP7 V5.5和博途(TIA Portal)均支持多重背景数据块,下面我们在博途(STEP 7 V13)开发环境下看看如何使用背景数据块:
仍然使用上面的例子,假设FB10有三个输入参数:E_P1、E_P2和E_P3,有一个输出参数,A_R1(输入输出均为布尔变量);
我们要实现如下的简单逻辑:
1)当E_P1和E_P2全为1,并且E_P3为0时,输出A_R1为1;
2)当E_P3为1时,输出A_R1为0;
编写FB10功能块的程序如下图:
然后我们在FB1中调用FB10,如下图:
当我们输入指令"CALL FB10 ",不为其分配背景DB块,直接回车后,系统会自动弹出如下一个对话框:
该对话框要求为FB10分配一个背景数据块,默认选中的是“Single instance DB",在名字栏目中会有一个默认的DB块名称"FB10_DB"。如果此时点击OK,则系统会自动创建一个新的背景数据块(FB10_DB);
但我们希望使用多重背景数据块,所以点击"Multi-instance DB"按钮,系统对话框会变成如下界面:
对话框中有一个默认的接口名称:FB10_Instance_DB,并附有一段解释,表达了这样一个意思:被调用的功能块(本例程中的FB10)会把其数据保存到调用它的功能块(FB1)的背景数据块(DB1)中。该操作可以把相关的数据保存到一个背景数据块中以减少程序中使用的数据块(DB)的数量。
点击确定后,进入FB1的编程,给FB1输入相应的参数,然后保存。如下图:
最后,需要对整个程序块进行编译,完成后会在DB1中看到FB10的输入、输出参数及静态变量,如下图:
上述就是如何在博途环境下使用多重背景数据块,在STEP7 V5.5的环境下大致类似,略有不同,你可以自己试一下。