1
PRESENTACION BREVE DEL PROYECTO
Esquema grafico del sistema.
Especificaciones del funcionamiento. Requerimientos.
DISEÑO HRT-HODD
Explicación de los objetos del diseño.
CODIFICACION
Como se ha implementado el código en ADA
Explicación de alguna tarea concreta
PRUEBAS
Trazas( comentar como se activan distintas tareas y objetos protegidos)
ANALISIS DE PLANIFICABILIDAD
Distintas situaciones para lograr que sea PLANIFICABLE:
Tabla
Report iRat( informe y graficas cpu…)
FIABILIDAD Y TOLERANCIA
ESPECIFICACION Y ANALISIS DE RIESGOS
Arbol de defectos
GUION EXPOSICION PROYECTO
Jose A. Reviejo Cuevas Eva M. Merino AlonsoSISTEMAS DE TIEMPO REAL
2006/2007
2
SISTEMAS DE TIEMPO REAL2006/2007
3
SISTEMA DE CONTROL DE CALDERA DE GASCALDERA
CONSOLA OPERADOR
MONITOR ENTORNO
4
EL SISTEMA DE CONSTAR DE:
•CALDERA
•TANQUE DE COMBUSTIBLE
•SENSORES DE NIVELES
•TANQUE DE AGUA
•CONSOLA DE OPERDOR
5
• La caldera tiene un botón de encendido.• Configuración de temperatura media que debe mantenerse
quemando combustible.• El operador puede modificar manualmente la temperatura. • Detección de anomalías BLOQUEO
– - Suministro de gas y/o agua incorrecto.– - Presión de aire incorrecto.– - Variaciones bruscas de temperatura
• Estados caldera:– - Activa– -Pasiva– -Bloqueada
6
1. DISEÑO DE PRIMER NIVEL: SISTEMA CONTROL CALDERA.
7
2. DISEÑO DE SEGUNDO NIVEL: CONTROL CALDERA
8
9
3. DISEÑO DE SEGUNDO NIVEL: MONITOR ENTORNO
10
11
4. DISEÑO DE SEGUNDO NIVEL CONSOLA OPERADOR
12
13
Cada objeto del diseño HRT-HOOD se implementa por un paquete en ADA(.ads y .adb)
MONITOR_ENTORNO.ADS.
MONITOR_ENTORNO.ADB.
CONSOLA_OPERADOR.ADS.CONSOLA_OPERADOR.ADB.
CONTROL_CALDERA.ADSCONTROL_CALDERA.ADB
PARAMETROS_PLANIFICACION.ADSDISPOSITIVOS.ADS
14
-- with Ada.Real_Time; use Ada.Real_Time;with parametros_planificacion; use parametros_planificacion;with Utiles; use Utiles;with dispositivos; use dispositivos;Package monitor_entorno is
task Sensor_Aire is -- TAREA CICLICApragma priority (Prioridad_H);
end Sensor_Aire;
task Sensor_Temp is -- TAREA CICLICApragma priority (Prioridad_G);
end Sensor_Temp;
Protected ObjAire is -- OBJETO PROTEGIDO NIVEL AIREpragma priority (Prioridad_C);Procedure Escribir_Aire(X:integer);Function Leer_Aire return integer;private
Almacen_Aire: integer;
end ObjAire;
Protected ObjTemp is -- OBJETO PROTEGIDO TEMP ACTUALpragma priority (Prioridad_B);Procedure Escribir_Temp(X:integer);Function Leer_Temp return integer;private
Almacen_Temp: integer;end ObjTemp;
end monitor_entorno;
MONITOR_ENTORNO.ADS
15
with Ada.Real_Time; use Ada.Real_Time;with parametros_planificacion; use parametros_planificacion;with Utiles; use Utiles;with dispositivos; use dispositivos;
Package body monitor_entorno is
task body Sensor_Aire is -- DETECTA EL NIVEL DE AIRE
Instante: Time;Lectura_A:integer;
beginInstante:= Big_Bang;loop
Traza_Inicio_Tarea("Inicio Sensor_Aire");Execution_Time(Calculos_Aire);Lectura_A:= Sensor_A;Traza_Fin_Tarea("Fin Deteccion Aire");ObjAire.Escribir_Aire(Lectura_A);Traza_Fin_Tarea("Fin Sensor_Aire");Instante:= Instante + PlazoSensor_Aire;
delay until Instante;end loop;
end;
MONITOR_ENTORNO.ADB
16
task body Sensor_Temp is -- DETECTA A TEMP ACTUAL
Instante: Time;Lectura_T:integer;
beginInstante:= Big_Bang;loop
Traza_Inicio_Tarea("Inicio Sensor_Temp");Execution_Time(Calculos_Temp);Lectura_T:=Sensor_T;Traza_Fin_Tarea("Fin Temperatura Actual");ObjTemp.Escribir_Temp(Lectura_T);Traza_Fin_Tarea("Fin Sensor_Temp");Instante:= Instante + PlazoSensor_Temp;
delay until Instante;end loop;
end;
17
Protected body ObjAire is -- OBJ. PROTEGIDO AIRE
Procedure Escribir_Aire(X:integer) isbegin
Traza_Inicio_Tarea("Inicio Escribir_Aire");Execution_Time(CalculosPr_Escritura);Almacen_Aire:= X;Traza_Fin_Tarea("Fin Escribir_Aire");
end Escribir_Aire;
Function Leer_Aire return integer isbegin
Traza_Inicio_Tarea("Inicio Leer_Aire");Execution_Time(CalculosPr_Lectura);return Almacen_Aire;
end Leer_Aire;
end ObjAire;
18
Protected body ObjTemp is -- OBJ. PROTEGIDO TEMP
Procedure Escribir_Temp(X:integer) isbegin
Traza_Inicio_Tarea("Inicio Escribir_Temp");Execution_Time(CalculosPr_Escritura);Almacen_Temp:= X;Traza_Fin_Tarea("Fin Escribir_Temp");
end Escribir_Temp;
Function Leer_Temp return integer isbegin
Traza_Inicio_Tarea("Inicio Leer_Temp");Execution_Time(CalculosPr_Lectura);return Almacen_Temp;
end Leer_Temp;
end ObjTemp;
beginnull;
end monitor_entorno;
19
with Ada.Real_Time; use Ada.Real_Time;with Ada.Interrupts; use Ada.Interrupts;with Ada.Interrupts.Names; use Ada.Interrupts.Names;with parametros_planificacion; use parametros_planificacion;with dispositivos; use dispositivos;with Utiles; use Utiles;with Provoca_Interrupcion; use Provoca_Interrupcion;Package consola_operador is
Protected ObjTempFijada is -- ALMACENA LA TEMP. FIJADApragma priority (Prioridad_D); -- TECHO DE PRIORIDADProcedure Escribir_TempFijada(X:integer);Function Leer_TempFijada return integer;private
Fijada_T:integer;
end ObjTempFijada;
Protected Obj_RTI ispragma priority (Prioridad_RTI);Procedure Interrupcion;
pragma Attach_Handler (Interrupcion, Ada.Interrupts.Names.External_Interrupt_2);
Entry Esperar_Interrupcion;private
Semaforo:boolean:=False;
end Obj_RTI;
task Teclado is
pragma priority (Prioridad_I);end Teclado;
end consola_operador;
CONSOLA_OPERADOR.ADS
20
with Ada.Real_Time; use Ada.Real_Time;with Ada.Interrupts; use Ada.Interrupts;with Ada.Interrupts.Names; use Ada.Interrupts.Names;with parametros_planificacion; use parametros_planificacion;with dispositivos; use dispositivos;with Utiles; use Utiles;with Provoca_Interrupcion; use Provoca_Interrupcion;
Package body consola_operador isProtected body ObjTempFijada is
-- GUARDAMOS LA TEMPERATURA FIJADA POR EL USUARIOProcedure Escribir_TempFijada(X:integer) isbegin
Traza_Inicio_Tarea("Inicio Escribir_TempFijada");Execution_Time(CalculosPr_Escritura);Fijada_T:=X;Traza_Fin_Tarea("Fin Ecribir_TempFijada");
end Escribir_TempFijada;
-- LEEMOS LA TEMPERATURA FIJADAFunction Leer_TempFijada return integer isbegin
Traza_Inicio_Tarea("Inicio Leer_TempFijada");Execution_Time(CalculosPr_Lectura);return Fijada_T;Traza_Fin_Tarea("Fin Leer_TempFijada");
end;
end ObjTempFijada;
CONSOLA_OPERADOR.ADB
21
-- OBJETO PARA EL TRATAMIENTO DE LA INTERRUPCIONProtected body Obj_RTI is
Procedure Interrupcion isbegin
Traza_Inicio_Tarea("---->RTI");Semaforo:=True;
end Interrupcion;
Entry Esperar_Interrupcion when Semaforo isbegin
Semaforo:=False;end Esperar_Interrupcion;
end Obj_RTI;-- RECOGEMOS EL DATO A TRAVES DE LA ENTRADA DE TECLADO
task body Teclado isInstante:Time:=Big_Bang;Buffer_Teclado:integer;begin
loopTraza_Inicio_Tarea("Inicio Temperatura Teclado");Obj_RTI.Esperar_Interrupcion;
Instante:=Clock;Buffer_Teclado:=Leer_Teclado;Traza_Fin_Tarea("Fin Recogida de Teclado");
ObjTempFijada.Escribir_TempFijada(Buffer_Teclado);Execution_Time(CalculosPr_Lectura);Traza_Fin_Tarea("Fin Teclado");delay until Instante;
end loop;end;
beginnull;
end consola_operador;
22
with Ada.Real_Time; use Ada.Real_Time;with monitor_entorno; use monitor_entorno;with consola_operador; use consola_operador;with parametros_planificacion; use parametros_planificacion;with dispositivos; use dispositivos;with Utiles; use Utiles;
Package control_caldera isProcedure Background;Protected ObjCaldera is
pragma priority (Prioridad_A); Procedure Escribir_Gas(X:integer);Procedure Escribir_Agua(X:integer);Procedure Establecer_Estado(X, Y, Z:integer);private
Almacen_Gas:integer;Almacen_Agua:integer;Estado_Actual:Estado_Caldera;
end ObjCaldera;
task Sensor_Gas is -- TAREA CICLICApragma priority (Prioridad_E);
end Sensor_Gas;
task Sensor_Agua is -- TAREA CICLICApragma priority (Prioridad_F);
end Sensor_Agua;task Comprobaciones is -- TAREA CICLICA
pragma priority (Prioridad_J);end Comprobaciones;
end control_caldera;
CONTROL_CALDERA.ADS
23
with Kernel.Serial_Output; use Kernel.Serial_Output;with Ada.Real_Time; use Ada.Real_Time;with monitor_entorno; use monitor_entorno;with consola_operador; use consola_operador;with parametros_planificacion; use parametros_planificacion;with dispositivos; use dispositivos;with Utiles; use Utiles;
Package body control_caldera isProcedure Background isbegin
loopnull;
end loop;
end Background;Protected body ObjCaldera is
-- PARA GUARDAR EL GAS LEIDOProcedure Escribir_Gas(X:integer) isbegin
Traza_Inicio_Tarea("Inicio Escribir_Gas");Execution_Time(CalculosPr_Escritura);Almacen_Gas:= X;Traza_Fin_Tarea("Fin Escribir_Gas");
end Escribir_Gas;-- PARA GUARDAR EL AGUA LEIDOProcedure Escribir_Agua(X:integer) isbegin
Traza_Inicio_Tarea("Inicio Escribir_Agua");Execution_Time(CalculosPr_Escritura); Almacen_Agua:= X;Traza_Fin_Tarea("Fin Escribir_Agua");
end Escribir_Agua;
CONTROL_CALDERA.ADB
24
-- ESTABLECE EL ESTADO DE LA CALDERA DESPUES DE COMPROBACIONESProcedure Establecer_Estado(X, Y, Z:integer) is
Estado_Provisional:Estado_Caldera;Semaforo:boolean;Aire_2:integer;T_Fijada_2:integer;T_Actual_2:integer;
beginTraza_Inicio_Tarea("Inicio Establecer_Estado");Aire_2:=X;T_Fijada_2:=Y;T_Actual_2:=Z;Estado_Provisional:=Pasiva;Semaforo:=True;while Semaforo loop
if Almacen_Gas < Alarma_Gas thenEstado_Provisional:=Bloqueada;
elsif Almacen_Agua < Alarma_Agua thenEstado_Provisional:=Bloqueada;
elsif Aire_2 > Alarma_Aire thenEstado_Provisional:=Bloqueada;
elsif (T_Fijada_2 > T_Actual_2) andEstado_Provisional /= Bloqueada) thenEstado_Provisional:=Activa;
else Estado_Provisional:=Pasiva;end if;Semaforo:=False;Execution_Time(Calculos_Estado);Estado_Actual:=Estado_Provisional;Poner_Estado(Estado_Actual);Traza_Fin_Tarea("Fin Establecer_Estado");
end loop;end Establecer_Estado;
end ObjCaldera;
25
task body Sensor_Gas is -- DETECTA EL NIVEL DE GASInstante: Time;Lectura_G:integer;
beginInstante:= Big_Bang;loop
Traza_Inicio_Tarea("Inicio Sensor_Gas");Execution_Time(Calculos_Gas);Lectura_G:=Sensor_G;Traza_Fin_Tarea("Fin Nivel de Gas");ObjCaldera.Escribir_Gas(Lectura_G);Traza_Fin_Tarea("Fin Sensor_Gas");Instante:= Instante + PlazoSensor_Gas;delay until Instante;
end loop;end;
task body Sensor_Agua is -- DETECTA EL NIVEL DE AGUA
Instante: Time;Lectura_Ag:integer;
beginInstante:= Big_Bang;loop
Traza_Inicio_Tarea("Inicio Sensor_Agua");Execution_Time(Calculos_Agua);Lectura_Ag:=Sensor_Ag;Traza_Fin_Tarea("Fin Nivel de Agua");ObjCaldera.Escribir_Agua(Lectura_Ag);Traza_Fin_Tarea("Fin Sensor_Agua");Instante:= Instante + PlazoSensor_Agua;delay until Instante;
end loop;end;
26
task body Comprobaciones is -- COMPROBAR TODOS LOS NIVELESInstante: Time;Aire:integer;T_Fijada:integer;T_Actual:integer;
beginInstante:= Big_Bang;loop
Traza_Inicio_Tarea("Inicio Comprobaciones Internas");Execution_Time(Calculos_Comp);Aire:=ObjAire.Leer_Aire;Traza_Fin_Tarea("Fin Leer_Aire");T_Fijada:=ObjTempFijada.Leer_TempFijada;Traza_Fin_Tarea("Fin Leer_TempFijada");T_Actual:=ObjTemp.Leer_Temp;Traza_Fin_Tarea("Fin Leer_Temp");ObjCaldera.Establecer_Estado(Aire, T_Fijada, T_Actual);Traza_Fin_Tarea("Fin Comprobaciones Internas");Instante:= Instante + PlazoComprobaciones;delay until Instante;
end loop;end;
beginnull;
end control_caldera;
27
with Ada.Real_Time; use Ada.Real_Time;with System; use System;package Parametros_Planificacion is
--------------------------------------------------------------------------- Instante inicial del sistemaBig_Bang : constant Ada.Real_Time.Time := Clock;--------------------------------------------------------------------------- Espacios de tiempo entre llegadas de interupciones
Interr_1: constant Time_Span := To_Time_Span (2.0);Interr_2: constant Time_Span := To_Time_Span (5.0);Interr_3: constant Time_Span := To_Time_Span (10.0);Interr_4: constant Time_Span := To_Time_Span (15.0);Interr_5: constant Time_Span := To_Time_Span (20.0);
--------------------------------------------------------------------------- Otras declaraciones
type Estado_Caldera is (Bloqueada,Activa,Pasiva);
Alarma_Gas: constant integer := 10;Alarma_Agua: constant integer := 2;Alarma_Aire: constant integer := 10;TempEstablecida: constant integer := 24;Nivel_TempActual: constant integer := 21;Nivel_Aire: constant := 8; Nivel_Agua: constant := 4;Nivel_Gas: constant := 400;
-------------------------------------------------------------------------
PARAMETROS_DE_PLANIFICACION.ADS
28
-------------------------------------------------------------------------- Parámetros declarados
Calculos_Gas: constant Time_Span := Milliseconds (80);Calculos_Agua: constant Time_Span := Milliseconds (80);Calculos_Aire: constant Time_Span := Milliseconds (200);Calculos_Temp: constant Time_Span := Milliseconds (100);CalculosPr_Escritura: constant Time_Span := Milliseconds (50);CalculosPr_Lectura: constant Time_Span := Milliseconds (40);
Calculos_Estado: constant Time_Span := Milliseconds (250);Calculos_Comp: constant Time_Span := Milliseconds (350);
PlazoSensor_Temp: constant Time_Span := Milliseconds (2000);PlazoSensor_Aire: constant Time_Span := Milliseconds (1500);PlazoSensor_Agua: constant Time_Span := Milliseconds (1000);PlazoSensor_Gas: constant Time_Span := Milliseconds (500);
PlazoComprobaciones: constant Time_Span := Milliseconds (2500);
Prioridad_A: constant Priority := 18;Prioridad_B: constant Priority := 18; -- Prioridad de techoPrioridad_C: constant Priority := 18; -- Prioridad de techo
Prioridad_D: constant Priority := 18; -- Prioridad de techoPrioridad_E: constant Priority := 12;
Prioridad_F: constant Priority := 12;Prioridad_G: constant Priority := 15;
Prioridad_H: constant Priority := 12;Prioridad_I: constant Priority := 14;
Prioridad_J: constant Priority := 15;Prioridad_RTI: constant Interrupt_Priority := System.Interrupt_Priority'First + 9;
end Parametros_Planificacion;
29
with Ada.Real_Time; use Ada.Real_Time;with Parametros_Planificacion; use Parametros_Planificacion;with Utiles; use Utiles;package dispositivos is
---------------------------------------------------------------- DECLARACION DE PROCESOS DE ACCESO A DISPOSITIVOS E/S------------------------------------------------------------------------------- MONITOR_ENTORNO ----------------------------
Function Sensor_A return integer;-- DETECTA EL NIVEL DE AIRE EN LOS CONDUCTOS
Function Sensor_T return integer;-- DETECTA LA TEMPERATURA ACTUAL DEL RECINTO
----------------- CONSOLA_OPERADOR ----------------------------
Function Leer_Teclado return integer;-- PROCEDIMIENTO PARA LEER LA ENTRADA DE TECLADO
----------------- CONTROL_CALDERA ----------------------------
Function Sensor_G return integer;-- DETECTA EL NIVEL DE GAS EN EL TANQUE DE COMBUSTIBLE
Function Sensor_Ag return integer;-- DETECTA EL NIVEL DE AGUA EN LA CALDERA
Procedure Poner_Estado (X:Estado_Caldera);-- MUESTRA EL ESTADO ACTUAL DE LA CALDERA
end dispositivos;
DISPOSITIVOS.ADS
30
with Ada.Real_Time; use Ada.Real_Time;with Kernel.Serial_Output; use Kernel.Serial_Output;with Workload;with parametros_planificacion; use parametros_planificacion;with Utiles; use Utiles;
Package body dispositivos is---------------------------------------------------------------- DECLARACION DE PROCESOS DE ACCESO A DISPOSITIVOS
E/S------------------------------------------------------------------------------- MONITOR_ENTORNO ----------------------------Function Sensor_A return integer isbegin
Traza_Inicio_Tarea("Inicio Deteccion de Aire");return Nivel_Aire;
end Sensor_A;-- DETECTA EL NIVEL DE AIRE EN LOS CONDUCTOS
Function Sensor_T return integer isbegin
Traza_Inicio_Tarea("Inicio Temperatura Actual");return Nivel_TempActual;
end Sensor_T;-- DETECTA LA TEMPERATURA ACTUAL DEL RECINTO
----------------- CONSOLA_OPERADOR ----------------------------Function Leer_Teclado return integer isbegin
Traza_Inicio_Tarea("Inicio Recogida de Teclado");return TempEstablecida;
end Leer_Teclado;-- PROCEDIMIENTO PARA LEER LA ENTRADA DE TECLADO
DISPOSITIVOS.ADB
31
----------------- CONTROL_CALDERA ----------------------------
Function Sensor_G return integer isbegin
Traza_Inicio_Tarea("Inicio Nivel de Gas");return Nivel_Gas;
end Sensor_G;-- DETECTA EL NIVEL DE GAS EN EL TANQUE DE COMBUSTIBLE
Function Sensor_Ag return integer isbegin
Traza_Inicio_Tarea("Inicio Nivel de Agua");return Nivel_Agua;
end Sensor_Ag;-- DETECTA EL NIVEL DE AGUA EN LA CALDERA
Procedure Poner_Estado (X:Estado_Caldera) isbegin
Traza_Inicio_Tarea("Poner_Estado");Put (" Estado actual de la caldera: ");Put (Estado_Caldera'image(X));Traza_Fin_Tarea("Fin Poner_Estado");
end Poner_Estado;-- PONE EL ESTADO DE LA CALDERA
beginnull;
end dispositivos;
32
PRUEBA REALIZADA Nº 6
TSIM/ERC32 SPARC simulator, version 1.1.6 (evaluation version)Copyright (C) 2001, Gaisler Research - all rights reserved.
This software may only be used with a valid license.For latest updates, go to http://www.gaisler.com/Comments or bug-reports to [email protected]
serial port A on stdin/stdoutallocated 4096 K RAM memoryallocated 2048 K ROM memory
section: .text at 0x2000000, size 196720 bytessection: .data at 0x2030070, size 6260 bytes
tsim> resuming at 0x02000000[
33
0.002591600] >>> Inicio Temperatura Teclado[ 0.026818900] >>> Inicio Sensor_Temp[ 0.192803100] >>> Inicio Temperatura Actual[ 0.215791900] === Fin Temperatura Actual[ 0.237301600] >>> Inicio Escribir_Temp[ 0.330334200] === Fin Escribir_Temp[ 0.349232300] === Fin Sensor_Temp[ 0.367153000] >>> Inicio Sensor_Aire[ 0.679802500] >>> Inicio Deteccion de Aire[ 0.702278600] === Fin Deteccion Aire[ 0.721740300] >>> Inicio Escribir_Aire[ 0.814772500] === Fin Escribir_Aire[ 0.833670600] === Fin Sensor_Aire[ 0.852757500] >>> Inicio Comprobaciones Internas[ 1.392344700] >>> Inicio Leer_Aire[ 1.468658800] === Fin Leer_Aire[ 1.485515200] >>> Inicio Leer_TempFijada[ 1.564950900] === Fin Leer_TempFijada[ 1.584878300] >>> Inicio Leer_Temp[ 1.661238200] === Fin Leer_Temp[ 1.678093500] >>> Inicio Establecer_Estado[ 2.000529200] >>> ---->RTI[ 2.081939100] >>> Poner_Estado Estado actual de la caldera: BLOQUEADA[ 2.118239900] === Fin Poner_Estado[ 2.136671300] === Fin Establecer_Estado[ 2.157663800] === Fin Comprobaciones Internas[ 2.181727900] >>> Inicio Sensor_Temp[ 2.347756500] >>> Inicio Temperatura Actual[ 2.370745400] === Fin Temperatura Actual[ 2.392254200] >>> Inicio Escribir_Temp[ 2.485286500] === Fin Escribir_Temp[ 2.504185300] === Fin Sensor_Temp[ 2.522104300] >>> Inicio Comprobaciones Internas[ 3.061675800] >>> Inicio Leer_Aire
34
[ 3.137989500] === Fin Leer_Aire[ 3.154845100] >>> Inicio Leer_TempFijada[ 3.234278000] === Fin Leer_TempFijada[ 3.254206000] >>> Inicio Leer_Temp[ 3.330566500] === Fin Leer_Temp[ 3.347422600] >>> Inicio Establecer_Estado[ 3.737158700] >>> Poner_Estado Estado actual de la caldera: BLOQUEADA[ 3.773458900] === Fin Poner_Estado[ 3.791890700] === Fin Establecer_Estado[ 3.812883600] === Fin Comprobaciones Internas[ 3.836952200] >>> Inicio Recogida de Teclado[ 3.860499000] === Fin Recogida de Teclado[ 3.882520900] >>> Inicio Escribir_TempFijada[ 3.978811700] === Fin Ecribir_TempFijada[ 4.000345500] >>> Inicio Sensor_Temp[ 4.166329900] >>> Inicio Temperatura Actual[ 4.189318400] === Fin Temperatura Actual[ 4.210828600] >>> Inicio Escribir_Temp[ 4.303860100] === Fin Escribir_Temp[ 4.322758300] === Fin Sensor_Temp[ 4.397901600] === Fin Teclado[ 4.413727500] >>> Inicio Temperatura Teclado[ 4.437280400] >>> Inicio Sensor_Agua[ 4.573985600] >>> Inicio Nivel de Agua[ 4.594413600] === Fin Nivel de Agua[ 4.613364300] >>> Inicio Escribir_Agua[ 4.706396600] === Fin Escribir_Agua[ 4.725294800] === Fin Sensor_Agua[ 4.743214300] >>> Inicio Sensor_Gas[ 4.879408200] >>> Inicio Nivel de Gas[ 4.899324300] === Fin Nivel de Gas[ 4.917762900] >>> Inicio Escribir_Gas
35
[ 5.010544400] === Fin Escribir_Gas[ 5.028930600] >>> Inicio Comprobaciones Internas[ 5.568398200] >>> Inicio Leer_Aire[ 5.644712900] === Fin Leer_Aire[ 5.661568300] >>> Inicio Leer_TempFijada[ 5.741000400] === Fin Leer_TempFijada[ 5.760928000] >>> Inicio Leer_Temp[ 5.837288500] === Fin Leer_Temp[ 5.854143800] >>> Inicio Establecer_EstadoPaso por aqui 5[ 6.251825000] >>> Poner_Estado Estado actual de la caldera: ACTIVA[ 6.286589700] === Fin Poner_Estado[ 6.305021300] === Fin Establecer_Estado[ 6.326013000] === Fin Comprobaciones Internas[ 6.350077000] >>> Inicio Sensor_Temp[ 6.516107600] >>> Inicio Temperatura Actual[ 6.539095700] === Fin Temperatura Actual[ 6.560606300] >>> Inicio Escribir_Temp[ 6.653637800] === Fin Escribir_Temp[ 6.672536400] === Fin Sensor_Temp[ 6.690455500] === Fin Sensor_Gas[ 6.707864400] >>> Inicio Sensor_Aire[ 7.000587600] >>> ---->RTI[ 7.014878000] >>> Inicio Recogida de Teclado[ 7.038424000] === Fin Recogida de Teclado[ 7.060445100] >>> Inicio Escribir_TempFijada[ 7.156549600] === Fin Ecribir_TempFijada[ 7.235940600] === Fin Teclado[ 7.251766300] >>> Inicio Temperatura Teclado[ 7.295106400] >>> Inicio Deteccion de Aire[ 7.317582400] === Fin Deteccion Aire[ 7.337044200] >>> Inicio Escribir_Aire[ 7.430076500] === Fin Escribir_Aire[ 7.448975100] === Fin Sensor_Aire[ 7.466895100] >>> Inicio Sensor_Agua[ 7.500346300] >>> Inicio Comprobaciones Internas
36
[ 8.040071300] >>> Inicio Leer_Aire[ 8.116385600] === Fin Leer_Aire[ 8.133241000] >>> Inicio Leer_TempFijada[ 8.212673100] === Fin Leer_TempFijada[ 8.232601100] >>> Inicio Leer_Temp[ 8.308961600] === Fin Leer_Temp[ 8.325817900] >>> Inicio Establecer_EstadoPaso por aqui 5[ 8.723223100] >>> Poner_Estado Estado actual de la caldera: ACTIVA[ 8.757988200] === Fin Poner_Estado[ 8.776420200] === Fin Establecer_Estado[ 8.797411100] === Fin Comprobaciones Internas[ 8.821475700] >>> Inicio Sensor_Temp[ 8.987608500] >>> Inicio Temperatura Actual[ 9.010597600] === Fin Temperatura Actual[ 9.032106400] >>> Inicio Escribir_Temp[ 9.125139700] === Fin Escribir_Temp[ 9.144038100] === Fin Sensor_Temp[ 9.264578100] >>> Inicio Nivel de Agua[ 9.285007100] === Fin Nivel de Agua[ 9.303956400] >>> Inicio Escribir_Agua[ 9.396989100] === Fin Escribir_Agua[ 9.415887100] === Fin Sensor_Agua[ 9.433807100] >>> Inicio Sensor_Gas[ 9.570000200] >>> Inicio Nivel de Gas[ 9.589916700] === Fin Nivel de Gas[ 9.608354700] >>> Inicio Escribir_Gas[ 9.700874900] === Fin Escribir_Gas[ 9.719261400] === Fin Sensor_Gas[ 9.736669300] >>> Inicio Sensor_Aire[ 10.000334700] >>> Inicio Comprobaciones Internas[ 10.540268400] >>> Inicio Leer_Aire[ 10.617094200] === Fin Leer_Aire[ 10.634461500] >>> Inicio Leer_TempFijada[ 10.714405500] === Fin Leer_TempFijada
37
[ 10.734845800] >>> Inicio Leer_Temp[ 10.811717200] === Fin Leer_Temp[ 10.829085200] >>> Inicio Establecer_EstadoPaso por aqui 5[ 11.227105400] >>> Poner_Estado Estado actual de la caldera: ACTIVA[ 11.262381400] === Fin Poner_Estado[ 11.281325300] === Fin Establecer_Estado[ 11.302829700] === Fin Comprobaciones Internas[ 11.327405800] >>> Inicio Sensor_Temp[ 11.493947300] >>> Inicio Temperatura Actual[ 11.517447100] === Fin Temperatura Actual[ 11.539470000] >>> Inicio Escribir_Temp[ 11.633013600] === Fin Escribir_Temp[ 11.652423500] === Fin Sensor_Temp[ 11.719342600] >>> Inicio Deteccion de Aire[ 11.742331300] === Fin Deteccion Aire[ 11.762304400] >>> Inicio Escribir_Aire[ 11.855848600] === Fin Escribir_Aire[ 11.875259100] === Fin Sensor_Aire[ 11.893690400] >>> Inicio Sensor_Agua[ 12.000405600] >>> Inicio Sensor_Temp[ 12.166901100] >>> Inicio Temperatura Actual[ 12.190401500] === Fin Temperatura Actual[ 12.212423600] >>> Inicio Escribir_Temp[ 12.305967400] === Fin Escribir_Temp[ 12.325376900] === Fin Sensor_Temp[ 12.373888900] >>> Inicio Nivel de Agua[ 12.394828800] === Fin Nivel de Agua[ 12.414291000] >>> Inicio Escribir_Agua[ 12.507951800] === Fin Escribir_Agua[ 12.527361800] >>> Inicio Comprobaciones Internas[ 13.067454300] >>> Inicio Leer_Aire[ 13.144279900] === Fin Leer_Aire[ 13.161648000] >>> Inicio Leer_TempFijada[ 13.241592000] === Fin Leer_TempFijada[ 13.262032300] >>> Inicio Leer_Temp
38
[ 13.338903700] === Fin Leer_Temp[ 13.356272100] >>> Inicio Establecer_EstadoPaso por aqui 5[ 13.754188200] >>> Poner_Estado Estado actual de la caldera: ACTIVA[ 13.789464200] === Fin Poner_Estado[ 13.808408100] === Fin Establecer_Estado[ 13.829912700] === Fin Comprobaciones Internas[ 13.854488000] === Fin Sensor_Agua[ 13.872920500] >>> Inicio Sensor_Gas[ 14.000319000] >>> Inicio Sensor_Temp[ 14.166815300] >>> Inicio Temperatura Actual[ 14.190315700] === Fin Temperatura Actual[ 14.212337200] >>> Inicio Escribir_Temp[ 14.305881800] === Fin Escribir_Temp[ 14.325292300] === Fin Sensor_Temp[ 14.352535100] >>> Inicio Nivel de Gas[ 14.372963700] === Fin Nivel de Gas[ 14.391913600] >>> Inicio Escribir_Gas[ 14.484945500] === Fin Escribir_Gas[ 14.503843900] === Fin Sensor_Gas[ 14.521763700] >>> Inicio Sensor_Aire[ 14.834926600] >>> Inicio Deteccion de Aire[ 14.857915500] === Fin Deteccion Aire[ 14.877888600] >>> Inicio Escribir_Aire[ 14.971610800] === Fin Escribir_Aire[ 14.991020300] ==[ 15.000748900] >>> Inicio Comprobaciones Internas[ 15.540728800] >>> Inicio Leer_Aire[ 15.617555400] === Fin Leer_Aire[ 15.634923900] >>> Inicio Leer_TempFijada[ 15.714867300] === Fin Leer_TempFijada[ 15.735306600] >>> Inicio Leer_Temp[ 15.812178800] === Fin Leer_Temp[ 15.829546400] >>> Inicio Establecer_EstadoPaso por aqui 5[ 16.227747700] >>> Poner_Estado Estado actual de la caldera: ACTIVA[ 16.263023700] === Fin Poner_Estado[ 16.281967600] === Fin Establecer_Estado
39
[ 16.303472600] === Fin Comprobaciones Internas[ 16.328047800] >>> Inicio Sensor_Temp[ 16.494589900] >>> Inicio Temperatura Actual[ 16.518090300] === Fin Temperatura Actual[ 16.540112400] >>> Inicio Escribir_Temp[ 16.633656600] === Fin Escribir_Temp[ 16.653067100] === Fin Sensor_Temp= Fin Sensor_Aire[ 16.680202200] >>> Inicio Sensor_Agua[ 16.817420500] >>> Inicio Nivel de Agua[ 16.838361400] === Fin Nivel de Agua[ 16.857822600] >>> Inicio Escribir_Agua[ 16.951366400] === Fin Escribir_Agua[ 16.970776900] === Fin Sensor_Agua[ 16.989209200] >>> In[ 17.000990900] >>> ---->RTI[ 17.015838800] >>> Inicio Recogida de Teclado[ 17.039896100] === Fin Recogida de Teclado[ 17.062430700] >>> Inicio Escribir_TempFijada[ 17.159046100] === Fin Ecribir_TempFijada[ 17.238949400] === Fin Teclado[ 17.255287200] >>> Inicio Temperatura Tecladoicio Sensor_Gas[ 17.404285500] >>> Inicio Nivel de Gas[ 17.424714300] === Fin Nivel de Gas[ 17.443663800] >>> Inicio Escribir_Gas[ 17.536813000] === Fin Escribir_Gas[ 17.555710900] >>> Inicio Comprobaciones Internas[ 18.095974000] >>> Inicio Leer_Aire[ 18.172799600] === Fin Leer_Aire[ 18.190167700] >>> Inicio Leer_TempFijada[ 18.270111100] === Fin Leer_TempFijada[ 18.290550400] >>> Inicio Leer_Temp18.367423200] === Fin Leer_Temp[ 18.384790400] >>> Inicio Establecer_EstadoPaso por aqui 5[ 18.782708500] >>> Poner_Estado Estado actual de la caldera: ACTIVA[ 18.817985500] === Fin Poner_Estado
40
[ [ 18.836928800] === Fin Establecer_Estado[ 18.858433400] === Fin Comprobaciones Internas[ 18.883009100] >>> Inicio Sensor_Temp[ 19.049663700] >>> Inicio Temperatura Actual[ 19.073164100] === Fin Temperatura Actual[ 19.095185200] >>> Inicio Escribir_Temp[ 19.188730200] === Fin Escribir_Temp[ 19.208139700] === Fin Sensor_Temp[ 19.226571900] === Fin Sensor_Gas[ 19.244492100] >>> Inicio Sensor_Aire[ 19.557655600] >>> Inicio Deteccion de Aire[ 19.580644700] === Fin Deteccion Aire[ 19.600618000] >>> Inicio Escribir_Aire[ 19.694161800] === Fin Escribir_Aire[ 19.713571300] === Fin Sensor_Aire[ 19.732003400] >>> Inicio Sensor_Agua[ 19.869220500] >>> Inicio Nivel de Agua[ 19.890161400] === Fin Nivel de Agua[ 19.909623000] >>> Inicio Escribir_Agua[ 20.003460800] === Fin Escribir_Agua[ 20.022871400] >>> Inicio Comprobaciones Internas[ 20.562850500] >>> Inicio Leer_Aire[ 20.639676700] === Fin Leer_Aire[ 20.657044000] >>> Inicio Leer_TempFijada[ 20.736988600] === Fin Leer_TempFijada[ 20.757428100] >>> Inicio Leer_Temp[ 20.834300900] === Fin Leer_Temp[ 20.851669100] >>> Inicio Establecer_EstadoPaso por aqui 5[ 21.249680000] >>> Poner_Estado Estado actual de la caldera: ACTIVA[ 21.284956200] === Fin Poner_Estado[ 21.303901100] === Fin Establecer_Estado[ 21.325404100] === Fin Comprobaciones Internas[ 21.349980800] >>> Inicio Sensor_Temp��Interrupt!Stopped at time 217324439 (1.552e+01 s)
tsim>
41
protocolo de prioridades monótona en plazos (DMA)
6 tareas de nuestro sistema de control de caldera, accediendo a 3 recursos
Tabla inicial para el estudio con iRat:
20001005000Tint-TempFijada1
28003503000T5-Comprobaciones2
15002001900T2-SensoTempActual3
20001002300T1-SensorAire4
1000801200T4-SensorAgua5
50080700T3-SensorGas6
DiCiTiTareaPrioridad
42
Tareas
SensorAire
SensorGas y
SensorTempActual
43
No cumplen plazos
Elevado uso CPU
Gráfico de utilización:
gráfico de tiempo de respuesta.
44
En un INTENTO DE OPTIMIZACION …
Tareas:
SensorAire
SensorGas y
SensorTempActual
45
Menor uso CPU Gráfico de utilización:
gráfico de tiempo de respuesta:
46
En un ULTIMO INTENTO DE OPTIMIZACION …
20001005000Tint-TempFijada1
40003506000T5-Comprobaciones2
25002003500T1-SensorAire3
28001003000T3-SensorGas4
2000802500T2-SensoTempActual5
1600802000T4-SensorAgua6
DiCiTiTareaPrioridad
47
TA
BLA
TE
CN
ICA
en
iRat
48
49
Comprobación gráfica de optimización:
Uso CPU mucho menor
Utilización de Eventos y de Tiempo de Respuesta, con un índice de bloqueo bastante bajo para todas las tareas Y FINALIZACION DE TAREAS
50
Con este mismo protocolo de prioridades DMA y
con periodos de activación inferiores y plazos inferiores también es
PLANIFICABLE