如何计算当前程序所需的Local Data 大小并合理设置S7 400 CPU 属性中的Me mory选项卡中的Local Data,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 块实际运行所需的Local data 大于硬件组态中所设置的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 区域用于设置基于优先级的Local Data(如下图所示):
在 PCS7 组态的项目中,在编译CFC 程序后,系统将会自动计算各OB 块所需的Local Data 大小,可以通过交叉索引(Chart reference data -Local data,如下图所示)查询到。
而普通的由用户采用Step7 编程方式编写的程序,程序功能块及OB 块各自的调用结构由用户自行控制,需要在编写完整个程序之后自行计算。
在手动计算 Local Data 时,需要获取如下信息:
1. 各OB 块、FB 块、FC 块各自独立运行时所需的Local Data 大小可以通过如下方式查询到:在 Block 文件夹中选择相应功能块,右键属性 General -
Part2 中即可查看到,如下图所示:
注:嵌套调用时,上一级功能块将不会计算其嵌套调用的FB/FC 所需的Local data 大小;在上图中将不会累加嵌套功能块所需的Local data 大小;
2. 整个程序的调用结构(Call structure)
由于功能块不会计算其嵌套调用的功能块所需到 Local data 大小,因此为了Zui后计算整个OB 所需到Local Data,必须了解整个程序的调用结构。打开任何一个功能块,点击左侧的Call Structure 即可查询到,如下图所示;
3. 当前程序下所使用的所有OB 的优先级
由于 CPU 属性设置中的Local Data 分配基于优先级进行设置,因此需要查看所有当前程序使用的OB 块的中断优先级,打开硬件组态中CPU 属性查看,如下图所示;
获得所有上述信息后,即可计算当前程序所需的Local data 大小。假设当前项目下使用的功能块及OB 块上述相关信息如下表所示:
OB 的调用关系如上图Pic4 所示。根据调用结构计算,单独运行各OB 块时所需的Local data 如下:
OB1: OB1 + Max(Sum(FB1,FC1), FC1) =26+Max(Sum(100,400), 400)=526
OB35: OB35 + Sum(FB1,FC1) =26+Sum(100,400)=526
OB121: OB121=20
OB122: OB122=20
Zui终 CPU 属性中Local data 的设置如下:
优先级 1 所需Local Data 大小至少为526 + 20 + 20 = 566 bytes;
优先级 12 所需的Local Data 大小至少为526 + 20 + 20 = 566 bytes;
注:为什么上述优先级 1 和12 中需要加入两个 20 呢,因为程序运行的任何位置都有可能会执行OB121、OB122,所以需要加上OB121 和OB122 所需的本地数据。PCS7 中(Pic2所示)进行各优先级所需Local data 大小计算时已经自动加入了这部分的大小。
具体的计算法则可以归纳为一下几点:
1. 从内往外,从低往高;
即:基于程序的调用结构,从Zui低层、Zui内层逐步往上、往外计算;
2. 同级取Zui大,内外求和;
即:程序调用结构中,同层 FB/FC 中所需的Local data 取各所需Local data 中的Zui大值;某一优先级所需的Local Data 大小取所有相同优先级OB 所需的Local Data 的Zui大值;上下调用层级各自所需Local Data 需求和;
3. 结果叠加OB121(编程错误)、OB122(I/O 读取错误);
即:Zui终计算出的某优先级所需的 Local data 大小需要叠加上OB121、OB122 所需的Local data;
如果项目中CPU 设置的Local Data 小于程序所需Local Data 大小时会有如下后果:
1. PCS7 中,如果项目硬件组态设置的CPU 的Local data 大小小于程序所需的Local data大小的情况下,PCS7 项目在编译时将提示如下相应警告信息:
2. Step7 编写的程序则不会校验Local data 分配的情况,如果实际运行的CPU 中的LocalData 设置小于正在下载的程序所需的Local data 大小,则在下载程序后运行该优先级下的程序时,CPU 将报告INTF 错误,该优先级的程序将无法执行,并将触发OB88(Processinterrupt OB)错误中断。在CPU 的诊断缓冲区中将生成类似如下的诊断信息:
如果程序中没有插入 OB88,则CPU 将停止运行;
在冗余CPU 的情况下,在主CPU 运行,启动从CPU 时将调用优先级为28 的OB72。如果在优先级为28 的中断中出现Local Data 不足的情况,则主从CPU 都将停止运行。CPU 的诊断缓冲区将生成类似如下的诊断信息:
注:任何优先级为 28 的OB 中出现Local data 不足的情况都将导致该OB 无法执行,CPU诊断缓冲区中将报告该OB 无法执行或未装载的错误。如果未装载该OB 会导致CPU 停止运行,则即便程序中已经加载了这些OB,但由于该OB 出现Local Data 不足而导致无法执行,CPU 仍旧会停止运行。
- 在西门子PLC中数字量模块参数中的术语“漏型” 和“源型”是什么意思 2024-11-26
- 西门子PLC模拟量接线问题的解决方法 2024-11-26
- 西门子S7-1200 高速计数功能简介 2024-11-26
- 如何通过西门子S7-1200与第三方设备实现自由口通信 2024-11-26
- 如何通过STEP 7(TIA 博途)诊断 S7-1500 CPU 的显示面板是否存在? 2024-11-26
- 移植一个 STEP 7 V5.x 项目到 STEP 7 专业版(TIA 博途) 的必要条件 2024-11-26
- 在TIA Protal中Slice片段访问与AT覆盖变量的使用区别 2024-11-26
- TIA Protal中如何通过FB286 读写多个变频 器参数 2024-11-26
- 在 STEP 7 (TIA Protal) 中,如何在 SCL 程序中实现间接寻址 2024-11-26
- 西门子Step7-GRAPH软件的基本信息 2024-11-26
- 西门子Step7 GRAPH 顺控器规则 2024-11-26
- 西门子Step7 GRAPH FB块的参数说明 2024-11-26
- Step7-GRAPH与监控调试相关问题 2024-11-26
- Step7 GRAPH 使用技巧相关问题 2024-11-26
- Step7-SCL 编程语言介绍 2024-11-26