Subrutinas

Anuncio
Subrutinas
Utilizar subrutinas
Las subrutinas facilitan la estructuración del programa. Las operaciones utilizadas en el programa
principal determinan la ejecución de la subrutina en cuestión. Cuando el programa principal llama
a una subrutina para que ésta se ejecute, la subrutina procesa su programa hasta el final. El
sistema retorna luego el control al segmento del programa principal desde donde se llamó a la
subrutina.
Las subrutinas sirven para estructurar o dividir el programa en bloques más pequeños y, por tanto,
más fáciles de gestionar. Esta ventaja se puede aprovechar a la hora de realizar tareas de
comprobación y mantenimiento del programa. Los bloques más pequeños facilitan la
comprobación y la eliminación de errores tanto en las subrutinas como en el programa entero. La
CPU también se puede utilizar más eficientemente, llamando al bloque sólo cuando se necesite, en
vez de ejecutar todos los bloques en cada ciclo.
Por último, las subrutinas se pueden transportar si se hace referencia únicamente a sus
parámetros y a su memoria local. Para que una subrutina se pueda transportar, se debe evitar la
utilización de variables/símbolos globales (direcciones absolutas en las áreas de memoria I, Q, M,
SM, AI, AQ, V, T, C, S, AC). Si la subrutina no tiene parámetros de llamada (IN, OUT o IN_OUT), o si
utiliza únicamente variables locales en la memoria L, se podrá exportar a e importar de un
proyecto diferente.
Para utilizar una subrutina en el programa es preciso realizar tres tareas:
Crear la subrutina.
Definir los parámetros (en caso necesario) en la tabla de variables locales de la subrutina.
Llamar a la subrutina desde la unidad de organización del programa en cuestión (p.ej.,
desde el programa principal (OB1) o desde una subrutina diferente).
En KOP y FUP
STEP 7-Micro/WIN 32 genera automáticamente un cuadro de llamada a subrutina tras haberse
creado la subrutina y definido sus parámetros de llamada. La operación de llamada tiene el
número y el tipo correctos de parámetros de entrada/salida, conforme a las declaraciones
realizadas en la tabla de variables locales de la subrutina. Tras haberse creado una subrutina, ésta
aparece en el árbol de operaciones. Para insertar la llamada a la subrutina en una unidad de
organización del programa diferente, arrastre el icono de la subrutina desde el árbol de
operaciones hasta la otra unidad de organización del programa.
Crear subrutinas
Utilice uno de los métodos siguientes para crear una subrutina:
En el menú Edición, elija los comandos Insertar > Subrutina.
En al árbol de operaciones, haga clic con el botón derecho del ratón en el icono del bloque
del programa y elija el comando Insertar > Subrutina del menú emergente.
En la ventana del editor de programas, haga clic con el botón derecho del ratón y elija el
comando Insertar > Subrutina del menú emergente.
El editor de programas cambiará de la unidad de organización del programa visualizada
anteriormente a la nueva subrutina. En el borde inferior del editor de programas aparecerá una
nueva ficha correspondiente a la nueva subrutina.
Ahora puede trabajar en la nueva subrutina, o bien retornar a la unidad de organización del
programa donde se encontraba previamente:
Si desea asignar ahora mismo los parámetros de la subrutina, puede definirlos utilizando la
tabla de variables locales de la misma.
Notas:
 Recuerde que cada unidad de organización del programa tiene su propia
tabla de variables locales. Las variables locales de la subrutina se deben
definir en la tabla que aparece cuando está seleccionada la ficha de la
misma. Verifique que esté seleccionada la ficha correcta cuando edite la
tabla de variables locales.
 En cada llamada a subrutina se pueden utilizar 16 parámetros de
entrada/salida como máximo. Si intenta cargar en la CPU un programa que
exceda este límite, aparecerá un mensaje de error.
Si desea escribir el programa de la subrutina mientras está seleccionada la ficha de la
misma, comience a trabajar en la ventana del editor de programas.
Si desea trabajar en una unidad de organización del programa diferente, haga clic en la
ficha de la unidad en cuestión para visualizarla en la ventana del editor de programas.
No utilice operaciones RET para terminar las subrutinas
En una subrutina no se puede utilizar la operación END.
Los editores insertan automáticamente las operaciones absolutas que finalizan las unidades de
organización del programa (END para el OB1, RET para SBR y RETI para INT). A continuación se
muestra un ejemplo al respecto.
Llamar a subrutinas
Tras insertar una nueva subrutina y definir sus parámetros (en caso necesario) en la tabla de
variables locales de la misma, se puede disponer una llamada a la subrutina en una unidad de
organización del programa diferente. (Una subrutina se puede llamar desde el programa principal
(OB1), desde otra subrutina o desde una rutina de interrupción, pero la subrutina no se puede
llamar a sí misma).
KOP, FUP
En los programas KOP y FUP se genera un cuadro de llamada personalizado tras asignar los
parámetros a la subrutina en la tabla de variables locales de la misma. La operación de llamada
incluye automáticamente el número y el tipo correctos de parámetros de entrada y de salida de la
subrutina en cuestión.
Para insertar la llamada a la subrutina en una unidad de organización del programa KOP o FUP:
1.
Abra la unidad de organización del programa deseada en el editor de programas y
desplácese hasta el segmento donde desea insertar la llamada a la subrutina.
2.
En el árbol de operaciones, haga doble clic para abrir la carpeta "Subrutinas". Puede
arrastrar la operación de llamada desde el árbol y soltarla en el segmento deseado, o bien situar el
cursor en la correspondiente celda del editor de programas y hacer doble clic en la operación de
llamada en el árbol de operaciones.
3.
En el programa, edite los parámetros de la operación y asigne operandos válidos a cada
uno de los parámetros. Los operandos válidos son: direcciones de la memoria, constantes,
símbolos globales, variables locales de la unidad de organización del programa donde se ha
insertado la operación de llamada (mas no las variables locales de la subrutina a la que se llama).
Nota: Si se inserta una llamada a una subrutina y se modifica luego la tabla de variables locales de
la misma, la llamada dejará de ser válida. Entonces es necesario borrar la llamada no válida y
sustituirla por una operación de llamada actualizada que refleje los parámetros correctos.
Anidado y recurrencia
En un programa se permiten 64 subrutinas como máximo. Se pueden anidar (situar una llamada a
subrutina en otra) hasta ocho subrutinas (profundidad de anidamiento = 8 niveles). No se permite
la recurrencia directa. Por ejemplo, SBR0 no puede estar incluida en SBR0. Sin embargo, se puede
utilizar la recurrencia indirecta. Más abajo se muestran ejemplos al respecto. La recurrencia se
debe utilizar con cautela.
Descargar