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