Descripción de cómo diferenciar variables «out» y «temp» en subrutinas: El S7-200 contiene una memoria de datos locales que puede separarse para su utilización como memoria intermedia o para la asignación de parámetros formales. Se pueden distinguir las siguientes zonas de datos locales:
- 64 Bytes de datos locales para el programa principal,
- 64 Bytes para los 8 niveles en el anidamiento de subrutinas
- 64 Bytes para programas de interrupción.
Si en un programa de Micro/WIN se hacen llamadas a varias subrutinas en el mismo nivel de anidamiento, todas éstas utilizan la misma zona de memoria de datos locales. Si se utilizan los tipos de variable OUT y TEMP, estas direcciones locales aceptan los valores de los datos de la subrutina anterior en el mismo nivel de anidamiento. Sólo al escribir las variables locales es cuando éstas adquieren el valor correcto. Si no se escriben, se mantiene el valor de la última subrutina llamada en el nivel de anidamiento. Esto provoca problemas, especialmente en la evaluación de los flancos. Remedio: Para evitar problemas ante este comportamiento del sistema, se deben definir las variables de salida locales como «IN_OUT» evitando definirlas como “OUT”, y seleccionando variables locales en lugar de “TEMP” para que se puedan evaluar en el siguiente ciclo
- Para comprobar este comportamiento, en cada nivel de anidamiento utilizado puede llamar en la fase de desarrollo a una subrutina en el segmento 1, la cual escriba toda la zona de datos locales. Comprobando las funciones del programa, los tipos de variables seleccionados de forma errónea se ven muy rápidamente.
- Motivo: Los tipos de datos locales OUT y TEMP no se inicializan ni se borran en las llamadas a las subrutinas. Al contrario, los tipos de datos locales IN e IN_OUT se escriben al comienzo de la llamada a la subrutina con los valores asignados o se escriben con variables globales.
- Importante: Al programar en KOP o FUP los últimos 4 bytes de datos locales se reservan para el Step7 Micro/WIN.