局部数据堆栈L堆栈保存有:
1、块的本地数据的临时变量
2、组织块的启动信息
3、关于传送参数的信息
4、梯形图程序中逻辑的中间结果
当对组织块编程时,可以声名临时变量(TEMP)只在块执行期间可用,然后它将被覆盖。在首次访问本地数据堆栈之前,必须对本地数据初始化。除此之外,每个组织块还需要20个字节的本地数据来存储它们的启动信息。
CPU只能为当前执行的块的临时变量(本地数据)提供有限的存储空间。该存储器区本地数据堆栈的大小取决于CPU。本地数据堆栈被各优先级均分(默认)。也就是说每个优先级都有它自己的本地数据区,从而保证了较高的优先级和它们的OB自身的本地数据有可用的空间。
下图用一个实例给出了优先级的本地数据分配,其中在L堆栈中,OB1被OB10中断,而后者又被OB81中断。
注意事项:
1、当使用临时变量时,请牢记它们仅在相关块内有效或仅可作为在该块中调用的其它块的以前本地数据使用。尤其,当在关闭并重新打开块时,不能确保临时变量具有与完成上一次块调用时相同的数值。当调用块时,临时变量被定义为未定值,且当在块中初次使用临时变量时,必须重新初始化。 2、OB和它相关的块中所有的临时变量(TEMP)都保存在L堆栈中。如果使用了过多的嵌套的层,在执行块时,L堆栈可能会溢出。 3、如果超出一个L堆栈的允许大小,CPU将切换到STOP模式。 4、测试程序中的L堆栈(临时变量)。 5、同步错误OB的本地数据需求也必须加以考虑。
分配本地数据给优先级 本地数据堆栈中,并不是每个优先级都需要同样大小的存储空间。在STEP 7中,通过分配参数,可以为S7-400 CPU和CPU 318的各个优先级分配不同大小的本地数据区。任何不需要的优先级都可以将其取消。这样S7-400 CPU和CPU 318中其它优先级的存储器区便增大了。在程序执行期间,取消激活的OB将被忽略,以节省循环时间。 而对于其它的S7-300 CPU,每个优先级被分配了固定大小的本地数据(256个字节),不能对其修改。
|