|
|
@@ -37,6 +37,7 @@
|
|
|
#include "ReadEeprom.h"
|
|
|
#include "Sn74lvc573.h"
|
|
|
#include "Fwdgt.h"
|
|
|
+#include "key_io.h"
|
|
|
/*********************************************************************************************************
|
|
|
* 宏定义
|
|
|
*********************************************************************************************************/
|
|
|
@@ -120,6 +121,22 @@ uint32_t write_2_minute_flag = 0;
|
|
|
uint16_t detection_value = 0;
|
|
|
|
|
|
|
|
|
+
|
|
|
+#if (ACSingPhHigCurr && (ACSingPhHig_Control_type == ACSingPh_Sub_C))
|
|
|
+ uint8_t handle_k_1_status = 1;
|
|
|
+ uint8_t handle_k_2_status = 1;
|
|
|
+ uint8_t handle_k_3_status = 1;
|
|
|
+ uint8_t handle_k_4_status = 1;
|
|
|
+ bool key_1 = 0;
|
|
|
+ bool key_2 = 0;
|
|
|
+ bool key_3 = 0;
|
|
|
+ bool key_4 = 0;
|
|
|
+#endif
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
unsigned short int Sort_Onbuf[RelaySlaveChaNum];
|
|
|
unsigned short int Sort_Offbuf[RelaySlaveChaNum];
|
|
|
|
|
|
@@ -153,7 +170,7 @@ static void all_over_RelayState(void);
|
|
|
|
|
|
|
|
|
uint8_t consumer_clear_flag = 0;
|
|
|
-
|
|
|
+uint32_t all_val = 0;
|
|
|
/*********************************************************************************************************
|
|
|
* 内部函数实现
|
|
|
*********************************************************************************************************/
|
|
|
@@ -483,7 +500,7 @@ static void Proc100msTask(void)
|
|
|
else
|
|
|
AC_Ele_ReadReg[channel].AC_P=F_AC_P*1000; //有功功率
|
|
|
Hlw8110_Restore[channel] += F_AC_E;
|
|
|
- AC_Ele_ReadReg[channel].AC_E=(Hlw8110_Restore[channel]*1000); //电能
|
|
|
+ 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;
|
|
|
@@ -492,20 +509,24 @@ static void Proc100msTask(void)
|
|
|
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 = (read_Total_Consumer[channel] + 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;
|
|
|
+ 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;
|
|
|
WarnState(); //更新状态寄存器的告警阈值
|
|
|
over_RelayState();
|
|
|
|
|
|
channel=channel+1;
|
|
|
if(channel>=RelaySlaveChaNum){
|
|
|
+ ACDC_Total_All_Chn_Read_Reg.ACDC_All_Consumption = all_val;
|
|
|
+ AC_Ele_ReadReg_All.AC_E = all_val;
|
|
|
+ all_val = 0;
|
|
|
// jugement all
|
|
|
All_Warn_State();
|
|
|
all_over_RelayState();
|
|
|
channel=0;
|
|
|
AC_Ele_ReadReg_All.AC_I = 0;
|
|
|
- AC_Ele_ReadReg_All.AC_E = 0;
|
|
|
+ //AC_Ele_ReadReg_All.AC_E = 0;
|
|
|
AC_Ele_ReadReg_All.AC_P = 0;
|
|
|
}
|
|
|
// Uart_Read_HLW8110_Reg(REG_HFCONST_ADDR,2);//测试使用,看是否和电能计量芯片是否通信成功,成功串口接收到10 00 48
|
|
|
@@ -540,6 +561,7 @@ static void InitHardware(void)
|
|
|
InitTimer(); //初始化Timer模块
|
|
|
InitUART1(9600); //初始化UART1模块 电能计量芯片默认的波特率为9600,偶校验
|
|
|
InitCH448F(); //初始化CH448F,使能XEN YEN
|
|
|
+ key_io_init(NULL);
|
|
|
RelaySlaveAddress=ReadKeyValue(); //读取从机的地址
|
|
|
InitSoftware(); //初始化软件相关函数,就是modbus这个部分
|
|
|
while(1) //切换开关轮询初始化8110计量芯片
|
|
|
@@ -663,6 +685,30 @@ static void InitHardware(void)
|
|
|
//读出EEPROM中的数据,然后开始依次按照设置打开继电器
|
|
|
ReadEeprom();
|
|
|
Delay_Ms_1 = 0;
|
|
|
+ detection_value = get_detection();
|
|
|
+ check_or_control_detection();
|
|
|
+#if (ACSingPhHigCurr && (ACSingPhHig_Control_type == ACSingPh_Sub_C))
|
|
|
+ key_1 = get_key_io_1();
|
|
|
+ key_2 = get_key_io_2();
|
|
|
+ key_3 = get_key_io_3();
|
|
|
+ key_4 = get_key_io_4();
|
|
|
+ if(key_1 == false)
|
|
|
+ {
|
|
|
+ handle_k_1_status = 0;
|
|
|
+ }
|
|
|
+ if(key_2 == false)
|
|
|
+ {
|
|
|
+ handle_k_2_status = 0;
|
|
|
+ }
|
|
|
+ if(key_3 == false)
|
|
|
+ {
|
|
|
+ handle_k_3_status = 0;
|
|
|
+ }
|
|
|
+ if(key_4 == false)
|
|
|
+ {
|
|
|
+ handle_k_4_status = 0;
|
|
|
+ }
|
|
|
+#endif
|
|
|
while(1)
|
|
|
{
|
|
|
eMBPoll();
|
|
|
@@ -671,31 +717,31 @@ static void InitHardware(void)
|
|
|
//Proc1SecTask(); //1s处理任务
|
|
|
// test1 = gpio_input_bit_get(LOCK_LE_CH_RCU,LOCK_CHECK);
|
|
|
// if(test1) //如果有jlink接入,则不会动作继电器,直接跳出进入主函数
|
|
|
- if((gpio_input_bit_get(LOCK_LE_CH_RCU,LOCK_CHECK))||(Jlink_Sta_Flag==0x01)) //如果有jlink接入,则不会动作继电器,直接跳出进入主函数
|
|
|
- {
|
|
|
- //补上电平,让IO输出电平,有一个起始状态,但不会动作,锁存器起作用
|
|
|
- #if ACSingPhSmaCurr
|
|
|
- Relay1State();
|
|
|
- Relay2State();
|
|
|
- Relay3State();
|
|
|
- Relay4State();
|
|
|
- Relay5State();
|
|
|
- Relay6State();
|
|
|
- Relay7State();
|
|
|
- Relay8State();
|
|
|
- #endif
|
|
|
- #if ACSingPhHigCurr
|
|
|
- Relay1State();
|
|
|
- Relay2State();
|
|
|
- Relay3State();
|
|
|
- Relay4State();
|
|
|
- #endif
|
|
|
- Delay_Ms_1 = 0;
|
|
|
- Delay_End_flag = 0;
|
|
|
- Jlink_Sta_Flag = 0;
|
|
|
- timer_disable(TIMER14);
|
|
|
- break;
|
|
|
- }
|
|
|
+// if((gpio_input_bit_get(LOCK_LE_CH_RCU,LOCK_CHECK))||(Jlink_Sta_Flag==0x01)) //如果有jlink接入,则不会动作继电器,直接跳出进入主函数
|
|
|
+// {
|
|
|
+// //补上电平,让IO输出电平,有一个起始状态,但不会动作,锁存器起作用
|
|
|
+// #if ACSingPhSmaCurr
|
|
|
+// Relay1State();
|
|
|
+// Relay2State();
|
|
|
+// Relay3State();
|
|
|
+// Relay4State();
|
|
|
+// Relay5State();
|
|
|
+// Relay6State();
|
|
|
+// Relay7State();
|
|
|
+// Relay8State();
|
|
|
+// #endif
|
|
|
+// #if ACSingPhHigCurr
|
|
|
+// Relay1State();
|
|
|
+// Relay2State();
|
|
|
+// Relay3State();
|
|
|
+// Relay4State();
|
|
|
+// #endif
|
|
|
+// Delay_Ms_1 = 0;
|
|
|
+// Delay_End_flag = 0;
|
|
|
+// Jlink_Sta_Flag = 0;
|
|
|
+// timer_disable(TIMER14);
|
|
|
+// break;
|
|
|
+// }
|
|
|
Proc2msTask_Start(); //2ms处理任务完成后才初始化modbus。
|
|
|
if(Delay_End_flag)
|
|
|
{
|
|
|
@@ -705,8 +751,154 @@ static void InitHardware(void)
|
|
|
break;
|
|
|
}
|
|
|
}
|
|
|
+}
|
|
|
|
|
|
+
|
|
|
+
|
|
|
+void set_channel_status(uint8_t channel,uint8_t status)
|
|
|
+{
|
|
|
+ if(status)
|
|
|
+ {
|
|
|
+ switch(channel)
|
|
|
+ {
|
|
|
+#if (RelaySlaveChaNum >= 8)
|
|
|
+ case 8:
|
|
|
+ RELAY_8_ON;
|
|
|
+ break;
|
|
|
+#endif
|
|
|
+#if (RelaySlaveChaNum >= 7)
|
|
|
+ case 7:
|
|
|
+ RELAY_7_ON;
|
|
|
+ break;
|
|
|
+#endif
|
|
|
+#if (RelaySlaveChaNum >= 6)
|
|
|
+ case 6:
|
|
|
+ RELAY_6_ON;
|
|
|
+ break;
|
|
|
+#endif
|
|
|
+#if (RelaySlaveChaNum >= 5)
|
|
|
+ case 5:
|
|
|
+ RELAY_5_ON;
|
|
|
+ break;
|
|
|
+#endif
|
|
|
+#if (RelaySlaveChaNum >= 4)
|
|
|
+ case 4:
|
|
|
+ RELAY_4_ON;
|
|
|
+#if ACSingPhSmaDouble
|
|
|
+ RELAY_8_ON;
|
|
|
+#endif
|
|
|
+ break;
|
|
|
+#endif
|
|
|
+#if (RelaySlaveChaNum >= 3)
|
|
|
+ case 3:
|
|
|
+ RELAY_3_ON;
|
|
|
+#if ACSingPhSmaDouble
|
|
|
+ RELAY_7_ON;
|
|
|
+#endif
|
|
|
+ break;
|
|
|
+#endif
|
|
|
+#if (RelaySlaveChaNum >= 2)
|
|
|
+ case 2:
|
|
|
+ RELAY_2_ON;
|
|
|
+#if ACSingPhSmaDouble
|
|
|
+ RELAY_6_ON;
|
|
|
+#endif
|
|
|
+ break;
|
|
|
+#endif
|
|
|
+#if (RelaySlaveChaNum >= 1)
|
|
|
+ case 1:
|
|
|
+ RELAY_1_ON;
|
|
|
+#if ACSingPhSmaDouble
|
|
|
+ RELAY_5_ON;
|
|
|
+#endif
|
|
|
+ break;
|
|
|
+#endif
|
|
|
+
|
|
|
+ default:
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ EE_ACDC_State_ReadRegTrue[channel-1].ACDC_Cha_On_Off_State = true;
|
|
|
+ EE_ACDC_State_ReadReg[channel-1].ACDC_Cha_On_Off_State = true;
|
|
|
+ }else
|
|
|
+ {
|
|
|
+ switch(channel)
|
|
|
+ {
|
|
|
+#if (RelaySlaveChaNum >= 8)
|
|
|
+ case 8:
|
|
|
+ RELAY_8_OFF;
|
|
|
+ break;
|
|
|
+#endif
|
|
|
+#if (RelaySlaveChaNum >= 7)
|
|
|
+ case 7:
|
|
|
+ RELAY_7_OFF;
|
|
|
+ break;
|
|
|
+#endif
|
|
|
+#if (RelaySlaveChaNum >= 6)
|
|
|
+ case 6:
|
|
|
+ RELAY_6_OFF;
|
|
|
+ break;
|
|
|
+#endif
|
|
|
+#if (RelaySlaveChaNum >= 5)
|
|
|
+ case 5:
|
|
|
+ RELAY_5_OFF;
|
|
|
+ break;
|
|
|
+#endif
|
|
|
+#if (RelaySlaveChaNum >= 4)
|
|
|
+ case 4:
|
|
|
+ RELAY_4_OFF;
|
|
|
+#if ACSingPhSmaDouble
|
|
|
+ RELAY_8_OFF;
|
|
|
+#endif
|
|
|
+ break;
|
|
|
+#endif
|
|
|
+#if (RelaySlaveChaNum >= 3)
|
|
|
+ case 3:
|
|
|
+ RELAY_3_OFF;
|
|
|
+#if ACSingPhSmaDouble
|
|
|
+ RELAY_7_OFF;
|
|
|
+#endif
|
|
|
+ break;
|
|
|
+#endif
|
|
|
+#if (RelaySlaveChaNum >= 2)
|
|
|
+ case 2:
|
|
|
+ RELAY_2_OFF;
|
|
|
+#if ACSingPhSmaDouble
|
|
|
+ RELAY_6_OFF;
|
|
|
+#endif
|
|
|
+ break;
|
|
|
+#endif
|
|
|
+#if (RelaySlaveChaNum >= 1)
|
|
|
+ case 1:
|
|
|
+ RELAY_1_OFF;
|
|
|
+#if ACSingPhSmaDouble
|
|
|
+ RELAY_5_OFF;
|
|
|
+#endif
|
|
|
+ break;
|
|
|
+#endif
|
|
|
+
|
|
|
+ default:
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ EE_ACDC_State_ReadRegTrue[channel-1].ACDC_Cha_On_Off_State = false;
|
|
|
+ EE_ACDC_State_ReadReg[channel-1].ACDC_Cha_On_Off_State = false;
|
|
|
+ }
|
|
|
}
|
|
|
+
|
|
|
+int check_or_control_detection(void)
|
|
|
+{
|
|
|
+ uint8_t channels = RelaySlaveChaNum;
|
|
|
+ if(detection_value == 0)
|
|
|
+ {
|
|
|
+ for(int i = 1; i <= RelaySlaveChaNum;i++)
|
|
|
+ {
|
|
|
+ set_channel_status(i,0);
|
|
|
+ }
|
|
|
+ return 0;
|
|
|
+ }
|
|
|
+ return 1;
|
|
|
+}
|
|
|
+
|
|
|
+
|
|
|
/*********************************************************************************************************
|
|
|
* 函数名称:Proc20msTask_Start
|
|
|
* 函数功能:2ms处理任务开机根据延时开启继电器
|
|
|
@@ -720,6 +912,13 @@ static void Proc2msTask_Start(void)
|
|
|
{
|
|
|
if(Get2msFlag()) //判断2ms标志状态
|
|
|
{
|
|
|
+ if(detection_value == 0)
|
|
|
+ {
|
|
|
+ Delay_End_flag = 1;
|
|
|
+ Clr2msFlag();
|
|
|
+ return;
|
|
|
+ }
|
|
|
+
|
|
|
Delay_Ms_1 = Delay_Ms_1 +1;
|
|
|
if(RelaySlaveChaNum==8)
|
|
|
{
|
|
|
@@ -983,6 +1182,13 @@ static void Proc1SecTask(void)
|
|
|
{
|
|
|
LEDFlicker2();
|
|
|
Clr1SecFlag(); //清除1s标志
|
|
|
+ detection_value = get_detection();
|
|
|
+#if (ACSingPhHigCurr && (ACSingPhHig_Control_type == ACSingPh_Sub_C))
|
|
|
+ key_1 = get_key_io_1();
|
|
|
+ key_2 = get_key_io_2();
|
|
|
+ key_3 = get_key_io_3();
|
|
|
+ key_4 = get_key_io_4();
|
|
|
+#endif
|
|
|
}
|
|
|
}
|
|
|
|
|
|
@@ -992,25 +1198,33 @@ static void all_over_RelayState(void)
|
|
|
//all
|
|
|
if(over_func_all_flag)
|
|
|
{
|
|
|
- RELAY_1_OFF;
|
|
|
- RELAY_2_OFF;
|
|
|
- RELAY_3_OFF;
|
|
|
- RELAY_4_OFF;
|
|
|
-#if ACSingPhSmaCurr
|
|
|
- RELAY_5_OFF;
|
|
|
- RELAY_6_OFF;
|
|
|
- RELAY_7_OFF;
|
|
|
- RELAY_8_OFF;
|
|
|
-#endif
|
|
|
- over_func_all_flag = 0;
|
|
|
- for(int i = 0; i < RelaySlaveChaNum;i++)
|
|
|
- {
|
|
|
- EE_ACDC_State_ReadReg[i].ACDC_Cha_On_Off_State = false;
|
|
|
- EE_ACDC_State_ReadRegTrue[i].ACDC_Cha_On_Off_State = false;
|
|
|
- }
|
|
|
- BUFF;
|
|
|
- LOCK;
|
|
|
+ for(int i = 1 ; i < RelaySlaveChaNum;i++)
|
|
|
+ set_channel_status(i,0);
|
|
|
+ BUFF;
|
|
|
+ LOCK;
|
|
|
}
|
|
|
+ return;
|
|
|
+// if(over_func_all_flag)
|
|
|
+// {
|
|
|
+// RELAY_1_OFF;
|
|
|
+// RELAY_2_OFF;
|
|
|
+// RELAY_3_OFF;
|
|
|
+// RELAY_4_OFF;
|
|
|
+//#if ACSingPhSmaCurr
|
|
|
+// RELAY_5_OFF;
|
|
|
+// RELAY_6_OFF;
|
|
|
+// RELAY_7_OFF;
|
|
|
+// RELAY_8_OFF;
|
|
|
+//#endif
|
|
|
+// over_func_all_flag = 0;
|
|
|
+// for(int i = 0; i < RelaySlaveChaNum;i++)
|
|
|
+// {
|
|
|
+// EE_ACDC_State_ReadReg[i].ACDC_Cha_On_Off_State = false;
|
|
|
+// EE_ACDC_State_ReadRegTrue[i].ACDC_Cha_On_Off_State = false;
|
|
|
+// }
|
|
|
+// BUFF;
|
|
|
+// LOCK;
|
|
|
+// }
|
|
|
}
|
|
|
|
|
|
|
|
|
@@ -1022,64 +1236,190 @@ static void over_RelayState(void)
|
|
|
|
|
|
if(over_Func_flag[i])
|
|
|
{
|
|
|
- if(EE_ACDC_State_ReadReg[i].ACDC_Cha_On_Off_State==true)
|
|
|
+ set_channel_status(i+1,0);
|
|
|
+ over_Func_flag[i] = 0;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ BUFF;
|
|
|
+ LOCK;
|
|
|
+}
|
|
|
+
|
|
|
+
|
|
|
+#if ACSingPhHigCurr
|
|
|
+#if (ACSingPhHig_Control_type == ACSingPh_Gen_C)
|
|
|
+void check_or_controll_all()
|
|
|
+{
|
|
|
+ bool rst = false;
|
|
|
+ bool test = false;
|
|
|
+ rst = get_rst();
|
|
|
+ test = get_test();
|
|
|
+ if(detection_value != 0)
|
|
|
+ {
|
|
|
+ if(rst != test)
|
|
|
+ {
|
|
|
+ uint8_t buff[20]= {0};
|
|
|
+ if(rst)
|
|
|
+ {
|
|
|
+ while(All_On_Flag == 1)
|
|
|
+ DelayNms(5);
|
|
|
+ All_Off_Flag = 1; //全关标志置1
|
|
|
+ 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++){
|
|
|
+ EE_ACDC_State_ReadReg[i].ACDC_Cha_On_Off_State = false;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ else
|
|
|
{
|
|
|
- switch(i)
|
|
|
- {
|
|
|
- case 0:
|
|
|
- RELAY_1_OFF;
|
|
|
-#if ACSingPhSmaDouble
|
|
|
- RELAY_5_OFF;
|
|
|
-#endif
|
|
|
- break;
|
|
|
- case 1:
|
|
|
- RELAY_2_OFF;
|
|
|
-#if ACSingPhSmaDouble
|
|
|
- RELAY_6_OFF;
|
|
|
-#endif
|
|
|
- break;
|
|
|
- case 2:
|
|
|
- RELAY_3_OFF;
|
|
|
-#if ACSingPhSmaDouble
|
|
|
- RELAY_7_OFF;
|
|
|
-#endif
|
|
|
- break;
|
|
|
- case 3:
|
|
|
-#if ACSingPhSmaDouble
|
|
|
- RELAY_8_OFF;
|
|
|
-#endif
|
|
|
- RELAY_4_OFF;
|
|
|
- break;
|
|
|
-#if ACSingPhSmaCurr
|
|
|
- #if (ACSingPhSmaDouble == 0)
|
|
|
- case 4:
|
|
|
- RELAY_5_OFF;
|
|
|
- break;
|
|
|
- case 5:
|
|
|
- RELAY_6_OFF;
|
|
|
- break;
|
|
|
- case 6:
|
|
|
- RELAY_7_OFF;
|
|
|
- break;
|
|
|
- case 7:
|
|
|
- RELAY_8_OFF;
|
|
|
- break;
|
|
|
- #endif
|
|
|
-#endif
|
|
|
- default:
|
|
|
- return;
|
|
|
+ while(All_Off_Flag == 1)
|
|
|
+ DelayNms(5);
|
|
|
+ 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;
|
|
|
+
|
|
|
+ for(int i =0; i < RelaySlaveChaNum;i++)
|
|
|
+ EE_ACDC_State_ReadReg[i].ACDC_Cha_On_Off_State = true;
|
|
|
+ Delay_Ms_2 = 0;
|
|
|
+
|
|
|
+ }
|
|
|
+ memcpy(&buff,&EE_ACDC_State_ReadReg,RelaySlaveChaNum*2);
|
|
|
+ AT24CxxWrite(Eepr_AC_Sing_State_SmaWAddr,buff,RelaySlaveChaNum*2);
|
|
|
+ timer_enable(TIMER14);
|
|
|
+ }
|
|
|
+ }else
|
|
|
+ {
|
|
|
+
|
|
|
+ for(int i =0; i < RelaySlaveChaNum;i++){
|
|
|
+ EE_ACDC_State_ReadReg[i].ACDC_Cha_On_Off_State = false;
|
|
|
+ set_channel_status(i+1,0);
|
|
|
}
|
|
|
+ BUFF;
|
|
|
+ LOCK;
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
+
|
|
|
+#elif (ACSingPhHig_Control_type == ACSingPh_Sub_C)
|
|
|
+
|
|
|
+void sub_control()
|
|
|
+{
|
|
|
+ if(detection_value == 0) //all close
|
|
|
+ {
|
|
|
+ for(int i = 0; i < RelaySlaveChaNum;i++){
|
|
|
EE_ACDC_State_ReadReg[i].ACDC_Cha_On_Off_State = false;
|
|
|
- EE_ACDC_State_ReadRegTrue[i].ACDC_Cha_On_Off_State = false;
|
|
|
+ set_channel_status(i+1,0);
|
|
|
}
|
|
|
- over_Func_flag[i] = 0;
|
|
|
+
|
|
|
+ BUFF;
|
|
|
+ LOCK;
|
|
|
+ if(key_1 == false)
|
|
|
+ {
|
|
|
+ handle_k_1_status = 0;
|
|
|
+ }
|
|
|
+ if(key_2 == false)
|
|
|
+ {
|
|
|
+ handle_k_2_status = 0;
|
|
|
+ }
|
|
|
+ if(key_3 == false)
|
|
|
+ {
|
|
|
+ handle_k_3_status = 0;
|
|
|
+ }
|
|
|
+ if(key_4 == false)
|
|
|
+ {
|
|
|
+ handle_k_4_status = 0;
|
|
|
+ }
|
|
|
+
|
|
|
+ }else
|
|
|
+ {
|
|
|
+#if (RelaySlaveChaNum >= 1)
|
|
|
+ if(key_1 == false) //not in line
|
|
|
+ {
|
|
|
+ set_channel_status(1,0);
|
|
|
+ EE_ACDC_State_ReadReg[0].ACDC_Cha_On_Off_State = false;
|
|
|
+ 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)
|
|
|
+ {
|
|
|
+ handle_k_1_status = 1;
|
|
|
+ set_channel_status(1,1);
|
|
|
+ EE_ACDC_State_ReadReg[0].ACDC_Cha_On_Off_State = true;
|
|
|
+ AT24CxxWrite(Eepr_AC_Sing_State_SmaWAddr,(uint8_t*)&(EE_ACDC_State_ReadReg[0]),2);
|
|
|
+ }
|
|
|
+ }
|
|
|
+#endif
|
|
|
+#if (RelaySlaveChaNum >= 2)
|
|
|
+ if(key_2 == false)
|
|
|
+ {
|
|
|
+ set_channel_status(2,0);
|
|
|
+ EE_ACDC_State_ReadReg[1].ACDC_Cha_On_Off_State = false;
|
|
|
+ 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)
|
|
|
+ {
|
|
|
+ handle_k_2_status = 1;
|
|
|
+ set_channel_status(2,1);
|
|
|
+ EE_ACDC_State_ReadReg[1].ACDC_Cha_On_Off_State = true;
|
|
|
+ AT24CxxWrite(Eepr_AC_Sing_State_SmaWAddr+2,(uint8_t*)&(EE_ACDC_State_ReadReg[1]),2);
|
|
|
+ }
|
|
|
+ }
|
|
|
+#endif
|
|
|
+#if (RelaySlaveChaNum >= 3)
|
|
|
+ if(key_3 == false)
|
|
|
+ {
|
|
|
+ set_channel_status(3,0);
|
|
|
+ EE_ACDC_State_ReadReg[2].ACDC_Cha_On_Off_State = false;
|
|
|
+ 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)
|
|
|
+ {
|
|
|
+ handle_k_3_status = 1;
|
|
|
+ set_channel_status(3,1);
|
|
|
+ EE_ACDC_State_ReadReg[2].ACDC_Cha_On_Off_State = true;
|
|
|
+ AT24CxxWrite(Eepr_AC_Sing_State_SmaWAddr+4,(uint8_t*)&(EE_ACDC_State_ReadReg[2]),2);
|
|
|
+ }
|
|
|
+ }
|
|
|
+#endif
|
|
|
+#if (RelaySlaveChaNum >= 4)
|
|
|
+ if(key_4 == false)
|
|
|
+ {
|
|
|
+ set_channel_status(4,0);
|
|
|
+ EE_ACDC_State_ReadReg[3].ACDC_Cha_On_Off_State = false;
|
|
|
+ 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)
|
|
|
+ {
|
|
|
+ handle_k_4_status = 1;
|
|
|
+ set_channel_status(4,1);
|
|
|
+ EE_ACDC_State_ReadReg[3].ACDC_Cha_On_Off_State = true;
|
|
|
+ AT24CxxWrite(Eepr_AC_Sing_State_SmaWAddr+6,(uint8_t*)&(EE_ACDC_State_ReadReg[2]),2);
|
|
|
+ }
|
|
|
}
|
|
|
+#endif
|
|
|
}
|
|
|
- BUFF;
|
|
|
- LOCK;
|
|
|
}
|
|
|
|
|
|
|
|
|
+#endif
|
|
|
+#endif
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
/*********************************************************************************************************
|
|
|
* 函数名称:main
|
|
|
* 函数功能:主函数
|
|
|
@@ -1101,19 +1441,20 @@ int main(void)
|
|
|
eMBPoll();
|
|
|
Proc100msTask(); //100ms处理任务
|
|
|
//ProcTaskNew();
|
|
|
- detection_value = get_detection();
|
|
|
check_channel_reset();
|
|
|
Proc1SecTask(); //1s处理任务
|
|
|
Fwdgt_reload();
|
|
|
+
|
|
|
+#if (ACSingPhHigCurr &&(ACSingPhHig_Control_type == ACSingPh_Gen_C))
|
|
|
+ check_or_controll_all();
|
|
|
+#elif (ACSingPhHigCurr &&(ACSingPhHig_Control_type == ACSingPh_Sub_C))
|
|
|
+ sub_control();
|
|
|
+#endif
|
|
|
+
|
|
|
if(write_2_minute_flag == 1)
|
|
|
{
|
|
|
write_2_minute_flag = 0;
|
|
|
uint8_t buff[4*RelaySlaveChaNum] = {0};
|
|
|
-// buff[0] = EE_ACDC_Total_Consum_Read_Reg.ACDC_Consumption >> 24;
|
|
|
-// buff[1] = EE_ACDC_Total_Consum_Read_Reg.ACDC_Consumption >> 16;
|
|
|
-// buff[2] = EE_ACDC_Total_Consum_Read_Reg.ACDC_Consumption >> 8;
|
|
|
-// buff[3] = EE_ACDC_Total_Consum_Read_Reg.ACDC_Consumption >> 0;
|
|
|
-
|
|
|
|
|
|
for(int i = 0 ; i < RelaySlaveChaNum;i++)
|
|
|
{
|