子程序调用需要注意以下几点:
自动返回与跳转语句
子程序在执行到末尾时会自动返回,不需要加返回指令。
子程序不能使用跳转语句跳入或跳出。
参数传递
子程序可以带参数调用,需要在子程序的局部变量表中设置参数的类型。
带参数子程序编程时,如果同一周期内多次调用,不应使用上升沿、下降沿、定时器和计数器指令,因为它们属于全局变量或全局使用。
选用OUT时,无论下一个程序执行与否,上一个子程序运行的OUT结果会保留到下一个程序。当输出结果是BOOL量时,结果是自锁的,或者置位,或者在程序里还要再次用到时,用IN_OUT。当输出结果是数值时,一定要用IN_OUT。做功能子程序时,尽量不要用OUT;如果某子程序只调用一次,可以使用OUT,如果多次调用就用IN_OUT。对于没有初始值的OUT和TEMP变量,需要先赋初始值。
中断程序子程序调用
中断服务程序不能由用户程序调用,而只能由特定的事件触发执行。
中断是随机发生的,且必须立即响应。
指令或子程序的使能(EN)管脚
指令或者子程序的使能(EN)管脚前没有任何条件时,会有编译错误。
子程序命名与调用
通过指定子程序的名称和任何实参,调用子程序,这与调用独立存储过程或函数的方式相同。
可以使用一个或多个限定符来调用子程序,也可以不使用限定符来调用子程序,这些限定符是父级子程序的名称或带标记的匿名块。
子程序声明与定义
子程序的声明和定义必须匹配,否则会产生编译错误。
子程序的参数列表必须与声明相匹配。
子程序可以返回一个值,也可以不返回。
子程序可以在不同的源文件中定义和调用。
子程序的可读性与维护性
子程序要取一个有意义的名字,能够从字面上看出这个子程序的功能。
有必要给子程序书写一定的文档。
子程序中代码的布局不应该过于随意,要使用同一种布局风格。
不应该对子程序中的形参值作任何修改,最好用final进行标识。
子程序可以跟全局变量进行通信,但是在一般情况下,应该直接地和其他子程序通信,而不是读写全局变量。
一个子程序最好是有着单一的目的,即明确的目的。
子程序中用变量时(特别是整形)注意防范错误数据。
子程序中的形参意义明确,不要说有些形参都还没用,在函数调用时,这也是压栈和弹栈的,不要浪费时间和空间。
子程序的形参个数一般上限为7个,最好不要超过这个数。
对每个形参最好是加以注释。
子程序调用次数与返回值
如果子程序调用次数为1次,可以省略不写调用次数。
如果使用次数大于1,则必须注明调用次数。
子程序结尾必须是M99结束。
中断服务子程序
用户在调用子程序时是主动的,一般都是在已经处理好了进位等标志后才会去调用子程序。
即使子程序调用时标志位不自动进栈保护,也不会影响主程序。
子程序与全局变量的通信
通常建议直接与其他子程序通信,而不是读写全局变量,以减少潜在的错误和维护难度。
以上是子程序调用需要注意的各个方面,希望对你有所帮助。