Programación Pou
Las subrutinas y rutinas de servicio de interrupción son la estructura organizativa del programa. Se denominan POU junto con el programa principal.
En S7-200, cada POU se puede cifrar individualmente para proteger la propiedad intelectual del autor.
Subprogramas
Los subprogramas pueden organizar todo el programa de usuario de forma estructurada según funciones. Un "buen" programa siempre divide todas las funciones de control en varios bloques de subfunciones que se ajustan a las reglas de control de procesos. Cada bloque de subfunciones puede estar compuesto por una o más subrutinas. Esta estructura también es muy propicia para la depuración paso a paso, evitando que muchas funciones se integren y no puedan determinar el problema. Además, se pueden aplicar varios proyectos similares con solo realizar algunas modificaciones en el mismo programa;
Cuando se llama a la subrutina, retendrá el resultado de la operación lógica actual, pero no guardará el contenido del acumulador (ACx).
El subprograma regresa automáticamente al final de la ejecución, sin agregar una instrucción de retorno; las instrucciones de retorno condicional también se pueden usar en medio del subprograma.
Los subprogramas no se pueden saltar usando declaraciones de salto.
Cuando la subrutina regrese, regrese a la instrucción que llamó a la subrutina y continúe ejecutando el programa del siguiente nivel.
La CPU S7-200 puede llamar hasta 64 subrutinas (128 para la CPU226).
Los subprogramas se pueden llamar anidados, es decir, el subprograma se puede volver a llamar dentro de un subprograma, y un * * * se pueden anidar 8 niveles.
En la rutina del servicio de interrupción, la subrutina no se puede llamar y la llamada de subrutina no puede aparecer en la subrutina llamada por la rutina del servicio de interrupción.
Los subprogramas se pueden llamar con parámetros y los tipos de parámetros se pueden configurar en la tabla de variables locales del subprograma; un * * * puede tomar 16 parámetros (parámetros formales).
Para obtener información detallada sobre las subrutinas, consulte la sección correspondiente del manual del sistema S7-200.
Rutina de servicio de interrupción (abreviatura de rutina de servicio de interrupción)
La función de interrupción es una función importante del S7-200. Se utiliza para manejar operaciones que no están relacionadas con la ejecución. secuencia del programa de usuario de manera oportuna, o para predecir cuándo ocurrirá un "evento".
El S7-200 utiliza rutinas de servicio de interrupción para responder a estos eventos de interrupción internos y externos. Las rutinas de servicio de interrupción deben estar asociadas con eventos de interrupción específicos a través de la programación del usuario para poder funcionar. La mayor diferencia entre las rutinas de interrupción y las subrutinas es que los programas de usuario no pueden llamar a las rutinas del servicio de interrupción y solo pueden activarse mediante eventos específicos.
Es imposible predecir con precisión cuándo se ejecutará la rutina del servicio de interrupción.
El programa de servicio de interrupciones solo puede ingresar al estado de espera de interrupciones y ejecución en cualquier momento después de que el programa de usuario asocie el número (nombre) del programa de servicio de interrupciones con el evento de interrupción y se interrumpa el sistema abierto.
Se pueden conectar múltiples eventos de interrupción a la misma rutina de servicio de interrupción; una rutina de servicio de interrupción solo puede conectarse a un evento de interrupción.
La rutina del servicio de interrupción también se puede desconectar de los eventos de interrupción a través del programa de usuario; los eventos de interrupción específicos en la cola se pueden cancelar mediante instrucciones; también puede usar instrucciones para deshabilitar todas las interrupciones.
Un interruptor solo necesita conectarse al evento de interrupción una vez, a menos que sea necesario volver a conectarlo.
Al ingresar a la rutina del servicio de interrupción, el sistema operativo del S7-200 "protegerá la escena". Al regresar de la rutina de interrupción, el estado actual de ejecución del programa aún se restaurará.
Los eventos de interrupción tienen diferentes prioridades.
La rutina del servicio de interrupción ya no se puede interrumpir. Cuando se ejecuta el programa de interrupción, si hay más eventos de interrupción, se pondrán en cola en orden de tiempo y prioridad.
La rutina del servicio de interrupción regresará automáticamente al final de la ejecución, o puede regresar a la mitad bajo control lógico.
La CPU S7-200 puede utilizar hasta 128 programas de interrupción y los programas de interrupción no se pueden anidar.
Solo se puede llamar a un nivel de subrutina en el programa de interrupción. Las subrutinas en el programa de interrupción no se pueden anidar, de lo contrario se producirá un error.
El programa de interrupción debe ser breve y otros procesos no deben retrasarse demasiado, es decir, cuanto más corto, mejor.
La descripción de las instrucciones de interrupción en el manual del sistema S7-200 es muy detallada y se recomienda que los principiantes la lean atentamente.
Salte a la etiqueta (n) especificada en el programa de rama de instrucciones de etiqueta (JMP). Cuando se acepta un salto, la parte superior del valor de la pila siempre es 1 lógico. La instrucción de etiqueta (LBL) marca la ubicación del destino del salto (n). Puede utilizar la instrucción "saltar" en el programa principal, subrutina o programa de interrupción. Las instrucciones "Saltar" y sus correspondientes "etiquetas" siempre deben estar ubicadas en la misma sección de código (programa principal, subrutina o rutina de interrupción). No puede saltar del programa principal a una etiqueta dentro de una subrutina o rutina de interrupción. Del mismo modo, no puede saltar de una subrutina o rutina de interrupción a una etiqueta fuera de la subrutina o rutina de interrupción. Puede utilizar una instrucción de "salto" en un segmento SCR, pero la instrucción de "marca" correspondiente debe estar en el mismo segmento SCR.
Preguntas frecuentes
Al utilizar subrutinas, ¿por qué la acción solo se puede ejecutar una vez o algunos estados no se pueden finalizar?
Si la acción no se puede repetir o el estado no se puede finalizar (parece estar bloqueado) y estas funciones están relacionadas con subrutinas, verifique si la subrutina se puede llamar condicionalmente. Después de ejecutar la acción anterior, o después de ingresar a un determinado estado, las condiciones para llamar a la subrutina ya no son válidas y no se pueden "activar" nuevamente. Sin embargo, la instrucción para salir del estado anterior o restablecer se encuentra en la subrutina. Lo que inevitablemente causará el fenómeno anterior.
Ver: Llamar condicionalmente a temporizadores en subrutinas.
¿Por qué los subprogramas cuyos parámetros y variables formales están definidos como out interfieren entre sí cuando el subprograma se llama varias veces?
Esto se debe a que el parámetro formal definido como tipo OUT participa en la operación dentro de la subrutina. Todos estos parámetros deben definirse como tipo IN_OUT.
¿Por qué las tareas de cálculo relacionadas con las rutinas del servicio de interrupción ocasionalmente dan resultados incorrectos?
La razón de este fenómeno es el mecanismo inadecuado para transferir datos entre el (sub)programa principal y el programa de interrupción.
Las rutinas de interrupción se pueden ejecutar en cualquier momento. Si el programa principal (o subrutina) está operando los datos utilizados por el programa de interrupción en este momento, los resultados intermedios pueden llevarse al programa de interrupción, lo que provoca que los resultados del cálculo cambien. Asimismo, los datos generados en el programa de interrupción tienen un impacto similar en los cálculos del (sub)programa principal.
La solución es garantizar que los datos que pueden producir resultados intermedios no estén directamente involucrados en el cálculo:
Utilice instrucciones STL para calcular los datos utilizados por una única rutina de interrupción
Al programar el LAD, prepare los últimos datos (datos únicos) con la instrucción MOV (transferencia).
Al preparar un lote de datos, las interrupciones se desactivan primero y luego se permiten una vez finalizadas.
La preparación de datos simple o el cálculo de resultados se pueden completar directamente en el programa de interrupción.
Para obtener más información, consulte los capítulos correspondientes de las instrucciones de interrupción en el manual del sistema S7-200.
¿La rutina del servicio de interrupción parece no ejecutarse?
Puede agregar un segmento de programa de prueba en el programa de interrupción, como usar SM0.0 (generalmente "1") para establecer un punto de salida (usando la instrucción Set) para ver si ingresa al servicio de interrupción. rutina.
El programa de interrupción no se ejecuta, principalmente debido a la inicialización (conexión de eventos de interrupción y programas de interrupción) o no "al interrumpirse".
Se debe utilizar SM0.1 (o disparador de flanco) para realizar la inicialización y luego interrumpir.
No existe un tiempo fijo para la ejecución de subrutinas y programas de interrupción, sino que depende del objeto de control y los requisitos. Las rutinas de interrupción se activan mediante eventos de interrupción correspondientes, como temporizadores, contadores o comunicaciones. El 200 Series One * * * tiene 33 eventos de interrupción. Es esencialmente diferente de la instrucción de salto, principalmente en que la generación y activación de eventos de interrupción no se ven afectados por el tiempo de exploración del programa principal y tienen una prioridad más alta y más rápida.
La operación y el procesamiento de alta velocidad requieren rutinas de interrupción.