#include "gd32f30x_libopt.h" #include "main.h" #include "SysTick.h" #include "Relay.h" #include "Key.h" #include "Led.h" #include "Timer.h" #include "Electricity.h" #include "Temprature.h" #include "Beep.h" #include "Fan.h" #include "Exti.h" #include "At24xx.h" #include "Fwdgt.h" #include "Mb.h" #include "R_Led.h" #define VERSION "V1.1.0.0" #define UNIQU_1 0x1FFFF7E8 #define UNIQU_2 0x1FFFF7EC #define UNIQU_3 0x1FFFF7F0 sts_data_t sts_data; sts_data_t *get_sts(void) { return &sts_data; } int main() { nvic_priority_group_set(NVIC_PRIGROUP_PRE0_SUB4); systick_config(); InitKey(); InitLED(); InitTimer(); InitRelay(); fans_init(); beep_init(); temp_init(); eeprom_init(); electricity_init(); sts_exti_init(); uint8_t md_addr = ReadKeyValue(); eMBInit(MB_RTU,md_addr,0,9600,MB_PAR_NONE); eMBEnable(); strcpy(sts_data.m_data.info.date,__DATE__); strcat(sts_data.m_data.info.date," "); strcat(sts_data.m_data.info.date,__TIME__); strcpy(sts_data.m_data.info.ver,VERSION); sts_data.m_data.dev |= (STS_TYPE << 8); sts_data.m_data.dev |= (2 << 6); sts_data.m_data.dev |= 1; sts_data.m_data.info.channels = 1; sts_data.m_data.info.uniq_ID_64_95 = *(uint32_t*)(UNIQU_3); sts_data.m_data.info.uniq_ID_32_63 = *(uint32_t*)(UNIQU_2); sts_data.m_data.info.uniq_ID_00_31 = *(uint32_t*)(UNIQU_1); sts_data.lost_count = LOST_COUNT; sts_data.wanning_count = WANNING_COUNT; //Fwdgt_Init(); #if 1 sts_data.read_switch_level(); read_config_from_eeprom(); if(sts_data.switch_status == INPUT_CHANNEL_1 && sts_data.m_data.input_status.input_status[INPUT_CHANNEL_1]) { sts_data.choise_input(INPUT_CHANNEL_1); }else { sts_data.choise_input(INPUT_CHANNEL_2); } if(sts_data.m_data.out_status) { sts_data.open_output(); }else { sts_data.close_output(); } uint8_t channel = CH448_CHANNEL_1; #endif uint8_t write_errp_count = 0; while(1){ //Fwdgt_reload(); if(eMBCheck()) { eMBInit(MB_RTU, md_addr, 0, 9600, MB_PAR_NONE); eMBEnable(); DelayNms(5); } eMBPoll(); #if 1 if(sts_data.flag_1000ms) { sts_data.flag_1000ms = 0; sts_data.led_flash(); write_errp_count++; } if(write_errp_count >= 10) { write_errp_count = 0; if(sts_data.kwh.row >= MAX_ROW) { sts_data.kwh.row = 0; } iic_consumer_data_t chache = {0}; if(sts_data.kwh.index >= UINT64_MAX) { for(int i = 0 ; i < MAX_ROW;i++){ sts_data.write_eeprom_page(IIC_CONSUMER_START+(IIC_CONSUMER_PAGE*i),&chache,sizeof(iic_consumer_data_t)); eMBPoll(); } sts_data.kwh.row = 0; } chache.iic_consumer = sts_data.iic_consumer; chache.recode_index1 = sts_data.kwh.index; eMBPoll(); sts_data.write_eeprom_page(IIC_CONSUMER_START+(IIC_CONSUMER_PAGE*sts_data.kwh.row),&chache,sizeof(iic_consumer_data_t)); sts_data.kwh.index++; sts_data.kwh.row++; } if(sts_data.beep_flag == 0) { if(sts_data.i_beep_flag[0].beep_waning || sts_data.i_beep_flag[1].beep_waning || sts_data.o_beep_flag.beep_waning) { sts_data.beep_count = sts_data.wanning_count; }else { sts_data.clear_beep(); } } if(sts_data.i_beep_flag[0].beep_waning && sts_data.i_beep_flag[1].beep_waning && sts_data.o_beep_flag.beep_waning) { if(sts_data.beep_flag == 1) { sts_data.beep_count = sts_data.lost_count; }else { sts_data.clear_beep(); } } if(sts_data.flag_100ms) { sts_data.flag_100ms = 0; sts_data.read_ele(channel); sts_data.check_wanning(channel); sts_data.read_temp(); channel ++; } if(channel == CH448_CHANNEL_NONE) { //check input and is or not swtict input if((sts_data.m_data.input_status.input_status[INPUT_CHANNEL_1]) && (sts_data.m_data.input_status.input_status[INPUT_CHANNEL_2])) { sts_data.beep_flag = 0; sts_data.input_beep = 0; if(sts_data.m_data.md_choise.choise_ch == INPUT_CHANNEL_1) { if(STS_INPUT_HAS_WANNING(sts_data.m_data.input_wanning.waning[INPUT_CHANNEL_1])) { if(STS_INPUT_HAS_WANNING(sts_data.m_data.input_wanning.waning[INPUT_CHANNEL_2])) { if(sts_data.m_data.out_status == OUT_OPEN) sts_data.close_output(); }else { sts_data.choise_input(INPUT_CHANNEL_2); } } }else if(sts_data.m_data.md_choise.choise_ch == INPUT_CHANNEL_2) { if(STS_INPUT_HAS_WANNING(sts_data.m_data.input_wanning.waning[INPUT_CHANNEL_2])) { if(STS_INPUT_HAS_WANNING(sts_data.m_data.input_wanning.waning[INPUT_CHANNEL_1])) { if(sts_data.m_data.out_status == OUT_OPEN) sts_data.close_output(); }else { sts_data.choise_input(INPUT_CHANNEL_1); } } }else { ; } }else if((sts_data.m_data.input_status.input_status[INPUT_CHANNEL_1]) ) { if(!sts_data.input_beep){ sts_data.input_beep = 1; sts_data.beep_count =sts_data.lost_count; sts_data.beep_flag = 1; } if(STS_INPUT_HAS_WANNING(sts_data.m_data.input_wanning.waning[INPUT_CHANNEL_1])) { if(sts_data.m_data.out_status == OUT_OPEN) sts_data.close_output(); } }else if((sts_data.m_data.input_status.input_status[INPUT_CHANNEL_2]) ){ if(!sts_data.input_beep){ sts_data.input_beep = 1; sts_data.beep_count =sts_data.lost_count; sts_data.beep_flag = 1; } if(STS_INPUT_HAS_WANNING(sts_data.m_data.input_wanning.waning[INPUT_CHANNEL_2])) { if(sts_data.m_data.out_status == OUT_OPEN) sts_data.close_output(); } }else { if(!sts_data.input_beep){ sts_data.input_beep = 1; sts_data.beep_count =sts_data.lost_count; sts_data.beep_flag = 1; } } channel = CH448_CHANNEL_1; } if(sts_data.m_data.temprature_flag == TEMP_ONLINE) { if(sts_data.m_data.temprature_th.fans_max_temp != 0 && sts_data.m_data.temprature_th.fans_min_temp != 0) { if(sts_data.m_data.temprature_th.fans_max_temp > sts_data.m_data.temprature_th.fans_min_temp) { if((int16_t)(sts_data.m_data.temprature) >= sts_data.m_data.temprature_th.fans_max_temp) { if(sts_data.m_data.fans_status != FANS_ON) { sts_data.fans(FANS_ON); } }else if((int16_t)(sts_data.m_data.temprature) <= sts_data.m_data.temprature_th.fans_min_temp) { if(sts_data.m_data.fans_status != FANS_OFF) { sts_data.fans(FANS_OFF); } } } } } show_wanning_led(); #endif } return 0; }