2025-04-18 18:59:53 +08:00
|
|
|
|
/**
|
|
|
|
|
|
* @file FluxProtocol.c
|
|
|
|
|
|
* @brief 流量计通讯协议部分
|
|
|
|
|
|
*
|
|
|
|
|
|
* 用于声明便携制氧机参数
|
|
|
|
|
|
*
|
|
|
|
|
|
* @author wang xiang en
|
|
|
|
|
|
* @date 2025-04-18
|
|
|
|
|
|
* @version 版本号
|
|
|
|
|
|
* @copyright 版权声明((C)2025, YUWELL MEDTECH Co.ltd)
|
|
|
|
|
|
*/
|
2025-03-17 13:46:43 +08:00
|
|
|
|
#include <stdio.h>
|
|
|
|
|
|
#include "FluxProtocol.h"
|
2025-04-25 08:19:43 +08:00
|
|
|
|
#include "FluxSD.h"
|
2025-04-23 08:58:26 +08:00
|
|
|
|
#include "esp_log.h"
|
|
|
|
|
|
|
2025-04-25 09:03:30 +08:00
|
|
|
|
#include "math.h"
|
|
|
|
|
|
|
2025-04-23 16:00:26 +08:00
|
|
|
|
/* 定义用于存储当前工作模式的变量,默认是bs模式 */
|
2025-04-25 08:19:43 +08:00
|
|
|
|
extern bool is_test_mode_nom;
|
2025-04-23 16:00:26 +08:00
|
|
|
|
|
2025-04-23 09:36:19 +08:00
|
|
|
|
/* 应用 event_homePage 中的测试状态显示变量 */
|
|
|
|
|
|
extern bool is_bs_test_ing;
|
2025-04-23 14:50:59 +08:00
|
|
|
|
extern bool is_nom_test_ing;
|
|
|
|
|
|
|
2025-04-25 08:19:43 +08:00
|
|
|
|
extern int flux_test_time_series[6];
|
|
|
|
|
|
extern char *test_rate[6];
|
|
|
|
|
|
extern uint32_t g_bs_test_event_group_bits[6];
|
|
|
|
|
|
|
2025-04-23 16:00:26 +08:00
|
|
|
|
/* 声明函数 */
|
2025-04-23 14:50:59 +08:00
|
|
|
|
extern void comulate_time_set(void);
|
2025-04-23 09:36:19 +08:00
|
|
|
|
|
2025-04-23 13:18:12 +08:00
|
|
|
|
/* 定义控制LED小灯的任务句柄 */
|
2025-04-25 08:19:43 +08:00
|
|
|
|
extern TaskHandle_t bs_stateLED_task_handle;
|
|
|
|
|
|
extern TaskHandle_t nom_stateLED_task_handle;
|
2025-04-23 08:58:26 +08:00
|
|
|
|
|
|
|
|
|
|
/* 导出协议数据结构体 */
|
2025-03-17 13:46:43 +08:00
|
|
|
|
struct FluxProtocol fluxProtocol;
|
|
|
|
|
|
|
2025-04-23 14:50:59 +08:00
|
|
|
|
/**
|
|
|
|
|
|
* @brief 新建用于进行带常规测试的任务函数
|
|
|
|
|
|
*
|
|
|
|
|
|
* @param[in] arg not used
|
|
|
|
|
|
*
|
|
|
|
|
|
*/
|
|
|
|
|
|
void nom_test_task(void* arg)
|
|
|
|
|
|
{
|
|
|
|
|
|
float time = 0;
|
|
|
|
|
|
|
|
|
|
|
|
while (1)
|
|
|
|
|
|
{
|
|
|
|
|
|
/* 开始测试前 下发积分时间,确保测试时间正确 */
|
|
|
|
|
|
comulate_time_set();
|
|
|
|
|
|
time = (float)lv_spinbox_get_value(ui_pageFluxRead_spinboxTime);
|
|
|
|
|
|
flux_test_time_set(time);
|
|
|
|
|
|
|
|
|
|
|
|
lv_label_set_text(ui_pageHome_labelStartTest,"Cancel Test Nom");
|
|
|
|
|
|
lv_bar_set_value(ui_pageHome_barNomTest,0,LV_ANIM_ON);
|
|
|
|
|
|
|
|
|
|
|
|
/* 恢复LED显示任务 */
|
|
|
|
|
|
vTaskResume(nom_stateLED_task_handle);
|
|
|
|
|
|
|
|
|
|
|
|
/* 测试开始 */
|
2025-04-23 16:00:26 +08:00
|
|
|
|
FLUX_TEST_START;
|
|
|
|
|
|
/* 等待测试结束 */
|
2025-04-23 14:50:59 +08:00
|
|
|
|
vTaskDelay(time*1000 / portTICK_PERIOD_MS);
|
|
|
|
|
|
|
2025-04-23 16:00:26 +08:00
|
|
|
|
/* 再等待2秒钟 */
|
|
|
|
|
|
vTaskDelay(2*1000 / portTICK_PERIOD_MS);
|
|
|
|
|
|
|
|
|
|
|
|
/* 下发数据获取指令 */
|
|
|
|
|
|
flux_test_result_get();
|
|
|
|
|
|
|
2025-04-23 14:50:59 +08:00
|
|
|
|
/* 测试结束 */
|
|
|
|
|
|
lv_label_set_text(ui_pageHome_labelStartTest,"Start Test Nom");
|
|
|
|
|
|
is_nom_test_ing = false;
|
|
|
|
|
|
/* 挂起LED显示任务 */
|
|
|
|
|
|
NOM_STATE_LED_TASK_SUSPEND;
|
|
|
|
|
|
|
|
|
|
|
|
lv_bar_set_value(ui_pageHome_barNomTest,0,LV_ANIM_ON);
|
|
|
|
|
|
vTaskDelete(NULL);
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
2025-04-23 08:58:26 +08:00
|
|
|
|
/**
|
|
|
|
|
|
* @brief 新建用于进行带BS测试的任务函数
|
|
|
|
|
|
*
|
|
|
|
|
|
* @param[in] arg not used
|
|
|
|
|
|
*
|
|
|
|
|
|
*/
|
|
|
|
|
|
void bs_test_task(void* arg)
|
|
|
|
|
|
{
|
2025-04-23 13:18:12 +08:00
|
|
|
|
/* 进行6次循环测计数 */
|
|
|
|
|
|
uint8_t testCount = 0;
|
2025-04-25 08:19:43 +08:00
|
|
|
|
|
2025-05-10 16:55:01 +08:00
|
|
|
|
/* 默认所有频率结果正确 */
|
|
|
|
|
|
xEventGroupSetBits(g_bs_test_event_group,BIT0|BIT1|BIT2|BIT3|BIT4|BIT5|BIT6);
|
|
|
|
|
|
ESP_LOGI("bs_test_task", "初始化后判断事件组的值%lu", xEventGroupGetBits(g_bs_test_event_group));
|
2025-04-25 09:03:30 +08:00
|
|
|
|
/*
|
|
|
|
|
|
*0-5 对应15-40BPM测试结果
|
|
|
|
|
|
*6 对应是否正在等待测试结束
|
|
|
|
|
|
*/
|
2025-04-23 13:18:12 +08:00
|
|
|
|
|
2025-04-23 08:58:26 +08:00
|
|
|
|
while(1)
|
|
|
|
|
|
{
|
2025-04-23 13:18:12 +08:00
|
|
|
|
/* 恢复LED显示任务 */
|
|
|
|
|
|
vTaskResume(bs_stateLED_task_handle);
|
2025-04-25 08:19:43 +08:00
|
|
|
|
currentTestRate = BS_RATE_15BPM;
|
|
|
|
|
|
FLUX_PROGRESS_BAR_CONTROL(0);
|
|
|
|
|
|
|
|
|
|
|
|
uint8_t retest_count = 0;
|
2025-04-23 13:18:12 +08:00
|
|
|
|
|
2025-04-25 08:19:43 +08:00
|
|
|
|
while(1)
|
2025-04-23 13:18:12 +08:00
|
|
|
|
{
|
2025-04-27 10:42:59 +08:00
|
|
|
|
/* 调节呼吸模拟器频率 */
|
2025-05-07 18:39:24 +08:00
|
|
|
|
bs_bpm_send(bs_addr_all[testCount]);
|
2025-04-27 10:42:59 +08:00
|
|
|
|
lv_label_set_text_fmt(ui_pageHome_labelBSInfo,"%s %s",test_rate[testCount],test_info[5]);
|
2025-05-10 16:55:01 +08:00
|
|
|
|
vTaskDelay(10000 / portTICK_PERIOD_MS);
|
2025-04-27 10:42:59 +08:00
|
|
|
|
|
2025-04-25 08:19:43 +08:00
|
|
|
|
/* 下发测试时间 */
|
|
|
|
|
|
flux_test_time_set(flux_test_time_series[testCount]);
|
|
|
|
|
|
vTaskDelay(1000 / portTICK_PERIOD_MS);
|
|
|
|
|
|
lv_label_set_text_fmt(ui_pageHome_labelBSInfo,"%s %s",test_rate[testCount],test_info[0]);
|
|
|
|
|
|
|
|
|
|
|
|
/* 下发启动指令 */
|
|
|
|
|
|
flux_test_start();
|
|
|
|
|
|
lv_label_set_text_fmt(ui_pageHome_labelBSInfo,"%s %s",test_rate[testCount],test_info[1]);
|
|
|
|
|
|
|
|
|
|
|
|
/* 等待测试结束 */
|
|
|
|
|
|
currentTestRate = (enum Bs_test_Rate)testCount;
|
2025-04-25 09:03:30 +08:00
|
|
|
|
lv_bar_set_value(ui_pageHome_BarTestProgBS,0,LV_ANIM_ON);
|
|
|
|
|
|
lv_label_set_text_fmt(ui_pageHome_labelstr21,test_rate[currentTestRate]);
|
|
|
|
|
|
xEventGroupSetBits(g_bs_test_event_group,BIT6);
|
|
|
|
|
|
|
|
|
|
|
|
/* 开始进行延时操作 */
|
2025-04-25 08:19:43 +08:00
|
|
|
|
vTaskDelay(flux_test_time_series[testCount]*1000 / portTICK_PERIOD_MS);
|
|
|
|
|
|
|
|
|
|
|
|
lv_label_set_text_fmt(ui_pageHome_labelBSInfo,"%s %s",test_rate[testCount],test_info[2]);
|
|
|
|
|
|
vTaskDelay(2000 / portTICK_PERIOD_MS);
|
|
|
|
|
|
|
|
|
|
|
|
/* 读取测试结果 */
|
|
|
|
|
|
flux_test_result_get();
|
2025-05-10 16:55:01 +08:00
|
|
|
|
WRITE_LOG_TO_SD("测试结果获取中");
|
2025-04-25 08:19:43 +08:00
|
|
|
|
lv_label_set_text_fmt(ui_pageHome_labelBSInfo,"%s %s",test_rate[testCount],test_info[3]);
|
|
|
|
|
|
|
|
|
|
|
|
/* 等待2s进行结果获取 */
|
2025-05-10 16:55:01 +08:00
|
|
|
|
vTaskDelay(3000 / portTICK_PERIOD_MS);
|
2025-04-25 08:19:43 +08:00
|
|
|
|
|
2025-04-25 09:03:30 +08:00
|
|
|
|
/* 清空进度条 */
|
|
|
|
|
|
xEventGroupClearBits(g_bs_test_event_group,BIT6);
|
|
|
|
|
|
FLUX_PROGRESS_BAR_CONTROL(0);
|
|
|
|
|
|
|
2025-05-10 16:55:01 +08:00
|
|
|
|
ESP_LOGI("bs_test_task", "判断事件组的值%lu", xEventGroupGetBits(g_bs_test_event_group));
|
|
|
|
|
|
|
2025-04-25 08:19:43 +08:00
|
|
|
|
/* 根据测试结果确定是否需要复测 */
|
2025-05-10 16:55:01 +08:00
|
|
|
|
if ((xEventGroupGetBits(g_bs_test_event_group) & g_bs_test_event_group_bits[testCount])!= 0)
|
2025-04-25 08:19:43 +08:00
|
|
|
|
{
|
|
|
|
|
|
/* 测试结果正常,进行下一挡位测试 */
|
|
|
|
|
|
testCount++;
|
2025-05-10 16:55:01 +08:00
|
|
|
|
WRITE_LOG_TO_SD("测试结果正常,进行下一挡位测试");
|
|
|
|
|
|
|
2025-04-25 08:19:43 +08:00
|
|
|
|
}else{
|
2025-05-10 16:55:01 +08:00
|
|
|
|
WRITE_LOG_TO_SD("测试结果异常,再次测试?");
|
2025-04-25 08:19:43 +08:00
|
|
|
|
/* 测试失败,重复上一次测试 */
|
|
|
|
|
|
lv_label_set_text_fmt(ui_pageHome_labelBSInfo,"%s %s",test_rate[testCount],"retry");
|
|
|
|
|
|
retest_count++;
|
|
|
|
|
|
if(retest_count == 2)
|
|
|
|
|
|
{
|
|
|
|
|
|
lv_label_set_text_fmt(ui_pageHome_labelBSInfo,"%s %s",test_rate[testCount],"failed");
|
2025-05-10 16:55:01 +08:00
|
|
|
|
WRITE_LOG_TO_SD("测试失败 进行下一档测试,暂时放弃该挡位");
|
2025-04-25 08:19:43 +08:00
|
|
|
|
/* 当前挡位失败,进行下一挡位测试 */
|
|
|
|
|
|
retest_count = 0;
|
|
|
|
|
|
testCount++;
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
if (testCount == 6)
|
|
|
|
|
|
{
|
2025-05-10 16:55:01 +08:00
|
|
|
|
WRITE_LOG_TO_SD("测试结束");
|
2025-04-25 08:19:43 +08:00
|
|
|
|
break;
|
|
|
|
|
|
}
|
2025-04-23 13:18:12 +08:00
|
|
|
|
}
|
|
|
|
|
|
|
2025-04-25 08:19:43 +08:00
|
|
|
|
sd_append_bs_data();
|
2025-04-23 08:58:26 +08:00
|
|
|
|
|
2025-04-25 08:19:43 +08:00
|
|
|
|
lv_label_set_text_fmt(ui_pageHome_labelBSInfo,"%s",test_info[4]);
|
2025-04-23 08:58:26 +08:00
|
|
|
|
|
2025-05-10 16:55:01 +08:00
|
|
|
|
WRITE_LOG_TO_SD("测试结束 任务回收");
|
2025-04-23 09:36:19 +08:00
|
|
|
|
/* 任务测试完毕 删除任务 */
|
|
|
|
|
|
lv_label_set_text(ui_pageHome_labelStartTest1,"Start Test BS");
|
2025-04-25 08:19:43 +08:00
|
|
|
|
lv_label_set_text(ui_pageHome_labelBSInfo,"wait for test");
|
2025-04-25 09:03:30 +08:00
|
|
|
|
lv_label_set_text(ui_pageHome_labelstr21,"--BPM");
|
2025-04-23 09:36:19 +08:00
|
|
|
|
is_bs_test_ing = false;
|
2025-04-25 09:03:30 +08:00
|
|
|
|
|
2025-04-25 08:19:43 +08:00
|
|
|
|
|
2025-04-23 13:18:12 +08:00
|
|
|
|
/* 挂起LED显示任务 */
|
|
|
|
|
|
BS_STATE_LED_TASK_SUSPEND;
|
|
|
|
|
|
|
2025-04-23 08:58:26 +08:00
|
|
|
|
vTaskDelete(NULL);
|
2025-04-23 13:18:12 +08:00
|
|
|
|
|
2025-04-23 08:58:26 +08:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
}
|
2025-03-17 13:46:43 +08:00
|
|
|
|
|
2025-04-23 09:36:19 +08:00
|
|
|
|
/**
|
|
|
|
|
|
* @brief 测试状态显示线程
|
|
|
|
|
|
*
|
|
|
|
|
|
* 设置一个LED小灯,测试的时候bling bling 闪
|
|
|
|
|
|
*
|
|
|
|
|
|
* @param[in] arg not used
|
|
|
|
|
|
*
|
|
|
|
|
|
*/
|
|
|
|
|
|
void bs_test_led_task(void* arg)
|
|
|
|
|
|
{
|
2025-04-25 09:03:30 +08:00
|
|
|
|
int32_t time_all = 0;
|
|
|
|
|
|
int32_t bar_plus = 0;
|
|
|
|
|
|
int32_t current_bar_value = 0;
|
|
|
|
|
|
|
2025-04-23 09:36:19 +08:00
|
|
|
|
while(1)
|
|
|
|
|
|
{
|
2025-04-23 13:18:12 +08:00
|
|
|
|
vTaskDelay(BS_LED_BLINK_INTERVAL_MS / portTICK_PERIOD_MS);
|
|
|
|
|
|
lv_obj_set_style_bg_color(ui_pageHome_panelBSLEDing,lv_color_hex(0x00FF00),LV_PART_MAIN);
|
2025-04-23 09:36:19 +08:00
|
|
|
|
|
2025-04-23 13:18:12 +08:00
|
|
|
|
vTaskDelay(BS_LED_BLINK_INTERVAL_MS / portTICK_PERIOD_MS);
|
|
|
|
|
|
lv_obj_set_style_bg_color(ui_pageHome_panelBSLEDing,lv_color_hex(0xFFFFFF),LV_PART_MAIN);
|
2025-04-25 09:03:30 +08:00
|
|
|
|
|
|
|
|
|
|
/* 获取总的测试时间 */
|
|
|
|
|
|
time_all = flux_test_time_series[currentTestRate];
|
|
|
|
|
|
|
|
|
|
|
|
/* 获取每次需要累加的值*/
|
|
|
|
|
|
bar_plus = ceil(lv_bar_get_max_value(ui_pageHome_BarTestProgBS) / time_all);
|
|
|
|
|
|
|
|
|
|
|
|
/* 获取当前的进度条值*/
|
|
|
|
|
|
current_bar_value = lv_bar_get_value(ui_pageHome_BarTestProgBS);
|
|
|
|
|
|
if((current_bar_value + bar_plus < lv_bar_get_max_value(ui_pageHome_BarTestProgBS))&&(xEventGroupGetBits(g_bs_test_event_group)&BIT6))
|
|
|
|
|
|
{
|
|
|
|
|
|
lv_bar_set_value(ui_pageHome_BarTestProgBS,current_bar_value + bar_plus,LV_ANIM_ON);
|
|
|
|
|
|
}
|
2025-04-23 09:36:19 +08:00
|
|
|
|
}
|
2025-04-23 13:18:12 +08:00
|
|
|
|
}
|
|
|
|
|
|
|
2025-04-23 14:50:59 +08:00
|
|
|
|
/**
|
|
|
|
|
|
* @brief 测试状态显示线程
|
|
|
|
|
|
*
|
|
|
|
|
|
* 设置一个LED小灯,测试的时候bling bling 闪
|
|
|
|
|
|
*
|
|
|
|
|
|
* @param[in] arg not used
|
|
|
|
|
|
*
|
|
|
|
|
|
*/
|
|
|
|
|
|
void nom_test_led_task(void* arg)
|
|
|
|
|
|
{
|
|
|
|
|
|
int32_t time_all = 0;
|
|
|
|
|
|
|
|
|
|
|
|
int32_t bar_plus = 0;
|
|
|
|
|
|
int32_t current_bar_value = 0;
|
|
|
|
|
|
|
|
|
|
|
|
while(1)
|
|
|
|
|
|
{
|
|
|
|
|
|
vTaskDelay(NOM_LED_BLINK_INTERVAL_MS / portTICK_PERIOD_MS);
|
|
|
|
|
|
lv_obj_set_style_bg_color(ui_pageHome_panelNomTest,lv_color_hex(0x00FF00),LV_PART_MAIN);
|
|
|
|
|
|
|
|
|
|
|
|
vTaskDelay(NOM_LED_BLINK_INTERVAL_MS / portTICK_PERIOD_MS);
|
|
|
|
|
|
lv_obj_set_style_bg_color(ui_pageHome_panelNomTest,lv_color_hex(0xFFFFFF),LV_PART_MAIN);
|
|
|
|
|
|
|
|
|
|
|
|
/* 获取总的测试时间 */
|
|
|
|
|
|
time_all = lv_spinbox_get_value(ui_pageFluxRead_spinboxTime);
|
|
|
|
|
|
|
|
|
|
|
|
/* 获取每次需要累加的值*/
|
|
|
|
|
|
bar_plus = lv_bar_get_max_value(ui_pageHome_barNomTest) / time_all;
|
|
|
|
|
|
|
|
|
|
|
|
/* 获取当前的进度条值*/
|
|
|
|
|
|
current_bar_value = lv_bar_get_value(ui_pageHome_barNomTest);
|
|
|
|
|
|
if (current_bar_value + bar_plus < lv_bar_get_max_value(ui_pageHome_barNomTest))
|
|
|
|
|
|
{
|
|
|
|
|
|
lv_bar_set_value(ui_pageHome_barNomTest,current_bar_value+bar_plus,LV_ANIM_ON);
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
2025-04-23 13:18:12 +08:00
|
|
|
|
/**
|
|
|
|
|
|
* @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));
|
2025-04-23 09:36:19 +08:00
|
|
|
|
}
|