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所示)进行各优先级所需Localdata 大小计算时已经自动加入了这部分的大小。
具体的计算法则可以归纳为一下几点:
1. 从内往外,从低往高;
即:基于程序的调用结构,从Zui低层、Zui内层逐步往上、往外计算;
2. 同级取Zui大,内外求和;
即:程序调用结构中,同层 FB/FC 中所需的Local data 取各所需Local data 中的Zui大值;某一优先级所需的LocalData 大小取所有相同优先级OB 所需的Local Data 的Zui大值;上下调用层级各自所需LocalData 需求和;
3. 结果叠加OB121(编程错误)、OB122(I/O 读取错误);
即:Zui终计算出的某优先级所需的 Local data 大小需要叠加上OB121、OB122 所需的Localdata;
如果项目中CPU 设置的Local Data 小于程序所需Local Data 大小时会有如下后果:
1. PCS7 中,如果项目硬件组态设置的CPU 的Local data 大小小于程序所需的Localdata大小的情况下,PCS7项目在编译时将提示如下相应警告信息:
2. Step7 编写的程序则不会校验Local data 分配的情况,如果实际运行的CPU 中的LocalData设置小于正在下载的程序所需的Local data 大小,则在下载程序后运行该优先级下的程序时,CPU将报告INTF 错误,该优先级的程序将无法执行,并将触发OB88(ProcessinterruptOB)错误中断。在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仍旧会停止运行。