修正系数加入协议,南北东西距离与声速添加进协议

This commit is contained in:
95384 2024-12-03 18:01:00 +08:00
parent b713b75cf0
commit 66ac84aade
6 changed files with 130 additions and 44 deletions

View File

@ -96,8 +96,10 @@ typedef struct __weather_param
//float32_t wind_velocity_y_offset;
// 风速
float32_t wind_velocity;
// 超声波传播速度
float32_t wind_c;
// 超声波传播速度南北
float32_t wind_c_NS;
// 超声波传播速度东西
float32_t wind_c_WE;
// 风向
float32_t wind_angle;
// 温度

View File

@ -54,20 +54,23 @@ typedef enum
FRT_REGISTER_TRANSDUCER_CFG_4R5 = 31, /* 换能器参数 */
FRT_REGISTER_TRANSDUCER_CFG_8R0 = 32, /* 换能器参数 */
FRT_REGISTER_RSSI_RANGE = 33, /* RSSI有效范围 */
FRT_REGISTER_DISTANCE = 34, /* 换能器表面距离 */
FRT_REGISTER_ERROR_LOG = 35, /* 错误日志 */
FRT_REGISTER_WIND_C = 36, /* 计算得到的风速 */
FRT_REGISTER_LINEAR_POINT_X_1 = 37, /* 线性插值原始点1 */
FRT_REGISTER_LINEAR_POINT_X_2 = 38, /* 线性插值原始点2 */
FRT_REGISTER_LINEAR_POINT_X_3 = 39, /* 线性插值原始点3 */
FRT_REGISTER_LINEAR_POINT_X_4 = 40, /* 线性插值原始点4 */
FRT_REGISTER_LINEAR_POINT_X_5 = 41, /* 线性插值原始点5 */
FRT_REGISTER_LINEAR_POINT_Y_1 = 42, /* 线性插值校准点1 */
FRT_REGISTER_LINEAR_POINT_Y_2 = 43, /* 线性插值校准点2 */
FRT_REGISTER_LINEAR_POINT_Y_3 = 44, /* 线性插值校准点3 */
FRT_REGISTER_LINEAR_POINT_Y_4 = 45, /* 线性插值校准点4 */
FRT_REGISTER_LINEAR_POINT_Y_5 = 46, /* 线性插值校准点5 */
FRT_REGISTER_LINEAR_ENABLE = 47, /* 线性插值使能 */
FRT_REGISTER_COEFFICIENT = 34, /* 粘度修正系数 */
FRT_REGISTER_DISTANCE_NS = 35, /* 南北换能器表面距离 */
FRT_REGISTER_DISTANCE_WE = 36, /* 东西换能器表面距离 */
FRT_REGISTER_ERROR_LOG = 37, /* 错误日志 */
FRT_REGISTER_WIND_C_NS = 38, /* 计算得到的南北风速 */
FRT_REGISTER_WIND_C_WE = 39, /* 计算得到的东西风速 */
FRT_REGISTER_LINEAR_POINT_X_1 = 40, /* 线性插值原始点1 */
FRT_REGISTER_LINEAR_POINT_X_2 = 41, /* 线性插值原始点2 */
FRT_REGISTER_LINEAR_POINT_X_3 = 42, /* 线性插值原始点3 */
FRT_REGISTER_LINEAR_POINT_X_4 = 43, /* 线性插值原始点4 */
FRT_REGISTER_LINEAR_POINT_X_5 = 44, /* 线性插值原始点5 */
FRT_REGISTER_LINEAR_POINT_Y_1 = 45, /* 线性插值校准点1 */
FRT_REGISTER_LINEAR_POINT_Y_2 = 46, /* 线性插值校准点2 */
FRT_REGISTER_LINEAR_POINT_Y_3 = 47, /* 线性插值校准点3 */
FRT_REGISTER_LINEAR_POINT_Y_4 = 48, /* 线性插值校准点4 */
FRT_REGISTER_LINEAR_POINT_Y_5 = 49, /* 线性插值校准点5 */
FRT_REGISTER_LINEAR_ENABLE = 50, /* 线性插值使能 */
}FRT_MsgRegister;
#pragma pack(push,1)

View File

@ -40,8 +40,10 @@ typedef struct _factory_config_info{
u_int16_t transducer_cfg_1R5; /* 换能器参数 */
u_int16_t transducer_cfg_4R5; /* 换能器参数 */
u_int16_t transducer_cfg_8R0; /* 换能器参数 */
u_int16_t Coefficient; /* 粘度修正系数 */
u_int16_t RSSI_range; /* RSSI有效范围 */
u_int16_t transducer_distace; /* 换能器表面距离 */
u_int16_t transducer_distace_NS; /* 南北换能器表面距离 */
u_int16_t transducer_distace_WE; /* 东西换能器表面距离 */
u_int16_t linear_point_1_x; /* 线性插值点1X */
u_int16_t linear_point_1_y; /* 线性插值点1Y */
u_int16_t linear_point_2_x; /* 线性插值点2X */

View File

@ -418,7 +418,7 @@ void wind_task(void const * argument)
{
g_error_log.tof_error_NS = 1;
weather_info.wind_c = 0;
weather_info.wind_c_NS = 0;
weather_info.wind_velocity_x = 0;
}
else
@ -439,10 +439,10 @@ void wind_task(void const * argument)
// 通过各通道渡越时间求时间差
dtof = tofx-tofy;
weather_info.wind_c = (g_stConfigInfo.transducer_distace * 2.0f)/2.0f*(1.0f/tofx+1.0f/tofy);
weather_info.wind_c_NS = (g_stConfigInfo.transducer_distace_NS * 2.0f)/2.0f*(1.0f/tofx+1.0f/tofy);
// weather_info.wind_velocity_x = 0-DISTANCE*dtof/1.41422f/tofx/tofx;
// 修正公式
weather_info.wind_velocity_x = 0-(g_stConfigInfo.transducer_distace * 2.0f)*dtof/TWO_COS45/tofx/tofy;
weather_info.wind_velocity_x = 0-(g_stConfigInfo.transducer_distace_NS * 2.0f)*dtof/TWO_COS45/tofx/tofy;
}
// 通道3 通道4 测试东西风速
@ -476,7 +476,7 @@ void wind_task(void const * argument)
{
g_error_log.tof_error_WE = 1;
weather_info.wind_c = 0;
weather_info.wind_c_WE = 0;
weather_info.wind_velocity_y = 0;
}
else
@ -499,10 +499,10 @@ void wind_task(void const * argument)
// 通过各通道渡越时间求时间差
dtof = tofx-tofy;
weather_info.wind_c = (g_stConfigInfo.transducer_distace * 2.0f)/2.0f*(1.0f/tofx+1.0f/tofy);
weather_info.wind_c_WE = (g_stConfigInfo.transducer_distace_WE * 2.0f)/2.0f*(1.0f/tofx+1.0f/tofy);
// weather_info.wind_velocity_y = DISTANCE*dtof/1.41422f/tofx/tofx;
// 修正公式
weather_info.wind_velocity_y = (g_stConfigInfo.transducer_distace * 2.0f)*dtof/TWO_COS45/tofx/tofy;
weather_info.wind_velocity_y = (g_stConfigInfo.transducer_distace_WE * 2.0f)*dtof/TWO_COS45/tofx/tofy;
}
weather_info.wind_velocity = sqrtf(weather_info.wind_velocity_x*weather_info.wind_velocity_x + weather_info.wind_velocity_y*weather_info.wind_velocity_y);
@ -543,7 +543,7 @@ void wind_task(void const * argument)
av_angle = 360-av_angle;
//针对粘度进行校准
av_speed = av_speed * 1.1201f;
av_speed = av_speed * ((float)g_stConfigInfo.Coefficient/10000.0);
// 速度太小视为0风速
if(fabs(av_speed)<0.1)

View File

@ -50,9 +50,12 @@ static u_int16_t FRT_ReadRegTransducerCFG1R5(void *pMsg);
static u_int16_t FRT_ReadRegTransducerCFG4R5(void *pMsg);
static u_int16_t FRT_ReadRegTransducerCFG8R0(void *pMsg);
static u_int16_t FRT_ReadRegRSSIRange(void *pMsg);
static u_int16_t FRT_ReadRegDISTANCE(void *pMsg);
static u_int16_t FRT_ReadRegCoefficient(void *pMsg);
static u_int16_t FRT_ReadRegDISTANCE_NS(void *pMsg);
static u_int16_t FRT_ReadRegDISTANCE_WE(void *pMsg);
static u_int16_t FRT_ReadRegErrorData(void *pMsg);
static u_int16_t FRT_ReadRegWindC(void *pMsg);
static u_int16_t FRT_ReadRegWindC_NS(void *pMsg);
static u_int16_t FRT_ReadRegWindC_WE(void *pMsg);
static u_int16_t FRT_ReadRegPoint_1X(void *pMsg);
static u_int16_t FRT_ReadRegPoint_2X(void *pMsg);
static u_int16_t FRT_ReadRegPoint_3X(void *pMsg);
@ -69,7 +72,9 @@ static u_int16_t FRT_WriteRegTransducerCFG1R5(void *pMsg);
static u_int16_t FRT_WriteRegTransducerCFG4R5(void *pMsg);
static u_int16_t FRT_WriteRegTransducerCFG8R0(void *pMsg);
static u_int16_t FRT_WriteRegRSSIRange(void *pMsg);
static u_int16_t FRT_WriteRegDISTANCE(void *pMsg);
static u_int16_t FRT_WriteRegCoefficient(void *pMsg);
static u_int16_t FRT_WriteRegDISTANCE_NS(void *pMsg);
static u_int16_t FRT_WriteRegDISTANCE_WE(void *pMsg);
static u_int16_t FRT_WriteRegPoint_1Y(void *pMsg);
static u_int16_t FRT_WriteRegPoint_2Y(void *pMsg);
static u_int16_t FRT_WriteRegPoint_3Y(void *pMsg);
@ -114,10 +119,13 @@ FRT_RegProcTable_s g_RegTbl[] =
{ FRT_REGISTER_TRANSDUCER_CFG_1R5, FRT_ReadRegTransducerCFG1R5 }, /* 读换能器参数寄存器值1R5 */
{ FRT_REGISTER_TRANSDUCER_CFG_4R5, FRT_ReadRegTransducerCFG4R5 }, /* 读换能器参数寄存器值4R5 */
{ FRT_REGISTER_TRANSDUCER_CFG_8R0, FRT_ReadRegTransducerCFG8R0 }, /* 读换能器参数寄存器值8R0 */
{ FRT_REGISTER_RSSI_RANGE, FRT_ReadRegRSSIRange }, /* 读RSSI有效范围 */
{ FRT_REGISTER_DISTANCE, FRT_ReadRegDISTANCE }, /* 读探头表面有效距离 */
{ FRT_REGISTER_RSSI_RANGE, FRT_ReadRegRSSIRange }, /* 读RSSI有效范围 */
{ FRT_REGISTER_COEFFICIENT, FRT_ReadRegCoefficient }, /* 读粘度修正系数 */
{ FRT_REGISTER_DISTANCE_NS, FRT_ReadRegDISTANCE_NS }, /* 读南北探头表面有效距离 */
{ FRT_REGISTER_DISTANCE_WE, FRT_ReadRegDISTANCE_WE }, /* 读东西探头表面有效距离 */
{ FRT_REGISTER_ERROR_LOG, FRT_ReadRegErrorData }, /* 读错误日志 */
{ FRT_REGISTER_WIND_C, FRT_ReadRegWindC }, /* 读计算得到的风速 */
{ FRT_REGISTER_WIND_C_NS, FRT_ReadRegWindC_NS }, /* 读计算得到的南北风速 */
{ FRT_REGISTER_WIND_C_WE, FRT_ReadRegWindC_WE }, /* 读计算得到的东西风速 */
{ FRT_REGISTER_LINEAR_POINT_X_1, FRT_ReadRegPoint_1X }, /* 线性插值原始点1 */
{ FRT_REGISTER_LINEAR_POINT_X_2, FRT_ReadRegPoint_2X }, /* 线性插值原始点2 */
{ FRT_REGISTER_LINEAR_POINT_X_3, FRT_ReadRegPoint_3X }, /* 线性插值原始点3 */
@ -144,7 +152,9 @@ FRT_RegProcTable_s g_Write_RegTbl[] =
{ FRT_REGISTER_TRANSDUCER_CFG_4R5, FRT_WriteRegTransducerCFG4R5 }, /* 写换能器参数寄存器值4R5 */
{ FRT_REGISTER_TRANSDUCER_CFG_8R0, FRT_WriteRegTransducerCFG8R0 }, /* 写换能器参数寄存器值8R0 */
{ FRT_REGISTER_RSSI_RANGE, FRT_WriteRegRSSIRange }, /* 写RSSI有效范围 */
{ FRT_REGISTER_DISTANCE, FRT_WriteRegDISTANCE }, /* 写探头表面有效距离 */
{ FRT_REGISTER_COEFFICIENT, FRT_WriteRegCoefficient }, /* 写粘度修正系数 */
{ FRT_REGISTER_DISTANCE_NS, FRT_WriteRegDISTANCE_NS }, /* 写南北探头表面有效距离 */
{ FRT_REGISTER_DISTANCE_WE, FRT_WriteRegDISTANCE_WE }, /* 写东西探头表面有效距离 */
{ FRT_REGISTER_LINEAR_POINT_Y_1, FRT_WriteRegPoint_1Y }, /* 线性插值校准点1 */
{ FRT_REGISTER_LINEAR_POINT_Y_2, FRT_WriteRegPoint_2Y }, /* 线性插值校准点2 */
{ FRT_REGISTER_LINEAR_POINT_Y_3, FRT_WriteRegPoint_3Y }, /* 线性插值校准点3 */
@ -587,14 +597,38 @@ static u_int16_t FRT_ReadRegRSSIRange(void *pMsg)
}
/**
* @brief
* @brief
* @param
* @retval
*/
static u_int16_t FRT_ReadRegDISTANCE(void *pMsg)
static u_int16_t FRT_ReadRegCoefficient(void *pMsg)
{
read_config_info();
u_int16_t value=g_stConfigInfo.transducer_distace;
read_config_info();
u_int16_t value=g_stConfigInfo.Coefficient;
return FRT_swap_endian_16(value);
}
/**
* @brief
* @param
* @retval
*/
static u_int16_t FRT_ReadRegDISTANCE_NS(void *pMsg)
{
read_config_info();
u_int16_t value=g_stConfigInfo.transducer_distace_NS;
return FRT_swap_endian_16(value);
}
/**
* @brief 西
* @param
* @retval
*/
static u_int16_t FRT_ReadRegDISTANCE_WE(void *pMsg)
{
read_config_info();
u_int16_t value=g_stConfigInfo.transducer_distace_WE;
return FRT_swap_endian_16(value);
}
@ -610,13 +644,24 @@ static u_int16_t FRT_ReadRegErrorData(void *pMsg)
}
/**
* @brief
* @brief
* @param
* @retval
*/
static u_int16_t FRT_ReadRegWindC(void *pMsg)
static u_int16_t FRT_ReadRegWindC_NS(void *pMsg)
{
u_int16_t value=(u_int16_t)(weather_info.wind_c *10);
u_int16_t value=(u_int16_t)(weather_info.wind_c_NS *10);
return FRT_swap_endian_16(value);
}
/**
* @brief 西
* @param
* @retval
*/
static u_int16_t FRT_ReadRegWindC_WE(void *pMsg)
{
u_int16_t value=(u_int16_t)(weather_info.wind_c_WE *10);
return FRT_swap_endian_16(value);
}
@ -817,16 +862,48 @@ static u_int16_t FRT_WriteRegRSSIRange(void *pMsg)
}
/**
* @brief
* @brief
* @param
* @retval
*/
static u_int16_t FRT_WriteRegDISTANCE(void *pMsg)
static u_int16_t FRT_WriteRegCoefficient(void *pMsg)
{
uint16_t *pMsgAddr = (uint16_t *)pMsg;
uint16_t data = *pMsgAddr;
g_stConfigInfo.transducer_distace = data;
g_stConfigInfo.Coefficient = data;
save_factory_config_info(g_stConfigInfo);
return 0;
}
/**
* @brief
* @param
* @retval
*/
static u_int16_t FRT_WriteRegDISTANCE_NS(void *pMsg)
{
uint16_t *pMsgAddr = (uint16_t *)pMsg;
uint16_t data = *pMsgAddr;
g_stConfigInfo.transducer_distace_NS = data;
save_factory_config_info(g_stConfigInfo);
return 0;
}
/**
* @brief 西
* @param
* @retval
*/
static u_int16_t FRT_WriteRegDISTANCE_WE(void *pMsg)
{
uint16_t *pMsgAddr = (uint16_t *)pMsg;
uint16_t data = *pMsgAddr;
g_stConfigInfo.transducer_distace_WE = data;
save_factory_config_info(g_stConfigInfo);
return 0;
@ -1092,7 +1169,7 @@ void FRT_MsgProc_WriteRegister(device_handle device, void *pMsg)
// 校验
if (start_reg_addr < FRT_REGISTER_DEVICE_ADDR ||\
(start_reg_addr > FRT_REGISTER_REST_DEFAULT_SETTING && start_reg_addr < FRT_REGISTER_TRANSDUCER_CFG_1R5) ||\
(start_reg_addr > FRT_REGISTER_DISTANCE && start_reg_addr < FRT_REGISTER_LINEAR_POINT_Y_1) ||\
(start_reg_addr > FRT_REGISTER_DISTANCE_WE && start_reg_addr < FRT_REGISTER_LINEAR_POINT_Y_1) ||\
(start_reg_addr > FRT_REGISTER_LINEAR_ENABLE) \
)
{
@ -1102,7 +1179,7 @@ void FRT_MsgProc_WriteRegister(device_handle device, void *pMsg)
if (reg_num < 0x01 ||\
((reg_num + start_reg_addr - 1) < FRT_REGISTER_DEVICE_ADDR) ||\
(((reg_num + start_reg_addr -1) > FRT_REGISTER_REST_DEFAULT_SETTING) && ((reg_num + start_reg_addr -1) < FRT_REGISTER_TRANSDUCER_CFG_1R5)) ||\
(((reg_num + start_reg_addr -1) > FRT_REGISTER_DISTANCE) && ((reg_num + start_reg_addr -1) < FRT_REGISTER_LINEAR_POINT_Y_1)) ||\
(((reg_num + start_reg_addr -1) > FRT_REGISTER_DISTANCE_WE) && ((reg_num + start_reg_addr -1) < FRT_REGISTER_LINEAR_POINT_Y_1)) ||\
((reg_num + start_reg_addr -1) > FRT_REGISTER_LINEAR_ENABLE) \
)
{

View File

@ -26,7 +26,9 @@ factory_config_info g_stConfigInfo={
.transducer_cfg_4R5 = 35, /* 无锡电声换能器参数 */
.transducer_cfg_8R0 = 65, /* 无锡电声换能器参数 */
.RSSI_range = 20, /* RSSI大于0.2有效 */
.transducer_distace = 57560, /* 换能器探头表面距离 */
.Coefficient = 11201, /* 粘度修正系数 */
.transducer_distace_NS = 57560, /* 换能器探头表面距离 */
.transducer_distace_WE = 57560, /* 换能器探头表面距离 */
.linear_point_1_x = 0, /* 线性插值点1 */
.linear_point_1_y = 0, /* 线性插值点1 */