|
|
@@ -146,7 +146,7 @@ unsigned long int AC_LINE_Freq_Total; //
|
|
|
|
|
|
unsigned int Start_Read_Flag; //开始读取数据标志
|
|
|
unsigned char Jlink_Sta_Flag = 0; //Jlink 是否在线的标志位
|
|
|
-unsigned int StaticCur = 30; //设置每个通道的静态电流
|
|
|
+unsigned int StaticCur = 50; //设置每个通道的静态电流
|
|
|
unsigned char No_Load[RelaySlaveChaNum]={0};
|
|
|
unsigned char test1;
|
|
|
extern float F_AC_V; // 电压有效值
|
|
|
@@ -165,11 +165,12 @@ static void Proc2msTask_Start(void); //2ms
|
|
|
static void Proc1SecTask(void); //1s处理任务
|
|
|
|
|
|
static void over_RelayState(void);
|
|
|
+static void over_RelayState_ch(uint8_t channel);
|
|
|
static void all_over_RelayState(void);
|
|
|
void switch_recode();
|
|
|
#if SUPPORT_SWITCH_REMENBER
|
|
|
bool handle_status[RelaySlaveChaNum] = {0};
|
|
|
- #if (RelaySlaveChaNum == 6)
|
|
|
+ #if ((RelaySlaveChaNum == 6) || (SUPPORT_2_DETECTION && RelaySlaveChaNum == 8))
|
|
|
uint8_t handle_detection[2] = {1,1};
|
|
|
#else
|
|
|
uint8_t handle_detection[1] = {1};
|
|
|
@@ -254,44 +255,27 @@ static void Proc100msTask(void)
|
|
|
{
|
|
|
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);
|
|
|
+ //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);
|
|
|
if((Start_Read_Flag)&&(channel==0x00)) //只有读完数据之后且现在轮询到通道0才会继续更新电压和频率值
|
|
|
{
|
|
|
- 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);//实际的电压放大1000倍,实际的K,B值要缩小1000倍
|
|
|
+ Start_Read_Flag = 0;
|
|
|
+ }
|
|
|
+ AC_Ele_ReadReg[channel].AC_V=(F_AC_V*EE_ACDC_Coef_ReadReg[0].ACDC_V_k)+(EE_ACDC_Coef_ReadReg[channel].ACDC_V_b/1000);//实际的电压放大1000倍,实际的K,B值要缩小1000倍
|
|
|
AC_Ele_ReadReg_All.AC_V = AC_Ele_ReadReg[0].AC_V;
|
|
|
- if(AC_Ele_ReadReg[0].AC_V <= 10000) //小于10V频率为0
|
|
|
+ if(AC_Ele_ReadReg[channel].AC_V <= 10000) //小于10V频率为0
|
|
|
{
|
|
|
- AC_Ele_ReadReg[0].AC_LINE_Freq=0;
|
|
|
- AC_Ele_ReadReg[0].AC_V = 0;
|
|
|
+ AC_Ele_ReadReg[channel].AC_LINE_Freq=0;
|
|
|
+ AC_Ele_ReadReg[channel].AC_V = 0;
|
|
|
}
|
|
|
else
|
|
|
{
|
|
|
- AC_Ele_ReadReg[0].AC_LINE_Freq=F_AC_LINE_Freq*1000;
|
|
|
- }
|
|
|
- for(chal_num=1;chal_num<RelaySlaveChaNum;chal_num++)
|
|
|
- {
|
|
|
- AC_Ele_ReadReg[chal_num].AC_V=AC_Ele_ReadReg[0].AC_V;
|
|
|
- AC_Ele_ReadReg[chal_num].AC_LINE_Freq=AC_Ele_ReadReg[0].AC_LINE_Freq;
|
|
|
+ AC_Ele_ReadReg[channel].AC_LINE_Freq=F_AC_LINE_Freq*1000;
|
|
|
}
|
|
|
- Start_Read_Flag = 0;
|
|
|
- }
|
|
|
-// if((channel==0x00)&&(Start_Read_Flag==0x00)) //只有读完数据之后才会继续更新电压和频率值
|
|
|
-// {
|
|
|
-// AC_Ele_ReadReg[channel].AC_V=(F_AC_V*EE_ACDC_Coef_ReadReg[channel].ACDC_V_k)+(EE_ACDC_Coef_ReadReg[channel].ACDC_V_b/1000);//实际的电压放大1000倍,实际的K,B值要缩小1000倍
|
|
|
-// if(AC_Ele_ReadReg[channel].AC_V <= 10000) //小于10V频率为0
|
|
|
-// AC_Ele_ReadReg[channel].AC_LINE_Freq=0;
|
|
|
-// else
|
|
|
-// AC_Ele_ReadReg[channel].AC_LINE_Freq=F_AC_LINE_Freq*1000;
|
|
|
-// }
|
|
|
-// else
|
|
|
-// {
|
|
|
-// for(chal_num=1;chal_num<RelaySlaveChaNum;chal_num++)
|
|
|
-// {
|
|
|
-// AC_Ele_ReadReg[chal_num].AC_V=AC_Ele_ReadReg[0].AC_V;
|
|
|
-// AC_Ele_ReadReg[chal_num].AC_LINE_Freq=AC_Ele_ReadReg[0].AC_LINE_Freq;
|
|
|
-// }
|
|
|
-// }
|
|
|
AC_Ele_ReadReg[channel].AC_I=(F_AC_I*EE_ACDC_Coef_ReadReg[channel].ACDC_I_k)+(EE_ACDC_Coef_ReadReg[channel].ACDC_I_b/1000);//实际的电流放大1000倍,实际的K,B值要缩小1000倍
|
|
|
+ if((AC_Ele_ReadReg[channel].AC_I)<=No_Load[channel])
|
|
|
+ {
|
|
|
+ AC_Ele_ReadReg[channel].AC_I = 0;
|
|
|
+ }
|
|
|
if((AC_Ele_ReadReg[channel].AC_I)<=No_Load[channel])
|
|
|
AC_Ele_ReadReg[channel].AC_P=0; //有功功率
|
|
|
else
|
|
|
@@ -310,9 +294,9 @@ static void Proc100msTask(void)
|
|
|
// 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;
|
|
|
- WarnState(); //更新状态寄存器的告警阈值
|
|
|
- over_RelayState();
|
|
|
-
|
|
|
+ WarnState_ch(channel); //更新状态寄存器的告警阈值
|
|
|
+ //over_RelayState();
|
|
|
+ over_RelayState_ch(channel);
|
|
|
channel=channel+1;
|
|
|
if(channel>=RelaySlaveChaNum){
|
|
|
ACDC_Total_All_Chn_Read_Reg.ACDC_All_Consumption = all_val;
|
|
|
@@ -373,7 +357,11 @@ static void InitHardware(void)
|
|
|
}
|
|
|
}
|
|
|
InitAT24Cxx(); //初始化24C64模块
|
|
|
-
|
|
|
+#if SURPPORT_2_2
|
|
|
+ solid_on();
|
|
|
+ BUFF;
|
|
|
+ LOCK;
|
|
|
+#endif
|
|
|
ReadEeprom();
|
|
|
Delay_Ms_1 = 0;
|
|
|
#if SUPPORT_DETECTION
|
|
|
@@ -464,72 +452,57 @@ int check_or_control_detection(void)
|
|
|
|
|
|
void switch_recode()
|
|
|
{
|
|
|
+
|
|
|
+#if SUPPORT_DETECTION
|
|
|
#if SUPPORT_SWITCH_REMENBER
|
|
|
-#if (RelaySlaveChaNum == 6)
|
|
|
+#if ((RelaySlaveChaNum == 6) || ((RelaySlaveChaNum == 8) && SUPPORT_2_DETECTION))
|
|
|
if((detection_value & 1) == 0)
|
|
|
- {
|
|
|
- if(handle_detection[0] == 1)
|
|
|
+ {
|
|
|
+ if(handle_detection[0] == 1)
|
|
|
+ {
|
|
|
+ for(uint8_t k = 0; k < (RelaySlaveChaNum/2);k++)
|
|
|
+ handle_status[k] = EE_ACDC_State_ReadReg[k].ACDC_Cha_On_Off_State;
|
|
|
+ }
|
|
|
+ handle_detection[0] = 0;
|
|
|
+ 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_status[0] = EE_ACDC_State_ReadReg[0].ACDC_Cha_On_Off_State;
|
|
|
- handle_status[1] = EE_ACDC_State_ReadReg[1].ACDC_Cha_On_Off_State;
|
|
|
- handle_status[2] = EE_ACDC_State_ReadReg[2].ACDC_Cha_On_Off_State;
|
|
|
+ handle_detection[0] = 1;
|
|
|
+ for(uint8_t k = 0; k < (RelaySlaveChaNum/2);k++)
|
|
|
+ EE_ACDC_State_ReadReg[k].ACDC_Cha_On_Off_State=handle_status[k];
|
|
|
+ for(uint8_t k = 0; k < (RelaySlaveChaNum/2);k++)
|
|
|
+ RelayState_ch(k);
|
|
|
}
|
|
|
- handle_detection[0] = 0;
|
|
|
- EE_ACDC_State_ReadReg[0].ACDC_Cha_On_Off_State=false;
|
|
|
- EE_ACDC_State_ReadReg[1].ACDC_Cha_On_Off_State=false;
|
|
|
- EE_ACDC_State_ReadReg[2].ACDC_Cha_On_Off_State=false;
|
|
|
- Relay1State();
|
|
|
- Relay2State();
|
|
|
- Relay3State();
|
|
|
- BUFF;
|
|
|
- LOCK;
|
|
|
- }else
|
|
|
- {
|
|
|
- if(handle_detection[0] == 0)
|
|
|
- {
|
|
|
- handle_detection[0] = 1;
|
|
|
- EE_ACDC_State_ReadReg[0].ACDC_Cha_On_Off_State=handle_status[0];
|
|
|
- EE_ACDC_State_ReadReg[1].ACDC_Cha_On_Off_State=handle_status[1];
|
|
|
- EE_ACDC_State_ReadReg[2].ACDC_Cha_On_Off_State=handle_status[2];
|
|
|
- Relay1State();
|
|
|
- Relay2State();
|
|
|
- Relay3State();
|
|
|
- BUFF;
|
|
|
- LOCK;
|
|
|
}
|
|
|
- }
|
|
|
- if((detection_value & 2) == 0)
|
|
|
- {
|
|
|
- if(handle_detection[1] == 1)
|
|
|
+ if((detection_value & 2) == 0)
|
|
|
{
|
|
|
- handle_status[3] = EE_ACDC_State_ReadReg[3].ACDC_Cha_On_Off_State;
|
|
|
- handle_status[4] = EE_ACDC_State_ReadReg[4].ACDC_Cha_On_Off_State;
|
|
|
- handle_status[5] = EE_ACDC_State_ReadReg[5].ACDC_Cha_On_Off_State;
|
|
|
- }
|
|
|
- handle_detection[1] = 0;
|
|
|
- EE_ACDC_State_ReadReg[3].ACDC_Cha_On_Off_State=false;
|
|
|
- EE_ACDC_State_ReadReg[4].ACDC_Cha_On_Off_State=false;
|
|
|
- EE_ACDC_State_ReadReg[5].ACDC_Cha_On_Off_State=false;
|
|
|
- Relay4State();
|
|
|
- Relay5State();
|
|
|
- Relay6State();
|
|
|
- BUFF;
|
|
|
- LOCK;
|
|
|
- }else
|
|
|
- {
|
|
|
- if(handle_detection[1] == 0)
|
|
|
+ if(handle_detection[1] == 1)
|
|
|
+ {
|
|
|
+ for(uint8_t k = (RelaySlaveChaNum/2); k < RelaySlaveChaNum;k++)
|
|
|
+ handle_status[k] = EE_ACDC_State_ReadReg[k].ACDC_Cha_On_Off_State;
|
|
|
+ }
|
|
|
+ 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
|
|
|
{
|
|
|
- handle_detection[1] = 1;
|
|
|
- EE_ACDC_State_ReadReg[3].ACDC_Cha_On_Off_State=handle_status[3];
|
|
|
- EE_ACDC_State_ReadReg[4].ACDC_Cha_On_Off_State=handle_status[4];
|
|
|
- EE_ACDC_State_ReadReg[5].ACDC_Cha_On_Off_State=handle_status[5];
|
|
|
- Relay4State();
|
|
|
- Relay5State();
|
|
|
- Relay6State();
|
|
|
- BUFF;
|
|
|
- LOCK;
|
|
|
+ if(handle_detection[1] == 0)
|
|
|
+ {
|
|
|
+ handle_detection[1] = 1;
|
|
|
+ for(uint8_t k = (RelaySlaveChaNum/2); k < RelaySlaveChaNum;k++)
|
|
|
+ EE_ACDC_State_ReadReg[k].ACDC_Cha_On_Off_State=handle_status[k];
|
|
|
+ for(uint8_t k = (RelaySlaveChaNum/2); k < RelaySlaveChaNum;k++)
|
|
|
+ RelayState_ch(k);
|
|
|
+ }
|
|
|
}
|
|
|
- }
|
|
|
#else
|
|
|
if(detection_value == 0)
|
|
|
{
|
|
|
@@ -552,37 +525,38 @@ void switch_recode()
|
|
|
RelayState();
|
|
|
}
|
|
|
}
|
|
|
-#endif
|
|
|
+ #endif
|
|
|
#else
|
|
|
-#if (RelaySlaveChaNum == 6)
|
|
|
- if((detection_value & 1) == 0)
|
|
|
- {
|
|
|
- for(int i = 0; i < 3;i++)
|
|
|
- {
|
|
|
- set_channel_status(i,0);
|
|
|
- }
|
|
|
- RelayState();
|
|
|
- }
|
|
|
- if((detection_value & 2) == 0)
|
|
|
- {
|
|
|
- for(int i = 3; i < RelaySlaveChaNum;i++)
|
|
|
- {
|
|
|
- set_channel_status(i,0);
|
|
|
- }
|
|
|
- RelayState();
|
|
|
- }
|
|
|
-#endif
|
|
|
-#if SUPPORT_DETECTION
|
|
|
- if(detection_value == 0)
|
|
|
- {
|
|
|
+#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();
|
|
|
+ }
|
|
|
+#else
|
|
|
+ if(detection_value == 0)
|
|
|
+ {
|
|
|
for(int i = 0; i < RelaySlaveChaNum;i++)
|
|
|
{
|
|
|
set_channel_status(i,0);
|
|
|
}
|
|
|
RelayState();
|
|
|
}
|
|
|
+#endif
|
|
|
#endif
|
|
|
#endif
|
|
|
+
|
|
|
}
|
|
|
|
|
|
/*********************************************************************************************************
|
|
|
@@ -605,6 +579,20 @@ static void Proc2msTask_Start(void)
|
|
|
Clr2msFlag();
|
|
|
return;
|
|
|
}
|
|
|
+//#if ((RelaySlaveChaNum == 6) || ((RelaySlaveChaNum == 8) && SUPPORT_2_DETECTION))
|
|
|
+// if((detection_value & 0x1) == 0)
|
|
|
+// {
|
|
|
+// uint8_t k = 0;
|
|
|
+// for(k=0;k <(RelaySlaveChaNum)/2;k++)
|
|
|
+// EE_ACDC_State_ReadReg[k].ACDC_Cha_On_Off_State = false;
|
|
|
+// }
|
|
|
+// if((detection_value & 0x2) == 0)
|
|
|
+// {
|
|
|
+// uint8_t k = 0;
|
|
|
+// for(k=(RelaySlaveChaNum)/2;k <RelaySlaveChaNum;k++)
|
|
|
+// EE_ACDC_State_ReadReg[k].ACDC_Cha_On_Off_State = false;
|
|
|
+// }
|
|
|
+//#endif
|
|
|
#endif
|
|
|
|
|
|
Delay_Ms_1 = Delay_Ms_1 +1;
|
|
|
@@ -740,6 +728,15 @@ static void over_RelayState(void)
|
|
|
|
|
|
}
|
|
|
|
|
|
+static void over_RelayState_ch(uint8_t channel)
|
|
|
+{
|
|
|
+ if(over_Func_flag[channel])
|
|
|
+ {
|
|
|
+ set_channel_status(channel,0);
|
|
|
+ RelayState_ch(channel);
|
|
|
+ over_Func_flag[channel] = 0;
|
|
|
+ }
|
|
|
+}
|
|
|
|
|
|
#if SUPPORT_ALL_ON_OFF
|
|
|
void check_or_controll_all()
|
|
|
@@ -753,11 +750,15 @@ void check_or_controll_all()
|
|
|
if(rst != test)
|
|
|
{
|
|
|
uint8_t buff[20]= {0};
|
|
|
+ timer_disable(TIMER14);
|
|
|
if(rst)
|
|
|
{
|
|
|
- while(All_On_Flag == 1)
|
|
|
- DelayNms(5);
|
|
|
+// while(All_On_Flag == 1)
|
|
|
+// DelayNms(5);
|
|
|
+
|
|
|
All_Off_Flag = 1; //全关标志置1
|
|
|
+ All_On_Flag = 0;
|
|
|
+ Delay_Ms_2 = 0;
|
|
|
EE_ACDC_State_ReadReg[0].ACDC_Cha_On_Off_State=false;
|
|
|
EE_ACDC_State_ReadReg[0].ACDC_ALLCha_Off_State=true;
|
|
|
for(int i =0; i < RelaySlaveChaNum;i++){
|
|
|
@@ -766,8 +767,9 @@ void check_or_controll_all()
|
|
|
}
|
|
|
else
|
|
|
{
|
|
|
- while(All_Off_Flag == 1)
|
|
|
- DelayNms(5);
|
|
|
+// while(All_Off_Flag == 1)
|
|
|
+// DelayNms(5);
|
|
|
+ All_Off_Flag =0;
|
|
|
All_On_Flag = 1; //全关标志置1
|
|
|
EE_ACDC_State_ReadReg[0].ACDC_Cha_On_Off_State=true;
|
|
|
EE_ACDC_State_ReadReg[0].ACDC_ALLCha_On_State=true;
|