Skip to content
Snippets Groups Projects

Compare revisions

Changes are shown as if the source revision was being merged into the target revision. Learn more about comparing revisions.

Source

Select target project
No results found

Target

Select target project
  • leger/avrcte
  • leger/avrcwa
2 results
Show changes
Commits on Source (10)
Subproject commit cb4f4be41070c632c29b37065b7b805632056210
Subproject commit 1bbb9871f4a1f20de73f9e90b63757595e530c4a
......@@ -21,8 +21,8 @@ cog.out(
#define BUS_port PORTC
#define BUS_txpin PIN3_bm
#define BUS_rxlen 256
#define BUS_txlen 256
#define BUS_rxlen 384
#define BUS_txlen 384
#define BUS_baudrate 1200
#define BUS_chsize 8
#define BUS_rxtrigger '\n'
......
......@@ -36,8 +36,8 @@ BUS = {
"rx": True,
"de_pindesc": PinDesc("C0"),
"rxhandler": "bus_msg_handler",
"txlen": 256,
"rxlen": 256,
"txlen": 384,
"rxlen": 384,
"baudrate": 1200,
"rxtriggerbegin": ("S", "M"),
}
......
......@@ -101,7 +101,7 @@ void config_default(config_t* c)
c->vol_cuve = 300;
c->Kp = 32*100;
c->ti = 3600;
c->consigne_temperature = 2350;
c->consigne_temperature = 2395;
c->debit_max = 1500;
c->cst_ev = 10;
c->debit_min1 = 200;
......@@ -111,11 +111,11 @@ void config_default(config_t* c)
c->m_rattrapage = 15;
c->consigne_debit = 0;
c->post_refroi_T1 = 1200;
c->post_refroi_T2 = 1600;
c->post_refroi_cold_water_T1 = 800;
c->post_refroi_cold_water_T2 = 1100;
c->post_refroi_hot_water_T1 = 1400;
c->post_refroi_hot_water_T2 = 1700;
c->post_refroi_T2 = 1400;
c->post_refroi_cold_water_T1 = 750;
c->post_refroi_cold_water_T2 = 1050;
c->post_refroi_hot_water_T1 = 1050;
c->post_refroi_hot_water_T2 = 1350;
c->post_refroi_dmax = 1000;
}
......
......@@ -46,11 +46,31 @@ void debit_update()
status.consigne_adj = status.consigne_debit + status.volume_manque/cconfig.m_rattrapage;
if(status.consigne_adj<0)
status.consigne_adj = 0;
if(vanne_internal_status == EV_CLOSED)
{
if(count==0)
{
status.consecutive_closed_debit = 0;
}
else
{
if(status.consecutive_closed_debit == 5)
{
orders.force_close_ev = 1;
status.consecutive_closed_debit = 0;
}
else
status.consecutive_closed_debit++;
}
}
else
status.consecutive_closed_debit = 0;
}
void debit_vanne_update()
{
if(cconfig.mode == MODE_AUTO || cconfig.mode == MODE_DEBIT)
if(cconfig.mode == MODE_AUTO || cconfig.mode == MODE_DEBIT || cconfig.mode == MODE_POST_REFROI)
{
if( (status.consigne_adj>cconfig.debit_min2) ||
((status.consigne_adj>cconfig.debit_min1) && (vanne_internal_status != EV_CLOSED)))
......
......@@ -134,7 +134,7 @@ uint8_t get_packet(char * z, uint8_t pid)
}
if(pid == 0x8f)
{
uint16_to_4char(config.post_refroi_T1, z+2);
uint16_to_4char(config.post_refroi_T2, z+2);
return 6;
}
if(pid == 0x90)
......@@ -176,7 +176,7 @@ uint8_t get_packet(char * z, uint8_t pid)
void message_send()
{
char msg[256];
char msg[384];
msg[0] = 'S';
msg[1] = ',';
uint8_to_2char(BID, msg+2);
......@@ -389,17 +389,20 @@ void message_send()
void message_get(const char* msg)
{
uint8_t message_from_master = 0;
if(msg[0] != 'M' || msg[1] != ',')
if(msg[1] != ',')
return;
if(msg[0] != 'M')
{
message_from_master = 1;
if(msg[2] != BID_C0 || msg[3] != BID_C1)
return; // ce n'est pas à moi qu'on parle
//ce n'est pas master qui parle
if(msg[0] != 'S' || msg[2] != BID_WATER_C0 || msg[3] != BID_WATER_C1)
return; // ce n'est pas WATER qui parle, et à part lui, je n'écoute
// que le master
}
else
{
if(msg[2] != BID_WATER_C0 || msg[3] != BID_WATER_C1)
return; // ce n'est pas WATER qui parle, et à part lui, je n'écoute
// que le master
message_from_master = 1;
if(msg[2] != BID_C0 || msg[3] != BID_C1)
return; // ce n'est pas à moi que master parle
}
if(msg[4] != ',' && msg[4] != ':')
return; //message mal formaté
......
......@@ -6,28 +6,40 @@ void do_orders()
{
if(orders.open_ev_step)
{
vanne_step_open(orders.open_ev_step_value);
vanne_step_open(orders.open_ev_step_value,1);
orders.open_ev_step = 0;
status.force_closed = 0;
}
if(orders.close_ev_step)
{
vanne_step_close(orders.close_ev_step_value);
vanne_step_close(orders.close_ev_step_value,1);
orders.close_ev_step = 0;
}
if(orders.open_ev)
{
vanne_open();
orders.open_ev=0;
status.force_closed = 0;
}
if(orders.close_ev)
{
vanne_close();
orders.close_ev=0;
}
if(orders.force_close_ev)
{
if(!status.force_closed)
{
vanne_force_close();
status.force_closed = 1;
}
orders.force_close_ev = 0;
}
if(orders.vidange_ev)
{
vanne_vidange();
orders.vidange_ev=0;
status.force_closed = 0;
}
if(orders.write_config)
{
......@@ -110,11 +122,11 @@ void do_orders()
if (status.temperature_cold_water > cconfig.post_refroi_cold_water_T2)
consigne_debit = 0;
else if(status.temperature_cold_water > cconfig.post_refroi_cold_water_T1)
consigne_debit *= (status.temperature_cold_water-cconfig.post_refroi_cold_water_T1)/(cconfig.post_refroi_cold_water_T2-cconfig.post_refroi_cold_water_T1);
consigne_debit *= (cconfig.post_refroi_cold_water_T2-status.temperature_cold_water)/(cconfig.post_refroi_cold_water_T2-cconfig.post_refroi_cold_water_T1);
if (status.temperature_hot_water > cconfig.post_refroi_hot_water_T2)
consigne_debit = 0;
else if(status.temperature_hot_water > cconfig.post_refroi_hot_water_T1)
consigne_debit *= (status.temperature_hot_water-cconfig.post_refroi_hot_water_T1)/(cconfig.post_refroi_hot_water_T2-cconfig.post_refroi_hot_water_T1);
consigne_debit *= (cconfig.post_refroi_hot_water_T2-status.temperature_hot_water)/(cconfig.post_refroi_hot_water_T2-cconfig.post_refroi_hot_water_T1);
if(consigne_debit < 0)
status.consigne_debit = 0;
else
......
......@@ -11,6 +11,7 @@ typedef struct orders_struct
uint16_t close_ev_step_value;
uint8_t open_ev;
uint8_t close_ev;
uint8_t force_close_ev;
uint8_t vidange_ev;
uint8_t get_T;
uint8_t write_config;
......
......@@ -15,4 +15,6 @@ void status_init()
status.fail = 0;
status.temperature_cold_water = 20;
status.temperature_hot_water = 20;
status.consecutive_closed_debit = 0;
status.force_closed = 0;
}
......@@ -21,6 +21,8 @@ typedef struct status_struct
uint16_t fail_get_T;
float temperature_cold_water;
float temperature_hot_water;
uint16_t consecutive_closed_debit;
uint8_t force_closed;
} status_t;
extern status_t status;
......
......@@ -28,10 +28,11 @@ void vanne_init()
vanne_internal_status = EV_MID;
}
uint8_t vanne_internal_step_close(uint16_t d)
uint8_t vanne_internal_step_close(uint16_t d, uint8_t force)
{
if(vanne_internal_status == EV_CLOSED)
return 1;
if(!force)
if(vanne_internal_status == EV_CLOSED)
return 1;
if(d<VANNE_ACTION_LIMIT)
return 0;
......@@ -45,8 +46,9 @@ uint8_t vanne_internal_step_close(uint16_t d)
VANNE_CMD_PORT.OUTSET = VANNE_CMD_CLOSE_bm;
for(k=0;k<d;k++)
_delay_ms(1);
if(!(VANNE_SENSOR_PORT.IN & VANNE_SENSOR_CLOSE_bm))
vanne_internal_status = EV_CLOSED;
if(!force)
if(!(VANNE_SENSOR_PORT.IN & VANNE_SENSOR_CLOSE_bm))
vanne_internal_status = EV_CLOSED;
VANNE_CMD_PORT.OUTCLR = VANNE_CMD_CLOSE_bm;
if(vanne_internal_status == EV_CLOSED)
......@@ -54,10 +56,11 @@ uint8_t vanne_internal_step_close(uint16_t d)
return 0;
}
uint8_t vanne_internal_step_open(uint16_t d)
uint8_t vanne_internal_step_open(uint16_t d, uint8_t force)
{
if(vanne_internal_status == EV_OPENED)
return 1;
if(!force)
if(vanne_internal_status == EV_OPENED)
return 1;
if(d<VANNE_ACTION_LIMIT)
return 0;
......@@ -71,8 +74,9 @@ uint8_t vanne_internal_step_open(uint16_t d)
VANNE_CMD_PORT.OUTSET = VANNE_CMD_OPEN_bm;
for(k=0;k<d;k++)
_delay_ms(1);
if(!(VANNE_SENSOR_PORT.IN & VANNE_SENSOR_OPEN_bm))
vanne_internal_status = EV_OPENED;
if(!force)
if(!(VANNE_SENSOR_PORT.IN & VANNE_SENSOR_OPEN_bm))
vanne_internal_status = EV_OPENED;
VANNE_CMD_PORT.OUTCLR = VANNE_CMD_OPEN_bm;
if(vanne_internal_status == EV_OPENED)
......@@ -80,7 +84,7 @@ uint8_t vanne_internal_step_open(uint16_t d)
return 0;
}
uint8_t vanne_step_close(uint16_t d)
uint8_t vanne_step_close(uint16_t d, uint8_t force)
{
uint16_t steps = d/(d/101+1);
uint16_t k;
......@@ -88,16 +92,16 @@ uint8_t vanne_step_close(uint16_t d)
for(k=0;k<d;k+=steps)
{
if(k+steps<=d)
ret = vanne_internal_step_close(steps);
ret = vanne_internal_step_close(steps, force);
else
ret = vanne_internal_step_close(d-k);
ret = vanne_internal_step_close(d-k, force);
if(ret)
return ret;
}
return ret;
}
uint8_t vanne_step_open(uint16_t d)
uint8_t vanne_step_open(uint16_t d, uint8_t force)
{
uint16_t steps = d/(d/101+1);
uint16_t k;
......@@ -105,9 +109,9 @@ uint8_t vanne_step_open(uint16_t d)
for(k=0;k<d;k+=steps)
{
if(k+steps<=d)
ret = vanne_internal_step_open(steps);
ret = vanne_internal_step_open(steps, force);
else
ret = vanne_internal_step_open(d-k);
ret = vanne_internal_step_open(d-k, force);
if(ret)
return ret;
}
......@@ -118,7 +122,16 @@ void vanne_close()
{
uint16_t k;
for(k=0;k<1000;k++)
if(vanne_internal_step_close(10))
if(vanne_internal_step_close(10,0))
break;
vanne_internal_status = EV_CLOSED;
}
void vanne_force_close()
{
uint16_t k;
for(k=0;k<1000;k++)
if(vanne_internal_step_close(10,1))
break;
vanne_internal_status = EV_CLOSED;
}
......@@ -127,7 +140,7 @@ void vanne_open()
{
uint16_t k;
for(k=0;k<1000;k++)
if(vanne_internal_step_open(10))
if(vanne_internal_step_open(10,0))
break;
vanne_internal_status = EV_OPENED;
}
......@@ -138,10 +151,10 @@ void vanne_vidange()
uint16_t kopen;
vanne_close();
for(kopen=0;kopen<1000;kopen++)
if(vanne_internal_step_open(10))
if(vanne_internal_step_open(10,0))
break;
for(kclose=0;kclose<1000;kclose++)
if(vanne_internal_step_close(10))
if(vanne_internal_step_close(10,0))
break;
uint8_t kmin;
if(kopen<900)
......@@ -156,7 +169,7 @@ void vanne_vidange()
uint16_t k2=0;
for(k2=0;k2<kmin;k2++)
if(vanne_internal_step_open(10))
if(vanne_internal_step_open(10,1))
break;
}
///[[[end]]]
......
......@@ -44,11 +44,12 @@ typedef enum state_ev
extern volatile ev_state_t vanne_internal_status;
void vanne_init();
uint8_t vanne_internal_step_close(uint16_t d);
uint8_t vanne_internal_step_open(uint16_t d);
uint8_t vanne_step_close(uint16_t d);
uint8_t vanne_step_open(uint16_t d);
uint8_t vanne_internal_step_close(uint16_t d, uint8_t force);
uint8_t vanne_internal_step_open(uint16_t d, uint8_t force);
uint8_t vanne_step_close(uint16_t d, uint8_t force);
uint8_t vanne_step_open(uint16_t d, uint8_t force);
void vanne_close();
void vanne_force_close();
void vanne_open();
void vanne_vidange();
#endif
......