|
|
@@ -284,62 +284,6 @@ static void Proc100msTask(void)
|
|
|
if(Get100msFlag()) //判断100ms标志状态
|
|
|
{
|
|
|
|
|
|
-#if SUPPORT_TWIN_FIRE
|
|
|
- uint32_t voltage = 0;
|
|
|
- uint32_t current = 0;
|
|
|
- uint32_t power = 0;
|
|
|
- uint32_t consumer = 0;
|
|
|
- uint32_t fac = 0;
|
|
|
- uint32_t freq = 0;
|
|
|
- uint32_t data_v = 0;
|
|
|
- uint32_t data_i = 0;
|
|
|
- if((Start_Read_Flag)&&(channel==0x00)) //只有读完数据之后且现在轮询到通道0才会继续更新电压和频率值
|
|
|
- {
|
|
|
- Start_Read_Flag = 0;
|
|
|
- }
|
|
|
- select_channel(channel);
|
|
|
- Calculate_HLW8110_MeterData();
|
|
|
-
|
|
|
- data_v = (F_AC_V*EE_ACDC_Coef_ReadReg[channel].ACDC_V_k)+(EE_ACDC_Coef_ReadReg[channel].ACDC_V_b/1000);
|
|
|
- data_i = (F_AC_I*EE_ACDC_Coef_ReadReg[channel].ACDC_I_k)+(EE_ACDC_Coef_ReadReg[channel].ACDC_I_b/1000);
|
|
|
- voltage = data_v;
|
|
|
- current = data_i;
|
|
|
- power = F_AC_P*1000;
|
|
|
- freq = F_AC_LINE_Freq*1000;
|
|
|
- Hlw8110_Restore[channel] += F_AC_E;
|
|
|
- fac = F_AC_PF*1000;
|
|
|
-
|
|
|
-
|
|
|
- select_channel(channel + 4);
|
|
|
- Calculate_HLW8110_MeterData();
|
|
|
-
|
|
|
-
|
|
|
- data_v = (F_AC_V*EE_ACDC_Coef_ReadReg[channel].ACDC_V_k)+(EE_ACDC_Coef_ReadReg[channel].ACDC_V_b/1000);
|
|
|
- data_i = (F_AC_I*EE_ACDC_Coef_ReadReg[channel].ACDC_I_k)+(EE_ACDC_Coef_ReadReg[channel].ACDC_I_b/1000);
|
|
|
-
|
|
|
- voltage = data_v > voltage ? data_v : voltage;
|
|
|
- current += data_i;
|
|
|
- power += (F_AC_P*1000);
|
|
|
- Hlw8110_Restore[channel] += F_AC_E;
|
|
|
- consumer = Hlw8110_Restore[channel]*1000 + read_Total_Consumer[channel];
|
|
|
- fac = fac > (F_AC_PF*1000) ? fac : (F_AC_PF*1000);
|
|
|
- if(voltage <=1000)
|
|
|
- {
|
|
|
- current = 0;
|
|
|
- freq = 0;
|
|
|
- fac = 0;
|
|
|
- power = 0;
|
|
|
- }
|
|
|
-
|
|
|
- AC_Ele_ReadReg[channel].AC_V = voltage*(1.732);
|
|
|
- AC_Ele_ReadReg[channel].AC_I = current;
|
|
|
- AC_Ele_ReadReg[channel].AC_LINE_Freq = freq;
|
|
|
- AC_Ele_ReadReg[channel].AC_P = power;
|
|
|
- AC_Ele_ReadReg[channel].AC_PF =fac;
|
|
|
- AC_Ele_ReadReg[channel].AC_E = consumer;
|
|
|
-
|
|
|
-
|
|
|
-#else
|
|
|
select_channel(channel);
|
|
|
Calculate_HLW8110_MeterData();
|
|
|
//AC_Ele_ReadReg[0].AC_V=(F_AC_V*EE_ACDC_Coef_ReadReg[0].ACDC_V_k)+(EE_ACDC_Coef_ReadReg[0].ACDC_V_b/1000);
|
|
|
@@ -370,7 +314,7 @@ static void Proc100msTask(void)
|
|
|
Hlw8110_Restore[channel] += F_AC_E;
|
|
|
AC_Ele_ReadReg[channel].AC_E=(Hlw8110_Restore[channel]*1000 + read_Total_Consumer[channel]); //电能
|
|
|
AC_Ele_ReadReg[channel].AC_PF=F_AC_PF*1000; //功率因素
|
|
|
-#endif
|
|
|
+
|
|
|
// AC_Ele_ReadReg_All.AC_V = AC_Ele_ReadReg[0].AC_V;
|
|
|
// AC_Ele_ReadReg_All.AC_I += AC_Ele_ReadReg[channel].AC_I; //all current
|
|
|
// AC_Ele_ReadReg_All.AC_P += AC_Ele_ReadReg[channel].AC_P;
|
|
|
@@ -402,6 +346,20 @@ static void Proc100msTask(void)
|
|
|
Clr100msFlag(); //清除100ms标志
|
|
|
}
|
|
|
}
|
|
|
+
|
|
|
+
|
|
|
+void set_channel_status(uint8_t channel,uint8_t status)
|
|
|
+{
|
|
|
+
|
|
|
+ if(status)
|
|
|
+ {
|
|
|
+ EE_ACDC_State_ReadReg[channel].ACDC_Cha_On_Off_State = true;
|
|
|
+ }else
|
|
|
+ {
|
|
|
+ EE_ACDC_State_ReadReg[channel].ACDC_Cha_On_Off_State = false;
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
/*********************************************************************************************************
|
|
|
* 函数名称:InitHardware
|
|
|
* 函数功能:所有的硬件相关的模块初始化函数都放在此函数中
|
|
|
@@ -422,7 +380,7 @@ static void InitHardware(void)
|
|
|
No_Load[i] = StaticCur;
|
|
|
InitSysTick(); //初始化SysTick模块
|
|
|
Init74Lvc(); //初始化74lvc573锁存器
|
|
|
-// if(gpio_input_bit_get(GPIOA,LOCK_CHECK)) //更新程序后没有及时的拔掉下载器则置标志位,不用等到程序进入主循环LED闪烁左右判断依据
|
|
|
+ if(gpio_input_bit_get(GPIOA,LOCK_CHECK)) //更新程序后没有及时的拔掉下载器则置标志位,不用等到程序进入主循环LED闪烁左右判断依据
|
|
|
Jlink_Sta_Flag = 1;
|
|
|
InitLED(); //初始化LED模块
|
|
|
InitKey(); //初始化Key模块
|
|
|
@@ -474,18 +432,26 @@ static void InitHardware(void)
|
|
|
if(key_1 == false)
|
|
|
{
|
|
|
handle_k_1_status = 0;
|
|
|
+ EE_ACDC_State_ReadReg[0].ACDC_Cha_On_Off_State = false;
|
|
|
+ set_channel_status(0,0);
|
|
|
}
|
|
|
if(key_2 == false)
|
|
|
{
|
|
|
handle_k_2_status = 0;
|
|
|
+ EE_ACDC_State_ReadReg[1].ACDC_Cha_On_Off_State = false;
|
|
|
+ set_channel_status(1,0);
|
|
|
}
|
|
|
if(key_3 == false)
|
|
|
{
|
|
|
handle_k_3_status = 0;
|
|
|
+ EE_ACDC_State_ReadReg[2].ACDC_Cha_On_Off_State = false;
|
|
|
+ set_channel_status(2,0);
|
|
|
}
|
|
|
if(key_4 == false)
|
|
|
{
|
|
|
handle_k_4_status = 0;
|
|
|
+ EE_ACDC_State_ReadReg[3].ACDC_Cha_On_Off_State = false;
|
|
|
+ set_channel_status(3,0);
|
|
|
}
|
|
|
#endif
|
|
|
while(1)
|
|
|
@@ -516,17 +482,6 @@ static void InitHardware(void)
|
|
|
|
|
|
|
|
|
|
|
|
-void set_channel_status(uint8_t channel,uint8_t status)
|
|
|
-{
|
|
|
-
|
|
|
- if(status)
|
|
|
- {
|
|
|
- EE_ACDC_State_ReadReg[channel].ACDC_Cha_On_Off_State = true;
|
|
|
- }else
|
|
|
- {
|
|
|
- EE_ACDC_State_ReadReg[channel].ACDC_Cha_On_Off_State = false;
|
|
|
- }
|
|
|
-}
|
|
|
|
|
|
|
|
|
void switch_recode()
|
|
|
@@ -534,32 +489,32 @@ void switch_recode()
|
|
|
|
|
|
#if SUPPORT_DETECTION
|
|
|
#if SUPPORT_SWITCH_REMENBER
|
|
|
-#if ((RelaySlaveChaNum == 6) || ((RelaySlaveChaNum == 8) && SUPPORT_2_DETECTION))
|
|
|
+ #if (SUPPORT_2_DETECTION)
|
|
|
if((detection_value & 1) == 0)
|
|
|
{
|
|
|
if(handle_detection[0] == 1)
|
|
|
{
|
|
|
- for(uint8_t k = 0; k < (RelaySlaveChaNum/2);k++)
|
|
|
+ uint8_t channel = (RelaySlaveChaNum % 2) ? (RelaySlaveChaNum/2 +1) : (RelaySlaveChaNum / 2);
|
|
|
+ for(uint8_t k = 0; k < channel;k++)
|
|
|
handle_status[k] = EE_ACDC_State_ReadReg[k].ACDC_Cha_On_Off_State;
|
|
|
+ EE_ACDC_State_ReadReg[0].ACDC_ALLCha_Off_State=true;
|
|
|
+ for(uint8_t k = 0; k < channel;k++)
|
|
|
+ EE_ACDC_State_ReadReg[k].ACDC_Cha_On_Off_State=false;
|
|
|
+ for(uint8_t k = 0; k < channel;k++)
|
|
|
+ RelayState_ch(k);
|
|
|
+ handle_detection[0] = 0;
|
|
|
}
|
|
|
- handle_detection[0] = 0;
|
|
|
- EE_ACDC_State_ReadReg[0].ACDC_ALLCha_Off_State=true;
|
|
|
- for(uint8_t k = 0; k < (RelaySlaveChaNum/2);k++)
|
|
|
- EE_ACDC_State_ReadReg[k].ACDC_Cha_On_Off_State=false;
|
|
|
- for(uint8_t k = 0; k < (RelaySlaveChaNum/2);k++)
|
|
|
- RelayState_ch(k);
|
|
|
}else
|
|
|
{
|
|
|
if(handle_detection[0] == 0)
|
|
|
{
|
|
|
handle_detection[0] = 1;
|
|
|
- for(uint8_t k = 0; k < (RelaySlaveChaNum/2);k++)
|
|
|
+ uint8_t channel = (RelaySlaveChaNum % 2) ? (RelaySlaveChaNum/2 +1) : (RelaySlaveChaNum / 2);
|
|
|
+ for(uint8_t k = 0; k < channel;k++)
|
|
|
EE_ACDC_State_ReadReg[k].ACDC_Cha_On_Off_State=handle_status[k];
|
|
|
- EE_ACDC_State_ReadReg[0].ACDC_ALLCha_On_State=true;
|
|
|
- input_1_en = 1;
|
|
|
- input_1_ms_count = 0;
|
|
|
-
|
|
|
-
|
|
|
+ EE_ACDC_State_ReadReg[0].ACDC_ALLCha_On_State=true;
|
|
|
+ input_1_en = 1;
|
|
|
+ input_1_ms_count = 0;
|
|
|
}
|
|
|
}
|
|
|
|
|
|
@@ -567,22 +522,24 @@ void switch_recode()
|
|
|
{
|
|
|
if(handle_detection[1] == 1)
|
|
|
{
|
|
|
- for(uint8_t k = (RelaySlaveChaNum/2); k < RelaySlaveChaNum;k++)
|
|
|
+ uint8_t channel = (RelaySlaveChaNum % 2) ? (RelaySlaveChaNum/2 +1) : (RelaySlaveChaNum /2);
|
|
|
+ for(uint8_t k = channel; k < RelaySlaveChaNum;k++)
|
|
|
handle_status[k] = EE_ACDC_State_ReadReg[k].ACDC_Cha_On_Off_State;
|
|
|
+ EE_ACDC_State_ReadReg[0].ACDC_ALLCha_Off_State=true;
|
|
|
+
|
|
|
+ for(uint8_t k = channel; k < RelaySlaveChaNum;k++)
|
|
|
+ EE_ACDC_State_ReadReg[k].ACDC_Cha_On_Off_State=false;
|
|
|
+ for(uint8_t k = channel; k < RelaySlaveChaNum;k++)
|
|
|
+ RelayState_ch(k);
|
|
|
+ handle_detection[1] = 0;
|
|
|
}
|
|
|
- EE_ACDC_State_ReadReg[0].ACDC_ALLCha_Off_State=true;
|
|
|
- handle_detection[1] = 0;
|
|
|
- for(uint8_t k = (RelaySlaveChaNum/2); k < RelaySlaveChaNum;k++)
|
|
|
- EE_ACDC_State_ReadReg[k].ACDC_Cha_On_Off_State=false;
|
|
|
-
|
|
|
- for(uint8_t k = (RelaySlaveChaNum/2); k < RelaySlaveChaNum;k++)
|
|
|
- RelayState_ch(k);
|
|
|
}else
|
|
|
{
|
|
|
if(handle_detection[1] == 0)
|
|
|
{
|
|
|
handle_detection[1] = 1;
|
|
|
- for(uint8_t k = (RelaySlaveChaNum/2); k < RelaySlaveChaNum;k++)
|
|
|
+ uint8_t channel = (RelaySlaveChaNum % 2) ? (RelaySlaveChaNum/2 +1) : (RelaySlaveChaNum / 2);
|
|
|
+ for(uint8_t k = channel; k < RelaySlaveChaNum;k++)
|
|
|
EE_ACDC_State_ReadReg[k].ACDC_Cha_On_Off_State=handle_status[k];
|
|
|
EE_ACDC_State_ReadReg[0].ACDC_ALLCha_On_State=true;
|
|
|
input_2_en = 1;
|
|
|
@@ -590,36 +547,7 @@ void switch_recode()
|
|
|
|
|
|
}
|
|
|
}
|
|
|
-
|
|
|
-#elif (SUPPORT_TWIN_FIRE)
|
|
|
- if((detection_value & 0x3) != 0x3)
|
|
|
- {
|
|
|
- if(handle_detection[0] == 1)
|
|
|
- {
|
|
|
- for(int i = 0;i < RelaySlaveChaNum;i++)
|
|
|
- handle_status[i] = EE_ACDC_State_ReadReg[i].ACDC_Cha_On_Off_State;
|
|
|
- }
|
|
|
- handle_detection[0] = 0;
|
|
|
- EE_ACDC_State_ReadReg[0].ACDC_ALLCha_Off_State=true;
|
|
|
- for(int i = 0;i < RelaySlaveChaNum;i++)
|
|
|
- EE_ACDC_State_ReadReg[i].ACDC_Cha_On_Off_State = false;
|
|
|
- RelayState();
|
|
|
- }else
|
|
|
- {
|
|
|
- if(handle_detection[0] == 0)
|
|
|
- {
|
|
|
- handle_detection[0] = 1;
|
|
|
- for(int i = 0;i < RelaySlaveChaNum;i++)
|
|
|
- EE_ACDC_State_ReadReg[i].ACDC_Cha_On_Off_State=handle_status[i];
|
|
|
- EE_ACDC_State_ReadReg[0].ACDC_ALLCha_On_State=true;
|
|
|
- All_On_Flag = 1; //全开标志置1
|
|
|
- All_Off_Flag = 0;
|
|
|
- Delay_Ms_2 = 0;
|
|
|
- timer_enable(TIMER14);
|
|
|
- //RelayState();
|
|
|
- }
|
|
|
- }
|
|
|
-#else
|
|
|
+ #else
|
|
|
if(detection_value == 0)
|
|
|
{
|
|
|
if(handle_detection[0] == 1)
|
|
|
@@ -649,42 +577,33 @@ void switch_recode()
|
|
|
}
|
|
|
#endif
|
|
|
#else
|
|
|
-#if (RelaySlaveChaNum == 6 || ((RelaySlaveChaNum == 8) && SUPPORT_2_DETECTION))
|
|
|
- if((detection_value & 1) == 0)
|
|
|
- {
|
|
|
- for(int i = 0; i < (RelaySlaveChaNum)/2;i++)
|
|
|
- {
|
|
|
- set_channel_status(i,0);
|
|
|
- }
|
|
|
- RelayState();
|
|
|
- }
|
|
|
- if((detection_value & 2) == 0)
|
|
|
- {
|
|
|
- for(int i = (RelaySlaveChaNum)/2; i < RelaySlaveChaNum;i++)
|
|
|
- {
|
|
|
- set_channel_status(i,0);
|
|
|
- }
|
|
|
- RelayState();
|
|
|
- }
|
|
|
-#elif (SUPPORT_TWIN_FIRE)
|
|
|
- if((detection_value & 0x3) != 0x3)
|
|
|
- {
|
|
|
- for(int i = 0; i < (RelaySlaveChaNum)/2;i++)
|
|
|
+ #if SUPPORT_2_DETECTION
|
|
|
+ if((detection_value & 1) == 0)
|
|
|
+ {
|
|
|
+ for(int i = 0; i < (RelaySlaveChaNum)/2;i++)
|
|
|
+ {
|
|
|
+ set_channel_status(i,0);
|
|
|
+ }
|
|
|
+ RelayState();
|
|
|
+ }
|
|
|
+ if((detection_value & 2) == 0)
|
|
|
+ {
|
|
|
+ for(int i = (RelaySlaveChaNum)/2; i < RelaySlaveChaNum;i++)
|
|
|
+ {
|
|
|
+ set_channel_status(i,0);
|
|
|
+ }
|
|
|
+ RelayState();
|
|
|
+ }
|
|
|
+ #else
|
|
|
+ if(detection_value == 0)
|
|
|
+ {
|
|
|
+ for(int i = 0; i < RelaySlaveChaNum;i++)
|
|
|
{
|
|
|
set_channel_status(i,0);
|
|
|
}
|
|
|
RelayState();
|
|
|
- }
|
|
|
-#else
|
|
|
- if(detection_value == 0)
|
|
|
- {
|
|
|
- for(int i = 0; i < RelaySlaveChaNum;i++)
|
|
|
- {
|
|
|
- set_channel_status(i,0);
|
|
|
}
|
|
|
- RelayState();
|
|
|
- }
|
|
|
-#endif
|
|
|
+ #endif
|
|
|
#endif
|
|
|
#endif
|
|
|
|
|
|
@@ -960,14 +879,17 @@ void sub_control()
|
|
|
}else
|
|
|
{
|
|
|
#if (RelaySlaveChaNum >= 1)
|
|
|
- if(key_1 == false) //not in line
|
|
|
+ if(key_1 == false ) //not in line
|
|
|
{
|
|
|
- set_channel_status(0,0);
|
|
|
- Relay1State();
|
|
|
- BUFF;
|
|
|
- LOCK;
|
|
|
- AT24CxxWrite(Eepr_AC_Sing_State_SmaWAddr,(uint8_t*)&(EE_ACDC_State_ReadReg[0]),2);
|
|
|
- handle_k_1_status = 0;
|
|
|
+ if(handle_k_1_status == 1)
|
|
|
+ {
|
|
|
+ set_channel_status(0,0);
|
|
|
+ Relay1State();
|
|
|
+ BUFF;
|
|
|
+ LOCK;
|
|
|
+ AT24CxxWrite(Eepr_AC_Sing_State_SmaWAddr,(uint8_t*)&(EE_ACDC_State_ReadReg[0]),2);
|
|
|
+ handle_k_1_status = 0;
|
|
|
+ }
|
|
|
}else
|
|
|
{
|
|
|
if(handle_k_1_status == 0)
|
|
|
@@ -981,15 +903,18 @@ void sub_control()
|
|
|
}
|
|
|
}
|
|
|
#endif
|
|
|
-#if (RelaySlaveChaNum >= 2)
|
|
|
+#if (RelaySlaveChaNum >= 2 )
|
|
|
if(key_2 == false)
|
|
|
{
|
|
|
- set_channel_status(1,0);
|
|
|
- Relay2State();
|
|
|
- BUFF;
|
|
|
- LOCK;
|
|
|
- AT24CxxWrite(Eepr_AC_Sing_State_SmaWAddr+2,(uint8_t*)&(EE_ACDC_State_ReadReg[1]),2);
|
|
|
- handle_k_2_status = 0;
|
|
|
+ if(handle_k_2_status == 1)
|
|
|
+ {
|
|
|
+ set_channel_status(1,0);
|
|
|
+ Relay2State();
|
|
|
+ BUFF;
|
|
|
+ LOCK;
|
|
|
+ AT24CxxWrite(Eepr_AC_Sing_State_SmaWAddr+2,(uint8_t*)&(EE_ACDC_State_ReadReg[1]),2);
|
|
|
+ handle_k_2_status = 0;
|
|
|
+ }
|
|
|
}else
|
|
|
{
|
|
|
if(handle_k_2_status == 0)
|
|
|
@@ -1006,12 +931,15 @@ void sub_control()
|
|
|
#if (RelaySlaveChaNum >= 3)
|
|
|
if(key_3 == false)
|
|
|
{
|
|
|
- set_channel_status(2,0);
|
|
|
- Relay3State();
|
|
|
- BUFF;
|
|
|
- LOCK;
|
|
|
- AT24CxxWrite(Eepr_AC_Sing_State_SmaWAddr+4,(uint8_t*)&(EE_ACDC_State_ReadReg[2]),2);
|
|
|
- handle_k_3_status = 0;
|
|
|
+ if(handle_k_3_status == 1)
|
|
|
+ {
|
|
|
+ set_channel_status(2,0);
|
|
|
+ Relay3State();
|
|
|
+ BUFF;
|
|
|
+ LOCK;
|
|
|
+ AT24CxxWrite(Eepr_AC_Sing_State_SmaWAddr+4,(uint8_t*)&(EE_ACDC_State_ReadReg[2]),2);
|
|
|
+ handle_k_3_status = 0;
|
|
|
+ }
|
|
|
}else
|
|
|
{
|
|
|
if(handle_k_3_status == 0)
|
|
|
@@ -1028,12 +956,15 @@ void sub_control()
|
|
|
#if (RelaySlaveChaNum >= 4)
|
|
|
if(key_4 == false)
|
|
|
{
|
|
|
- set_channel_status(3,0);
|
|
|
- Relay4State();
|
|
|
- BUFF;
|
|
|
- LOCK;
|
|
|
- AT24CxxWrite(Eepr_AC_Sing_State_SmaWAddr+6,(uint8_t*)&(EE_ACDC_State_ReadReg[3]),2);
|
|
|
- handle_k_4_status = 0;
|
|
|
+ if(handle_k_4_status == 1)
|
|
|
+ {
|
|
|
+ set_channel_status(3,0);
|
|
|
+ Relay4State();
|
|
|
+ BUFF;
|
|
|
+ LOCK;
|
|
|
+ AT24CxxWrite(Eepr_AC_Sing_State_SmaWAddr+6,(uint8_t*)&(EE_ACDC_State_ReadReg[3]),2);
|
|
|
+ handle_k_4_status = 0;
|
|
|
+ }
|
|
|
}else
|
|
|
{
|
|
|
if(handle_k_4_status == 0)
|
|
|
@@ -1067,7 +998,6 @@ int main(void)
|
|
|
{
|
|
|
|
|
|
app_init(&meta_data);
|
|
|
-
|
|
|
InitHardware(); //初始化硬件相关函数
|
|
|
|
|
|
Fwdgt_Init(); //watch dog
|