添加瞬时风速风向,极大极小风速(协议还未添加)

This commit is contained in:
95384 2024-11-26 10:51:52 +08:00
parent eb69ce74d0
commit 51e5b07b49
3 changed files with 38 additions and 17 deletions

View File

@ -109,17 +109,21 @@ typedef struct __weather_param
extern Weather_param weather_info;
typedef struct _mcs_para{
float32_t min_wind_direction; /* 最小风向 */
float32_t average_wind_direction;/* 平均风向 */
float32_t max_wind_direction; /* 最大风向 */
float32_t min_wind_speed; /* 最小风速 */
float32_t average_wind_speed; /* 平均风速 */
float32_t max_wind_speed; /* 最大风速 */
float32_t temperature; /* 环境温度 */
float32_t humidity; /* 环境湿度 */
float32_t pressure; /* 压强 */
float32_t precipitation; /* 雨量 */
float32_t precipitation_intensity;/* 光辐射 */
float32_t min_wind_direction; /* 最小风向 */
float32_t average_wind_direction; /* 平均风向 */
float32_t instantaneous_wind_direction; /* 瞬时风向 */
float32_t max_wind_direction; /* 最大风向 */
float32_t min_wind_speed; /* 最小风速 */
float32_t trough_wind_speed; /* 极小风速 */
float32_t average_wind_speed; /* 平均风速 */
float32_t instantaneous_wind_speed; /* 瞬时风速 */
float32_t peak_wind_speed; /* 极大风速 */
float32_t max_wind_speed; /* 最大风速 */
float32_t temperature; /* 环境温度 */
float32_t humidity; /* 环境湿度 */
float32_t pressure; /* 压强 */
float32_t precipitation; /* 雨量 */
float32_t precipitation_intensity; /* 光辐射 */
}mcs_para;
extern mcs_para g_stMcs_Para;

View File

@ -549,6 +549,9 @@ void wind_task(void const * argument)
}
/// term_printf("x:%.2f y:%.2f win_speed %.2f m/s angle %.2f \r\n",av_speedx,av_speedy,av_speed,av_angle);
}
//瞬时风速风向
g_stMcs_Para.instantaneous_wind_direction = av_angle;
g_stMcs_Para.instantaneous_wind_speed = av_speed;
///term_printf("win_speed %.2f \r\n",weather_info.wind_velocity);
//HAL_Delay(1);
//osDelay(3//
@ -834,22 +837,32 @@ void my_update_mcs_param(float new_wind_speed, float new_wind_dirction)
float temp_max_direction = win_10min.ave_direction_data[0];
float temp_min_speed = win_10min.ave_speed_data[0];
float temp_max_speed = win_10min.ave_speed_data[0];
//遍历10min内所有数据寻找最大最小
float temp_trough_min_speed = win_10min.ave_speed_data[0];
float temp_peak_max_speed = win_10min.ave_speed_data[0];
//遍历10min内所有数据寻找最大最小极大极小
for (int i = 0; i < win_10min.count; i++) {
// 最大最小
if (win_10min.ave_direction_data[i] < temp_min_direction) {
temp_min_direction = win_10min.ave_direction_data[i]; // 更新风向最小值
}
if (win_10min.ave_direction_data[i] > temp_max_direction) {
else if (win_10min.ave_direction_data[i] > temp_max_direction) {
temp_max_direction = win_10min.ave_direction_data[i]; // 更新风向最大值
}
if (win_10min.ave_speed_data[i] < temp_min_speed) {
temp_min_speed = win_10min.ave_speed_data[i]; // 更新风速最小值
}
if (win_10min.ave_speed_data[i] > temp_max_speed) {
else if (win_10min.ave_speed_data[i] > temp_max_speed) {
temp_max_speed = win_10min.ave_speed_data[i]; // 更新风速最大值
}
// 极大极小
if (win_10min.speed_data[i] < temp_trough_min_speed) {
temp_trough_min_speed = win_10min.speed_data[i]; // 更新风速极小值
}
else if (win_10min.speed_data[i] > temp_peak_max_speed) {
temp_peak_max_speed = win_10min.speed_data[i]; // 更新风速极大值
}
}
// 更新最大最小极大极小风速风向
g_stMcs_Para.min_wind_direction = temp_min_direction;
g_stMcs_Para.average_wind_direction = win_10min.ave_direction_data[win_10min.index];
g_stMcs_Para.max_wind_direction = temp_max_direction;
@ -858,6 +871,10 @@ void my_update_mcs_param(float new_wind_speed, float new_wind_dirction)
g_stMcs_Para.average_wind_speed = win_10min.ave_speed_data[win_10min.index];
g_stMcs_Para.max_wind_speed = temp_max_speed;
// 极大极小风速
g_stMcs_Para.trough_wind_speed = temp_trough_min_speed;
g_stMcs_Para.peak_wind_speed = temp_peak_max_speed;
win_10min.index = (win_10min.index + 1) % /*AVE_TIME*/g_stConfigInfo.speed_average_time; //更新索引
}
@ -909,7 +926,7 @@ void tem_hum_update_task(void const * argument)
NVIC_SystemReset();
}
// 风速风向更新
my_update_mcs_param(av_speed, av_angle);
my_update_mcs_param(g_stMcs_Para.instantaneous_wind_speed, g_stMcs_Para.instantaneous_wind_direction);
}
}

View File

@ -125,7 +125,7 @@ void MX_FREERTOS_Init(void) {
osThreadDef(anemometer, wind_task, osPriorityHigh, 0, 256);// ˇçË١çĎň
anemometerHandle = osThreadCreate(osThread(anemometer), NULL);
osThreadDef(temhum_update_task, tem_hum_update_task, osPriorityAboveNormal, 0, 128);//温湿度,大气压更新
osThreadDef(temhum_update_task, tem_hum_update_task, osPriorityAboveNormal, 0, 256);//温湿度,大气压更新
temhum_update_taskHandle = osThreadCreate(osThread(temhum_update_task), NULL);
// osThreadDef(sensorTask, SensorTask, osPriorityRealtime, 0, 128);