|
|
@@ -13,6 +13,7 @@
|
|
|
#include "uart.h"
|
|
|
#include "Timer.h"
|
|
|
#include "mb.h"
|
|
|
+#include "common.h"
|
|
|
#if HLW8110
|
|
|
|
|
|
#define HIGH 1
|
|
|
@@ -94,6 +95,8 @@ float F_AC_E_B; // B通
|
|
|
float F_AC_BACKUP_E_B; // B通道电量备份
|
|
|
float F_AC_LINE_Freq; // 市电线性频率
|
|
|
|
|
|
+uint8_t flag_value = 0;
|
|
|
+
|
|
|
void Clear_RxBuf(void)
|
|
|
{
|
|
|
unsigned char i;
|
|
|
@@ -615,7 +618,7 @@ void Check_WriteReg_Success(void)
|
|
|
void Read_HLW8110_IA(void)
|
|
|
{
|
|
|
float a;
|
|
|
-
|
|
|
+ board_t *board = get_board();
|
|
|
Uart_Read_HLW8110_Reg(REG_RMSIA_ADDR,3);
|
|
|
//DelayNms(10);
|
|
|
for(uint8_t i = 0;i < 5;i++)
|
|
|
@@ -650,7 +653,10 @@ void Read_HLW8110_IA(void)
|
|
|
a = (float)U32_RMSIA_RegData;
|
|
|
a = a * U16_RMSIAC_RegData;
|
|
|
a = a/0x800000; //电流计算出来的浮点数单位是mA,比如5003.12
|
|
|
- a = a/1; // 1 = 电流系数
|
|
|
+ if(flag_value)
|
|
|
+ a = a/((float)board->i_k[1]/10000.0); // 1 = 电流系数
|
|
|
+ else
|
|
|
+ a = a/((float)board->i_k[0]/10000.0);
|
|
|
a = a/1000; //a= 5003ma,a/1000 = 5.003A,单位转换成A
|
|
|
a = a * D_CAL_A_I; //D_CAL_A_I是校正系数,默认是1
|
|
|
F_AC_I = a;
|
|
|
@@ -661,7 +667,7 @@ void Read_HLW8110_IA(void)
|
|
|
void Read_HLW8110_U(void)
|
|
|
{
|
|
|
float a;
|
|
|
-
|
|
|
+ board_t *board = get_board();
|
|
|
Uart_Read_HLW8110_Reg(REG_RMSU_ADDR,3);
|
|
|
for(uint8_t i = 0;i < 5;i++)
|
|
|
{
|
|
|
@@ -697,8 +703,12 @@ void Read_HLW8110_U(void)
|
|
|
a = (float)U32_RMSU_RegData;
|
|
|
a = a*U16_RMSUC_RegData;
|
|
|
a = a/0x400000;
|
|
|
- a = a/1; // 1 = 电压系数
|
|
|
- a= a * 3.189;
|
|
|
+ if(flag_value)
|
|
|
+ a = a/((float)board->v_k[1]/10000.0); // 1 = 电流系数
|
|
|
+ else
|
|
|
+ a = a/((float)board->v_k[0]/10000.0);
|
|
|
+ //a = a/0.31163; // 1 = 电压系数
|
|
|
+ //a= a * 3.189;
|
|
|
a = a/100; //计算出a = 22083.12mV,a/100表示220.8312V,电压转换成V
|
|
|
a = a*D_CAL_U; //D_CAL_U是校正系数,默认是1,
|
|
|
F_AC_V = a;
|
|
|
@@ -710,7 +720,7 @@ void Read_HLW8110_PA(void)
|
|
|
{
|
|
|
float a;
|
|
|
float b;
|
|
|
-
|
|
|
+ board_t *board = get_board();
|
|
|
Uart_Read_HLW8110_Reg(REG_POWER_PA_ADDR,4);
|
|
|
for(uint8_t i = 0;i < 5;i++)
|
|
|
{
|
|
|
@@ -749,9 +759,19 @@ void Read_HLW8110_PA(void)
|
|
|
|
|
|
a = a*U16_PowerPAC_RegData;
|
|
|
a = a/0x80000000;
|
|
|
- a = a/1; // 1 = 电流系数
|
|
|
- a = a * 3.189;
|
|
|
- a = a/1; // 1 = 电压系数
|
|
|
+ if(flag_value)
|
|
|
+ a = a/((float)board->i_k[1]/10000.0); // 1 = 电流系数
|
|
|
+ else
|
|
|
+ a = a/((float)board->i_k[0]/10000.0);
|
|
|
+ //a = a/1; // 1 = 电流系数
|
|
|
+ //a = a/0.31163;
|
|
|
+ //a = a * 3.189;
|
|
|
+ // a = a/0.31163; // 1 = 电压系数
|
|
|
+ if(flag_value)
|
|
|
+ a = a/((float)board->v_k[1]/10000.0); // 1 = 电压系数
|
|
|
+ else
|
|
|
+ a = a/((float)board->v_k[0]/10000.0);
|
|
|
+
|
|
|
a = a * D_CAL_A_P; //D_CAL_A_P是校正系数,默认是1
|
|
|
F_AC_P = a; //单位为W,比如算出来5000.123,表示5000.123W
|
|
|
|
|
|
@@ -761,6 +781,7 @@ void Read_HLW8110_PA(void)
|
|
|
void Read_HLW8110_EA(void)
|
|
|
{
|
|
|
float a;
|
|
|
+ board_t *board = get_board();
|
|
|
Uart_Read_HLW8110_Reg(REG_ENERGY_PA_ADDR,3);
|
|
|
for(uint8_t i = 0;i < 5;i++)
|
|
|
{
|
|
|
@@ -802,10 +823,20 @@ void Read_HLW8110_EA(void)
|
|
|
a = (float)U32_ENERGY_PA_RegData;
|
|
|
a = a*U16_EnergyAC_RegData;
|
|
|
a = a/0x20000000; //电量单位是0.001KWH,比如算出来是2.002,表示2.002KWH
|
|
|
- a = a/1; // 1 = 电流系数
|
|
|
- a= a * 3.189;
|
|
|
- a = a/1; // 1 = 电压系数
|
|
|
- a = a * D_CAL_A_E; //D_CAL_A_E是校正系数,默认是1
|
|
|
+
|
|
|
+ if(flag_value)
|
|
|
+ a = a/((float)board->i_k[1]/10000.0); // 1 = 电流系数
|
|
|
+ else
|
|
|
+ a = a/((float)board->i_k[0]/10000.0);
|
|
|
+ //a = a/1; // 1 = 电流系数
|
|
|
+ //a= a * 3.189;
|
|
|
+ //a = a/0.31163; // 1 = 电压系数
|
|
|
+ if(flag_value)
|
|
|
+ a = a/((float)board->v_k[1]/10000.0); // 1 = 电压系数
|
|
|
+ else
|
|
|
+ a = a/((float)board->v_k[0]/10000.0);
|
|
|
+
|
|
|
+ a = a * D_CAL_A_E; //D_CAL_A_E是校正系数,默认是1
|
|
|
F_AC_E = a;
|
|
|
F_AC_BACKUP_E = F_AC_E;
|
|
|
|