如何计算当前程序所需的Local Data 大小并合理设置S7 400 CPU 属性中的Memory选项卡中的LocalData,S7 400 CPU 中的Local data 设置不当会导致什么问题?
Local data 顾名思义为本地数据,在西门子控制器中有一部分内存空间被设置为L 区间,它被用于控制器在运行程序时存储临时数据。由于编写FB/FC程序的需要和OB 中调用功能块结构的不同,不同的OB由于调用不同的FB/FC,因此所需的Local data 的大小各不相同(被调用的FB/FC将占用当前调用他的OB 块的Local Data 资源)。在控制器硬件组态中的CPU属性设置中,Memory 选项卡用于设置Local data 的分配。如果相应OB 块实际运行所需的Localdata 大于硬件组态中所设置的Local Data 大小,那么相应的程序将无法运行,CPU将报告INTF 错误,甚至更为严重的情况下CPU 可能会停止运行。但如果盲目将
Local Data 的分配设置过大,将会浪费一部分宝贵的CPU 内存空间。
S7 300CPU 中的Local data 不可修改,每个优先级固定设置为256 bytes,S7- 400的Localdata则可以人为修改。由此可以看出正确设置S7400 CPU 的Local Data 的大小非常重要。在控制器硬件组态中CPU属性 Memory 选项卡的Local Data 区域用于设置基于优先级的LocalData(如下图所示):
在 PCS7 组态的项目中,在编译CFC 程序后,系统将会自动计算各OB 块所需的Local Data大小,可以通过交叉索引(Chart reference data -Localdata,如下图所示)查询到。
而普通的由用户采用Step7 编程方式编写的程序,程序功能块及OB 块各自的调用结构由用户自行控制,需要在编写完整个程序之后自行计算。
在手动计算 Local Data 时,需要获取如下信息:
1. 各OB 块、FB 块、FC 块各自独立运行时所需的Local Data 大小可以通过如下方式查询到:在Block 文件夹中选择相应功能块,右键属性 General -
Part2 中即可查看到,如下图所示:
注:嵌套调用时,上一级功能块将不会计算其嵌套调用的FB/FC 所需的Local data 大小;在上图中将不会累加嵌套功能块所需的Localdata 大小;
2. 整个程序的调用结构(Call structure)
由于功能块不会计算其嵌套调用的功能块所需到 Local data 大小,因此为了Zui后计算整个OB所需到Local Data,必须了解整个程序的调用结构。打开任何一个功能块,点击左侧的CallStructure 即可查询到,如下图所示;
3. 当前程序下所使用的所有OB 的优先级
由于 CPU 属性设置中的Local Data 分配基于优先级进行设置,因此需要查看所有当前程序使用的OB块的中断优先级,打开硬件组态中CPU 属性查看,如下图所示;
获得所有上述信息后,即可计算当前程序所需的Local data 大小。假设当前项目下使用的功能块及OB块上述相关信息如下表所示:
OB 的调用关系如上图Pic4 所示。根据调用结构计算,单独运行各OB 块时所需的Local data如下: