Page 270 - 可编程控制器设计原理
P. 270

Principles of Programmable Logic Controller Design
             可编程控制器设计原理


             新的返回地址和上下文信息存储在栈顶;当子程序执行完毕返回时,栈指针向下
             移动,从栈顶取出返回地址和上下文信息,使程序恢复到调用点继续执行。
                  (3) 栈空间的分配

                  S7 - 200 PLC 为调用栈分配了一定的内存空间。这个空间是有限的,其大小
             取决于 PLC 的型号和配置。在编程时,需要清楚这个空间限制,避免因子程序
             嵌套过深导致栈溢出。
                  2. 避免栈溢出

                  (1) 合理设计子程序嵌套
                  过深的子程序嵌套是导致栈溢出的主要原因之一。在设计程序时,应尽量减
             少不必要的嵌套。例如,将一些可以独立完成的功能从嵌套结构中分离出来。原
             本主程序调用子程序 A,子程序 A 调用子程序 B,子程序 B 又调用子程序 C,可

             以考虑将子程序 B 和 C 的部分功能合并或调整调用顺序,减少嵌套层数。另外,
             对于一些复杂的功能,可以采用迭代的方式而不是递归的方式来实现,因为递归
             调用会不断增加调用栈的深度。
                  (2) 使用中断服务程序

                  中断服务程序是一种特殊的程序,它具有独立的执行机制,不会增加调用栈
             的负担。当有紧急情况发生时,如外部设备的故障信号、突发的安全事件等,可
             以使用中断服务程序来处理。例如,当一个安全光幕检测到有人员闯入危险区域
             时,触发中断服务程序立即停止相关设备的运行,而不会影响主程序和其他子程

             序的调用栈。
                  (3) 栈溢出的检测与处理
                  虽然 S7 - 200 PLC 本身没有直接的栈溢出检测功能,但可以通过一些间接的
             方法来检测和处理。例如,在程序中设置一个计数器,记录子程序调用的次数,

             当调用次数超过一定阈值时,认为可能发生了栈溢出,此时可以采取相应的措施,
             如发出警报、停止程序运行等。
                 (四)返回值处理

                  1. 返回值的定义与传递
                  (1) 输出参数的使用规则
                  在 S7 - 200 PLC 中,通常利用子程序的输出参数来传递返回值。在定义子程
             序时,要明确指定输出参数的类型和名称。例如,在一个计算两个数平均值的子



             262
   265   266   267   268   269   270   271   272   273   274   275