LPimentelRossi / TP-Informatica-2

0 stars 0 forks source link

TP-Informatica-2

Memoria descriptiva

Mi sistema representa un control de temperatura de cámara frigorífica, con temperatura mínima, temperatura máxima, tiempo de descongelamiento, y alarmas de sobre temperatura. Cuenta con un sensor de temperatura, un sistema de refrigeración, un sistema de alarmas, un temporizador y una resistencia para el estado de descongelamiento.

Estados:

Máquina de estado de Control de temperatura

./TP-Informatica-2/Recursos/Máquina de Estado.png

Código

#ifnfef MY_LIB
#define MY_LIB
#include <stdio.h>

typedef enum {
espera = 0,
enfriamiento = 1,
descongelamiento = 2,
alarma = 3
}estados_t;

typedef enum {
off = 0,
on = 1
}offon_t;

typedef sruct {
char temp; // temperatura medida
char temp_min; // temperatura minima
char temp_max; // temperatura maxima
}temperatura_t;

typedef struct {
char t; // tiempo medido
char t_inicio_descong; // tiempo de inicio descongelamiento
char t_fin_descong; // tiempo fin descongelamiento
}tiempo_t

temperatura_t f_inicio(void);
tiempo_t f_inicio(void);
estados_t f_espera(temperatura_t, tiempo_t);
estados_t f_enfriamiento(temperatura_t, tiempo_t);
estados_t f_descongelamiento(temperatura_t, tiempo_t);
estados_t f_alarma(temperatura_t);

#endif
#include "mylib.h"

int main() {
    temperatura_t config;
    tiempo_t config;
    estados_t estado = espera;

    config = inicio();
    while(1){
        switch (estado) {
            case espera: estado = f_espera(config);
                break;
            case enfriamiento: estado = f_enfriamiento(config);
                break;
            case descongelamiento: estado = f_descongelamiento(config);
                break;
            case alarma: estado = f_alarma(config);
                break;
                }
        }
    return 0;
}

Con Punteros a funciones

#include "mylib.h"

int main() {
    temperatura_t config;
    tiempo_t config;
    estados_t estado = espera;
    estados_t (*fsm[])(temperatura_t)(tiempo_t) = {f_espera, f_enfriamiento, f_descongelamiento, f_alarma}
    config = inicio();
    while(1) estado = (*fsm[estado])(config);
    return 0;
}
# Temperatura minima
temp_min -20
# Temperatura maxima
temp_max 0
# tiempo de inicio descongelamiento en min
t_inicio_descong 240
# tiempo fin descongelamiento en min
t_fin_descong 30
estados_t (f_espera(temperatura_t, tiempo_t)) {
    temperatura_t;
    tiempo_t;
    offon_t;

    if(estados!=descongelamiento && tem<tem_max){
        frio = off;
        descong = off;
        alarma = off;
        estados = espera;
    }
    else{
        estados = enfriamiento
    }
return estados;
}

estados_t (f_enfriamiento(temperatura_t, tiempo_t)) {
    temperatura_t;
    tiempo_t;
    offon_t;

    if(estados!=descongelamiento && tem>tem_min){
        frio = on;
        descong = off;
        alarma = off;
        estados = enfriamiento;
    }
    else{
        estados = descongelamiento
    }
return estados;
}

estados_t (f_descongelamiento(temperatura_t, tiempo_t)) {
    temperatura_t;
    tiempo_t;
    offon_t;

    if(estados!=alarma && t_inicio_descong>t && t>t_fin_descong){
        frio = off;
        descong = on;
        alarma = off;
        estados = descongelamiento;
    }
    else{
        estados = alarma
    }
return estados;
}

estados_t (f_alarma(temperatura_t, tiempo_t)) {
    temperatura_t;
    tiempo_t;
    offon_t;

    if(tem>tem_max){
        frio = on;
        descong = off;
        alarma = on;
        estados = alarma;
    }
    else{
        estados = espera
    }
return estados;
}