新增呼吸模拟器控制部分程序,测试成功

This commit is contained in:
ipason 2025-05-07 18:39:24 +08:00
parent eb69cfe624
commit 7d867ec6b1
6 changed files with 72 additions and 15 deletions

View File

@ -113,7 +113,7 @@ void bs_test_task(void* arg)
while(1) 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]); lv_label_set_text_fmt(ui_pageHome_labelBSInfo,"%s %s",test_rate[testCount],test_info[5]);
vTaskDelay(5000 / portTICK_PERIOD_MS); vTaskDelay(5000 / portTICK_PERIOD_MS);

View File

@ -42,12 +42,21 @@ extern "C" {
#define SPIRIT_8_STAGE_NUM 8 #define SPIRIT_8_STAGE_NUM 8
/* 定义呼吸模拟器六个挡位控制所在Modbus地址 */ /* 定义呼吸模拟器六个挡位控制所在Modbus地址 */
#if 0
#define BS_ADDR_15BPM 0x080B #define BS_ADDR_15BPM 0x080B
#define BS_ADDR_20BPM 0x080C #define BS_ADDR_20BPM 0x080C
#define BS_ADDR_25BPM 0x080D #define BS_ADDR_25BPM 0x080D
#define BS_ADDR_30BPM 0x080E #define BS_ADDR_30BPM 0x080E
#define BS_ADDR_35BPM 0x080F #define BS_ADDR_35BPM 0x080F
#define BS_ADDR_40BPM 0x0810 #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{ typedef enum Bs_test_Rate{

View File

@ -22,7 +22,7 @@ extern "C" {
#define SYSTEM_TIME_UPDATE_INTERVAL_SEC (1) #define SYSTEM_TIME_UPDATE_INTERVAL_SEC (1)
/* 选择是否进行软件定时器精度测试 */ /* 选择是否进行软件定时器精度测试 */
#define SYSTEM_TIME_TEST_ENABLE (1) #define SYSTEM_TIME_TEST_ENABLE (0)
/** /**
* @brief * @brief

View File

@ -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控制指令 */ /* 下发BS控制指令 */
void on_buttonSendBS_clicked(lv_event_t * e) void on_buttonSendBS_clicked(lv_event_t * e)
{ {
uint16_t currentRate = lv_dropdown_get_selected(ui_pageLung_Dropdown1); 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);
} }

View File

@ -344,7 +344,7 @@ void uart2_echoTask(void* arg)
uart_config_t uart_config = { uart_config_t uart_config = {
.baud_rate = ECHO_UART_BAUD_RATE, .baud_rate = ECHO_UART_BAUD_RATE,
.data_bits = UART_DATA_8_BITS, .data_bits = UART_DATA_8_BITS,
.parity = UART_PARITY_DISABLE, .parity = UART_PARITY_EVEN,
.stop_bits = UART_STOP_BITS_1, .stop_bits = UART_STOP_BITS_1,
.flow_ctrl = UART_HW_FLOWCTRL_DISABLE, .flow_ctrl = UART_HW_FLOWCTRL_DISABLE,
.source_clk = UART_SCLK_DEFAULT, .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); int len = uart_read_bytes(ECHO_UART_PORT_NUM2, data, (BUF_SIZE - 1), 20 / portTICK_PERIOD_MS);
// Write data back to the UART // 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 #endif
/** /**
* @brief 05 * @brief
* *
* @param[in] uart_num * @param[in] ADDR
* @param[in] frame * @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; struct ModbusRTU_Frame frame;
unsigned short crc; unsigned short crc;
@ -472,9 +490,16 @@ esp_err_t ModbusRTU_Send_0x05(uint32_t ADDR)
frame.DATA[1] = (ADDR & 0xFF); frame.DATA[1] = (ADDR & 0xFF);
/* 启动命令 */ /* 启动命令 */
frame.DATA[2] = 0xFF; if (enable == true)
frame.DATA[3] = 0x00; {
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)); crc = CRC16((unsigned char *)&frame, sizeof(frame.ADDR) + sizeof(frame.FUNC) + sizeof(frame.DATA));
frame.CRC[1] = (crc & 0xFF); frame.CRC[1] = (crc & 0xFF);
frame.CRC[0] = (crc >> 8); frame.CRC[0] = (crc >> 8);

View File

@ -234,13 +234,22 @@ esp_err_t ModbusRTU_Send_0x10(uart_port_t uart_num, struct ModbusRTU_Frame2Reg *
#endif #endif
/** /**
* @brief 05 * @brief
* *
* @param[in] uart_num * @param[in] ADDR
* @param[in] frame * @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 * @brief