在三菱 PLC 的程序结构中,一套程序可分为主程序区、子程序区等。子程序是指只有在被调用时才运行,不调用则不执行的程序部分。与主程序不同,主程序是无时无刻都在执行的,而子程序可以优化程序结构,缩短扫描周期。
那么,为什么要使用子程序呢?这是由于 PLC 的扫描周期引起的。PLC 运行的速度即扫描周期,受到 I/O 数量、通讯以及程序大小的限制。扫描的程序越多,扫描周期越长。例如,对三菱 FX3U - 16MT 这款 PLC 进行测试,监控其特殊寄存器 D8011(扫描程序的最短时间)和 D8012(扫描程序的最长时间),可以发现随着程序步数的增加,扫描周期不断变长。由此可见,减少扫描程序是很有必要的,而将一些程序放到子程序区,在不调用时不进行扫描,就能缩短扫描周期。
简述:从使用、调用、结束三个方面阐述子程序与主程序的不同之处。
(一)使用不同
子程序不可以作为独立的加工程序使用,只能通过调用来实现加工中的局部动作。而主程序可以作为独立的加工程序使用。例如在三菱 PLC 中,主程序区的程序是无时无刻都会扫描执行的,而子程序只有在被调用时才会执行。
(二)调用不同
子程序可以被任何主程序或其他子程序调用。比如在三菱 FX5U PLC 中,子程序相关的指令包括子程序调用 CALL 和子程序返回指令 RET/SRET,通过 CALL 指令可以调用指针 P 的子程序进行执行。而主程序不可以被任何其他程序调用。
(三)结束不同
子程序执行结束,自动返回到调用的主程序中。例如当执行子程序中的 SRET 指令时,就会返回到 CALL 指令的下一步执行。而主程序执行结束,整个软件结束运行。
在三菱 FX3U PLC 中,子程序调用指令 CALL 和子程序返回指令 SRET 起着至关重要的作用。
(一)功能介绍
子程序调用 CALL:调用指针 P 的子程序进行执行。例如,当程序中需要执行特定功能时,可以通过 CALL 指令调用对应的子程序。
子程序返回SRET:表示子程序的结束。当子程序执行完毕后,通过 SRET 指令返回到 CALL 指令的下一步,继续执行主程序。
(二)用法说明
位置要求:子程序在 FEND 指令的后面,以标号 P 开头,以返回指令 SRET 结束。
注意事项:子程序调用指令 CALL 与跳转指令 CJ 不能使用相同的标号 P。
一套设备的手动调试程序,下图的M0是自动启动标志位,自动运行时,M0是动作的,只有在自动停止情况下,以下的程序才可以点动触发,通过触摸屏控制M51、M52等等这些点(实际程序中,点动的程序非常长,不止这几步,有好几百步,占用了挺多的扫描时间)
思考题1:为什么要使用子程序呢?
解析:这是由于 PLC 的扫描周期引起的。PLC 运行的速度即扫描周期,受到 I/O 数量、通讯以及程序大小的限制。扫描的程序越多,扫描周期越长。例如,对三菱 FX3U - 16MT 这款 PLC 进行测试,监控其特殊寄存器 D8011(扫描程序的最短时间)和 D8012(扫描程序的最长时间),可以发现随着程序步数的增加,扫描周期不断变长。由此可见,减少扫描程序是很有必要的,而将一些程序放到子程序区,在不调用时不进行扫描,就能缩短扫描周期。
思考题2:位置要求:子程序在 ()指令的后面,以标号 ()开头,以返回指令()结束。
解析:位置要求:子程序在 FEND 指令的后面,以标号 P 开头,以返回指令 SRET 结束。