CPU为每个相同优先级类别的组织块分配了区域数据L作为堆栈(L堆栈),堆栈包括下列数据:
•程序块中的临时变量;
•组织块的开始信息(组织块与操作系统的接口区);
•FC、FB的参数接口;
•LAD程序中的中间结果。
如果一个程序块中使用临时变量,被调用时将占用组织块的L堆栈,程序块嵌套调用越深占用L堆栈空间越大,例如在OB1中调用FC1,在FC1中调用FC10、FC11,在FC11中调用FC12、FC13,占用L堆栈大小的计算方式见表7-3。
S7-300系列PLC每个优先级别的组织块(按优先级别划分,一些具有S7-400系列PLC功能的S7-300系列PLC CPU如CPU318除外)分配固定大小的L堆栈,每款CPU的L堆栈大小可能不同,具体参数参考CPU样本手册。
表7-3 组织块的L堆栈
S7-400系列PLC为每个优先级别组织块(按优先级别划分)分配L堆栈的大小可以在CPU属性进行配置,可以将没有使用的组织块L堆栈分配给其他需要使用的组织块,优化L堆栈的分配(S7-400系列PLCL堆栈占用CPU的工作存储区)。L堆栈的大小决定程序中区域变量使用的数量。
注意:
如果使用的区域变量超过L堆栈规定的限制,CPU将停机报错。(www.xing528.com)
每个组织块临时变量区前20B被称为开始信息,用于操作系统与组织块间的信息传递,开始信息中的变量类型为只读,可以查询组织块每次调用的信息。例如主循环OB1的开始信息如图7-6所示。
图7-6 OB1开始信息
开始信息数据区不能被修改,如果用户需要自定义临时变量,必须在开始信息后创建,如临时变量“test”,开始地址为L20.0。在OB中定义的临时变量数据类型可以是基本数据类型和复合数据类型,参数类型中只能选择“ANY”指针类型。
当操作系统调用组织块时,将触发的事件类型、OB的优先级、时间及操作系统状态传送到组织块的开始信息中,组织块执行完成后,存储于开始信息中的数据被释放,可以将开始信息传送到全局变量中以保留上次OB调用时的状态信息,例如将OB1开始信息中CPU上次循环扫描周期、最短扫描周期、最长扫描周期读出,并将结果传送到全局变量中,示例程序如下:
这样CPU扫描程序的状态信息存储于MW20、MW22、MW24中,可以用于监控或逻辑判断,每次OB1调用更新变量中存储的状态信息。
大部分组织块是由事件触发,例如PROFIBUS-DP主站、从站通信,如果从站故障,CPU调用OB86一个周期,将事件信息写入OB86的开始信息数据区中,如果从站故障排除,再次调用OB86一个周期并将事件信息写入OB86的开始信息数据区中(事件触发CPU调用OB86,如果没有下传,CPU停机)。通过OB86可以将故障的从站站点读出,用于显示、归档及逻辑判断,例如对3号从站进行状态判断,示例程序如下:
上面的示例程序针对触发OB86的事件进行的判断,如果M100.0为1,表示3号从站故障,如果M100.0为0,表示3号从站无故障或故障消除。STEP7中已经将不同的事件分类放在不同组织块的开始信息数据区中,所有组织块的开始信息都可以读出,用于程序的判断。
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。