| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390 |
- /*********************************************************************************************************
- * Module : Electricity.c
- * Abstract : Electricity modules.
- * Version : 1.0.0
- * Author : Leopul(COPYRIGHT 2025 - 2027 Leopul. All rights reserved.)
- * Complete : 2025-02-16
- * Content : None
- * Note : None
- *********************************************************************************************************/
- #include "Electricity.h"
- #include "Uart1.h"
- #include "Hlw8110.h"
- #include "SysTick.h"
- #include "main.h"
- #include "FreeRTOS.h"
- #include "task.h"
- void electricity_read(uint8_t channel);
- static void check_wanning(uint8_t channel);
- void electricity_init()
- {
- InitCH448F();
- InitUART1(9600);
- sts_data_t *data = get_sts();
- data->read_ele = electricity_read;
- data->check_wanning = check_wanning;
- }
- 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;
- extern float F_Angle;
- extern uint32_t read_ele_count;
- extern uint8_t read_ele_flag;
- void electricity_read(uint8_t channel)
- {
- electricity_t ele = {0};
- sts_data_t *data = get_sts();
- select_channel(channel);
- if(channel == 0)
- {
- Calculate_HLW8110_MeterData(data->m_data.m_rw.rw_data.md_eep.output_arg.i_k,data->m_data.m_rw.rw_data.md_eep.output_arg.v_k);
- }else
- {
- Calculate_HLW8110_MeterData(data->m_data.m_rw.rw_data.md_eep.input_arg[channel-1].i_k,data->m_data.m_rw.rw_data.md_eep.input_arg[channel-1].v_k);
- }
-
- if(F_AC_V < 6.0)
- {
- F_AC_V = 0.0;
- F_AC_I = 0.0;
- F_AC_P = 0.0;
- F_AC_LINE_Freq = 0.0;
- F_AC_PF = 0.0;
- }else if(F_AC_PF < 0.1 || F_AC_PF > 1 || F_AC_P < 1)
- {
- F_AC_I = 0.0;
- F_AC_P = 0.0;
- F_AC_PF = 0.0;
- }else if(F_AC_LINE_Freq > 100)
- {
- F_AC_LINE_Freq = 0.0;
- }
-
- if(channel == 0)
- {
- data->m_data.m_r.r_data.out_power.voltage = F_AC_V * 1000;
- data->m_data.m_r.r_data.out_power.current = F_AC_I * 1000;
-
- data->m_data.m_r.r_data.out_power.power = F_AC_P* 1000;
- data->m_data.m_r.r_data.out_power.freq = F_AC_LINE_Freq * 1000;
- data->m_data.m_r.r_data.out_power.factor = F_AC_PF * 1000;
- data->iic_consumer += F_AC_E;
- data->m_data.m_r.r_data.out_power.consumer = data->iic_consumer * 1000;
- }else
- {
- data->m_data.m_r.r_data.input[channel-1].voltage = F_AC_V * 1000;
- data->m_data.m_r.r_data.input[channel-1].freq = F_AC_LINE_Freq * 1000;
- }
- }
- extern void beep_timer_start(int cou2,uint32_t inval);
- static void check_voltage_max(uint8_t channel)
- {
- sts_data_t *data = get_sts();
- if(channel == CH448_CHANNEL_1)
- {
- if(data->output_wanning_en.vmax_en) {
- if(data->m_data.m_r.r_data.out_power.voltage > data->m_data.m_rw.rw_data.md_eep.output_th.voltage_max_1)
- {
- data->m_data.m_r.r_data.output_waning.out_waning.vmax_wa_1 = 1;
- if(!data->o_beep.o_t.o_v_max)
- {
- data->o_beep.o_t.o_v_max =1;
- beep_timer_start(20,300);
- // data->o_beep_flag.o_t.o_v_max =1;
- // data->beep_count = data->wanning_count;
- }
- if(data->m_data.m_r.r_data.out_power.voltage > data->m_data.m_rw.rw_data.md_eep.output_th.voltage_max_2)
- {
- data->m_data.m_r.r_data.output_waning.out_waning.vmax_wa_2 = 1;
- //data->close_output();
- }
- }else
- {
- data->m_data.m_r.r_data.output_waning.out_waning.vmax_wa_1 = 0;
- data->m_data.m_r.r_data.output_waning.out_waning.vmax_wa_2 = 0;
- if(data->o_beep.o_t.o_v_max)
- {
- data->o_beep.o_t.o_v_max = 0;
- //data->o_beep_flag.o_t.o_v_max = 0;
- }
- }
- }
- }else
- {
- uint8_t chn = channel-1;
- if(data->input_wanning_en[chn].vmax_en) {
- if(data->m_data.m_r.r_data.input[chn].voltage > data->m_data.m_rw.rw_data.md_eep.input_th[chn].voltage_max_1)
- {
- if(!data->i_beep[chn].i_t.i_v_max)
- {
- beep_timer_start(20,300);
- data->i_beep[chn].i_t.i_v_max =1;
- data->i_beep_flag[chn].i_t.i_v_max =1;
- data->beep_count = data->wanning_count;
- }
- data->m_data.m_r.r_data.input_wanning.in_wan[chn].vmax_wa_1 = 1;
-
- if(data->m_data.m_r.r_data.input[chn].voltage > data->m_data.m_rw.rw_data.md_eep.input_th[chn].voltage_max_2)
- {
- data->m_data.m_r.r_data.input_wanning.in_wan[chn].vmax_wa_2 = 1;
- }
- }else
- {
- data->m_data.m_r.r_data.input_wanning.in_wan[chn].vmax_wa_1 = 0;
- data->m_data.m_r.r_data.input_wanning.in_wan[chn].vmax_wa_2 = 0;
- data->i_beep[chn].i_t.i_v_max =0;
- data->i_beep_flag[chn].i_t.i_v_max =0;
- }
- }
- }
- }
- static void check_voltage_min(uint8_t channel)
- {
- sts_data_t *data = get_sts();
- if(channel == CH448_CHANNEL_1)
- {
- if(data->output_wanning_en.vmin_en) {
- if(data->m_data.m_r.r_data.out_power.voltage < data->m_data.m_rw.rw_data.md_eep.output_th.voltage_min_1)
- {
- if(!data->o_beep.o_t.o_v_max)
- {
- beep_timer_start(20,300);
- data->o_beep.o_t.o_v_min =1;
- data->o_beep_flag.o_t.o_v_min =1;
- data->beep_count = data->wanning_count;
- }
- data->m_data.m_r.r_data.output_waning.out_waning.vmin_wa_1 = 1;
-
- if(data->m_data.m_r.r_data.out_power.voltage < data->m_data.m_rw.rw_data.md_eep.output_th.voltage_min_2)
- {
- data->m_data.m_r.r_data.output_waning.out_waning.vmin_wa_2 = 1;
- //data->close_output();
- }
- }else
- {
- data->o_beep.o_t.o_v_min = 0;
- data->o_beep_flag.o_t.o_v_min = 0;
- data->m_data.m_r.r_data.output_waning.out_waning.vmin_wa_1 = 0;
- data->m_data.m_r.r_data.output_waning.out_waning.vmin_wa_2 = 0;
- }
- }
- }else
- {
- uint8_t chn = channel-1;
- if(data->input_wanning_en[chn].vmin_en) {
- if(data->m_data.m_r.r_data.input[chn].voltage < data->m_data.m_rw.rw_data.md_eep.input_th[chn].voltage_min_1)
- {
- if(!data->i_beep[chn].i_t.i_v_min)
- {
- beep_timer_start(20,300);
- data->i_beep[chn].i_t.i_v_min =1;
- data->i_beep_flag[chn].i_t.i_v_min =1;
- data->beep_count = data->wanning_count;
- }
- data->m_data.m_r.r_data.input_wanning.in_wan[chn].vmin_wa_1 = 1;
- if(data->m_data.m_r.r_data.input[chn].voltage < data->m_data.m_rw.rw_data.md_eep.input_th[chn].voltage_min_2)
- {
- data->m_data.m_r.r_data.input_wanning.in_wan[chn].vmin_wa_2 = 1;
- }
- }else
- {
- data->m_data.m_r.r_data.input_wanning.in_wan[chn].vmin_wa_1 = 0;
- data->m_data.m_r.r_data.input_wanning.in_wan[chn].vmin_wa_2 = 0;
- data->i_beep[chn].i_t.i_v_min =0;
- data->i_beep_flag[chn].i_t.i_v_min =0;
- }
- }
- }
- }
- static void check_current_max(uint8_t channel)
- {
- sts_data_t *data = get_sts();
- if(channel == CH448_CHANNEL_1)
- {
- if(data->output_wanning_en.imax_en) {
- if(data->m_data.m_r.r_data.out_power.current > data->m_data.m_rw.rw_data.md_eep.output_th.current_max_1)
- {
- data->m_data.m_r.r_data.output_waning.out_waning.imax_wa_1 = 1;
- if(!data->o_beep.o_t.o_i_max)
- {
- beep_timer_start(20,300);
- data->o_beep.o_t.o_i_max =1;
- data->o_beep_flag.o_t.o_i_max =1;
- data->beep_count = data->wanning_count;
- }
-
- if(data->m_data.m_r.r_data.out_power.current > data->m_data.m_rw.rw_data.md_eep.output_th.current_max_2)
- {
- data->m_data.m_r.r_data.output_waning.out_waning.imax_wa_2 = 1;
- }
- }else
- {
- data->o_beep.o_t.o_i_max =0;
- data->o_beep_flag.o_t.o_i_max =0;
- data->m_data.m_r.r_data.output_waning.out_waning.imax_wa_1 = 0;
- data->m_data.m_r.r_data.output_waning.out_waning.imax_wa_2 = 0;
- }
- }
- }
- }
- static void check_power_max(uint8_t channel)
- {
- sts_data_t *data = get_sts();
- if(channel == CH448_CHANNEL_1)
- {
- if(data->output_wanning_en.pmax_en) {
- if(data->m_data.m_r.r_data.out_power.power > data->m_data.m_rw.rw_data.md_eep.output_th.power_max_1)
- {
- if(!data->o_beep.o_t.o_p_max)
- {
- beep_timer_start(20,300);
- data->o_beep.o_t.o_p_max =1;
- data->o_beep_flag.o_t.o_p_max =1;
- data->beep_count = data->wanning_count;
- }
- data->m_data.m_r.r_data.output_waning.out_waning.pmax_wa_1 = 1;
- if(data->m_data.m_r.r_data.out_power.power > data->m_data.m_rw.rw_data.md_eep.output_th.power_max_2)
- {
- data->m_data.m_r.r_data.output_waning.out_waning.pmax_wa_2 = 1;
- }
- }else
- {
- data->o_beep.o_t.o_p_max = 0;
- data->o_beep_flag.o_t.o_p_max = 0;
- data->m_data.m_r.r_data.output_waning.out_waning.pmax_wa_1 = 0;
- data->m_data.m_r.r_data.output_waning.out_waning.pmax_wa_2 = 0;
- }
- }
- }
- }
- static void check_consumer_max(uint8_t channel)
- {
- sts_data_t *data = get_sts();
- if(channel == CH448_CHANNEL_1)
- {
- if(data->output_wanning_en.cmax_en) {
- if(data->m_data.m_r.r_data.out_power.consumer > data->m_data.m_rw.rw_data.md_eep.output_th.consumer_max_1)
- {
- if(!data->o_beep.o_t.o_c_max)
- {
- beep_timer_start(20,300);
- data->o_beep.o_t.o_c_max =1;
- data->o_beep_flag.o_t.o_c_max =1;
- data->beep_count = data->wanning_count;
- }
- data->m_data.m_r.r_data.output_waning.out_waning.cmax_wa_1 = 1;
- if(data->m_data.m_r.r_data.out_power.consumer > data->m_data.m_rw.rw_data.md_eep.output_th.consumer_max_2)
- {
- data->m_data.m_r.r_data.output_waning.out_waning.cmax_wa_2 = 1;
- }
- }else
- {
- data->o_beep.o_t.o_c_max = 0;
- data->o_beep_flag.o_t.o_c_max = 0;
- data->m_data.m_r.r_data.output_waning.out_waning.cmax_wa_1 = 0;
- data->m_data.m_r.r_data.output_waning.out_waning.cmax_wa_2 = 0;
- }
- }
- }
- }
- static void check_freq_max(uint8_t channel)
- {
- sts_data_t *data = get_sts();
- if(channel != CH448_CHANNEL_1)
- {
- uint8_t chn = channel -1;
- if(chn > CH448_CHANNEL_3)
- return;
- if(data->input_wanning_en[chn].freqmax_en) {
- if(data->m_data.m_r.r_data.input[chn].freq > data->m_data.m_rw.rw_data.md_eep.input_th[chn].freq_max_1)
- {
- if(!data->i_beep[chn].i_t.i_hz_max)
- {
- beep_timer_start(20,300);
- data->i_beep[chn].i_t.i_hz_max =1;
- data->i_beep_flag[chn].i_t.i_hz_max =1;
- data->beep_count = data->wanning_count;
- }
- data->m_data.m_r.r_data.input_wanning.in_wan[chn].hzmax_wa_1 = 1;
- if(data->m_data.m_r.r_data.input[chn].freq > data->m_data.m_rw.rw_data.md_eep.input_th[chn].freq_max_2)
- {
- data->m_data.m_r.r_data.input_wanning.in_wan[chn].hzmax_wa_2 = 1;
- }
- }else
- {
- data->i_beep[chn].i_t.i_hz_max =0;
- data->i_beep_flag[chn].i_t.i_hz_max =0;
- data->m_data.m_r.r_data.input_wanning.in_wan[chn].hzmax_wa_1 = 0;
- data->m_data.m_r.r_data.input_wanning.in_wan[chn].hzmax_wa_2 = 0;
- }
- }
- }
- }
- static void check_freq_min(uint8_t channel)
- {
- sts_data_t *data = get_sts();
- if(channel != CH448_CHANNEL_1)
- {
- uint8_t chn = channel - 1;
- if(chn > CH448_CHANNEL_3)
- return;
- if(data->input_wanning_en[chn].freqmin_en) {
- if(data->m_data.m_r.r_data.input[chn].freq < data->m_data.m_rw.rw_data.md_eep.input_th[chn].freq_min_1)
- {
- if(!data->i_beep[chn].i_t.i_hz_min)
- {
- beep_timer_start(20,300);
- data->i_beep[chn].i_t.i_hz_min =1;
- data->i_beep_flag[chn].i_t.i_hz_min =1;
- data->beep_count = data->wanning_count;
- }
- data->m_data.m_r.r_data.input_wanning.in_wan[chn].hzmin_wa_1 = 1;
- if(data->m_data.m_r.r_data.input[chn].freq < data->m_data.m_rw.rw_data.md_eep.input_th[chn].freq_min_2)
- {
- data->m_data.m_r.r_data.input_wanning.in_wan[chn].hzmin_wa_2 = 1;
- }
- }else
- {
- data->i_beep[chn].i_t.i_hz_min =0;
- data->i_beep_flag[chn].i_t.i_hz_min =0;
- data->m_data.m_r.r_data.input_wanning.in_wan[chn].hzmin_wa_1 = 0;
- data->m_data.m_r.r_data.input_wanning.in_wan[chn].hzmin_wa_2 = 0;
- }
- }
- }
- }
- static void check_wanning(uint8_t channel)
- {
- check_voltage_max(channel);
- check_voltage_min(channel);
- check_current_max(channel);
- check_power_max(channel);
- check_consumer_max(channel);
- check_freq_max(channel);
- check_freq_min(channel);
- }
|