加入收藏 在线留言 联系我们
关注微信
手机扫一扫 立刻联系商家
全国服务热线15915421161

SIEMENS西门子江西省鹰潭市(授权)伺服电机一级代理商——西门子华中总代理

更新时间
2024-11-26 07:00:00
价格
请来电询价
西门子总代理
PLC
西门子一级代
驱动
西门子代理商
伺服电机
联系电话
15903418770
联系手机
15915421161
联系人
张经理
立即询价

详细介绍

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



相关产品

联系方式

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