Newer
Older
#include "config.h"
config_t config;
cconfig_t cconfig;
void config_write()
{
uint16_t k;
for(k=0;k<sizeof(config_t);k++)
eeprom_write_byte(EEPROM_ADDR_CONFIG+k, *(((uint8_t*)&config)+k));
}
void config_read()
{
uint16_t k;
for(k=0;k<sizeof(config_t);k++)
*(((uint8_t*)&config)+k) = eeprom_read_byte(EEPROM_ADDR_CONFIG+k);
}
void config_init()
{
config_read();
cconfig_update(&config, &cconfig);
if(!config_valid(&cconfig))
{
config_default(&config);
cconfig_update(&config, &cconfig);
}
}
void cconfig_update(config_t * c, cconfig_t * cc)
{
cc->mode = c->mode;
cc->ti = c->ti;
cc->consigne_temperature = 0.01 * c->consigne_temperature;
cc->debit_max = (0.01 * c->debit_max * c->vol_cuve) / 300;
cc->cst_ev = c->cst_ev;
cc->debit_min1 = 0.01 * c->debit_min1;
cc->debit_min2 = 0.01 * c->debit_min2;
cc->minimum_step = c->minimum_step;
cc->debit_no_action = cc->minimum_step/cc->cst_ev;
cc->volume_manque_max = 0.01 * c->volume_manque_max;
cc->m_rattrapage = c->m_rattrapage;
}
uint8_t config_valid(cconfig_t * cc)
{
if(cc->mode<1 || cc->mode>5)
return 0;
if(cc->Kp<1 || cc->Kp>100)
return 0;
if(cc->ti<60 || cc->ti > 86400)
return 0;
if(cc->consigne_temperature < 10 || cc->consigne_temperature > 40)
return 0;
if(cc->debit_max < 5 || cc->debit_max > 50)
return 0;
if(cc->cst_ev < 1 || cc->cst_ev>100)
return 0;
if(cc->debit_min1 < 1 || cc->debit_min1 > 40)
return 0;
if(cc->debit_min2 < 1 || cc->debit_min2 > 40)
return 0;
if(cc->debit_min1 >= cc->debit_min2)
return 0;
if(cc->debit_min2 >= cc->debit_max)
return 0;
if(cc->minimum_step < 1 || cc->minimum_step > 150)
return 0;
return 0;
if(cc->m_rattrapage < 1 || cc->m_rattrapage > 60)
return 0;
if(cc->consigne_debit<0 || cc->consigne_debit>50)
return 0;
return 1;
}
void config_default(config_t* c)
{
c->mode = (uint8_t)MODE_FORCE_CLOSE;
c->vol_cuve = 300;
c->Kp = 32*100;
c->ti = 3600;
c->consigne_temperature = 2350;
c->cst_ev = 10;
c->debit_min1 = 200;
c->debit_min2 = 400;
c->minimum_step = 10;
c->volume_manque_max = 7500;
c->m_rattrapage = 15;
void config_apply_new_config(config_t * pnew_config)
{
cconfig_t new_cconfig;
cconfig_update(pnew_config, &new_cconfig);
if(config_valid(&new_cconfig))
{
uint8_t mode_change = 0;
if(pnew_config->mode != config.mode)
mode_change = 1;
memcpy(&config, pnew_config, sizeof(config_t));
config_write();
cconfig_update(&config, &cconfig);
if(mode_change)
config_mode_change();
if(config.mode == MODE_DEBIT)
status.consigne_debit = cconfig.consigne_debit;
}
}
void config_mode_change()
{
if(config.mode == MODE_FORCE_CLOSE)
status.consigne_debit = 0;
status.volume_manque = 0;
}
status.consigne_debit = 0;
status.volume_manque = 0;
}
status.consigne_debit = 0;
status.volume_manque = 0;
}
else if(config.mode == MODE_DEBIT)
{
orders.close_ev = 1;
status.volume_manque = 0;