| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843 |
- #include "gd32f30x_libopt.h"
- #include "systick.h"
- #include <stdio.h>
- #include "main.h"
- #include "At24cxx.h"
- #include "I2c.h"
- #include "ReadEeprom.h"
- #include "Fwdgt.h"
- #include "key_io.h"
- #include "Flash.h"
- #include "Main.h"
- #include "string.h"
- #include "SysTick.h"
- #include "Timer.h"
- #include "Led.h"
- #include "Key.h"
- #include "Relay.h"
- #include "Uart1.h"
- #include "mb.h"
- #include "Hlw8110.h"
- #include "74hc595d.h"
- #include "power_failure_save.h"
- static unsigned char RelaySlaveAddress=0x00;
- static unsigned int Uart0_Baud=115200;
- static unsigned char channel=0;
- unsigned long int Delay_Ms_1=0;
- static unsigned char Delay_End_flag=0;
- unsigned short int Devid_ChalNum = (ACSingCurrid<<8)+RelaySlaveChaNum;
- ACDC_Delay_struct_WriteReg ACDC_Delay_WriteReg[RelaySlaveChaNum];
- AC_Ele_struct_ReadReg AC_Ele_ReadReg[RelaySlaveChaNum];
- ACDC_State_struct_WriteReg ACDC_State_WriteReg[RelaySlaveChaNum];
- ACDC_ThresVal_struct_WriteReg ACDC_ThresVal_WriteReg[RelaySlaveChaNum];
- ACDC_Coef_struct_WriteReg ACDC_Coef_WriteReg[RelaySlaveChaNum];
- EE_ACDC_Delay_struct_ReadReg_On EE_ACDC_Delay_ReadReg_On[RelaySlaveChaNum];
- EE_ACDC_Delay_struct_ReadReg_Off EE_ACDC_Delay_ReadReg_Off[RelaySlaveChaNum];
- EE_ACDC_State_struct_ReadReg EE_ACDC_State_ReadReg[RelaySlaveChaNum];
- EE_ACDC_State_struct_ReadRegTrue EE_ACDC_State_ReadRegTrue[RelaySlaveChaNum];
- EE_ACDC_ThresVal_struct_ReadReg EE_ACDC_ThresVal_ReadReg[RelaySlaveChaNum];
- EE_ACDC_Coef_struct_ReadReg EE_ACDC_Coef_ReadReg[RelaySlaveChaNum];
- EE_ACDC_Total_Consumption EE_ACDC_Total_Consum_Read_Reg[RelaySlaveChaNum];
- ACDC_Consumer_Clear EE_ACDC_Consumer_Clear[RelaySlaveChaNum] = {0};
- ACDC_Over_Func_WriteReg ACDC_Over_WriteReg[RelaySlaveChaNum];
- ACDC_All_Chn_Consumption ACDC_Total_All_Chn_Read_Reg;
- EE_ACDC_ThresVal_struct_ReadReg EE_ACDC_All_ThrVal;
- ACDC_Over_Func_WriteReg ACDC_Over_AllWriteReg;
- ACDC_Wann_Read_Reg_t ACDC_Wann_All = {0};
- EE_ACDC_State_All_Reg_En_t EE_ACDC_State_All_en;
- AC_Ele_struct_ReadReg AC_Ele_ReadReg_All;
- uint32_t normal_running_time = 0;
- uint8_t over_Func_flag[RelaySlaveChaNum] = {0};
- uint8_t over_func_all_flag = 0;
- uint8_t relay_delay_flag[RelaySlaveChaNum] = {0};
- uint8_t relay_delay_counter[RelaySlaveChaNum] = {0};
- uint32_t read_Total_Consumer[RelaySlaveChaNum] = {0};
- float Hlw8110_Restore[RelaySlaveChaNum]={0.0};
- uint32_t write_2_minute_flag = 0;
- uint16_t detection_value = 0;
- uint8_t show_channel_status = 0;
- #if SUPPORT_SELF_LOCK
- 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
- META_DATA_S meta_data = {0};
- information_t infomation;
- uint8_t first_init_flag = 0;
- unsigned short int Sort_Onbuf[RelaySlaveChaNum];
- unsigned short int Sort_Offbuf[RelaySlaveChaNum];
- unsigned long int AC_V_Total;
- unsigned long int AC_LINE_Freq_Total;
- unsigned int Start_Read_Flag;
- unsigned char Jlink_Sta_Flag = 0;
- unsigned int StaticCur = 50;
- unsigned char No_Load[RelaySlaveChaNum]={0};
- unsigned char test1;
- extern float F_AC_V;
- extern float F_AC_I;
- extern float F_AC_P;
- extern float F_AC_LINE_Freq;
- extern float F_AC_E;
- extern float F_AC_PF;
- static void InitSoftware(void);
- static void InitHardware(void);
- static void Proc2msTask_Start(void);
- static void Proc1SecTask(void);
- 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) || (SUPPORT_2_DETECTION && RelaySlaveChaNum == 8))
- uint8_t handle_detection[2] = {1,1};
- uint32_t input_1_ms_count = 0;
- uint32_t input_2_ms_count = 0;
-
- uint8_t input_1_en = 0;
- uint8_t input_2_en = 0;
- #else
- uint8_t handle_detection[1] = {1};
- #endif
- #endif
- uint8_t consumer_clear_flag = 0;
- uint32_t all_val = 0;
-
-
-
- static void InitSoftware(void)
- {
- eMBInit(MB_RTU, RelaySlaveAddress, 0, Uart0_Baud, MB_PAR_NONE);
- eMBEnable();
- }
- static void app_init(META_DATA_S *meta)
- {
- flash_get_meta_data(meta);
- nvic_vector_table_set(NVIC_VECTTAB_FLASH,meta->rom_addr - NVIC_VECTTAB_FLASH);
- __enable_irq();
- }
- void break_2_boot_upgreade(void)
- {
- meta_data.errno = 0;
- meta_data.operation_flag = 1;
- meta_data.recent_running_time = normal_running_time;
- flash_erase_meta();
- flash_write_meta(&meta_data);
- __disable_irq();
- //__set_FAULTMASK(1);
- NVIC_SystemReset();
- }
- void check_channel_reset()
- {
- if(consumer_clear_flag){
- for(int i = 0; i < RelaySlaveChaNum;i++)
- {
- if(EE_ACDC_Consumer_Clear[i].flag)
- {
- if(EE_ACDC_Consumer_Clear[i].value)
- {
-
- int temp = i << 2;
- uint8_t buff[4] = {0};
- read_Total_Consumer[i] = 0;
- Hlw8110_Restore[i] = 0.0;
- EE_ACDC_Consumer_Clear[i].value = 0;
-
- }
- EE_ACDC_Consumer_Clear[i].flag = 0;
- }
- }
- consumer_clear_flag = 0;
- }
- }
- static void Proc100msTask(void)
- {
- unsigned int chal_num=0;
- if(Get100msFlag())
- {
-
- 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);
- if((Start_Read_Flag)&&(channel==0x00))
- {
- 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);
- AC_Ele_ReadReg_All.AC_V = AC_Ele_ReadReg[0].AC_V;
- if(AC_Ele_ReadReg[channel].AC_V <= 10000)
- {
- AC_Ele_ReadReg[channel].AC_LINE_Freq=0;
- AC_Ele_ReadReg[channel].AC_V = 0;
- }
- else
- {
- AC_Ele_ReadReg[channel].AC_LINE_Freq=F_AC_LINE_Freq*1000;
- }
- 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);
- 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
- 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 + 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;
-
- 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_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;
- // 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_P = 0;
- }
- // Uart_Read_HLW8110_Reg(REG_HFCONST_ADDR,2);
- Clr100msFlag();
- }
- }
- 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;
- }
- }
- static void Proc1SecTask(void)
- {
- if(Get1SecFlag())
- {
- LEDFlicker2();
- Clr1SecFlag();
- // static uint8_t value = 0;
- // value =value *2+1;
- // show_channel_staus(value);
- normal_running_time++;
- #if SUPPORT_DETECTION
- detection_value = get_detection();
- #endif
- #if SUPPORT_SELF_LOCK
- 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
- }
- }
- static void all_over_RelayState(void)
- {
- //all
- if(over_func_all_flag)
- {
- for(int i = 0 ; i < RelaySlaveChaNum;i++)
- {
- if(EE_ACDC_State_ReadReg[i].ACDC_Cha_On_Off_State == true )
- {
- set_channel_status(i,0);
- RelayState_ch(i);
- AT24CxxWrite(Eepr_AC_Sing_State_SmaWAddr+i*2,(uint8_t *)&EE_ACDC_State_ReadReg[i],2);
- }
- }
- over_func_all_flag = 0;
- //RelayState();
- }
- return;
- }
- static void over_RelayState_ch(uint8_t channel)
- {
- if(over_Func_flag[channel])
- {
- if(EE_ACDC_State_ReadReg[channel].ACDC_Cha_On_Off_State == true )
- {
- set_channel_status(channel,0);
- RelayState_ch(channel);
- //write to flash and save status
- AT24CxxWrite(Eepr_AC_Sing_State_SmaWAddr+channel*2,(uint8_t *)&EE_ACDC_State_ReadReg[channel],2);
- }
- over_Func_flag[channel] = 0;
- }
- }
- #if SUPPORT_ALL_ON_OFF
- 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};
- timer_disable(TIMER14);
- if(rst)
- {
- // 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++){
- EE_ACDC_State_ReadReg[i].ACDC_Cha_On_Off_State = false;
- }
- }
- else
- {
- // 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;
-
- 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,0);
- }
- RelayState();
- }
- }
- #endif
- void switch_recode()
- {
-
- #if SUPPORT_DETECTION
- #if SUPPORT_SWITCH_REMENBER
- #if (SUPPORT_2_DETECTION)
- if((detection_value & 1) == 0)
- {
- if(handle_detection[0] == 1)
- {
- uint8_t channel = (RelaySlaveChaNum % 2) ? (RelaySlaveChaNum/2 +1) : (RelaySlaveChaNum / 2);
- EE_ACDC_State_ReadReg[0].ACDC_ALLCha_Off_State=true;
- 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[k].ACDC_Cha_On_Off_State=false;
- AT24CxxWrite(Eepr_AC_Sing_State_SmaWAddr+k*2,(uint8_t *)&EE_ACDC_State_ReadReg[k],2);
- RelayState_ch(k);
- }
- handle_detection[0] = 0;
- }
- }else
- {
- if(handle_detection[0] == 0)
- {
- handle_detection[0] = 1;
- uint8_t channel = (RelaySlaveChaNum % 2) ? (RelaySlaveChaNum/2 +1) : (RelaySlaveChaNum / 2);
- EE_ACDC_State_ReadReg[0].ACDC_ALLCha_On_State=true;
- for(uint8_t k = 0; k < channel;k++)
- {
- EE_ACDC_State_ReadReg[k].ACDC_Cha_On_Off_State=handle_status[k];
- AT24CxxWrite(Eepr_AC_Sing_State_SmaWAddr+k*2,(uint8_t *)&EE_ACDC_State_ReadReg[k],2);
- }
- input_1_en = 1;
- input_1_ms_count = 0;
- }
- }
-
- if((detection_value & 2) == 0)
- {
- if(handle_detection[1] == 1)
- {
- EE_ACDC_State_ReadReg[0].ACDC_ALLCha_Off_State=true;
- 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[k].ACDC_Cha_On_Off_State=false;
- AT24CxxWrite(Eepr_AC_Sing_State_SmaWAddr+k*2,(uint8_t *)&EE_ACDC_State_ReadReg[k],2);
- RelayState_ch(k);
- }
- handle_detection[1] = 0;
- }
- }else
- {
- if(handle_detection[1] == 0)
- {
- handle_detection[1] = 1;
- EE_ACDC_State_ReadReg[0].ACDC_ALLCha_On_State=true;
- 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];
- AT24CxxWrite(Eepr_AC_Sing_State_SmaWAddr+k*2,(uint8_t *)&EE_ACDC_State_ReadReg[k],2);
- }
- input_2_en = 1;
- input_2_ms_count = 0;
- }
- }
- #else
- if(detection_value == 0)
- {
- if(handle_detection[0] == 1)
- {
- EE_ACDC_State_ReadReg[0].ACDC_ALLCha_Off_State=true;
- for(int i = 0;i < RelaySlaveChaNum;i++)
- {
- handle_status[i] = EE_ACDC_State_ReadReg[i].ACDC_Cha_On_Off_State;
- EE_ACDC_State_ReadReg[i].ACDC_Cha_On_Off_State = false;
- AT24CxxWrite(Eepr_AC_Sing_State_SmaWAddr+i*2,(uint8_t *)&EE_ACDC_State_ReadReg[i],2);
- RelayState_ch(i);
- }
- handle_detection[0] = 0;
- }
- }else
- {
- if(handle_detection[0] == 0)
- {
- handle_detection[0] = 1;
- 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=handle_status[i];
- AT24CxxWrite(Eepr_AC_Sing_State_SmaWAddr+i*2,(uint8_t *)&EE_ACDC_State_ReadReg[i],2);
- }
-
- All_On_Flag = 1;
- All_Off_Flag = 0;
- Delay_Ms_2 = 0;
- timer_enable(TIMER2);
- }
- }
- #endif
- #else
- #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();
- }
- #endif
- #endif
- #endif
-
- }
- #if SUPPORT_SELF_LOCK
- void sub_control()
- {
- if(detection_value == 0) //all close
- {
- for(int i = 0; i < RelaySlaveChaNum;i++)
- {
- if(EE_ACDC_State_ReadReg[channel].ACDC_Cha_On_Off_State == true )
- {
- EE_ACDC_State_ReadReg[i].ACDC_Cha_On_Off_State = false;
- set_channel_status(i,0);
- RelayState_ch(i);
- AT24CxxWrite(Eepr_AC_Sing_State_SmaWAddr+i*2,(uint8_t *)&EE_ACDC_State_ReadReg[i],2);
- }
- }
- //RelayState();
-
- 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
- {
- if(handle_k_1_status == 1)
- {
- set_channel_status(0,0);
- Relay1State();
- 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(0,1);
- Relay1State();
- AT24CxxWrite(Eepr_AC_Sing_State_SmaWAddr,(uint8_t*)&(EE_ACDC_State_ReadReg[0]),2);
- }
- }
- #endif
- #if (RelaySlaveChaNum >= 2 )
- if(key_2 == false)
- {
- 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)
- {
- handle_k_2_status = 1;
- set_channel_status(1,1);
- Relay2State();
- AT24CxxWrite(Eepr_AC_Sing_State_SmaWAddr+2,(uint8_t*)&(EE_ACDC_State_ReadReg[1]),2);
- }
- }
- #endif
- #if (RelaySlaveChaNum >= 3)
- if(key_3 == false)
- {
- if(handle_k_3_status == 1)
- {
- set_channel_status(2,0);
- Relay3State();
- 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(2,1);
- Relay3State();
- AT24CxxWrite(Eepr_AC_Sing_State_SmaWAddr+4,(uint8_t*)&(EE_ACDC_State_ReadReg[2]),2);
- }
- }
- #endif
- #if (RelaySlaveChaNum >= 4)
- if(key_4 == false)
- {
- if(handle_k_4_status == 1)
- {
- set_channel_status(3,0);
- Relay4State();
- 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(3,1);
- Relay4State();
- AT24CxxWrite(Eepr_AC_Sing_State_SmaWAddr+6,(uint8_t*)&(EE_ACDC_State_ReadReg[3]),2);
- }
- }
- #endif
- }
- }
- #endif
- static void InitHardware(void)
- {
- unsigned int i;
- for(i=0;i<RelaySlaveChaNum;i++){
- No_Load[i] = StaticCur;
- relay_delay_counter[i]=100; // 100 ji shu qi
- }
-
- InitLED();
- InitKey();
- InitRelay();
- InitTimer();
- InitAT24Cxx();
- InitUART1(9600);
- InitCH448F();
-
- key_io_init(NULL);
- shift_init();
- power_save_init();
- RelaySlaveAddress=ReadKeyValue();
- InitSoftware();
-
- #if SURPPORT_2_2
- solid_on();
- BUFF;
- LOCK;
- #endif
- ReadEeprom();
- channel = 0;
- select_channel(channel);
- Init_HLW8110();
- while(1)
- {
- select_channel(channel);
- Init_HLW8110();
- channel++;
- if(channel>=RelaySlaveChaNum){
- channel=0;
- break;
- }
- }
- if(first_init_flag)
- {
- //first init all channel is close
- for(i =0 ; i < RelaySlaveChaNum;i++)
- {
- EE_ACDC_State_ReadReg[i].ACDC_Cha_On_Off_State = false;
- AT24CxxWrite(Eepr_AC_Sing_State_SmaWAddr+i*2,(uint8_t *)&EE_ACDC_State_ReadReg[i],2);
- RelayState_ch(i);
- }
- }else
- {
- for(i =0 ; i < RelaySlaveChaNum;i++)
- {
- if(EE_ACDC_State_ReadReg[i].ACDC_Cha_On_Off_State == true)
- SET_SHOW_LED(show_channel_status,i);
- else
- UNSET_SHOW_LED(show_channel_status,i);
- }
- }
- strcpy(infomation.date,__DATE__);
- strcat(infomation.date," ");
- strcat(infomation.date,__TIME__);
- strcpy(infomation.ver,VERSION);
- infomation.channels = RelaySlaveChaNum;
- flash_get_infomation(&infomation);
-
- Delay_Ms_1 = 0;
- #if SUPPORT_DETECTION
- detection_value = get_detection();
- #endif
- switch_recode();
- #if SUPPORT_SELF_LOCK
- 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 RelaySlaveChaNum >= 1
- if(key_1 == false)
- {
- handle_k_1_status = 0;
- set_channel_status(0,0);
- RelayState_ch(0);
- //write to flash and save status
- AT24CxxWrite(Eepr_AC_Sing_State_SmaWAddr,(uint8_t *)&EE_ACDC_State_ReadReg[0],2);
- }
- #endif
- #if RelaySlaveChaNum >= 2
- if(key_2 == false)
- {
- handle_k_2_status = 0;
- set_channel_status(1,0);
- RelayState_ch(1);
- //write to flash and save status
- AT24CxxWrite(Eepr_AC_Sing_State_SmaWAddr+2,(uint8_t *)&EE_ACDC_State_ReadReg[1],2);
- }
- #endif
- #if RelaySlaveChaNum >= 3
- if(key_3 == false)
- {
- handle_k_3_status = 0;
- set_channel_status(2,0);
- RelayState_ch(2);
- //write to flash and save status
- AT24CxxWrite(Eepr_AC_Sing_State_SmaWAddr+4,(uint8_t *)&EE_ACDC_State_ReadReg[2],2);
- }
- #endif
- #if RelaySlaveChaNum >= 4
- if(key_4 == false)
- {
- handle_k_4_status = 0;
- set_channel_status(3,0);
- RelayState_ch(3);
- //write to flash and save status
- AT24CxxWrite(Eepr_AC_Sing_State_SmaWAddr+6,(uint8_t *)&EE_ACDC_State_ReadReg[3],2);
- }
- #endif
- #endif
- // copy status 2 modbus
- for(i= 0;i < RelaySlaveChaNum;i++)
- {
- EE_ACDC_State_ReadRegTrue[i].ACDC_Cha_On_Off_State = EE_ACDC_State_ReadReg[i].ACDC_Cha_On_Off_State;
- }
- timer_disable(TIMER2);
- Delay_Ms_1 = 0;
- Delay_End_flag = 0;
- }
- int main(void)
- {
- nvic_priority_group_set(NVIC_PRIGROUP_PRE0_SUB4);
- systick_config();
- InitHardware();
- Fwdgt_Init();
-
- while(1)
- {
- eMBPoll();
- Proc100msTask();
- check_channel_reset();
- Proc1SecTask();
- Fwdgt_reload();
- switch_recode();
-
- #if SUPPORT_ALL_ON_OFF
- check_or_controll_all();
- #endif
- #if SUPPORT_SELF_LOCK
- sub_control();
- #endif
-
- show_channel_staus(show_channel_status);
- if(write_2_minute_flag == 1)
- {
- write_2_minute_flag = 0;
- uint8_t buff[4*RelaySlaveChaNum] = {0};
-
- for(int i = 0 ; i < RelaySlaveChaNum;i++)
- {
- int temp = i << 2;
- buff[temp + 0] = EE_ACDC_Total_Consum_Read_Reg[i].ACDC_Consumption >> 24;
- buff[temp + 1] = EE_ACDC_Total_Consum_Read_Reg[i].ACDC_Consumption >> 16;
- buff[temp + 2] = EE_ACDC_Total_Consum_Read_Reg[i].ACDC_Consumption >> 8;
- buff[temp + 3] = EE_ACDC_Total_Consum_Read_Reg[i].ACDC_Consumption >> 0;
- }
- AT24CxxWrite(Eepr_AC_Sing_Total_Consumer_addr, buff,4*RelaySlaveChaNum);
- }
- }
- return 0;
- }
|