|
|
@@ -24,13 +24,14 @@ board_t *get_board()
|
|
|
return &ac_board;
|
|
|
}
|
|
|
|
|
|
+extern uint16_t rl_delay_cnt[RelaySlaveChaNum];
|
|
|
+extern uint16_t rl_delay_zero_cnt[ZERO_CTRL_NUM];
|
|
|
+
|
|
|
|
|
|
|
|
|
static void task_query(void);
|
|
|
static void task_1s(void);
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
+static void task_10s(void);
|
|
|
static void relay_ctrl(void);
|
|
|
|
|
|
|
|
|
@@ -63,13 +64,45 @@ int main(){
|
|
|
strcpy(&(ac_board.md_data.r_data.r_d.b_info.version),VERSION);
|
|
|
|
|
|
flash_get_infomation(&ac_board.md_data.r_data.r_d.b_info);
|
|
|
+
|
|
|
+ ac_board.detection();
|
|
|
+#if( SURPPORT_2_PT && (!SUPPORT_TWIN_FIRE))
|
|
|
+ if(ac_board.md_data.r_data.r_d.detection & 0x1)
|
|
|
+ {
|
|
|
+ for(uint8_t i = 0; i < PT_SUB_COUNT;i++)
|
|
|
+ {
|
|
|
+ ac_board.handle_status[i] = ac_board.relay_staging_staus[i];
|
|
|
+ }
|
|
|
+
|
|
|
+ }
|
|
|
+ if(ac_board.md_data.r_data.r_d.detection & 0x2)
|
|
|
+ {
|
|
|
+ for(uint8_t i = PT_SUB_COUNT; i < RelaySlaveChaNum;i++)
|
|
|
+ {
|
|
|
+ ac_board.handle_status[i] = ac_board.relay_staging_staus[i];
|
|
|
+ }
|
|
|
+ }
|
|
|
+#else
|
|
|
+
|
|
|
+ if(ac_board.md_data.r_data.r_d.detection & 0x1)
|
|
|
+ {
|
|
|
+ for(uint8_t i = 0; i < RelaySlaveChaNum;i++)
|
|
|
+ {
|
|
|
+ ac_board.handle_status[i] = ac_board.relay_staging_staus[i];
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+#endif
|
|
|
+
|
|
|
+
|
|
|
while(1)
|
|
|
{
|
|
|
- relay_ctrl();
|
|
|
task_query();
|
|
|
task_1s();
|
|
|
+ task_10s();
|
|
|
eMBPoll();
|
|
|
ac_board.opt_detection();
|
|
|
+ relay_ctrl();
|
|
|
}
|
|
|
return 0;
|
|
|
}
|
|
|
@@ -123,46 +156,28 @@ static void task_1s(void)
|
|
|
}
|
|
|
|
|
|
#else
|
|
|
- uint8_t avi = (RelaySlaveChaNum % INPUT_PT_NUM) ? (RelaySlaveChaNum / INPUT_PT_NUM + 1) : (RelaySlaveChaNum / INPUT_PT_NUM );
|
|
|
uint32_t data_voltage = 0;
|
|
|
uint32_t data_current = 0;
|
|
|
uint32_t data_power = 0;
|
|
|
uint32_t data_consumer = 0;
|
|
|
- if(avi == RelaySlaveChaNum)
|
|
|
- {
|
|
|
- for(int i = 0 ; i < avi;i++)
|
|
|
- {
|
|
|
- data_voltage = ac_board.md_data.r_data.r_d.ele_out[i].voltage > data_voltage ? ac_board.md_data.r_data.r_d.ele_out[i].voltage : data_voltage;
|
|
|
- data_current += ac_board.md_data.r_data.r_d.ele_out[i].current;
|
|
|
- data_consumer += ac_board.md_data.r_data.r_d.ele_out[i].consumer;
|
|
|
- data_power += ac_board.md_data.r_data.r_d.ele_out[i].power;
|
|
|
- }
|
|
|
- ac_board.md_data.r_data.r_d.ele_3_in.info[0].voltage = data_voltage;
|
|
|
- ac_board.md_data.r_data.r_d.ele_3_in.info[0].current = data_current;
|
|
|
- ac_board.md_data.r_data.r_d.ele_3_in.info[0].power = data_power;
|
|
|
- ac_board.md_data.r_data.r_d.ele_3_in.info[0].consumer = data_consumer;
|
|
|
- ac_board.md_data.r_data.r_d.ele_3_in.info[0].resever = ac_board.md_data.r_data.r_d.ele_out[0].resever;
|
|
|
- //check input wanning
|
|
|
- ac_board.check_wanning(ELE_INPUT,0);
|
|
|
- }else
|
|
|
- {
|
|
|
- for(int i = 0 ; i < avi;i++)
|
|
|
+ #if(SURPPORT_2_PT)
|
|
|
+ for(int i = 0 ; i < PT_SUB_COUNT;i++)
|
|
|
{
|
|
|
data_voltage = ac_board.md_data.r_data.r_d.ele_out[i].voltage > data_voltage ? ac_board.md_data.r_data.r_d.ele_out[i].voltage : data_voltage;
|
|
|
data_current += ac_board.md_data.r_data.r_d.ele_out[i].current;
|
|
|
data_consumer += ac_board.md_data.r_data.r_d.ele_out[i].consumer;
|
|
|
data_power += ac_board.md_data.r_data.r_d.ele_out[i].power;
|
|
|
}
|
|
|
-
|
|
|
+
|
|
|
ac_board.md_data.r_data.r_d.ele_3_in.info[0].voltage = data_voltage;
|
|
|
ac_board.md_data.r_data.r_d.ele_3_in.info[0].current = data_current;
|
|
|
ac_board.md_data.r_data.r_d.ele_3_in.info[0].power = data_power;
|
|
|
ac_board.md_data.r_data.r_d.ele_3_in.info[0].consumer = data_consumer;
|
|
|
ac_board.md_data.r_data.r_d.ele_3_in.info[0].resever = ac_board.md_data.r_data.r_d.ele_out[0].resever;
|
|
|
- //check input wanning
|
|
|
+ //check input wanning
|
|
|
ac_board.check_wanning(ELE_INPUT,0);
|
|
|
data_voltage = data_current = data_power = data_consumer =0;
|
|
|
- for(int i = avi ; i < RelaySlaveChaNum;i++)
|
|
|
+ for(int i = PT_SUB_COUNT ; i < RelaySlaveChaNum;i++)
|
|
|
{
|
|
|
data_voltage = ac_board.md_data.r_data.r_d.ele_out[i].voltage > data_voltage ? ac_board.md_data.r_data.r_d.ele_out[i].voltage : data_voltage;
|
|
|
data_current += ac_board.md_data.r_data.r_d.ele_out[i].current;
|
|
|
@@ -173,16 +188,61 @@ static void task_1s(void)
|
|
|
ac_board.md_data.r_data.r_d.ele_3_in.info[1].current = data_current;
|
|
|
ac_board.md_data.r_data.r_d.ele_3_in.info[1].power = data_power;
|
|
|
ac_board.md_data.r_data.r_d.ele_3_in.info[1].consumer = data_consumer;
|
|
|
- ac_board.md_data.r_data.r_d.ele_3_in.info[1].resever = ac_board.md_data.r_data.r_d.ele_out[avi].resever; //phase infomation
|
|
|
+ ac_board.md_data.r_data.r_d.ele_3_in.info[1].resever = ac_board.md_data.r_data.r_d.ele_out[PT_SUB_COUNT].resever; //phase infomation
|
|
|
//check input wanning
|
|
|
ac_board.check_wanning(ELE_INPUT,1);
|
|
|
- }
|
|
|
+
|
|
|
+ #else
|
|
|
+
|
|
|
+ for(int i = 0 ; i < avi;i++)
|
|
|
+ {
|
|
|
+ data_voltage = ac_board.md_data.r_data.r_d.ele_out[i].voltage > data_voltage ? ac_board.md_data.r_data.r_d.ele_out[i].voltage : data_voltage;
|
|
|
+ data_current += ac_board.md_data.r_data.r_d.ele_out[i].current;
|
|
|
+ data_consumer += ac_board.md_data.r_data.r_d.ele_out[i].consumer;
|
|
|
+ data_power += ac_board.md_data.r_data.r_d.ele_out[i].power;
|
|
|
+ }
|
|
|
+ ac_board.md_data.r_data.r_d.ele_3_in.info[0].voltage = data_voltage;
|
|
|
+ ac_board.md_data.r_data.r_d.ele_3_in.info[0].current = data_current;
|
|
|
+ ac_board.md_data.r_data.r_d.ele_3_in.info[0].power = data_power;
|
|
|
+ ac_board.md_data.r_data.r_d.ele_3_in.info[0].consumer = data_consumer;
|
|
|
+ ac_board.md_data.r_data.r_d.ele_3_in.info[0].resever = ac_board.md_data.r_data.r_d.ele_out[0].resever;
|
|
|
+ //check input wanning
|
|
|
+ ac_board.check_wanning(ELE_INPUT,0);
|
|
|
+ #endif
|
|
|
#endif
|
|
|
channel = 0;
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
|
|
|
+static void task_10s(void)
|
|
|
+{
|
|
|
+ if(ac_board.flag_10s)
|
|
|
+ {
|
|
|
+ ac_board.flag_10s = 0;
|
|
|
+ for(int i = 0; i < RelaySlaveChaNum;i++)
|
|
|
+ {
|
|
|
+ ac_board.con_da.iic_da.iic_con.iic_consumer[i] = ac_board.md_data.r_data.r_d.ele_out[i].consumer;
|
|
|
+ }
|
|
|
+ if(ac_board.con_da.row >= MAX_ROW)
|
|
|
+ {
|
|
|
+ ac_board.con_da.row = 0;
|
|
|
+ }
|
|
|
+ if(ac_board.con_da.index > 0xFFFFFFFFFFFFFFFF)
|
|
|
+ {
|
|
|
+ iic_data chache1={0};
|
|
|
+ ac_board.con_da.index = 0;
|
|
|
+ for(int i = 0 ; i < MAX_ROW;i++)
|
|
|
+ ac_board.write_eeprom_page(EEPROM_CONSUMER_ADDR +(CONSUM_PAGE*i),&chache1,CONSUM_PAGE);
|
|
|
+ ac_board.con_da.row = 0;
|
|
|
+ }
|
|
|
+ ac_board.con_da.iic_da.iic_con.recode_index1 = ac_board.con_da.index;
|
|
|
+ ac_board.write_eeprom_page(EEPROM_CONSUMER_ADDR+(CONSUM_PAGE*ac_board.con_da.row),&ac_board.con_da.iic_da.iic_con,CONSUM_PAGE);
|
|
|
+ ac_board.con_da.index++;
|
|
|
+ ac_board.con_da.row++;
|
|
|
+
|
|
|
+ }
|
|
|
+}
|
|
|
|
|
|
static void relay_ctrl(void)
|
|
|
{
|
|
|
@@ -201,6 +261,7 @@ static void relay_ctrl(void)
|
|
|
ac_board.relay_limit_counter[i] = ac_board.md_data.rw_data.rw_d.delay_chn[i].delay_open;
|
|
|
CLEAR_RL_COUNTER_END_FLAG(ac_board.relay_staging_staus[i]);
|
|
|
SET_RL_COUNTER_BEGIN_FLAG(ac_board.relay_staging_staus[i]);
|
|
|
+ rl_delay_cnt[i] = 0;
|
|
|
}else
|
|
|
{
|
|
|
ac_board.relay_limit_counter[i] = 0;
|
|
|
@@ -217,6 +278,7 @@ static void relay_ctrl(void)
|
|
|
ac_board.relay_limit_counter[i] = ac_board.md_data.rw_data.rw_d.delay_chn[i].delay_close;
|
|
|
CLEAR_RL_COUNTER_END_FLAG(ac_board.relay_staging_staus[i]);
|
|
|
SET_RL_COUNTER_BEGIN_FLAG(ac_board.relay_staging_staus[i]);
|
|
|
+ rl_delay_cnt[i] = 0;
|
|
|
}else
|
|
|
{
|
|
|
ac_board.relay_limit_counter[i] = 0;
|
|
|
@@ -248,6 +310,7 @@ static void relay_ctrl(void)
|
|
|
ac_board.relay_zero_limit_counter[i] = ac_board.md_data.rw_data.rw_d.zero_chn[i].delay_open;
|
|
|
CLEAR_RL_COUNTER_END_FLAG(ac_board.relay_zero_staging_status[i]);
|
|
|
SET_RL_COUNTER_BEGIN_FLAG(ac_board.relay_zero_staging_status[i]);
|
|
|
+ rl_delay_zero_cnt[i] = 0;
|
|
|
}else
|
|
|
{
|
|
|
ac_board.relay_zero_limit_counter[i] = 0;
|
|
|
@@ -264,6 +327,7 @@ static void relay_ctrl(void)
|
|
|
ac_board.relay_zero_limit_counter[i] = ac_board.md_data.rw_data.rw_d.zero_chn[i].delay_close;
|
|
|
CLEAR_RL_COUNTER_END_FLAG(ac_board.relay_zero_staging_status[i]);
|
|
|
SET_RL_COUNTER_BEGIN_FLAG(ac_board.relay_zero_staging_status[i]);
|
|
|
+ rl_delay_zero_cnt[i] = 0;
|
|
|
}else
|
|
|
{
|
|
|
ac_board.relay_zero_limit_counter[i] = 0;
|
|
|
@@ -285,16 +349,24 @@ static void relay_ctrl(void)
|
|
|
if(IS_RL_COUNTER_END_FLAG_EN(ac_board.relay_staging_staus[i]))
|
|
|
{
|
|
|
CLEAR_RL_COUNTER_END_FLAG(ac_board.relay_staging_staus[i]);
|
|
|
+ uint16_t value = 0;
|
|
|
if(IS_RL_ON_FLAG_EN(ac_board.relay_staging_staus[i]))
|
|
|
{
|
|
|
CLEAR_RL_ON_FLAG(ac_board.relay_staging_staus[i]);
|
|
|
+ value = RELAY_OPEN;
|
|
|
ac_board.open(i);
|
|
|
}else if(IS_RL_OFF_FLAG_EN(ac_board.relay_staging_staus[i]))
|
|
|
{
|
|
|
CLEAR_RL_OFF_FLAG(ac_board.relay_staging_staus[i]);
|
|
|
ac_board.close(i);
|
|
|
+ value = RELAY_CLOSE;
|
|
|
}
|
|
|
//todo insert data to iic flash chache and wait write to eepeom
|
|
|
+ w_eeprom_data_t data = {0};
|
|
|
+ data.lenth =2;
|
|
|
+ memcpy(&data.data,&value,2);
|
|
|
+ data.start_addr = (EEPROM_STATUS_ADDR+(i*2));
|
|
|
+ ac_board.q_cache.en_queue(&data);
|
|
|
}
|
|
|
}
|
|
|
for(int i = 0; i < ZERO_CTRL_NUM;i++)
|
|
|
@@ -302,16 +374,25 @@ static void relay_ctrl(void)
|
|
|
if(IS_RL_COUNTER_END_FLAG_EN(ac_board.relay_zero_staging_status[i]))
|
|
|
{
|
|
|
CLEAR_RL_COUNTER_END_FLAG(ac_board.relay_zero_staging_status[i]);
|
|
|
+ uint16_t value = 0;
|
|
|
if(IS_RL_ON_FLAG_EN(ac_board.relay_zero_staging_status[i]))
|
|
|
{
|
|
|
CLEAR_RL_ON_FLAG(ac_board.relay_zero_staging_status[i]);
|
|
|
ac_board.zero_open(i);
|
|
|
+ value = RELAY_OPEN;
|
|
|
}else if(IS_RL_OFF_FLAG_EN(ac_board.relay_zero_staging_status[i]))
|
|
|
{
|
|
|
CLEAR_RL_OFF_FLAG(ac_board.relay_zero_staging_status[i]);
|
|
|
ac_board.zero_close(i);
|
|
|
+ value = RELAY_CLOSE;
|
|
|
}
|
|
|
//todo insert data to iic flash chache and wait write to eepeom
|
|
|
+
|
|
|
+ w_eeprom_data_t data = {0};
|
|
|
+ data.lenth =2;
|
|
|
+ memcpy(&data.data,&value,2);
|
|
|
+ data.start_addr = (EEPROM_STATUS_ADDR+((13+i)*2));
|
|
|
+ ac_board.q_cache.en_queue(&data);
|
|
|
}
|
|
|
}
|
|
|
}
|