|
|
@@ -13,9 +13,10 @@
|
|
|
#include "Uart1.h"
|
|
|
#include "Hlw8110.h"
|
|
|
#include "SysTick.h"
|
|
|
+#include "main.h"
|
|
|
|
|
|
-
|
|
|
-
|
|
|
+void electricity_read(uint8_t channel);
|
|
|
+static void check_wanning(uint8_t channel);
|
|
|
void electricity_init()
|
|
|
{
|
|
|
InitCH448F();
|
|
|
@@ -27,19 +28,199 @@ void electricity_init()
|
|
|
DelayNus(50);
|
|
|
Init_HLW8110();
|
|
|
}
|
|
|
+ sts_data_t *data = get_sts();
|
|
|
+ data->read_ele = electricity_read;
|
|
|
+ data->check_wanning = check_wanning;
|
|
|
}
|
|
|
|
|
|
-void electricity_read(uint8_t channel, electricity_t *ele)
|
|
|
+void electricity_read(uint8_t channel)
|
|
|
{
|
|
|
- if(!ele)
|
|
|
- return;
|
|
|
+ electricity_t ele = {0};
|
|
|
select_channel(channel);
|
|
|
DelayNus(50);
|
|
|
Check_WriteReg_Success();
|
|
|
- ele->voltage = read_hlw8110_v();
|
|
|
- ele->current = read_hlw8110_i();
|
|
|
- ele->consumer = read_hlw8110_e();
|
|
|
- ele->power = read_hlw8110_p();
|
|
|
- ele->freq = read_hlw8110_freq();
|
|
|
- ele->factor = read_hlw8110_pf();
|
|
|
+ ele.voltage = read_hlw8110_v();
|
|
|
+ ele.current = read_hlw8110_i();
|
|
|
+ ele.consumer = read_hlw8110_e();
|
|
|
+ ele.power = read_hlw8110_p();
|
|
|
+ ele.freq = read_hlw8110_freq();
|
|
|
+ ele.factor = read_hlw8110_pf();
|
|
|
+
|
|
|
+ sts_data_t *data = get_sts();
|
|
|
+ if(channel == 0)
|
|
|
+ {
|
|
|
+ data->m_data.out_power.voltage = ele.voltage * 1000;
|
|
|
+ data->m_data.out_power.current = ele.current * 1000;
|
|
|
+
|
|
|
+ data->m_data.out_power.power = ele.power * 1000;
|
|
|
+ data->m_data.out_power.freq = ele.freq * 1000;
|
|
|
+ data->m_data.out_power.factor = ele.factor * 1000;
|
|
|
+ data->iic_consumer += ele.consumer;
|
|
|
+ data->m_data.out_power.consumer = data->iic_consumer * 1000;
|
|
|
+ }else
|
|
|
+ {
|
|
|
+ data->m_data.out_power.voltage = ele.voltage * 1000;
|
|
|
+ data->m_data.out_power.freq = ele.freq * 1000;
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
+static void check_voltage_max(uint8_t channel)
|
|
|
+{
|
|
|
+ sts_data_t *data = get_sts();
|
|
|
+ if(channel == CH448_CHANNEL_1)
|
|
|
+ {
|
|
|
+ if(IS_VOLTAGE_MAX_EN(data->output_wanning_en)) {
|
|
|
+ if(data->m_data.out_power.voltage > data->m_data.output_th.voltage_max)
|
|
|
+ {
|
|
|
+ SET_WANNING_VOLTAGE_MAX(data->m_data.output_waning.waning);
|
|
|
+ }else
|
|
|
+ {
|
|
|
+ UNSET_WANNING_VOLTAGE_MAX(data->m_data.output_waning.waning);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }else
|
|
|
+ {
|
|
|
+ uint8_t chn = channel-1;
|
|
|
+ if(IS_VOLTAGE_MAX_EN(data->input_wanning_en[chn])) {
|
|
|
+ if(data->m_data.input[chn].voltage > data->m_data.input_th[chn].voltage_max)
|
|
|
+ {
|
|
|
+ SET_WANNING_VOLTAGE_MAX(data->m_data.input_wanning.waning[chn]);
|
|
|
+ }else
|
|
|
+ {
|
|
|
+ UNSET_WANNING_VOLTAGE_MAX(data->m_data.input_wanning.waning[chn]);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
+static void check_voltage_min(uint8_t channel)
|
|
|
+{
|
|
|
+ sts_data_t *data = get_sts();
|
|
|
+ if(channel == CH448_CHANNEL_1)
|
|
|
+ {
|
|
|
+ if(IS_VOLTAGE_MIN_EN(data->output_wanning_en)) {
|
|
|
+ if(data->m_data.out_power.voltage < data->m_data.output_th.voltage_min)
|
|
|
+ {
|
|
|
+ SET_WANNING_VOLTAGE_MIN(data->m_data.output_waning.waning);
|
|
|
+ }else
|
|
|
+ {
|
|
|
+ UNSET_WANNING_VOLTAGE_MIN(data->m_data.output_waning.waning);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }else
|
|
|
+ {
|
|
|
+ uint8_t chn = channel-1;
|
|
|
+ if(IS_VOLTAGE_MIN_EN(data->input_wanning_en[chn])) {
|
|
|
+ if(data->m_data.input[chn].voltage < data->m_data.input_th[chn].voltage_min)
|
|
|
+ {
|
|
|
+ SET_WANNING_VOLTAGE_MIN(data->m_data.input_wanning.waning[chn]);
|
|
|
+ }else
|
|
|
+ {
|
|
|
+ UNSET_WANNING_VOLTAGE_MIN(data->m_data.input_wanning.waning[chn]);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
+
|
|
|
+static void check_current_max(uint8_t channel)
|
|
|
+{
|
|
|
+ sts_data_t *data = get_sts();
|
|
|
+ if(channel == CH448_CHANNEL_1)
|
|
|
+ {
|
|
|
+ if(IS_CURRENT_MAX_EN(data->output_wanning_en)) {
|
|
|
+ if(data->m_data.out_power.current > data->m_data.output_th.current_max)
|
|
|
+ {
|
|
|
+ SET_WANNING_CURRENT_MAX(data->m_data.output_waning.waning);
|
|
|
+ }else
|
|
|
+ {
|
|
|
+ UNSET_WANNING_CURRENT_MAX(data->m_data.output_waning.waning);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
+static void check_power_max(uint8_t channel)
|
|
|
+{
|
|
|
+ sts_data_t *data = get_sts();
|
|
|
+ if(channel == CH448_CHANNEL_1)
|
|
|
+ {
|
|
|
+ if(IS_POWER_MAX_EN(data->output_wanning_en)) {
|
|
|
+ if(data->m_data.out_power.power > data->m_data.output_th.power_max)
|
|
|
+ {
|
|
|
+ SET_WANNING_POWER_MAX(data->m_data.output_waning.waning);
|
|
|
+ }else
|
|
|
+ {
|
|
|
+ UNSET_WANNING_POWER_MAX(data->m_data.output_waning.waning);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
+static void check_consumer_max(uint8_t channel)
|
|
|
+{
|
|
|
+ sts_data_t *data = get_sts();
|
|
|
+ if(channel == CH448_CHANNEL_1)
|
|
|
+ {
|
|
|
+ if(IS_CONSUMER_MAX_EN(data->output_wanning_en)) {
|
|
|
+ if(data->m_data.out_power.consumer > data->m_data.output_th.consumer_max)
|
|
|
+ {
|
|
|
+ SET_WANNING_CONSUMER_MAX(data->m_data.output_waning.waning);
|
|
|
+ }else
|
|
|
+ {
|
|
|
+ UNSET_WANNING_CONSUMER_MAX(data->m_data.output_waning.waning);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
+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(IS_FREQ_MAX_EN(data->input_wanning_en[chn])) {
|
|
|
+ if(data->m_data.input[chn].freq > data->m_data.input_th[chn].freq_max)
|
|
|
+ {
|
|
|
+ SET_WANNING_FREQ_MAX(data->m_data.input_wanning.waning[chn]);
|
|
|
+ }else
|
|
|
+ {
|
|
|
+ UNSET_WANNING_FREQ_MAX(data->m_data.input_wanning.waning[chn]);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
+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(IS_FREQ_MIN_EN(data->input_wanning_en[chn])) {
|
|
|
+ if(data->m_data.input[chn].freq < data->m_data.input_th[chn].freq_min)
|
|
|
+ {
|
|
|
+ SET_WANNING_FREQ_MIN(data->m_data.input_wanning.waning[chn]);
|
|
|
+ }else
|
|
|
+ {
|
|
|
+ UNSET_WANNING_FREQ_MIN(data->m_data.input_wanning.waning[chn]);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
+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);
|
|
|
}
|