对于由用户在项目或用户库中创建的函数,会在编译的程序中创建子程序。每次加载时,首先传输类别VAR_INPUT和VAR_IN_OUT的输入参数。然后跳入相应的子程序。最后再次读取类别VAR_OUTPUT和VAR_IN_OUT的输出参数。可以定义的子程序或函数的数量取决于控制器的类型。
对于用户自定义函数,只创建一个子程序。然后可以从各个位置对其加载。
在下例中,使用了FP地址,以便于验证从其创建的汇编程序代码。因为在使用FP地址时程序变得更加复杂,所有建议使用名称有意义的变量以便正常使用。
用户自定义函数User_ADD加载在梯形图中:
具有以下内容:
对于PLC,创建以下汇编程序代码:
ST |
R9010 |
传输输入参数 |
|
F0 |
(*MV*) |
R9010始终 = TRUE |
|
DT0 |
DT0 -> User_ADD.In1 |
||
DT550 |
|||
F0 |
(*MV*) |
||
DT1 |
DT1 -> User_ADD.In2 |
||
DT551 |
|||
CALL |
0 |
User_ADD子程序提示 |
|
ST |
R9010 |
重载输出参数 |
|
F0 |
(*MV*) |
||
DT552 |
|||
DT2 |
User_ADD -> DT2 |
||
... |
|||
ED |
主程序结束 |
||
SUB |
0 |
User_ADD子程序 |
|
ST |
R9010 |
||
F22 |
(*PLUS_S*) |
||
DT550 |
|||
DT551 |
|||
DT552 |
如果(TRUE) |
||
UserAdd=UserAdd.In1 + UserAdd.In2 |
|||
RET |
向后跳转到主程序 |