加入收藏 在线留言 联系我们
关注微信
手机扫一扫 立刻联系商家
全国服务热线15903418770
公司新闻
如何计算西门子 S7-400 CPU 所需的Local Data 大小
发布时间: 2024-04-12 15:21 更新时间: 2024-05-13 07:00

如何计算当前程序所需的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 仍旧会停止运行。



联系方式

  • 电  话:15915421161
  • 联系人:张经理
  • 手  机:15903418770
  • 微  信:15915421161