diff --git a/App/Inc/anemometer_dev.h b/App/Inc/anemometer_dev.h index f726582..4ab94bc 100644 --- a/App/Inc/anemometer_dev.h +++ b/App/Inc/anemometer_dev.h @@ -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; diff --git a/App/Src/anemometer_dev.c b/App/Src/anemometer_dev.c index 90a3a95..bc69afb 100644 --- a/App/Src/anemometer_dev.c +++ b/App/Src/anemometer_dev.c @@ -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); } } diff --git a/Core/Src/freertos.c b/Core/Src/freertos.c index 597ef39..df89c56 100644 --- a/Core/Src/freertos.c +++ b/Core/Src/freertos.c @@ -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);