jonatansa / Info-2---TP-Maquina-de-estado

0 stars 0 forks source link

TP Informatica 2 - Maquina de Estado #1

Open jonatansa opened 4 years ago

jonatansa commented 4 years ago

La idea sugerida es la del llenado del tanque, tener 1 tanque y una cisterna con 2 sensores c/u y 1 motor en espera.

jonatansa commented 4 years ago

Memoria Descriptiva

Mi sistema representa un control de llenado de tanque de agua mediante una cisterna. El Motor solo enciende (ON) si el NT esta por debajo de TB y si la cisterna esta entre SA y SB, pero si el en NS esta por debajo de SB el Motor estara apagado (OFF).

NS = Nivel del agua de la cisterna. NT = Nivel del agua del Tanque. TA = Nivel alto del tanque. TB = Nivel bajo del tanque. SA = Nivel alto de la cisterna. SB = Nivel bajo de la cisterna. Sin título

Codigo

DamRCorba commented 4 years ago

La maquina esta correcta.

DamRCorba commented 4 years ago

No tenes nada en el repositorio, deberias seguir los pasas que tenes en la seccion de code para poder subir los archivos.

jonatansa commented 4 years ago

Esquema de mi maquina

Esquema Tanque cisterna

Tabla de verdad

Esquema TV

Codigo


#include <stdio.h>
#include <stdlib.h>

//ENTRADAS Y SALIDAS
//Defino M como nombre de una salida que esta en un puerto A en el bit 0 (Motor)
//Defino EV1 como nombre de una salida que esta en un puerto A en el bit 1 (Electrovalvula 1)

#define setbit(reg, bit)    reg|=(1<<bit)               //Defino el seteo del bit que esta en el puerto reg

#define M_on    setbit(portA, 0)                //Siempre que escriba "M_on" se encendera el Motor
#define EV1_on  setbit(portA, 1)                //Siempre que escriba "EV1_on" se encendera la Electrovalvula 1

#define clearbit(reg, bit)      reg&=~(1<<bit)

#define M_off   clearbit(portA, 0)              //Siempre que escriba "M_off" se apagara el Motor
#define EV1_off clearbit(portA, 1)              //Siempre que escriba "EV1_off" se apagara la electrovalvula 1

#define SC portB                        //Defino SC como el valor que tomara el puerto de entrada B (Sensor de llenado Cisterna)
#define ST portC                        //Defino SC como el valor que tomara el puerto de entrada C (Sensor de llenado tanque)

//DEFINICION DEL LOS ESTADOS:

#define cargaA 0
#define cargaB 1
#define apagatodo 3

//FUNCIONES

unsigned char inicio (void);

char sensado(void);

//ESTRUCTURA

typedef struct{
    unsigned char NM1;           //Nivel de agua minimo de la cisterna
    unsigned char NM2;           //Nivel de agua minimo del tanque
}config;

char sensado(void)
{
    char state = 0;                     //state = [ B , A ] [0,1]
    config *bf;

    if(ST < 250)                        //Si el nivel de agua en cisterna es menor que el de llenado completo...
        state |= (1<<2);                    
    else                                //Sino...
        state &=~(1<<2);

    if(ST < bf.NM2)                     //Si el nivel en el tanque es menor que el indicado...
        state |= (1<<0);                                    
    else                                //Sino...
        state &=~(1<<0);

    return state;
}

int main(int argc, char *argv[]) {

    char estado;

    unsigned char ini = inicio ();          //La funcion inicio devuelve un 1 si se pudo abrir el archivo correctamente

    while(ini)
    {
        estado = sensado();
        switch(estado)
        {
            case cargaA:
                M_off;
                EV1_on;
                break;
            case cargaB:
                M_on;
                EV1_off;
                break;
            case apagatodo:
                M_off;
                EV1_off;
                break;      
        }
    }
    return 0;
}
DamRCorba commented 4 years ago

Hola Jonatan, La estrega para mañana esta cumplida, pero no termina de estar correcto el codigo. Deberias respetar el formato planteado. Cada estado tiene que estar resprestando por una funcion de estado que devuelve un estado. Vos estas usando solamente una funcion de sensado que genera o analisa la condicion y ejecuta el switch. Esto no cumple con el lineamiento

Debieras refactorizar el codigo para tener una funcion para cada estado y que en cada una de ellas se haga el sensado correspondiente.

Ademas el TP pide las buenas costumbres de programacion por lo que debes separar al codigo en diferentes archivos creando tu propia libreria. Y finalmente. La entrega final tiene que ser con tu codigo en la seccion code. No lo va estar aceptada si la cargas dentro del issue