问题:
变量是如何储存在临时局部数据中的?
解答:
L 堆栈永远以地址“0”开始。
在 Ln堆栈中,会为每个数据块保留相同个数的字节,作为存放每个块所拥有的静态或局部数据。
当某个块终止时,那么它的空间随之也被重新释放出来。
指针总是指向当前打开块的第一个字节。
实例:
运行等级 | L堆栈中的字节数 | 指针 | ||
调用 OB1 (带有 20n个字节的静态[固定的]数据和局部数据的10个附加字节) | 30 | 0 | ||
调用 FC1 (带有 30n个字节的局部数据)
30 个字节 (OB1) + 30 个字节 (FC1)n | 60 | 30 | ||
调用 FC10 (带有 20n个字节的局部数据)
60 个字节 (OB1 + FC1) +20 个字节 FC10n | 80 | 60 | ||
调用 FC11 (带有 20n个字节的局部数据)
60 个字节 (OB1 + FC1) +20 个字节 FC11n | 80 | 60 | ||
调用 FC12 (带有 30n个字节的局部数据)
60 个字节 (OB1 + FC1) +30 个字节 FC12n | 90 | 60 | ||
调用 FC2 (带有 50n个字节的局部数据)
30 个字节 (OB1) +50 个字节 (FC2)n | 80 | 30 | ||
调用 FC20 (带有 10n个字节的局部数据)
80 个字节 (OB1 + FC2) +10 个字节 FC20n | 90 | 80 | ||
调用 FC21 (带有 10n个字节的局部数据)
80 个字节 (OB1 + FC2) +10 个字节 FC21n | 90 | 80 | ||
调用 FC22 (带有 20n个字节的局部数据)
80 个字节 (OB1 + FC2) +20 个字节 FC22n | 100 | 80 | ||
调用 FC221 (带有 10 个字节的局部数据)
100 个字节 (OB1 + FC2 + FC22) + 10 个字节 FC221n | 110 | 80 |
CPU 在内部处理时使用 L 堆栈。STLn编辑器本身也使用局部数据中的一些字节,例如,块调用时用于传送参数。
因此,不能改变 L 堆栈中的内容。
注意:
每个程序处理级(运行级)为每个优先级类别提供 256 个字节。
- 对于 S7-300, 固定的
- 对于 S7-400, 通常可在硬件组态中的“CPU 属性”下设置。
原创文章,作者:ximenziask,如若转载,请注明出处:https://www.zhaoplc.com/plc340887.html