修改bs测试中途提交

This commit is contained in:
ipason 2025-04-23 13:18:12 +08:00
parent 4dff8129a7
commit a8fddb4220
8 changed files with 215 additions and 31 deletions

View File

@ -48,6 +48,10 @@
"time.h": "c", "time.h": "c",
"types.h": "c", "types.h": "c",
"timespec.h": "c", "timespec.h": "c",
"fluxprotocol.h": "c" "fluxprotocol.h": "c",
"fluxsd.h": "c",
"bitset": "c",
"algorithm": "c",
"format": "c"
} }
} }

View File

@ -19,9 +19,17 @@ float Spirit3_Volume[4] = { 210,420,630,750};
float Spirit6_Volume[6] = { 210,420,630,840,1050,1200}; float Spirit6_Volume[6] = { 210,420,630,840,1050,1200};
float YULite8_Volume[6] = { 210,420,630,840,1050,1200}; float YULite8_Volume[6] = { 210,420,630,840,1050,1200};
/* 流量计六个挡位测试时间序列 */
int flux_test_time_series[6] = {40,30,24,20,18,15};
/* 定于用于存储当前测试阶段的枚举变量 */
enum Bs_test_Stage currentTestStage = BS_STAGE_NONE;
/* 应用 event_homePage 中的测试状态显示变量 */ /* 应用 event_homePage 中的测试状态显示变量 */
extern bool is_bs_test_ing; extern bool is_bs_test_ing;
/* 定义控制LED小灯的任务句柄 */
TaskHandle_t bs_stateLED_task_handle;
/* /*
* @brief * @brief
* 1. Time setting sent successfully * 1. Time setting sent successfully
@ -50,9 +58,40 @@ struct FluxProtocol fluxProtocol;
*/ */
void bs_test_task(void* arg) void bs_test_task(void* arg)
{ {
/* 进行6次循环测计数 */
uint8_t testCount = 0;
while(1) while(1)
{ {
/* 恢复LED显示任务 */
vTaskResume(bs_stateLED_task_handle);
currentTestStage = BS_STAGE_START;
for ( testCount = 0; testCount < sizeof(flux_test_time_series); testCount++)
{
}
/* 显示测试开始 */
BS_HOMEPAGE_SHOW("15BPM start testing...");
FLUX_PROGRESS_BAR_CONTROL(10);
/* 测试开始 15BPM */
/* 下发测试时间 */
flux_test_time_set(flux_test_time_series[0]);
vTaskDelay(1000 / portTICK_PERIOD_MS); vTaskDelay(1000 / portTICK_PERIOD_MS);
/* 下发启动指令 */
flux_test_start();
currentTestStage = BS_STAGE_15BPM;
/* 等待测试时间 */
vTaskDelay(flux_test_time_series[0]*1000 / portTICK_PERIOD_MS);
vTaskDelay(2000 / portTICK_PERIOD_MS);
/* 15BPM测试结束 显示测试结束 */
BS_HOMEPAGE_SHOW("15BPM end test");
FLUX_PROGRESS_BAR_CONTROL(20);
/* 读取测试结果 */
flux_test_result_get();
ESP_LOGI("bs_test_task", "bs_test_task"); ESP_LOGI("bs_test_task", "bs_test_task");
@ -81,7 +120,12 @@ void bs_test_task(void* arg)
/* 任务测试完毕 删除任务 */ /* 任务测试完毕 删除任务 */
lv_label_set_text(ui_pageHome_labelStartTest1,"Start Test BS"); lv_label_set_text(ui_pageHome_labelStartTest1,"Start Test BS");
is_bs_test_ing = false; is_bs_test_ing = false;
/* 挂起LED显示任务 */
BS_STATE_LED_TASK_SUSPEND;
vTaskDelete(NULL); vTaskDelete(NULL);
} }
} }
@ -98,10 +142,75 @@ void bs_test_led_task(void* arg)
{ {
while(1) while(1)
{ {
vTaskDelay(1000 / portTICK_PERIOD_MS); vTaskDelay(BS_LED_BLINK_INTERVAL_MS / portTICK_PERIOD_MS);
ESP_LOGI("bs_test_led_task", "bs_test_led_task"); lv_obj_set_style_bg_color(ui_pageHome_panelBSLEDing,lv_color_hex(0x00FF00),LV_PART_MAIN);
vTaskDelay(1000 / portTICK_PERIOD_MS); vTaskDelay(BS_LED_BLINK_INTERVAL_MS / portTICK_PERIOD_MS);
ESP_LOGI("bs_test_led_task", "bs_test_led_task end?"); lv_obj_set_style_bg_color(ui_pageHome_panelBSLEDing,lv_color_hex(0xFFFFFF),LV_PART_MAIN);
} }
} }
/**
* @brief
*
*
*
* @param[in] time
*
*/
void flux_test_time_set(float var_time)
{
/* 设置15BPM测试时间 */
uint8_t bytes[4];
float time = var_time;
memcpy(bytes, &time, 4);
/* 下发命令 */
flux_frame.ADDR = FLUX_ADDR;
flux_frame.FUNC = FLUX_FUNC_SET_SINGLE;
flux_frame.DATA[0] = 0x00;
flux_frame.DATA[1] = 0x02;
flux_frame.DATA[2] = bytes[3];
flux_frame.DATA[3] = bytes[2];
/* 下发15BPM测试时间指令*/
ESP_ERROR_CHECK(ModbusRTU_Send_0306(ECHO_UART_PORT_NUM1,&flux_frame));
}
/**
* @brief
*
*/
void flux_test_start(void)
{
/* 下发启动测试指令 */
flux_frame_start.ADDR = FLUX_ADDR;
flux_frame_start.FUNC = FLUX_FUNC_SET_SINGLE;
flux_frame_start.DATA[0] = 0x00;
flux_frame_start.DATA[1] = 0x01;
flux_frame_start.DATA[2] = 0x00;
flux_frame_start.DATA[3] = 0x01;
ESP_ERROR_CHECK(ModbusRTU_Send_0306(ECHO_UART_PORT_NUM1,&flux_frame_start));
}
/**
* @brief
*
*/
void flux_test_result_get(void)
{
/*下发数据获取指令*/
/* 起始地址为 0x00 */
flux_frame.DATA[0] = 0;
flux_frame.DATA[1] = 0;
/* 数据长度为 120 */
flux_frame.DATA[2] = 0;
flux_frame.DATA[3] = 120;
flux_frame.FUNC = FLUX_FUNC_READ;
/*下发问询120个参数*/
ESP_ERROR_CHECK(ModbusRTU_Send_0306(ECHO_UART_PORT_NUM1,&flux_frame));
}

View File

@ -39,6 +39,27 @@ extern float YULite8_Volume[6];
/* 导出消息数据*/ /* 导出消息数据*/
extern char *test_info[]; extern char *test_info[];
/* 导出LED小灯控制句柄 */
extern TaskHandle_t bs_stateLED_task_handle;
/* 定义LED小灯闪烁时间间隔 ms */
#define BS_LED_BLINK_INTERVAL_MS 500
/* 定义枚举用于标记当前测试阶段 */
typedef enum Bs_test_Stage{
BS_STAGE_15BPM,
BS_STAGE_20BPM,
BS_STAGE_25BPM,
BS_STAGE_30BPM,
BS_STAGE_35BPM,
BS_STAGE_40BPM,
BS_STAGE_MAX,
BS_STAGE_NONE,
BS_STAGE_ERROR,
BS_STAGE_FINISH,
BS_STAGE_START,
};
/* 声明设备类型 */ /* 声明设备类型 */
typedef enum DeviceType{ typedef enum DeviceType{
Spirit3, Spirit3,
@ -96,6 +117,13 @@ typedef struct FluxCommand
lv_label_set_text(ui_pageHome_LabelRate35Result, "0");\ lv_label_set_text(ui_pageHome_LabelRate35Result, "0");\
lv_label_set_text(ui_pageHome_LabelRate40Result, "0"); lv_label_set_text(ui_pageHome_LabelRate40Result, "0");
/* 创建led任务挂起宏函数 */
#define BS_STATE_LED_TASK_SUSPEND vTaskSuspend(bs_stateLED_task_handle);\
lv_obj_set_style_bg_color(ui_pageHome_panelBSLEDing,lv_color_hex(0xFFFFFF),LV_PART_MAIN);
/* BS测试过程中快速显示测试状态 */
#define BS_HOMEPAGE_SHOW(x) lv_label_set_text(ui_pageHome_labelBSInfo,x);
/** /**
* @brief BS测试的任务函数 * @brief BS测试的任务函数
* *
@ -114,6 +142,38 @@ void bs_test_task(void* arg);
*/ */
void bs_test_led_task(void* arg); void bs_test_led_task(void* arg);
/**
* @brief 线
*
* LED小灯bling bling
*
* @param[in] arg not used
*
*/
void bs_test_led_task(void* arg);
/**
* @brief
*
*
*
* @param[in] time
*
*/
void flux_test_time_set(float var_time);
/**
* @brief
*
*/
void flux_test_start(void);
/**
* @brief
*
*/
void flux_test_result_get(void);
#ifdef __cplusplus #ifdef __cplusplus
} /*extern "C"*/ } /*extern "C"*/
#endif #endif

View File

@ -609,6 +609,19 @@ void ui_pageHome_screen_init(void)
lv_label_set_text(ui_pageHome_LabelRate35DOWN, "70.5"); lv_label_set_text(ui_pageHome_LabelRate35DOWN, "70.5");
lv_obj_set_style_text_font(ui_pageHome_LabelRate35DOWN, &lv_font_montserrat_14, LV_PART_MAIN | LV_STATE_DEFAULT); lv_obj_set_style_text_font(ui_pageHome_LabelRate35DOWN, &lv_font_montserrat_14, LV_PART_MAIN | LV_STATE_DEFAULT);
ui_pageHome_panelBSLEDing = lv_obj_create(ui_pageHome_panelResult1);
lv_obj_set_width(ui_pageHome_panelBSLEDing, 25);
lv_obj_set_height(ui_pageHome_panelBSLEDing, 25);
lv_obj_set_x(ui_pageHome_panelBSLEDing, 103);
lv_obj_set_y(ui_pageHome_panelBSLEDing, 90);
lv_obj_set_align(ui_pageHome_panelBSLEDing, LV_ALIGN_CENTER);
lv_obj_clear_flag(ui_pageHome_panelBSLEDing, LV_OBJ_FLAG_SCROLLABLE); /// Flags
lv_obj_set_style_radius(ui_pageHome_panelBSLEDing, 15, LV_PART_MAIN | LV_STATE_DEFAULT);
lv_obj_set_style_border_color(ui_pageHome_panelBSLEDing, lv_color_hex(0xC4C3C3), LV_PART_MAIN | LV_STATE_DEFAULT);
lv_obj_set_style_border_opa(ui_pageHome_panelBSLEDing, 255, LV_PART_MAIN | LV_STATE_DEFAULT);
lv_obj_set_style_border_width(ui_pageHome_panelBSLEDing, 1, LV_PART_MAIN | LV_STATE_DEFAULT);
lv_obj_set_style_border_side(ui_pageHome_panelBSLEDing, LV_BORDER_SIDE_FULL, LV_PART_MAIN | LV_STATE_DEFAULT);
ui_pageHome_LabelRate40DOWN = lv_label_create(ui_pageHome_panelResult1); ui_pageHome_LabelRate40DOWN = lv_label_create(ui_pageHome_panelResult1);
lv_obj_set_width(ui_pageHome_LabelRate40DOWN, LV_SIZE_CONTENT); /// 1 lv_obj_set_width(ui_pageHome_LabelRate40DOWN, LV_SIZE_CONTENT); /// 1
lv_obj_set_height(ui_pageHome_LabelRate40DOWN, LV_SIZE_CONTENT); /// 1 lv_obj_set_height(ui_pageHome_LabelRate40DOWN, LV_SIZE_CONTENT); /// 1
@ -638,8 +651,8 @@ void ui_pageHome_screen_init(void)
lv_dropdown_set_options(ui_pageHome_DropdownTestTypeBS, "Spirit-3\nSpirit-6\nYu-Lite8"); lv_dropdown_set_options(ui_pageHome_DropdownTestTypeBS, "Spirit-3\nSpirit-6\nYu-Lite8");
lv_obj_set_width(ui_pageHome_DropdownTestTypeBS, 100); lv_obj_set_width(ui_pageHome_DropdownTestTypeBS, 100);
lv_obj_set_height(ui_pageHome_DropdownTestTypeBS, 30); lv_obj_set_height(ui_pageHome_DropdownTestTypeBS, 30);
lv_obj_set_x(ui_pageHome_DropdownTestTypeBS, -6); lv_obj_set_x(ui_pageHome_DropdownTestTypeBS, -10);
lv_obj_set_y(ui_pageHome_DropdownTestTypeBS, 90); lv_obj_set_y(ui_pageHome_DropdownTestTypeBS, 91);
lv_obj_set_align(ui_pageHome_DropdownTestTypeBS, LV_ALIGN_CENTER); lv_obj_set_align(ui_pageHome_DropdownTestTypeBS, LV_ALIGN_CENTER);
lv_obj_add_flag(ui_pageHome_DropdownTestTypeBS, LV_OBJ_FLAG_SCROLL_ON_FOCUS); /// Flags lv_obj_add_flag(ui_pageHome_DropdownTestTypeBS, LV_OBJ_FLAG_SCROLL_ON_FOCUS); /// Flags
lv_obj_set_style_text_align(ui_pageHome_DropdownTestTypeBS, LV_TEXT_ALIGN_CENTER, LV_PART_MAIN | LV_STATE_DEFAULT); lv_obj_set_style_text_align(ui_pageHome_DropdownTestTypeBS, LV_TEXT_ALIGN_CENTER, LV_PART_MAIN | LV_STATE_DEFAULT);
@ -684,6 +697,15 @@ void ui_pageHome_screen_init(void)
lv_label_set_text(ui_pageHome_labelstr23, "测试结果:"); lv_label_set_text(ui_pageHome_labelstr23, "测试结果:");
lv_obj_set_style_text_font(ui_pageHome_labelstr23, &ui_font_MiSansN, LV_PART_MAIN | LV_STATE_DEFAULT); lv_obj_set_style_text_font(ui_pageHome_labelstr23, &ui_font_MiSansN, LV_PART_MAIN | LV_STATE_DEFAULT);
ui_pageHome_labelstr22 = lv_label_create(ui_pageHome_panelResult1);
lv_obj_set_width(ui_pageHome_labelstr22, LV_SIZE_CONTENT); /// 1
lv_obj_set_height(ui_pageHome_labelstr22, LV_SIZE_CONTENT); /// 1
lv_obj_set_x(ui_pageHome_labelstr22, 65);
lv_obj_set_y(ui_pageHome_labelstr22, 90);
lv_obj_set_align(ui_pageHome_labelstr22, LV_ALIGN_CENTER);
lv_label_set_text(ui_pageHome_labelstr22, "State");
lv_obj_set_style_text_font(ui_pageHome_labelstr22, &ui_font_MiSansN14, LV_PART_MAIN | LV_STATE_DEFAULT);
ui_pageHome_panelStageBS = lv_obj_create(ui_pageHome_panelCenter); ui_pageHome_panelStageBS = lv_obj_create(ui_pageHome_panelCenter);
lv_obj_set_width(ui_pageHome_panelStageBS, 266); lv_obj_set_width(ui_pageHome_panelStageBS, 266);
lv_obj_set_height(ui_pageHome_panelStageBS, 98); lv_obj_set_height(ui_pageHome_panelStageBS, 98);

View File

@ -87,6 +87,7 @@ lv_obj_t * ui_pageHome_LabelRate20DOWN;
lv_obj_t * ui_pageHome_LabelRate25DOWN; lv_obj_t * ui_pageHome_LabelRate25DOWN;
lv_obj_t * ui_pageHome_LabelRate30DOWN; lv_obj_t * ui_pageHome_LabelRate30DOWN;
lv_obj_t * ui_pageHome_LabelRate35DOWN; lv_obj_t * ui_pageHome_LabelRate35DOWN;
lv_obj_t * ui_pageHome_panelBSLEDing;
lv_obj_t * ui_pageHome_LabelRate40DOWN; lv_obj_t * ui_pageHome_LabelRate40DOWN;
lv_obj_t * ui_pageHome_labelstr20; lv_obj_t * ui_pageHome_labelstr20;
lv_obj_t * ui_pageHome_BarTestProgBS; lv_obj_t * ui_pageHome_BarTestProgBS;
@ -96,6 +97,7 @@ lv_obj_t * ui_pageHome_labelstr21;
lv_obj_t * ui_pageHome_labelstr7; lv_obj_t * ui_pageHome_labelstr7;
lv_obj_t * ui_pageHome_labelBSInfo; lv_obj_t * ui_pageHome_labelBSInfo;
lv_obj_t * ui_pageHome_labelstr23; lv_obj_t * ui_pageHome_labelstr23;
lv_obj_t * ui_pageHome_labelstr22;
lv_obj_t * ui_pageHome_panelStageBS; lv_obj_t * ui_pageHome_panelStageBS;
void ui_event_pageHome_buttonMinusBS(lv_event_t * e); void ui_event_pageHome_buttonMinusBS(lv_event_t * e);
lv_obj_t * ui_pageHome_buttonMinusBS; lv_obj_t * ui_pageHome_buttonMinusBS;

View File

@ -97,6 +97,7 @@ extern lv_obj_t * ui_pageHome_LabelRate20DOWN;
extern lv_obj_t * ui_pageHome_LabelRate25DOWN; extern lv_obj_t * ui_pageHome_LabelRate25DOWN;
extern lv_obj_t * ui_pageHome_LabelRate30DOWN; extern lv_obj_t * ui_pageHome_LabelRate30DOWN;
extern lv_obj_t * ui_pageHome_LabelRate35DOWN; extern lv_obj_t * ui_pageHome_LabelRate35DOWN;
extern lv_obj_t * ui_pageHome_panelBSLEDing;
extern lv_obj_t * ui_pageHome_LabelRate40DOWN; extern lv_obj_t * ui_pageHome_LabelRate40DOWN;
extern lv_obj_t * ui_pageHome_labelstr20; extern lv_obj_t * ui_pageHome_labelstr20;
extern lv_obj_t * ui_pageHome_BarTestProgBS; extern lv_obj_t * ui_pageHome_BarTestProgBS;
@ -106,6 +107,7 @@ extern lv_obj_t * ui_pageHome_labelstr21;
extern lv_obj_t * ui_pageHome_labelstr7; extern lv_obj_t * ui_pageHome_labelstr7;
extern lv_obj_t * ui_pageHome_labelBSInfo; extern lv_obj_t * ui_pageHome_labelBSInfo;
extern lv_obj_t * ui_pageHome_labelstr23; extern lv_obj_t * ui_pageHome_labelstr23;
extern lv_obj_t * ui_pageHome_labelstr22;
extern lv_obj_t * ui_pageHome_panelStageBS; extern lv_obj_t * ui_pageHome_panelStageBS;
void ui_event_pageHome_buttonMinusBS(lv_event_t * e); void ui_event_pageHome_buttonMinusBS(lv_event_t * e);
extern lv_obj_t * ui_pageHome_buttonMinusBS; extern lv_obj_t * ui_pageHome_buttonMinusBS;

View File

@ -482,11 +482,14 @@ void on_buttonStartTestBS_clicked(lv_event_t * e)
{ {
/* 如果正在测试,按下后取消测试 */ /* 如果正在测试,按下后取消测试 */
vTaskDelete(bs_test_task_handle); vTaskDelete(bs_test_task_handle);
/* 挂起LED闪烁 */
BS_STATE_LED_TASK_SUSPEND;
/* 等待开始测试 */ /* 等待开始测试 */
is_bs_test_ing = false; is_bs_test_ing = false;
/* 清空已完成的测试结果 */ /* 清空已完成的测试结果 */
BS_ALL_RESULT_CLEAR; BS_ALL_RESULT_CLEAR;
lv_label_set_text(ui_pageHome_labelStartTest1,"Start Test BS"); lv_label_set_text(ui_pageHome_labelStartTest1,"Start Test BS");
}else{ }else{
/* 如果没有测试,按下后开始测试 */ /* 如果没有测试,按下后开始测试 */
@ -499,33 +502,11 @@ void on_buttonStartTestBS_clicked(lv_event_t * e)
} }
#if 0 #if 0
/* 设置15BPM测试时间 */
uint8_t bytes[4];
float time = 40.0;
memcpy(bytes, &time, 4);
/* 下发命令 */
flux_frame.ADDR = FLUX_ADDR;
flux_frame.FUNC = FLUX_FUNC_SET_SINGLE;
flux_frame.DATA[0] = 0x00;
flux_frame.DATA[1] = 0x02;
flux_frame.DATA[2] = bytes[3];
flux_frame.DATA[3] = bytes[2];
/* 下发15BPM测试时间指令*/
ESP_ERROR_CHECK(ModbusRTU_Send_0306(ECHO_UART_PORT_NUM1,&flux_frame));
/* 屏幕中显示下发成功 */ /* 屏幕中显示下发成功 */
lv_label_set_text(ui_pageHome_labelBSInfo,test_info[0]); lv_label_set_text(ui_pageHome_labelBSInfo,test_info[0]);
/* 下发启动测试指令 */
flux_frame_start.ADDR = FLUX_ADDR;
flux_frame_start.FUNC = FLUX_FUNC_SET_SINGLE;
flux_frame_start.DATA[0] = 0x00;
flux_frame_start.DATA[1] = 0x01;
flux_frame_start.DATA[2] = 0x00;
flux_frame_start.DATA[3] = 0x01;
ESP_ERROR_CHECK(ModbusRTU_Send_0306(ECHO_UART_PORT_NUM1,&flux_frame_start));
/* 屏幕中显示下发成功 */ /* 屏幕中显示下发成功 */
lv_label_set_text(ui_pageHome_labelBSInfo,test_info[1]); lv_label_set_text(ui_pageHome_labelBSInfo,test_info[1]);

View File

@ -102,6 +102,10 @@ extern "C" void app_main(void)
/*创建本地时间同步任务*/ /*创建本地时间同步任务*/
xTaskCreate(time_synic_task, "time_synic_task", 8*1024, NULL, 10, NULL); xTaskCreate(time_synic_task, "time_synic_task", 8*1024, NULL, 10, NULL);
/* 创建BS测试LED闪烁任务同时挂起 */
xTaskCreate(bs_test_led_task, "bs_test_led_task", 4 * 1024, NULL, 2, &bs_stateLED_task_handle);
vTaskSuspend(bs_stateLED_task_handle);
#if 0/*暂时不支持呼吸模拟器*/ #if 0/*暂时不支持呼吸模拟器*/
/*创建UART2响应任务*/ /*创建UART2响应任务*/
xTaskCreate(uart2_echoTask, "uart2_echo_task", ECHO_TASK_STACK_SIZE, NULL, 10, NULL); xTaskCreate(uart2_echoTask, "uart2_echo_task", ECHO_TASK_STACK_SIZE, NULL, 10, NULL);