|
|
@@ -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 = 500; //设置每个通道的静态电流
|
|
|
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;
|
|
|
+ AC_Ele_ReadReg[channel].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;
|
|
|
- }
|
|
|
- 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
|
|
|
@@ -465,69 +453,52 @@ int check_or_control_detection(void)
|
|
|
void switch_recode()
|
|
|
{
|
|
|
#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)
|
|
|
{
|
|
|
- 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;
|
|
|
+ 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;
|
|
|
- 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;
|
|
|
+ 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;
|
|
|
- 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;
|
|
|
+ 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);
|
|
|
}
|
|
|
}
|
|
|
if((detection_value & 2) == 0)
|
|
|
{
|
|
|
if(handle_detection[1] == 1)
|
|
|
{
|
|
|
- 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;
|
|
|
+ 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;
|
|
|
- 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;
|
|
|
+ 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;
|
|
|
- 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;
|
|
|
+ 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
|
|
|
@@ -740,6 +711,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()
|