Para las funciones creadas por el usuario en el proyecto o en la librería de usuario, en la compilación del programa se crea un subprograma. Cada vez que se llama, lo primero que se transfieren son los parámetros de entrada de las clases VAR_INPUT y VAR_IN_OUT. Después se salta dentro del subprograma correspondiente. Finalmente, se leen de nuevo los parámetros de salida VAR_OUTPUT y VAR_IN_OUT. El número de subprogramas o de funciones que se pueden definir depende del tipo de controlador.
Por cada función de usuario, solo se crea un subprograma. Este se puede llamar desde varios puntos.
En el siguiente ejemplo, se usan las direcciones FP para facilitar la comprensión del código ensamblador creado a partir de estas. Puesto que el programa se vuelve más complicado cuando se usa direccionamiento FP, se recomienda utilizar variables con nombres descriptivos.
Se llama a la función de usuario User_ADD en el diagrama de contactos:
Tiene el siguiente contenido:
Se genera el siguiente código ensamblador para el PLC:
ST |
R9010 |
Transfiere los parámetros de entrada |
|
F0 |
(*MV*) |
R9010 siempre = TRUE |
|
DT0 |
DT0 -> User_ADD.In1 |
||
DT550 |
|||
F0 |
(*MV*) |
||
DT1 |
DT1 -> User_ADD.In2 |
||
DT551 |
|||
CALL |
0 |
Entrada del subprograma User_ADD |
|
ST |
R9010 |
Vuelve a cargar los parámetros de salida |
|
F0 |
(*MV*) |
||
DT552 |
|||
DT2 |
User_ADD -> DT2 |
||
... |
|||
ED |
Fin del programa principal |
||
SUB |
0 |
Subprograma User_ADD |
|
ST |
R9010 |
||
F22 |
(*PLUS_S*) |
||
DT550 |
|||
DT551 |
|||
DT552 |
si (TRUE) |
||
UserAdd=UserAdd.In1 + UserAdd.In2 |
|||
RET |
salto de vuelta al programa principal |