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

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)
{
/* 调节呼吸模拟器频率 */
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);

View File

@ -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{

View File

@ -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

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控制指令 */
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);
}

View File

@ -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,8 +490,15 @@ esp_err_t ModbusRTU_Send_0x05(uint32_t ADDR)
frame.DATA[1] = (ADDR & 0xFF);
/* 启动命令 */
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);

View File

@ -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