Para SIMATIC S7-1200, el programa se escribe en los llamados bloques. De
manera estándar está disponible el bloque de organización Main [OB1]. Este representa la interfaz del sistema operativo de la CPU y, a su vez, este último lo abre automáticamente y lo ejecuta de forma cíclica. En el caso de tareas de control amplias, se subdivide el programa en bloques de programa más pequeños, abarcables y ordenados por funciones. Estos bloques son llamados desde los bloques de organización. Al llegar al fin de bloque se vuelve a saltar al bloque de organización que llama. Más concretamente, a la fila situada detrás de la llamada. 1.1- Programación Lineal
En la programación lineal se guardan las instrucciones en un bloque y se
ejecutan en el orden en el que se han guardado en la memoria de programa. Al llegar al fin del programa (fin de bloque), vuelve a comenzar la ejecución del programa desde el principio. Esto se denomina ejecución cíclica. El tiempo que necesita un dispositivo para ejecutar una vez todas las instrucciones se denomina tiempo de ciclo. La ejecución lineal del programa se utiliza normalmente para controladores sencillos, no demasiado amplios, y se puede implementar en un único bloque de organización (OB). Fig 1. Programación Lineal 1.2- Programación Estructurada
En el caso de tareas de control amplias, se subdivide el programa en
bloques de programa más pequeños, abarcables y ordenados por funciones. Esto presenta la ventaja de permitir la comprobación de las partes del programa de forma independiente y ejecutarlas como una función global durante el funcionamiento. Los bloques de programa deben ser llamados por el bloque de orden superior. Si se detecta un fin de bloque (BE), el programa continuará ejecutándose en el bloque que llama, detrás de la llamada. Fig 2. Programación Estructurada 1.3- Bloques de Usuario Para la programación estructurada existen los siguientes bloques de usuario: OB (bloque de organización): Un OB es llamado por el sistema operativo de forma cíclica y constituye la interfaz entre el programa de usuario y el sistema operativo. En este OB, se comunica a la unidad de control del sistema de automatización qué bloques de programa debe ejecutar a través de comandos de llamada de bloque. FB (bloque de función): El FB necesita un área de memoria asignada para cada llamada (instancia). Al llamar a un FB se le puede asignar, p. ej., un bloque de datos (DB) como bloque de datos instancia. A los datos de este DB de instancia se accede a través de las variables del FB. Si se llama varias veces a un FB, se le deben asignar distintas áreas de memoria. En un bloque de función también pueden ser llamados otros FB y FC. FC (función): Un FC no tiene ningún área de memoria asignada. Los datos locales de una función se pierden tras ejecutar la función. En una función también pueden ser llamados otros FB y FC. DB (bloque de datos): Los DB se utilizan para proporcionar espacio de memoria para las variables de datos. Existen dos tipos de bloques de datos. DB globales, en los que todos los OB, FB y FC pueden leer los datos almacenados o incluso escribir datos en los DB; y DB de instancia, que están asignados a un FB determinado 1.3.1- Bloques de Organización Controlan los procesos siguientes: a)Ejecución cíclica del programa, b)Ejecución del programa controlada por alarmas y c)Tratamiento de errores OB de arranque, OB de ciclo, OB de error de tiempo y OB de diagnóstico: Estos bloques de organización pueden insertarse y programarse fácilmente en el proyecto. No es necesario parametrizar ni llamar a estos bloques de organización. OB de alarma de proceso y OB de alarma cíclica: Estos bloques de organización se deben parametrizar tras insertarlos en el programa. Además, durante el tiempo de ejecución, los OB de alarma de proceso se pueden asociar a un evento mediante la instrucción ATTACH y desasociar nuevamente con DETACH. OB de alarma de retardo: El OB de alarma de retardo se puede insertar y programar en el proyecto. Además, es preciso llamarlo en el programa de usuario mediante la instrucción SRT_DINT. No es necesario parametrizarlo. 1.3.2- Funciones Una función contiene un programa que se ejecuta cada vez que la función es llamada por otro bloque lógico. Las funciones (FC) son bloques lógicos sin memoria. Los datos de las variables temporales se pierden tras haberse procesado la función. Para guardar datos de forma permanente, las funciones pueden utilizar bloques de datos globales. Las funciones se pueden utilizar p. ej. para los siguientes fines: Devolver valores de función al bloque invocante, p. ej. en funciones matemáticas Ejecutar funciones tecnológicas, p. ej. controles individuales con operaciones lógicas binarias
Una función también se puede llamar varias veces en diferentes puntos de un
programa. Esto facilita la programación de funciones complejas que se repiten con frecuencia. 1.3.3- Bloques de Funcion
Los bloques de función contienen subprogramas que se ejecutan cada
vez que un bloque de función es llamado por otro bloque lógico. Los bloques de función son bloques lógicos que depositan sus valores de forma permanente en bloques de datos de instancia, de modo que siguen disponibles tras procesar el bloque. Los parámetros de entrada, salida y entrada/salida se depositan de forma permanente en bloques de datos de instancia. Gracias a ello, continúan disponibles tras el procesamiento del bloque. Por este motivo, se conocen también como bloques con "memoria". 1.3.4- Bloques de Datos
Al contrario que los bloques lógicos, los bloques de datos no contienen
instrucciones, sino que sirven para almacenar datos de usuario. Por tanto, los bloques de datos contienen datos variables, con los que trabaja el programa de usuario. Los bloques de datos globales almacenan datos de usuario utilizables desde todos los demás bloques. El tamaño máximo de los bloques de datos varía en función de la CPU. La estructura de bloques de datos globales puede definirse a discreción. Algunos ejemplos de aplicación son: - Guardar la información en un sistema de almacenamiento. "¿Dónde está cada producto?" - Guardar recetas de determinados productos. EJERCICIO (Planteamiento) Si se deben crear bloques que funcionen prácticamente como "caja negra" en cualquier programa, tienen que programarse utilizando variables. En estos casos, se aplica la norma de que en estos bloques no se deben utilizar entradas/salidas, marcadores, etc. direccionados. Dentro del bloque solo se utilizan variables y constantes. En el siguiente ejemplo se debe crear un bloque de función con declaración de variables que contenga un control de cinta dependiente del modo de operación. Para ello, puede seleccionarse el modo de operación "Manual" con el pulsador "S1" y el modo "Automático" con el pulsador "S2". En el modo de operación "Manual", el motor estará conectado mientras esté accionado el pulsador "S3", mientras que el pulsador "S4" no debe estar accionado. En el modo de operación "Automático", con el pulsador "S3" debe poder conectarse el motor de la cinta, y con el pulsador "S4" (contacto NC), debe poder desconectarse. EJERCICIO (Datos) Lista de asignación: Dirección Símbolo Comentario %E 0.0 S1 Pulsador modo de operación manual S1 NO %E 0.1 S2 Pulsador modo de operación automático S2 NO %E 0.2 S3 Pulsador ON S3 NO %E 0.3 S4 Pulsador OFF S4 NC %A 0.2 M1 Motor de la cinta M1 Nota: En este caso, el pulsador OFF S4 es un contacto NC, para garantizar la seguridad en caso de rotura de hilo. Esto significa que el equipo se detiene automáticamente en caso de rotura de hilo con este pulsador. De lo contrario, ya no se podría detener en caso de rotura de hilo. Por este motivo, en la tecnología de control deben ejecutarse todos los interruptores o pulsadores de parada o desconexión como contactos NC. EJERCICIO (Datos FC)
Parámetros de bloque que forman la interfaz del bloque para la llamada
en el programa. EJERCICIO (Datos FC)
Datos locales que sirven para almacenar resultados intermedios.