diff --git a/components/FluxProtocol/FluxProtocol.c b/components/FluxProtocol/FluxProtocol.c index 36befa1..fee0236 100644 --- a/components/FluxProtocol/FluxProtocol.c +++ b/components/FluxProtocol/FluxProtocol.c @@ -113,7 +113,7 @@ void bs_test_task(void* arg) while(1) { /* 调节呼吸模拟器频率 */ - ModbusRTU_Send_0x05(bs_addr_all[testCount]); + bs_bpm_send(bs_addr_all[testCount]); lv_label_set_text_fmt(ui_pageHome_labelBSInfo,"%s %s",test_rate[testCount],test_info[5]); vTaskDelay(5000 / portTICK_PERIOD_MS); diff --git a/components/FluxProtocol/FluxProtocol.h b/components/FluxProtocol/FluxProtocol.h index 815890f..4daae43 100644 --- a/components/FluxProtocol/FluxProtocol.h +++ b/components/FluxProtocol/FluxProtocol.h @@ -42,12 +42,21 @@ extern "C" { #define SPIRIT_8_STAGE_NUM 8 /* 定义呼吸模拟器六个挡位控制所在Modbus地址 */ +#if 0 #define BS_ADDR_15BPM 0x080B #define BS_ADDR_20BPM 0x080C #define BS_ADDR_25BPM 0x080D #define BS_ADDR_30BPM 0x080E #define BS_ADDR_35BPM 0x080F #define BS_ADDR_40BPM 0x0810 +#else +#define BS_ADDR_15BPM 0x080A +#define BS_ADDR_20BPM 0x080B +#define BS_ADDR_25BPM 0x080C +#define BS_ADDR_30BPM 0x080D +#define BS_ADDR_35BPM 0x080E +#define BS_ADDR_40BPM 0x080F +#endif /* 定义枚举用于标记呼吸频率 */ typedef enum Bs_test_Rate{ diff --git a/components/FluxTime/FluxTime.h b/components/FluxTime/FluxTime.h index e68bffe..dc59128 100644 --- a/components/FluxTime/FluxTime.h +++ b/components/FluxTime/FluxTime.h @@ -22,7 +22,7 @@ extern "C" { #define SYSTEM_TIME_UPDATE_INTERVAL_SEC (1) /* 选择是否进行软件定时器精度测试 */ -#define SYSTEM_TIME_TEST_ENABLE (1) +#define SYSTEM_TIME_TEST_ENABLE (0) /** * @brief 时间同步函数 diff --git a/components/FluxUI/ui_events.c b/components/FluxUI/ui_events.c index dc08037..8a8d1fc 100644 --- a/components/FluxUI/ui_events.c +++ b/components/FluxUI/ui_events.c @@ -230,9 +230,23 @@ void on_buttonClearSD_clicked(lv_event_t * e) } } +static void bs_clicked_1s(lv_timer_t * timer) +{ + uint16_t currentRate = lv_dropdown_get_selected(ui_pageLung_Dropdown1); + ModbusRTU_Send_0x05(bs_addr_all[currentRate],false); + +} + /* 下发BS控制指令 */ void on_buttonSendBS_clicked(lv_event_t * e) { uint16_t currentRate = lv_dropdown_get_selected(ui_pageLung_Dropdown1); - ModbusRTU_Send_0x05(bs_addr_all[currentRate]); + + /* 下发控制指令 使能 */ + ModbusRTU_Send_0x05(bs_addr_all[currentRate],true); + + lv_timer_t* bs_clicked = lv_timer_create(bs_clicked_1s, 1000, NULL); + lv_timer_set_repeat_count(bs_clicked, 1); + lv_timer_set_period(bs_clicked, 1000); + lv_timer_enable(bs_clicked); } \ No newline at end of file diff --git a/components/FluxUart/FluxUart.c b/components/FluxUart/FluxUart.c index 75c5a23..47392eb 100644 --- a/components/FluxUart/FluxUart.c +++ b/components/FluxUart/FluxUart.c @@ -344,7 +344,7 @@ void uart2_echoTask(void* arg) uart_config_t uart_config = { .baud_rate = ECHO_UART_BAUD_RATE, .data_bits = UART_DATA_8_BITS, - .parity = UART_PARITY_DISABLE, + .parity = UART_PARITY_EVEN, .stop_bits = UART_STOP_BITS_1, .flow_ctrl = UART_HW_FLOWCTRL_DISABLE, .source_clk = UART_SCLK_DEFAULT, @@ -371,9 +371,12 @@ void uart2_echoTask(void* arg) int len = uart_read_bytes(ECHO_UART_PORT_NUM2, data, (BUF_SIZE - 1), 20 / portTICK_PERIOD_MS); // Write data back to the UART - uart_write_bytes(ECHO_UART_PORT_NUM2, (const char *) data, len); + //uart_write_bytes(ECHO_UART_PORT_NUM2, (const char *) data, len); - //ESP_LOGI("uart2_echoTask", "Read %d bytes: '%s'", len, data); + //lv_label_set_text(ui_pageLung_labelDataFromBS,(char *)data); + lv_label_set_text_fmt(ui_pageLung_labelDataFromBS,"%02x %02x %02x %02x %02x %02x %02x %02x",data[0],data[1],data[2],data[3],data[4],data[5],data[6],data[7]); + + ESP_LOGI("uart2_echoTask", "Read %d bytes: '%s'", len, data); } } @@ -453,13 +456,28 @@ esp_err_t ModbusRTU_Send_0x10(uart_port_t uart_num, struct ModbusRTU_Frame2Reg * #endif /** - * @brief 封装05指令,修改单个寄存器开关量 + * @brief 封装呼吸模拟器控制指令 * - * @param[in] uart_num 串口号 + * @param[in] ADDR 寄存器地址 * @param[in] frame 需要发送的数据帧 * */ -esp_err_t ModbusRTU_Send_0x05(uint32_t ADDR) +void bs_bpm_send(uint32_t ADDR) +{ + /* 先向该地址下发一个05指令,使能呼吸模拟器,等待1s钟后再关闭 */ + ModbusRTU_Send_0x05(ADDR,true); + vTaskDelay(1000 / portTICK_PERIOD_MS); + ModbusRTU_Send_0x05(ADDR,false); +} + +/** + * @brief 封装05指令,修改单个线圈开关 + * + * @param[in] ADDR 寄存器地址 + * @param[in] enable 是否使能 + * + */ +esp_err_t ModbusRTU_Send_0x05(uint32_t ADDR,bool enable) { struct ModbusRTU_Frame frame; unsigned short crc; @@ -472,9 +490,16 @@ esp_err_t ModbusRTU_Send_0x05(uint32_t ADDR) frame.DATA[1] = (ADDR & 0xFF); /* 启动命令 */ - frame.DATA[2] = 0xFF; - frame.DATA[3] = 0x00; - + if (enable == true) + { + frame.DATA[2] = 0xFF; + frame.DATA[3] = 0x00; + }else + { + frame.DATA[2] = 0x00; + frame.DATA[3] = 0x00; + } + crc = CRC16((unsigned char *)&frame, sizeof(frame.ADDR) + sizeof(frame.FUNC) + sizeof(frame.DATA)); frame.CRC[1] = (crc & 0xFF); frame.CRC[0] = (crc >> 8); diff --git a/components/FluxUart/FluxUart.h b/components/FluxUart/FluxUart.h index 6ef2e4c..f289182 100644 --- a/components/FluxUart/FluxUart.h +++ b/components/FluxUart/FluxUart.h @@ -234,13 +234,22 @@ esp_err_t ModbusRTU_Send_0x10(uart_port_t uart_num, struct ModbusRTU_Frame2Reg * #endif /** - * @brief 封装05指令,修改单个寄存器开关量 + * @brief 封装呼吸模拟器控制指令 * - * @param[in] uart_num 串口号 + * @param[in] ADDR 寄存器地址 * @param[in] frame 需要发送的数据帧 * */ -esp_err_t ModbusRTU_Send_0x05(uint32_t ADDR); +void bs_bpm_send(uint32_t ADDR); + +/** + * @brief 封装05指令,修改单个线圈开关 + * + * @param[in] ADDR 寄存器地址 + * @param[in] enable 是否使能 + * + */ +esp_err_t ModbusRTU_Send_0x05(uint32_t ADDR,bool enable); /** * @brief 根据主界面内容刷新测试结果