|
|
@@ -270,11 +270,71 @@ void check_channel_reset()
|
|
|
* 0 0 1 1 1 选择A7X 选择A7Y TR5 5 4 5 4靠电压互感器那边(4通道大电流)
|
|
|
* 1 1 X X X 全部断开 全部断开
|
|
|
*********************************************************************************************************/
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
static void Proc100msTask(void)
|
|
|
{
|
|
|
unsigned int chal_num=0;
|
|
|
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);
|
|
|
@@ -305,17 +365,18 @@ 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; //功率因素
|
|
|
-
|
|
|
- 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;
|
|
|
- AC_Ele_ReadReg_All.AC_LINE_Freq = AC_Ele_ReadReg[0].AC_LINE_Freq;
|
|
|
- AC_Ele_ReadReg_All.AC_PF= AC_Ele_ReadReg[channel].AC_PF;
|
|
|
+#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;
|
|
|
+ // AC_Ele_ReadReg_All.AC_LINE_Freq = AC_Ele_ReadReg[0].AC_LINE_Freq;
|
|
|
+ // AC_Ele_ReadReg_All.AC_PF= AC_Ele_ReadReg[channel].AC_PF;
|
|
|
|
|
|
EE_ACDC_Total_Consum_Read_Reg[channel].ACDC_Consumption = AC_Ele_ReadReg[channel].AC_E; //total consumer
|
|
|
// ACDC_Total_All_Chn_Read_Reg.ACDC_All_Consumption += EE_ACDC_Total_Consum_Read_Reg[channel].ACDC_Consumption;
|
|
|
all_val += EE_ACDC_Total_Consum_Read_Reg[channel].ACDC_Consumption;
|
|
|
- AC_Ele_ReadReg_All.AC_E += EE_ACDC_Total_Consum_Read_Reg[channel].ACDC_Consumption;
|
|
|
+ // AC_Ele_ReadReg_All.AC_E += EE_ACDC_Total_Consum_Read_Reg[channel].ACDC_Consumption;
|
|
|
+
|
|
|
WarnState_ch(channel); //更新状态寄存器的告警阈值
|
|
|
//over_RelayState();
|
|
|
over_RelayState_ch(channel);
|
|
|
@@ -369,11 +430,15 @@ static void InitHardware(void)
|
|
|
RelaySlaveAddress=ReadKeyValue(); //读取从机的地址
|
|
|
InitSoftware(); //初始化软件相关函数,就是modbus这个部分
|
|
|
channel = 0;
|
|
|
-
|
|
|
+
|
|
|
while(1) //切换开关轮询初始化8110计量芯片
|
|
|
{
|
|
|
select_channel(channel);
|
|
|
Init_HLW8110();
|
|
|
+#if SUPPORT_TWIN_FIRE
|
|
|
+ select_channel(channel+4);
|
|
|
+ Init_HLW8110();
|
|
|
+#endif
|
|
|
channel++;
|
|
|
if(channel>=RelaySlaveChaNum){
|
|
|
channel=0;
|
|
|
@@ -462,24 +527,6 @@ void set_channel_status(uint8_t channel,uint8_t status)
|
|
|
}
|
|
|
}
|
|
|
|
|
|
-int check_or_control_detection(void)
|
|
|
-{
|
|
|
-#if SUPPORT_DETECTION_SWITCH
|
|
|
- uint8_t channels = RelaySlaveChaNum;
|
|
|
- if(detection_value == 0)
|
|
|
- {
|
|
|
- for(int i = 0; i < RelaySlaveChaNum;i++)
|
|
|
- {
|
|
|
- set_channel_status(i,0);
|
|
|
- }
|
|
|
- RelayState();
|
|
|
- return 0;
|
|
|
- }
|
|
|
- return 1;
|
|
|
-#endif
|
|
|
- return 1;
|
|
|
-}
|
|
|
-
|
|
|
|
|
|
void switch_recode()
|
|
|
{
|
|
|
@@ -534,6 +581,34 @@ void switch_recode()
|
|
|
RelayState_ch(k);
|
|
|
}
|
|
|
}
|
|
|
+#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
|
|
|
if(detection_value == 0)
|
|
|
{
|
|
|
@@ -543,6 +618,7 @@ void switch_recode()
|
|
|
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();
|
|
|
@@ -553,7 +629,12 @@ void switch_recode()
|
|
|
handle_detection[0] = 1;
|
|
|
for(int i = 0;i < RelaySlaveChaNum;i++)
|
|
|
EE_ACDC_State_ReadReg[i].ACDC_Cha_On_Off_State=handle_status[i];
|
|
|
- RelayState();
|
|
|
+ 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();
|
|
|
}
|
|
|
}
|
|
|
#endif
|
|
|
@@ -575,6 +656,15 @@ void switch_recode()
|
|
|
}
|
|
|
RelayState();
|
|
|
}
|
|
|
+#elif (SUPPORT_TWIN_FIRE)
|
|
|
+ if((detection_value & 0x3) != 0x3)
|
|
|
+ {
|
|
|
+ for(int i = 0; i < (RelaySlaveChaNum)/2;i++)
|
|
|
+ {
|
|
|
+ set_channel_status(i,0);
|
|
|
+ }
|
|
|
+ RelayState();
|
|
|
+ }
|
|
|
#else
|
|
|
if(detection_value == 0)
|
|
|
{
|