| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267 |
- #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;
- }
|