Arquitectura de programacin Bloques Pablo San Segundo C206
Arquitectura de programación Bloques Pablo San Segundo C-206 pablo. sansegundo@upm. es
Bloques de programación � Bloques de organización OB<ID> � Llamados por el sistema operativo: OB 1, OB 80, OB 100 etc. � Funciones � Bloques FC<ID> simples para encapsular código función FB<ID> � Bloques complejos para encapsular código � Permiten sintaxis más compleja (e. g. S 7 -GRAPH) � Llevan asociados un bloque de datos � Bloques de datos DB<ID> � Memoria auxiliar: área de datos
Arquitectura de bloques CALL<FCX> CC CALL<FBX, DBX> OB 1: Ciclo principal Sistema Operativo UC FBX FCX DBX Bloque de datos de instancia A todos los bloques OBX DBX Bloque de datos global
BLOQUES DE ORGANIZACIÓN (OB)
Bloques OB: Arranque S 5 95 -U Rearme tras desconexión de la alimentación Arranque desde pestaña en carcasa o desde PC (e. g. bus MPI)
Bloques OB: Ciclo principal S 5 95 -U OB 13 Programa de usuario
Bloques OB: S 7 -300 y 400 OB 10 -17 OB 20 -23 OB 30 -38 OB 40 -47 OB 80 -87 OB 100 -102 OB 121 OB 122 Ciclo scan Alarmas horarias Alarmas de retardo (requieren SFC 32) Alarmas cíclicas Alarmas de proceso Otras Alarmas/Errores (watchdog, ejecución, bastidor, etc. ) Arranque/Rearme (i. e. tras desconexión) Error de programación Error de acceso a la periferia
BLOQUES DE DATOS (DB)
Bloques de datos (DB) X, B, W, D DB<N> Offset empezando por el bit 0. 0 <IDENTIFICADOR_DE_BLOQUE>. DB<TAMAÑO><DIRECCION> EJEMPLOS DE USO L T DB 1. DBW 0 MW 10 //operando genérico L T ”temperatura”. horno MW 10 //operando simbólico AUF L T DB 1 DBW 0 MW 10 //apertura de un bloque de datos global //se omite el identificador de bloque Acceso a bits U E 124. 0 S DB 1. D BX 0. 0
Bloques de datos (DB): entorno SIMATIC DEFINICION (Edición de bloque CTRL + 4) VISUALIZACIÓN DE VALORES (Edición de bloque CTRL + 5)
BLOQUES DE TIPO FUNCIÓN (FC y FB)
Esquema general de operadores
Operadores para bloques Operador SR CALL<ID_BLOQUE> /ER=0 [, <ID_BLOQUE_DATOS>] Descripción Observaciones LLamada incondicional a un bloque UC <ID_FUNCION> /ER=0 Llamada incondicional a un bloque No permite paso de parámetros ni llamadas a bloques FB CC <ID_FUNCION> RLO=1, /ER=0 Llamada a un bloque condicionada a RLO=1 No permite paso de parámetros ni llamadas a bloques FB Fin incondicional de bloque (autómata) BE BEA /ER=0 Fin incondicional de bloque (usuario) BEB RLO=1, /ER=0 Fin de bloque si RLO=1 Provocan primera consulta siempre (/ER=0)
Ejemplo: Macroetapa en grafcet Bit de Trabajo BLOQUE INVOCANTE (OB 1) A FC 1 U X 3 Uf S M 1 R X 3 U M 1 SPBN _001 CALL FC 1 “caja” Obligatorio para que FC 1 arranque el grafcet E 1 -S 1 en la implementación FC 1 -B FC 1 _001: U S 1 U k S Etapa_sig R M 100. 0 NOP 0 B U M 1 FP M 100. 0 S E 1 R X 10 R X 11 R S 1 SET FP M 100. 0 S E 1 R X 10 R X 11 R S 1 U E 1 Ug S X 10 R E 1 //… CUES T Venta ION ja entre s/Desventa Ay. B jas
Ejemplo: señal periódica (examen) Implemente en una función FC 1 una señal cuadrada de frecuencia 0, 1 Hz usando como señal de mando un tren de pulsos regulares, cada uno en un intervalo de 5 segundos UN L SE U = “SMANDO” S 5 T#5 s T 1 “SMANDO” Segmento 1 (FC 1) UN BEB “SMANDO” UN = “SPEDIDA” //cambio de estado “SPEDIDA” Segmento 2 (FC 1) //fin de bloque
PASO DE PARÁMETROS
Nociones generales � Los bloques AWL permiten la definición de un interfaz parametrizable que expresa el paso de información entre el bloque invocante y el invocado IN OUT FC 1: “Matemática” A RES B C (A*B)/C
Tipos de parámetros � Tipos de parámetros comunes a bloques FC y FB IN: Datos entrantes al bloque y de consumo interno � IN-OUT: Datos entrantes al bloque, cambiados por el bloque y devueltos al bloque invocante � OUT: Datos generados dentro del bloque y pasados al bloque invocante � TEMP: Datos de consumo interno por el bloque. � � Equivale a una variable automática en C � No aparecen en el interfaz de invocación � Tipos � de parámetros exclusivos de bloques FB STATIC: Datos de consumo interno dentro del bloque persisten durante toda la ejecución del programa. � Equivale a una variable estática en C � No aparecen en el interfaz de invocación � Se almacenan en el bloque de datos de instancia asociado al FB � Determinan el ESTADO del bloque FB
Programación en el entorno STEP 7 (1/3) � Definición del interfaz Se usa # para indicar parámetro
Programación en el entorno STEP 7 (2/3) � Llamada a FC desde bloque invocante A FC 1: “Suma” A+B RES B FC 1: “Suma” MW 10 MW 12 Parámetros (IN, IN-OUT, OUT) variables reales pasadas A+B MW 14
Programación en el entorno STEP 7 (3/3) � Llamada a FB desde bloque invocante IN FB 1: “Motor” OUT SE 1 S 5 T#50 s motor_ON T 1 Bloque de datos de instancia ESTADO Parámetros (IN, IN-OUT, OUT) variables reales (a rellenar) IMPORTANTE: Los campos no rellenados en la llamada toman el valor por defecto definido en el bloque de datos asociado
Fuentes de texto portables (1/2) FC 1: “Suma” Sum 1 Salida= A+B Sum 2 Incluiría el interfaz completo IN, IN-OUT, STATIC, TEMP Salida FUNCTION "Suma" : VOID TITLE = VERSION : 0. 1 VAR_INPUT Sum 1 : WORD ; Sum 2 : WORD ; END_VAR VAR_OUTPUT Salida : WORD ; END_VAR BEGIN L #Sum 1; L #Sum 2; +I ; T #Salida; END_FUNCTION
Fuentes de texto portables (2/2) GENERAR FUENTES CTRL+T desde la ventana de edición del bloque COMPILAR FUENTES CTRL+B desde la ventana de edición de fuentes
Aplicación: lectura de señales analógicas FC 105 VALOR de tipo REAL TARJETAS DE 16 BITS Resolución real: 0 -32768 Limite práctico: 0 -27648 MW 50: [-27. 648, +27. 648] OB 1 U E 100. 0 SPBNB _001 CALL "SCALE" IN : =MW 50 HI_LIM : =1. 000000 e+003 LO_LIM : =0. 000000 e+000 BIPOLAR: =E 100. 1 RET_VAL: =MW 10 OUT : =MD 108 _001: U = BIE A 1. 0
Aplicación: salida de señales analógicas VALOR de tipo REAL FC 106 VALOR de tipo INT OB 1 U E 100. 0 SPBNB _001 CALL "UNSCALE" IN : =MD 50 HI_LIM : =1. 000000 e+002 LO_LIM : =0. 000000 e+000 BIPOLAR: =E 100. 1 RET_VAL: =MW 10 OUT : =MW 108 _001: U = BIE A 1. 0
Ejercicio (I): Transducción de temperatura Implemente un bloque función que trate una señal analógica de temperatura transducida con rangos: 10ºC (0 V) - 70ºC (10 V) La función debe llamar al bloque de librería SCALE (FC 105), devolver TRUE si la temperatura se encuentra entre 25ºC y 40ºC y gestionar un bit de error por desbordamiento en la medida
EJEMPLOS INTRODUCCIÓN AL DISEÑO DE BLOQUES AWL
Ejemplo: semáforo (1/5) EJERCICIO Diseñe una interfaz apropiada para la función Control AMBAR FB 1
Interfaz FB 1: “Control Ámbar” (2/5) FB 1: “Control AMBAR” IN OUT tiempo Luz Ámbar temporizador k parpadeos del mismo tiempo a nivel alto y bajo k bit de fin EJERCICIO Implemente “Control AMBAR” en AWL contador CALL “contol AMBAR" , DB 1 tiempo : = tempor : =T 1 nrep : = contador : =Z 1 bit_de_fin: =M 1. 7 actuador : =A 124. 0 Seg. Invocante (OB 1) STATIC No aparecen en el interfaz de llamada VAR_INPUT tiempo : S 5 TIME : = S 5 T#2 s //t. intermitencia tempor : TIMER ; nrep : INT : = 3; //num. repeticiones contador : COUNTER END_VAR VAR_OUTPUT bit_de_fin : BOOL ; //final de intermitencia actuador : BOOL ; //actuador luz ámbar END_VAR VAR_STATIC internal_signal : BOOL ; //generador luz ámbar bit_de_trabajo : BOOL ; command_signal : BOOL ; END_VAR
Solución semáforo (3/5): FB 1 “control ámbar” VAR_INPUT tiempo : S 5 TIME : = S 5 T#4 s tempor : TIMER ; nrep : INT : = 3; contador : COUNTER END_VAR VAR_OUTPUT bdf : BOOL ; actuador : BOOL ; END_VAR VAR_STATIC int_sig : BOOL ; com_sig : BOOL ; bdt : BOOL ; END_VAR Luz ámbar empieza a nivel ato SET FP #bit_trab S #int_sig R #com_sig R #bit_fin R #contador R #actuador UN #com_sig L #tiempo SE #tempor U = UN #int_sig ZV #contador L #nrep L #contador == I S #bit_fin R #actuador R #bit_trab R #tempor FR #tempor Evaluación Fin #tempor #com_sig Arranque Señal de mando Valor contador UN #int_sig = #actuador UN #com_sig BEB UN #int_sig = #int_sig Valor actuador Cambia el estado de la luz con la señal de mando FB 1: “control ambar”
Solución semáforo (4/5) � Posible FC 3 estructura de bloques � OB 1: Programa principal � OB 100: Arranque � FB 1: Control luz ámbar � DB 1: Bloque de datos del control de la luz ámbar � FC 1: Config. temporizadores luces verde y roja � FC 2: Control luces verde y roja � FC 3: Grafcet Marcha-Paro FC 2 FC 1 FB 1 FC 2
Solución semáforo (5/5) � Segmentos importantes de OB 1
Ejemplo: motor escalera mecánica (I) � Bloque FC sin parámetros SET FP M 100. 0 S X 0 R X 1 R X 2 0 1 FC 1: “Motor” MOTOR 1 2 1 No configurable NO se puede invocar una para cada motor, aún cuando no sea necesario controlar los motores simultáneamente U X 0 U SE 1 F S X 1 R X 0 U X 1 U T 1 UN SE 1 F S X 2 R X 1 U X 2 U SE 1 F S X 1 R X 2 U X 1 L S 5 T#50 s SE T 1 U SE 1 F FR T 1 U X 1 = MOTOR_1 Bit de trabajo Prioridad
Ejemplo: motor escalera mecánica (II) � Bloque FC parametrizado IN 0 FC 1: “Motor” SE 1 OUT Motor 1 S 5 T#50 s 1 MOTOR 1 T 1 Etapa 0 2 CUESTIÓN ¿Tipo de parámetros? 1 Etapa 2 Bit de trabajo (arranque) Configurable en tiempo y evento de disparo Configurable en temporizador CUESTIÓN ¿Se puede invocar varias veces, una por motor, aún cuando exista funcionamiento simultáneo de motores? EJE R Prog CICIO ram ació n AW L
Solución parcial (II. 1/II. 2) 0 MOTOR 1 1 2 1 SET FP #bdt_trm S #X 0 R #X 1 R #X 2 R #actuador U U S R Seg 1 U #sensor FR #tempor Seg 5 #X 0 #sensor #X 1 #X 0 U #X 1 L #tiempo SE #tempor Seg 2 U U S R #X 2 #sensor #X 1 #X 2 Seg 3 U = Seg 6 #X 1 #actuador Seg 7 FC 1 U U UN S R #X 1 #tempor #sensor #X 2 #X 1 Seg 4 FUNCTION “motor” VAR_INPUT sensor : BOOL ; tiempo : S 5 TIME ; tempor : TIMER ; END_VAR VAR_OUTPUT actuador : BOOL; END_VAR VAR_IN_OUT X 0 : BOOL ; X 1 : BOOL X 2 : BOOL ; bdt_trm : BOOL ; END_VAR
Solución parcial (II. 2/II. 2) 0 1 EJERCICIO Segmentos de invocación de cada tramo de escalera MOTOR 1 2 0 1 1 2 1 MOTOR 2
Ejemplo: motor escalera mecánica (III) � Bloque FB parametrizado IN 0 MOTOR 1 T 1 VAR_STATI C Etapa 0 Etapa 1 IN-OUT 2 arranque Etapa 2 Bit de trabajo END_VAR 1 Interfaz E/S mas ligero debido al uso de variables estáticas OUT Motor 1 SE 1 S 5 T#50 s 1 FB 1: “Motor” EJE R Prog CICIO ram ació n AW L
Solución parcial: Interfaz (III. 1/III. 2) INTERFAZ de FB 1 VAR_INPUT se 1 : BOOL ; tiempo : S 5 TIME ; temporizador : TIMER ; END_VAR VAR_OUTPUT motor_ON : BOOL ; END_VAR VAR_IN_OUT arranque_0 : BOOL ; //bit de arranque (=0) END_VAR VAR_STATIC x 0 : BOOL ; x 1 : BOOL ; x 2 : BOOL ; m_flanco : BOOL ; m_pulso : BOOL ; END_VAR //reposo //en marcha //parada tras marcha //memoria flanco se 1 //pulso de se 1 CUESTI ON ¿Podría ser m_fl anco de ¿Y m_p tipo TE ulso? MP?
Solución parcial (III. 2/III. 2) 0 1 2 1 U #se 1 FP #m_flanco = #m_pulso MOTOR 1 CALL “motor”, DB 1 se 1: = E 124. 0 tiempo: = tempor: = T 1 motor_ON: = A 124. 0 arranque_0: = M 2. 0 Seg. Invocante (OB 1) Flanco sensor (FB 1) SET FP #arranque_0 S #X 0 R #X 1 R #X 2 R #motor_ON Arranque (FB 1) EJERCICIO: complete la prog. de FB 1 CUESTION ¿Cómo se podría implementar el control del segundo motor?
Ejemplo: escalera mecánica con dos tramos (I) CALL “motor”, DB 1 se 1: = E 124. 0 tiempo: = tempor: = T 1 motor_ON: = A 124. 0 arranque_0: = M 2. 0 CALL “motor”, DB 2 se 1: = E 124. 1 tiempo: = tempor: = T 2 motor_ON: = A 124. 1 arranque_0: = M 2. 1 Seg. 1 (OB 1) Seg. 2 (OB 1) EJERCICIO Implemente el control de la figura a partir de la función FB 1 autocontenida del apartado anterior y de los segmentos de invocación desde OB 1 de dicha función que aparecen a la izquierda Nota: Utilice una etapa con semántica “control de motores activado”
Solución parcial CALL “motor”, DB 1 se 1: = E 124. 0 tiempo: = tempor: = T 1 motor_ON: = A 124. 0 arranque_0: = M 2. 0 CALL “motor”, DB 2 se 1: = E 124. 1 tiempo: = tempor: = T 2 motor_ON: = A 124. 1 arranque_0: = M 2. 1 Seg. 1 (OB 1) Seg. 2 (OB 1) U U UN UN R R S R “X 0” “PON” “SE 1” “SE 2” M 2. 0 //arr-m 1 M 2. 1 //arr-m 2 “X_marcha” “X 0” X 0 X 1, X 2(OB 1) U “X_marcha” U “POFF” UN A 124. 0 //motor 1 parado UN A 124. 1 //motor 2 parado S “X 0” R “X_marcha” Seg. Parada(OB 1)
Ejemplo: escalera mecánica con dos tramos (II) U X 1 SPBN _001: CALL “motor”, DB 1 se 1: = E 124. 0 tiempo: = tempor: = T 1 motor_ON: = A 124. 0 arranque_0: = M 2. 0 //… U X 2 SPBN _002: CALL “motor”, DB 2 se 1: = E 124. 1 tiempo: = tempor: = T 2 motor_ON: = A 124. 1 arranque_0: = M 2. 1 //… _001: NOP 0 _002: NOP 0 Llamada Mot. 1 (OB 1) Llamada Mot. 2 (OB 1) EJERCICIO Modifique la implementación del ejercicio anterior considerando la invocación por cajas que aparece a la izquierda
Solución parcial U U UN UN S S R R R U X 1 SPBN _001: CALL “motor”, DB 1 se 1: = E 124. 0 tiempo: = tempor: = T 1 motor_ON: = A 124. 0 arranque_0: = M 2. 0 //… _001: NOP 0 Llamada Mot. 1 (OB 1) U X 2 SPBN _002: CALL “motor”, DB 2 se 1: = E 124. 1 tiempo: = tempor: = T 2 motor_ON: = A 124. 1 arranque_0: = M 2. 1 //… _002: NOP 0 Llamada Mot. 2 (OB 1) “X 0” “PON” “SE 1” “SE 2” “X 1 “X 2” M 2. 0 M 2. 1 “X 0” //arr-m 1 //arr-m 2 U X 1 SPBN _001: CALL “motor”, DB 1 se 1: = E 124. 0 tiempo: = tempor: = T 1 motor_ON: = A 124. 0 arranque_0: = M 2. 0 //salida U “POFF” UN “A 124. 0” UN “A 124. 1” S “X 0” R “X 1” _001: NOP 0 X 1, X 2(OB 1) Llamada Mot. 1 (OB 1) CUESTIÓN ¿Cómo se podría mejorar el diseño del interfaz de FB 1 (control de motores) para que no se tenga que emplear los actuadores A 124. 0 y A 124. 1 para razonar en la ecuación de paso al reposo?
FIN
- Slides: 44