在S7-CPU中使用嵌套程序的注意事项
回答:S7-CPU支持嵌套程序,但对于不同的CPU类型,在使用时需要注意一些问题。
1. 不同的CPU类型,支持的嵌套程序深度不同,用户可在CPU的技术数据中查到此参数,以6ES7315-2AG10-0AB0为例。
图1:CPU的嵌套深度参数
2. 用户按照以下方式使用嵌套功能:
a) 在某个优先级组织块中调用多个嵌套FC/FB。
例如,在OB1 (优先级为1)调用FC1,FC1中调用FC2,FC2中调用FC3,等等,一直到FC7,与OB1共8层深度。如果在FC7 中又调用了FC8 ,此时会导致CPU 停机,在CPU在线信息界面中可查看到此情况,如图2所示。用户也可在OB35(优先级为12)调用FC11,FC11中调用FC12,FC12中调用FC13,等等,一直到FC17。
图2:嵌套调用
b) 在某个优先级中调用某个FC,此FC多次调用自身。
例如,在OB1 (优先级为1)调用FC1,FC1中仍然调用FC1,用户在FC1 的程序中必须编程累计FC1被调用的次数,如果达到了7次,则需要从FC1 中跳出调用(此方法即为软件行业广泛应用的递归编程方法)。
如果在FC1 调用自身次数超出了CPU允许的嵌套深度,此时会导致CPU停机。
3、当用户在使用嵌套功能时,可能出现几种错误:
a) The nesting depth of block calls (U-Stack) is too high(嵌套深度太高)。
例如:
1、用户在某个优先级(如OB1)中调用嵌套程序深度超出所使用CPU支持深度,如第2节(a) 部分所描述。
2、用户在某个优先级(如OB1)中调用嵌套程序深度超出所使用CPU支持深度,如第2节(b) 部分所描述。
此时CPU将报16#4575错,如图3:
图3:同步错误嵌套1
b) The nesting depth of synchronous errors is too high(同步错误嵌套深度太高)。例如:
1、用户在OB1中使用L DB1.DBB0 语句(CPU中并未下载DB1),
2、此时CPU出现编程错误,将调用OB121。
3、如果用户在下载的OB121中又使用了L DB1.DBB0 指令,将导致CPU停机。
本站仅提供信息发布平台,文章仅代表作者个人观点。