更新:

1、本地按键&上位机modbus指令冲突处理:量程、描点个数、曲线颜色、语言选择;
2、主界面:数据范围“/”修改成“~”;
This commit is contained in:
吴俊潮 2025-06-18 16:58:38 +08:00
parent e5a2c352ec
commit 3cab4d8fcc
22 changed files with 20151 additions and 20072 deletions

View File

@ -41,7 +41,8 @@
"key_functions_main.h": "c", "key_functions_main.h": "c",
"eeprom_spi.h": "c", "eeprom_spi.h": "c",
"math.h": "c", "math.h": "c",
"modbus_register_process.h": "c" "modbus_register_process.h": "c",
"modbus_rtu_master.h": "c"
}, },
"C_Cpp.errorSquiggles": "disabled", "C_Cpp.errorSquiggles": "disabled",
"idf.pythonInstallPath": "F:\\Espressif\\tools\\idf-python\\3.11.2\\python.exe", "idf.pythonInstallPath": "F:\\Espressif\\tools\\idf-python\\3.11.2\\python.exe",

View File

@ -93,6 +93,16 @@ extern SIG_TRANSMISSION sig_trans; //通讯模式
//绝对值计算 //绝对值计算
#define MY_ABS(pa) ( ( (pa) >= 0 )?( (pa) ):( 0 - (pa) ) ) #define MY_ABS(pa) ( ( (pa) >= 0 )?( (pa) ):( 0 - (pa) ) )
//在 cubeMX 中配置完成之后再返回此处进行更新
#define MUX_STACK_SIZE_WORD 128
#define LVGL_STACK_SIZE_WORD 768
#define MENU_STACK_SIZE_WORD 512
#define RS485_STACK_SIZE_WORD 256
#define HART_STACK_SIZE_WORD 256
#define BLE_STACK_SIZE_WORD 256
#define DEFAULT_STACK_SIZE_WORD 128
#define MONITOR_STACK_SIZE_WORD 128
#define MUX_TASK_PERIOD 50 //多通道输入输出任务周期 #define MUX_TASK_PERIOD 50 //多通道输入输出任务周期
#define LVGL_TASK_PERIOD 5 //LVGL任务周期 #define LVGL_TASK_PERIOD 5 //LVGL任务周期
#define MENU_TASK_PERIOD 300 //显示内容设置周期 #define MENU_TASK_PERIOD 300 //显示内容设置周期
@ -100,7 +110,6 @@ extern SIG_TRANSMISSION sig_trans; //通讯模式
#define HART_TASK_PERIOD 100 //HART任务周期 #define HART_TASK_PERIOD 100 //HART任务周期
#define RS485_TASK_PERIOD MUX_TASK_PERIOD //485任务周期 #define RS485_TASK_PERIOD MUX_TASK_PERIOD //485任务周期
//屏幕显示 //屏幕显示
void screen_run(void); void screen_run(void);

View File

@ -39,7 +39,6 @@ typedef struct
SIG_FUNCTIONS_TYPE typ; //类型 SIG_FUNCTIONS_TYPE typ; //类型
int16_t up; //上限 int16_t up; //上限
int16_t low; //下限 int16_t low; //下限
float32 pv; //当前值
}PHYSICAL_QUANTITY; }PHYSICAL_QUANTITY;
typedef enum typedef enum
@ -90,8 +89,24 @@ typedef enum
typedef struct typedef struct
{ {
uint16_t lvgl_stack_consume; //LVGL栈占用 uint16_t lvgl_stack_consume; //LVGL任务栈占用
uint16_t menu_stack_consume; //menu栈占用 uint16_t menu_stack_consume; //menu任务栈占用
uint16_t mux_stack_consume; //mux任务栈占用
uint16_t rs485_stack_consume; //485任务栈占用
uint16_t hart_stack_consume; //HART任务栈占用
uint16_t ble_stack_consume; //蓝牙任务栈占用
uint16_t default_stack_consume; //默认任务
uint16_t monitor_stack_consume; //状态监控任务
uint16_t lvgl_stack_consume_max; //LVGL任务栈占用峰值
uint16_t menu_stack_consume_max; //menu任务栈占用峰值
uint16_t mux_stack_consume_max; //mux任务栈占用峰值
uint16_t rs485_stack_consume_max; //485任务栈占用峰值
uint16_t hart_stack_consume_max; //HART任务栈占用峰值
uint16_t ble_stack_consume_max; //蓝牙任务栈占用,峰值
uint16_t default_stack_consume_max; //默认任务,峰值
uint16_t monitor_stack_consume_max; //状态监控任务,峰值
uint8_t cpu_consume; //cpu使用率0-100 uint8_t cpu_consume; //cpu使用率0-100
uint8_t mem_consume; //内存使用率0-100 uint8_t mem_consume; //内存使用率0-100
uint8_t mem_frag; //内存碎片占比0-100 uint8_t mem_frag; //内存碎片占比0-100
@ -117,7 +132,7 @@ typedef struct
uint8_t runtime_seconds; //秒 uint8_t runtime_seconds; //秒
uint8_t runtime_minutes; //分钟 uint8_t runtime_minutes; //分钟
uint8_t runtime_hours; //小时 uint8_t runtime_hours; //小时
char runtime_show[16]; //存放运行时间转化得到的字符串 char runtime_show[10]; //存放运行时间转化得到的字符串
uint8_t battery_cnt; //电池计数 uint8_t battery_cnt; //电池计数
uint8_t io_cursor; //当前游标位置, [0000,000], 0~6整数表示7个位置 uint8_t io_cursor; //当前游标位置, [0000,000], 0~6整数表示7个位置
uint8_t io_cursor_prv; //前一时刻的游标位置 uint8_t io_cursor_prv; //前一时刻的游标位置
@ -274,7 +289,7 @@ typedef struct
COLORS item1_page0_color_output; //输出曲线及其图例的颜色 COLORS item1_page0_color_output; //输出曲线及其图例的颜色
//ITEMS_2 //ITEMS_2
char log_time[60][16]; //输入&输出记录,时间戳 char log_time[60][10]; //输入&输出记录,时间戳
float32 input_log_value[60]; //输入记录,实际值 float32 input_log_value[60]; //输入记录,实际值
SIG_FUNCTIONS_TYPE input_log_unit[60]; //输入记录,单位 SIG_FUNCTIONS_TYPE input_log_unit[60]; //输入记录,单位
float32 output_log_value[60]; //输出记录,实际值 float32 output_log_value[60]; //输出记录,实际值

View File

@ -38,26 +38,30 @@ typedef enum
PROGOUT_WAITING = 0, PROGOUT_WAITING = 0,
PROGOUT_START, PROGOUT_START,
PROGOUT_RUNNING, PROGOUT_RUNNING,
PROGOUT_PAUSE,
PROGOUT_END PROGOUT_END
}PROGRAM_OUT_PROCESS; }PROGRAM_OUT_PROCESS;
typedef struct typedef struct
{ {
uint8_t output_unit; uint8_t output_unit; //输出信号的物理量单位mA、V
uint8_t output_mode; uint8_t output_mode; //输出模式,阶跃、三角波
uint8_t circulations; uint8_t circulations; //循环次数1-10、无穷
uint16_t hold_time; uint16_t hold_time; //阶跃保持时间,开始和结束的等待时间
uint8_t start_percent; uint8_t start_percent; //起点百分比
uint8_t end_percent; uint8_t end_percent; //终点百分比
uint8_t step_percent; uint8_t step_percent; //步长百分比
uint8_t rising_percent; uint8_t rising_percent; //三角波爬升占比
uint8_t falling_percent; uint8_t falling_percent; //三角波下降占比
uint16_t period; uint16_t period; //三角波周期
PROGRAM_OUT_PROCESS process; PROGRAM_OUT_PROCESS process; //过程,当前处于哪一步
int16_t out_max; int16_t out_max; //输出物理量的实际值上限
int16_t out_min; int16_t out_min; //输出物理量的实际值下限
uint8_t out_percent; //当前输出百分比 uint8_t out_percent; //当前输出百分比
int progout_tick_flag; //计时标志1定时器计时0暂停计时
int progout_tick; //计时计数,正常情况下不会溢出
}PROGRAM_OUT_DATA; }PROGRAM_OUT_DATA;
extern PROGRAM_OUT_DATA progout_data; extern PROGRAM_OUT_DATA progout_data;

View File

@ -13,8 +13,6 @@ extern int twk_1000ms_flag;
extern int twk_1000ms_cnt; extern int twk_1000ms_cnt;
extern int input_500ms_flag; extern int input_500ms_flag;
extern uint16_t sig2slave_current_tick; extern uint16_t sig2slave_current_tick;
extern uint8_t progout_tick_flag;
extern int progout_tick;
void duty_tim3(void); void duty_tim3(void);
void duty_tim6(void); void duty_tim6(void);

View File

@ -1018,7 +1018,7 @@ void up2down_update(int16_t low, int16_t up)
//数值上下限显示 //数值上下限显示
char str_tep[33]; char str_tep[33];
sprintf(str_tep, "%d/%d", low, up); sprintf(str_tep, "%d~%d", low, up);
lv_label_set_text(guider_ui.screen_main_label_area_IN, str_tep); lv_label_set_text(guider_ui.screen_main_label_area_IN, str_tep);
lv_label_set_text(guider_ui.screen_main_label_area_OUT, str_tep); lv_label_set_text(guider_ui.screen_main_label_area_OUT, str_tep);
} }

View File

@ -689,6 +689,9 @@ void scr_modbus_trx_recover(void)
{ {
//根据当前语言,刷新标题 //根据当前语言,刷新标题
lv_label_set_text(guider_ui.screen_modbus_trx_label_Data, text_pack.modbus_master_trx_item[0]); lv_label_set_text(guider_ui.screen_modbus_trx_label_Data, text_pack.modbus_master_trx_item[0]);
lv_label_set_text(guider_ui.screen_modbus_trx_label_previous, text_pack.modbus_master_trx_item[1]);
lv_label_set_text(guider_ui.screen_modbus_trx_label_set, text_pack.modbus_master_trx_item[2]);
lv_label_set_text(guider_ui.screen_modbus_trx_label_send, text_pack.modbus_master_trx_item[3]);
//清空数据、发送、接收框 //清空数据、发送、接收框
lv_label_set_text(guider_ui.screen_modbus_trx_value_Data,""); lv_label_set_text(guider_ui.screen_modbus_trx_value_Data,"");

View File

@ -53,56 +53,48 @@ void TC_init(void)
TC[0].typ = TC_K; TC[0].typ = TC_K;
TC[0].low = TC_TABLE_TEMP[0][0]; TC[0].low = TC_TABLE_TEMP[0][0];
TC[0].up = TC_TABLE_TEMP[0][10]; TC[0].up = TC_TABLE_TEMP[0][10];
TC[0].pv = 0;
//热电偶S //热电偶S
TC[1].tag = SIG_TC; TC[1].tag = SIG_TC;
TC[1].typ = TC_S; TC[1].typ = TC_S;
TC[1].low = TC_TABLE_TEMP[1][0]; TC[1].low = TC_TABLE_TEMP[1][0];
TC[1].up = TC_TABLE_TEMP[1][10]; TC[1].up = TC_TABLE_TEMP[1][10];
TC[1].pv = 0;
//热电偶N //热电偶N
TC[2].tag = SIG_TC; TC[2].tag = SIG_TC;
TC[2].typ = TC_N; TC[2].typ = TC_N;
TC[2].low = TC_TABLE_TEMP[2][0]; TC[2].low = TC_TABLE_TEMP[2][0];
TC[2].up = TC_TABLE_TEMP[2][10]; TC[2].up = TC_TABLE_TEMP[2][10];
TC[2].pv = 0;
//热电偶B //热电偶B
TC[3].tag = SIG_TC; TC[3].tag = SIG_TC;
TC[3].typ = TC_B; TC[3].typ = TC_B;
TC[3].low = TC_TABLE_TEMP[3][0];; TC[3].low = TC_TABLE_TEMP[3][0];;
TC[3].up = TC_TABLE_TEMP[3][10];; TC[3].up = TC_TABLE_TEMP[3][10];;
TC[3].pv = 0;
//热电偶E //热电偶E
TC[4].tag = SIG_TC; TC[4].tag = SIG_TC;
TC[4].typ = TC_E; TC[4].typ = TC_E;
TC[4].low = TC_TABLE_TEMP[4][0]; TC[4].low = TC_TABLE_TEMP[4][0];
TC[4].up = TC_TABLE_TEMP[4][10]; TC[4].up = TC_TABLE_TEMP[4][10];
TC[4].pv = 0;
//热电偶J //热电偶J
TC[5].tag = SIG_TC; TC[5].tag = SIG_TC;
TC[5].typ = TC_J; TC[5].typ = TC_J;
TC[5].low = TC_TABLE_TEMP[5][0]; TC[5].low = TC_TABLE_TEMP[5][0];
TC[5].up = TC_TABLE_TEMP[5][10]; TC[5].up = TC_TABLE_TEMP[5][10];
TC[5].pv = 0;
//热电偶R //热电偶R
TC[6].tag = SIG_TC; TC[6].tag = SIG_TC;
TC[6].typ = TC_R; TC[6].typ = TC_R;
TC[6].low = TC_TABLE_TEMP[6][0]; TC[6].low = TC_TABLE_TEMP[6][0];
TC[6].up = TC_TABLE_TEMP[6][10]; TC[6].up = TC_TABLE_TEMP[6][10];
TC[6].pv = 0;
//热电偶T //热电偶T
TC[7].tag = SIG_TC; TC[7].tag = SIG_TC;
TC[7].typ = TC_T; TC[7].typ = TC_T;
TC[7].low = TC_TABLE_TEMP[7][0]; TC[7].low = TC_TABLE_TEMP[7][0];
TC[7].up = TC_TABLE_TEMP[7][10]; TC[7].up = TC_TABLE_TEMP[7][10];
TC[7].pv = 0;
} }
//物理量内容初始化 //物理量内容初始化
@ -113,31 +105,26 @@ void physical_quantity_init(void)
VOL[0].typ = VOLTAGE_V; VOL[0].typ = VOLTAGE_V;
VOL[0].low = 0; VOL[0].low = 0;
VOL[0].up = 30; VOL[0].up = 30;
VOL[0].pv = 0;
VOL[1].tag = SIG_VOLTAGE; VOL[1].tag = SIG_VOLTAGE;
VOL[1].typ = VOLTAGE_MV; VOL[1].typ = VOLTAGE_MV;
VOL[1].low = -2500; VOL[1].low = -2500;
VOL[1].up = 2500; VOL[1].up = 2500;
VOL[1].pv = 0;
CUR.tag = SIG_CURRENT; CUR.tag = SIG_CURRENT;
CUR.typ = CURRENT_MA; CUR.typ = CURRENT_MA;
CUR.low = 0; CUR.low = 0;
CUR.up = 25; CUR.up = 25;
CUR.pv = 0;
RES.tag = SIG_RESISTANT; RES.tag = SIG_RESISTANT;
RES.typ = RESISTANT_OHM; RES.typ = RESISTANT_OHM;
RES.low = 0; RES.low = 0;
RES.up = 4000; RES.up = 4000;
RES.pv = 0;
FRE.tag = SIG_FREQUENCE; FRE.tag = SIG_FREQUENCE;
FRE.typ = FREQUENCE_KHZ; FRE.typ = FREQUENCE_KHZ;
FRE.low = 0; FRE.low = 0;
FRE.up = 100; FRE.up = 100;
FRE.pv = 0;
TC_init(); TC_init();
@ -145,7 +132,6 @@ void physical_quantity_init(void)
RTD.typ = RTD_DC; RTD.typ = RTD_DC;
RTD.low = RTD_TABLE_TEMP[0]; RTD.low = RTD_TABLE_TEMP[0];
RTD.up = RTD_TABLE_TEMP[10]; RTD.up = RTD_TABLE_TEMP[10];
RTD.pv = 0;
} }
void screen_run(void) void screen_run(void)
@ -420,23 +406,16 @@ void sig_sv_update(void)
} }
} }
else else
{
//软件设定输出百分比 -> 百分比转化成mux值mux任务-> mux转化为实际值在屏幕上显示
if(menu_data.io_on2off == IO_ON)
{ {
program_out_run(); program_out_run();
set_output( mux2real(mux_signal.data_sv) ); set_output( mux2real(mux_signal.data_sv) );
} }
}
//本地控制的情况下,保持寄存器的值跟随设定值变化 //本地控制的情况下,保持寄存器的值跟随设定值变化
if(get_coil_val(COIL_ADDR_HOLD_SV_CTRL) == 0) if(get_coil_val(COIL_ADDR_HOLD_SV_CTRL) == 0)
{ {
uint32_t mcpy_temp = 0; HoldReg[HOLD_ADDR_MUX_SV_H] = ( (uint32_t)mux2real(mux_signal.data_sv) ) >> 16;
float32 muxpv_temp = mux2real(mux_signal.data_sv); HoldReg[HOLD_ADDR_MUX_SV_L] = ( (uint32_t)mux2real(mux_signal.data_sv) ) & 0x0000FFFF;
memcpy(&mcpy_temp, &muxpv_temp, 4);
HoldReg[HOLD_ADDR_MUX_SV_H] = mcpy_temp >> 16;
HoldReg[HOLD_ADDR_MUX_SV_L] = mcpy_temp & 0x0000FFFF;
} }
//手动输入flt_test拆分成高低位之后重新拼接成flt_test_rev验证前后是否一致 //手动输入flt_test拆分成高低位之后重新拼接成flt_test_rev验证前后是否一致

View File

@ -209,16 +209,26 @@ void key_functions_main(void)
if(menu_data.io_on2off == IO_ON) if(menu_data.io_on2off == IO_ON)
{ {
menu_data.io_on2off = IO_OFF; menu_data.io_on2off = IO_OFF;
set_coil_val(COIL_ADDR_ON_OFF, IO_OFF);
//编程输出时暂停计数 //编程输出时暂停计数
if(current_operation == PROG_OUT_PROCESSING) progout_tick_flag = 0; if(progout_data.process == PROGOUT_RUNNING)
{
progout_data.process = PROGOUT_PAUSE;
progout_data.progout_tick_flag = 0;
}
} }
else else
{ {
menu_data.io_on2off = IO_ON; menu_data.io_on2off = IO_ON;
set_coil_val(COIL_ADDR_ON_OFF, IO_ON);
//编程输出时继续计数 //编程输出时继续计数
if(current_operation == PROG_OUT_PROCESSING) progout_tick_flag = 1; if(progout_data.process == PROGOUT_PAUSE)
{
progout_data.process = PROGOUT_RUNNING;
progout_data.progout_tick_flag = 1;
}
} }
io_on2off_status(); //更新ON/OFF/IN/OUT状态指示 io_on2off_status(); //更新ON/OFF/IN/OUT状态指示
@ -398,8 +408,8 @@ void key_functions_main(void)
if(current_operation == PROG_OUT_PROCESSING) if(current_operation == PROG_OUT_PROCESSING)
{ {
progout_data.process = PROGOUT_END; progout_data.process = PROGOUT_END;
progout_tick_flag = 0; progout_data.progout_tick_flag = 0;
progout_tick = 0; progout_data.progout_tick = 2500;
} }
} }
break; break;

View File

@ -1013,8 +1013,6 @@ void key_functions_setting(void)
//隐藏设置界面对象 //隐藏设置界面对象
lv_obj_add_flag(guider_ui.screen_setting, LV_OBJ_FLAG_HIDDEN); lv_obj_add_flag(guider_ui.screen_setting, LV_OBJ_FLAG_HIDDEN);
menu_data.scr_now = SCREEN_MAIN;
//当前操作切换至“编程输出执行”,按键配置同步更新 //当前操作切换至“编程输出执行”,按键配置同步更新
current_operation = PROG_OUT_PROCESSING; current_operation = PROG_OUT_PROCESSING;
key_config_update(current_operation); key_config_update(current_operation);
@ -1049,6 +1047,10 @@ void key_functions_setting(void)
//切换至本地控制 //切换至本地控制
set_coil_val(COIL_ADDR_HOLD_SV_CTRL, 0); set_coil_val(COIL_ADDR_HOLD_SV_CTRL, 0);
//当前页面为主界面
menu_data.scr_now = SCREEN_MAIN;
set_coil_val(COIL_ADDR_SCREEN_SWITCH, 0);
} }
} }
break; break;

View File

@ -249,18 +249,20 @@ void set_item1_value(ITEM_CONTENTS con, int8_t step)
case SAMPLE_INTERVAL: case SAMPLE_INTERVAL:
{ {
tabdata.item1_page0_sample_interval += step * 100; tabdata.item1_page0_sample_interval += step * 100;
if( tabdata.item1_page0_sample_interval > SAMPLE_INTERVAL_MAX ) tabdata.item1_page0_sample_interval = SAMPLE_INTERVAL_MAX; if( tabdata.item1_page0_sample_interval > SAMPLE_INTERVAL_MAX ) tabdata.item1_page0_sample_interval = SAMPLE_INTERVAL_MAX;
if( tabdata.item1_page0_sample_interval < MENU_TASK_PERIOD ) tabdata.item1_page0_sample_interval = MENU_TASK_PERIOD; if( tabdata.item1_page0_sample_interval < MENU_TASK_PERIOD ) tabdata.item1_page0_sample_interval = MENU_TASK_PERIOD;
HoldReg[HOLD_ADDR_SAMPLE_INTERVAL] = tabdata.item1_page0_sample_interval;
} }
break; break;
case PLOT_NUM: case PLOT_NUM:
{ {
tabdata.item1_page0_plot_num += step; tabdata.item1_page0_plot_num += step;
if( tabdata.item1_page0_plot_num > PLOT_NUM_MAX ) tabdata.item1_page0_plot_num = PLOT_NUM_MAX; if( tabdata.item1_page0_plot_num > PLOT_NUM_MAX ) tabdata.item1_page0_plot_num = PLOT_NUM_MAX;
if( tabdata.item1_page0_plot_num < PLOT_NUM_MIN ) tabdata.item1_page0_plot_num = PLOT_NUM_MIN; if( tabdata.item1_page0_plot_num < PLOT_NUM_MIN ) tabdata.item1_page0_plot_num = PLOT_NUM_MIN;
HoldReg[HOLD_ADDR_PLOT_COUNTS] = 0x00FF & tabdata.item1_page0_plot_num;
} }
break; break;
@ -285,6 +287,7 @@ void set_item1_value(ITEM_CONTENTS con, int8_t step)
if( val_temp < val_start ) val_temp = val_end; if( val_temp < val_start ) val_temp = val_end;
tabdata.item1_page0_color_input = (COLORS)val_temp; tabdata.item1_page0_color_input = (COLORS)val_temp;
HoldReg[HOLD_ADDR_INPUT_COLOR] = 0x00FF & (uint8_t)tabdata.item1_page0_color_input;
} }
break; break;
@ -309,6 +312,7 @@ void set_item1_value(ITEM_CONTENTS con, int8_t step)
if( val_temp < val_start ) val_temp = val_end; if( val_temp < val_start ) val_temp = val_end;
tabdata.item1_page0_color_output = (COLORS)val_temp; tabdata.item1_page0_color_output = (COLORS)val_temp;
HoldReg[HOLD_ADDR_OUTPUT_COLOR] = 0x00FF & (uint8_t)tabdata.item1_page0_color_output;
} }
break; break;
@ -381,6 +385,7 @@ void set_item3_value(ITEM_CONTENTS con, int8_t step)
if( val_temp < val_start ) val_temp = val_end; if( val_temp < val_start ) val_temp = val_end;
tabdata.item3_page0_language = (LANGUAGES)val_temp; tabdata.item3_page0_language = (LANGUAGES)val_temp;
HoldReg[HOLD_ADDR_LANGUAGE] = 0x00FF & (uint8_t)tabdata.item3_page0_language;
if(tabdata.item3_page0_saveflag == 2) tabdata.item3_page0_saveflag = 0; if(tabdata.item3_page0_saveflag == 2) tabdata.item3_page0_saveflag = 0;
if(tabdata.item3_page0_resetflag == 2) tabdata.item3_page0_resetflag = 0; if(tabdata.item3_page0_resetflag == 2) tabdata.item3_page0_resetflag = 0;

View File

@ -18,6 +18,9 @@ void program_out_init(void)
progout_data.rising_percent = 100; progout_data.rising_percent = 100;
progout_data.falling_percent = 0; progout_data.falling_percent = 0;
progout_data.period = 5000; progout_data.period = 5000;
progout_data.process = PROGOUT_WAITING;
progout_data.progout_tick = 0;
progout_data.progout_tick_flag = 0;
} }
void program_out_config1(void) void program_out_config1(void)
@ -567,11 +570,11 @@ void program_out_step(void)
{ {
case PROGOUT_START: case PROGOUT_START:
{ {
if( progout_tick_flag == 0 ) if( progout_data.progout_tick_flag == 0 )
{ {
//计时开始 //计时开始
progout_tick_flag = 1; progout_data.progout_tick_flag = 1;
progout_tick = 0; progout_data.progout_tick = 0;
progout_data.out_percent = progout_data.start_percent; progout_data.out_percent = progout_data.start_percent;
percent2val_out(progout_data.out_percent); percent2val_out(progout_data.out_percent);
@ -580,11 +583,11 @@ void program_out_step(void)
else else
{ {
//到达起点%后等待一段时间 //到达起点%后等待一段时间
if(progout_tick >= 3000) if(progout_data.progout_tick >= 3000)
{ {
//计时结束 //计时结束
progout_tick_flag = 0; progout_data.progout_tick_flag = 0;
progout_tick = 0; progout_data.progout_tick = 0;
progout_data.process = PROGOUT_RUNNING; progout_data.process = PROGOUT_RUNNING;
} }
@ -598,12 +601,15 @@ void program_out_step(void)
} }
break; break;
case PROGOUT_PAUSE:
{}
break;
case PROGOUT_END: case PROGOUT_END:
{ {
if( progout_tick_flag == 0 ) if( progout_data.progout_tick_flag == 0 )
{ {
progout_tick_flag = 1; progout_data.progout_tick_flag = 1;
progout_tick = 0;
//相关参数清零 //相关参数清零
step_dir = 0; step_dir = 0;
@ -612,11 +618,11 @@ void program_out_step(void)
else else
{ {
//等待3秒后返回config2界面 //等待3秒后返回config2界面
if(progout_tick >= 3000) if(progout_data.progout_tick >= 3000)
{ {
//计时结束 //计时结束
progout_tick_flag = 0; progout_data.progout_tick_flag = 0;
progout_tick = 0; progout_data.progout_tick = 0;
//输出关闭、清零 //输出关闭、清零
menu_data.io_on2off = IO_OFF; menu_data.io_on2off = IO_OFF;
@ -632,6 +638,7 @@ void program_out_step(void)
//当前界面为详细设置菜单切换至ITEM2 //当前界面为详细设置菜单切换至ITEM2
menu_data.scr_now = SCREEN_SETTING; menu_data.scr_now = SCREEN_SETTING;
set_coil_val(COIL_ADDR_SCREEN_SWITCH, 1);
tabdata.item_cursor_prv = ITEM_0; tabdata.item_cursor_prv = ITEM_0;
tabdata.item_cursor = ITEM_2; tabdata.item_cursor = ITEM_2;
setting_items_check(tabdata.item_cursor, tabdata.item_cursor_prv); setting_items_check(tabdata.item_cursor, tabdata.item_cursor_prv);
@ -654,11 +661,11 @@ void program_out_step(void)
void running_process_step(void) void running_process_step(void)
{ {
if(progout_tick_flag == 0) if(progout_data.progout_tick_flag == 0)
{ {
//计时开始 //计时开始
progout_tick_flag = 1; progout_data.progout_tick_flag = 1;
progout_tick = 0; progout_data.progout_tick = 0;
progout_data.out_percent += step_dir * progout_data.step_percent; progout_data.out_percent += step_dir * progout_data.step_percent;
@ -675,8 +682,8 @@ void running_process_step(void)
if(cir_times >= progout_data.circulations) if(cir_times >= progout_data.circulations)
{ {
progout_data.process = PROGOUT_END; progout_data.process = PROGOUT_END;
progout_tick_flag = 0; progout_data.progout_tick_flag = 0;
progout_tick = 0; progout_data.progout_tick = 0;
} }
} }
else else
@ -695,11 +702,11 @@ void running_process_step(void)
} }
else else
{ {
if( progout_tick >= progout_data.hold_time ) if( progout_data.progout_tick >= progout_data.hold_time )
{ {
//计时结束 //计时结束
progout_tick_flag = 0; progout_data.progout_tick_flag = 0;
progout_tick = 0; progout_data.progout_tick = 0;
} }
} }
} }
@ -714,11 +721,11 @@ void program_out_triangle(void)
{ {
case PROGOUT_START: case PROGOUT_START:
{ {
if( progout_tick_flag == 0 ) if( progout_data.progout_tick_flag == 0 )
{ {
//计时开始 //计时开始
progout_tick_flag = 1; progout_data.progout_tick_flag = 1;
progout_tick = 0; progout_data.progout_tick = 0;
progout_data.out_percent = progout_data.start_percent; progout_data.out_percent = progout_data.start_percent;
percent2val_out(progout_data.out_percent); percent2val_out(progout_data.out_percent);
@ -746,11 +753,11 @@ void program_out_triangle(void)
else else
{ {
//到达起点%后等待一段时间 //到达起点%后等待一段时间
if(progout_tick >= 3000) if(progout_data.progout_tick >= 3000)
{ {
//计时结束 //计时结束
progout_tick_flag = 0; progout_data.progout_tick_flag = 0;
progout_tick = 0; progout_data.progout_tick = 0;
progout_data.process = PROGOUT_RUNNING; progout_data.process = PROGOUT_RUNNING;
} }
@ -764,12 +771,15 @@ void program_out_triangle(void)
} }
break; break;
case PROGOUT_PAUSE:
{}
break;
case PROGOUT_END: case PROGOUT_END:
{ {
if( progout_tick_flag == 0 ) if( progout_data.progout_tick_flag == 0 )
{ {
progout_tick_flag = 1; progout_data.progout_tick_flag = 1;
progout_tick = 0;
//相关参数清零 //相关参数清零
step_dir = 0; step_dir = 0;
@ -782,11 +792,11 @@ void program_out_triangle(void)
else else
{ {
//等待3秒后返回config2界面 //等待3秒后返回config2界面
if(progout_tick >= 3000) if(progout_data.progout_tick >= 3000)
{ {
//计时结束 //计时结束
progout_tick_flag = 0; progout_data.progout_tick_flag = 0;
progout_tick = 0; progout_data.progout_tick = 0;
//输出关闭、清零 //输出关闭、清零
menu_data.io_on2off = IO_OFF; menu_data.io_on2off = IO_OFF;
@ -801,6 +811,7 @@ void program_out_triangle(void)
lv_obj_add_flag(guider_ui.screen_main, LV_OBJ_FLAG_HIDDEN); lv_obj_add_flag(guider_ui.screen_main, LV_OBJ_FLAG_HIDDEN);
menu_data.scr_now = SCREEN_SETTING; //当前界面为详细设置菜单 menu_data.scr_now = SCREEN_SETTING; //当前界面为详细设置菜单
set_coil_val(COIL_ADDR_SCREEN_SWITCH, 1);
tabdata.item_cursor_prv = ITEM_0; tabdata.item_cursor_prv = ITEM_0;
tabdata.item_cursor = ITEM_2; tabdata.item_cursor = ITEM_2;
@ -824,11 +835,11 @@ void program_out_triangle(void)
void running_process_triangle(void) void running_process_triangle(void)
{ {
if( progout_tick_flag == 0 ) if( progout_data.progout_tick_flag == 0 )
{ {
//计时开始 //计时开始
progout_tick_flag = 1; progout_data.progout_tick_flag = 1;
progout_tick = 0; progout_data.progout_tick = 0;
if(step_dir == 1) if(step_dir == 1)
{ {
@ -851,7 +862,12 @@ void running_process_triangle(void)
if( progout_data.circulations < 11 ) if( progout_data.circulations < 11 )
{ {
//循环次数达到目标后,跳转至终止步骤 //循环次数达到目标后,跳转至终止步骤
if(cir_times >= progout_data.circulations) progout_data.process = PROGOUT_END; if(cir_times >= progout_data.circulations)
{
progout_data.process = PROGOUT_END;
progout_data.progout_tick_flag = 0;
progout_data.progout_tick = 0;
}
} }
else else
{ {
@ -864,11 +880,11 @@ void running_process_triangle(void)
} }
else else
{ {
if(progout_tick >= tri_interval) if(progout_data.progout_tick >= tri_interval)
{ {
//计时结束 //计时结束
progout_tick_flag = 0; progout_data.progout_tick_flag = 0;
progout_tick = 0; progout_data.progout_tick = 0;
} }
} }
} }

View File

@ -11,8 +11,6 @@ int twk_1000ms_cnt = 0;
int input_500ms_flag = 0; int input_500ms_flag = 0;
int input_500ms_cnt = 0; int input_500ms_cnt = 0;
uint16_t sig2slave_current_tick = 0; uint16_t sig2slave_current_tick = 0;
uint8_t progout_tick_flag = 0;
int progout_tick = 0;
void duty_tim3(void) void duty_tim3(void)
{ {
@ -58,9 +56,9 @@ void duty_tim6(void)
input_500ms_flag = 1; input_500ms_flag = 1;
} }
if(progout_tick_flag == 1) if(progout_data.progout_tick_flag == 1)
{ {
progout_tick++; progout_data.progout_tick++;
} }
//发送完成 或者 已经接收到一部分数据之后开始计时 //发送完成 或者 已经接收到一部分数据之后开始计时
@ -106,8 +104,7 @@ void HAL_UART_TxCpltCallback(UART_HandleTypeDef *huart)
//PC--->SIG--->HART重新开启485的DMA //PC--->SIG--->HART重新开启485的DMA
HAL_UART_Receive_DMA(&huart2, scom2_rs485.rx_buff, BUFFER_SIZE); HAL_UART_Receive_DMA(&huart2, scom2_rs485.rx_buff, BUFFER_SIZE);
} }
else if(huart == &huart2)
if(huart == &huart2)
{ {
memset(scom2_rs485.tx_buff, 0, scom2_rs485.tx_len); memset(scom2_rs485.tx_buff, 0, scom2_rs485.tx_len);
scom2_rs485.tx_len = 0; scom2_rs485.tx_len = 0;
@ -145,8 +142,7 @@ void HAL_UART_TxCpltCallback(UART_HandleTypeDef *huart)
break; break;
} }
} }
else if(huart == &huart6)
if(huart == &huart6)
{ {
memset(scom6_ble.tx_buff, 0, scom6_ble.tx_len); memset(scom6_ble.tx_buff, 0, scom6_ble.tx_len);
scom6_ble.tx_len = 0; scom6_ble.tx_len = 0;

View File

@ -14,43 +14,6 @@ void ble_send(UART_HandleTypeDef *huart, uint8_t *data)
usart_printf(huart, (char *)data); usart_printf(huart, (char *)data);
} }
void transparent_bluetooth(st_scom *scom)
{
if (scom != &scom6_ble) return;
//来自蓝牙设备的数据是否接收完成
if (scom->rx_flag == TRUE)
{
scom->rx_flag = FALSE;
//将接收到的数据存入485的tx准备发送至上位机
memcpy(scom2_rs485.tx_buff, scom->rx_buff, sizeof(scom->rx_buff));
scom2_rs485.tx_len = scom->rx_len;
scom2_rs485.tx_flag = TRUE;
//清空缓存区,等待新的数据
memset(scom->rx_buff, 0, sizeof(scom->rx_buff));
scom->rx_len = 0;
}
//来自上位机的数据是否准备完毕
if (scom->tx_flag == TRUE)
{
scom->tx_flag = FALSE;
//将tx中的数据发送至蓝牙设备
ble_send(&huart6, scom6_ble.tx_buff);
//清空缓存区,等待新的数据
memset(scom->tx_buff, 0, sizeof(scom->tx_buff));
scom->tx_len = 0;
xTaskResumeFromISR(task_lcdHandle);
xTaskResumeFromISR(task_menuHandle);
screen_suspend_flag = 0;
}
}
int8_t write_ble_id(char *id) int8_t write_ble_id(char *id)
{ {
if(!id) return -1; if(!id) return -1;

View File

@ -53,53 +53,4 @@ void hart_communicate(st_scom *scom)
} }
} }
//DEVICE <---SIG---> PC
//将来自设备的HART数据装载至com485_tx将comhart_tx的HART数据发送至设备
// void transparent_hart(st_scom *scom)
// {
// if (scom != &scom1_hart) return;
// HART_RTS(RTS_OFF);
// //来自HART设备的数据是否接收完成
// if (scom->rx_flag == TRUE)
// {
// scom->rx_flag = FALSE;
// //接收到的数据是否符合HART数据报符合则写入485的tx准备发送至上位机
// if ((scom->rx_buff[0] == 0xff) && (scom->rx_buff[1] == 0xff) && (scom->rx_buff[scom->rx_len - 1] == 0xAA))
// {
// //SIG -> PC
// memcpy(scom2_rs485.tx_buff, scom->rx_buff, sizeof(scom->rx_buff));
// scom2_rs485.tx_len = scom->rx_len;
// scom2_rs485.tx_flag = TRUE;
// }
// //清空缓存区,等待新的数据
// memset(scom->rx_buff, 0, sizeof(scom->rx_buff));
// scom->rx_len = 0;
// }
// //来自上位机的数据是否准备完毕
// if (scom->tx_flag == TRUE)
// {
// scom->tx_flag = FALSE;
// HART_RTS(RTS_ON);
// vTaskDelay(15);
// //将tx中的数据发送至HART设备
// hart_send(&huart1, scom->tx_buff);
// HART_RTS(RTS_OFF);
// //清空缓存区,等待新的数据
// memset(scom->tx_buff, 0, sizeof(scom->tx_buff));
// scom->tx_len = 0;
// xTaskResumeFromISR(task_lcdHandle);
// xTaskResumeFromISR(task_menuHandle);
// screen_suspend_flag = 0;
// }
// }

View File

@ -11,6 +11,7 @@
#define TX_NONE 0x00 //没有需要发送的数据 #define TX_NONE 0x00 //没有需要发送的数据
#define TX_WAITING 0x01 //数据准备完成,等待发送 #define TX_WAITING 0x01 //数据准备完成,等待发送
#define TX_OK 0x02 //发送完成 #define TX_OK 0x02 //发送完成
#define RX_NONE 0x00 //没有接收到数据 #define RX_NONE 0x00 //没有接收到数据
#define RX_WAITING 0x01 //等待接收 #define RX_WAITING 0x01 //等待接收
#define RX_OK 0x02 //接收完成 #define RX_OK 0x02 //接收完成

View File

@ -231,10 +231,12 @@ void trans_modbus_sig2slave(void)
//记录第一次接收到的数据长度 //记录第一次接收到的数据长度
sig2slave_data_length_total = scom2_rs485.rx_len; sig2slave_data_length_total = scom2_rs485.rx_len;
if(scom2_rs485.rx_len < BUFFER_SIZE)
{
//修改剩余buff长度继续接收 //修改剩余buff长度继续接收
buffer_size_temp -= scom2_rs485.rx_len; buffer_size_temp -= scom2_rs485.rx_len;
HAL_UART_Receive_DMA(&huart2, scom2_rs485.rx_buff + sig2slave_data_length_total, buffer_size_temp); HAL_UART_Receive_DMA(&huart2, scom2_rs485.rx_buff + sig2slave_data_length_total, buffer_size_temp);
}
sig2slave_step++; sig2slave_step++;
} }
break; break;
@ -306,51 +308,49 @@ uint8_t trans_enable_check(st_scom *scom)
{ {
result = 1; result = 1;
sig_trans = TRANS_HART_TO_PC; sig_trans = TRANS_HART_TO_PC;
}
}
if( scom == &scom6_ble ) return result;
}
}
else if( scom == &scom6_ble )
{ {
if(tabdata.bluetooth_enable) if(tabdata.bluetooth_enable)
{ {
result = 1; result = 1;
sig_trans = TRANS_BLE_TO_PC; sig_trans = TRANS_BLE_TO_PC;
}
}
if( scom == &scom2_rs485 ) return result;
}
}
else if( scom == &scom2_rs485 )
{ {
if(tabdata.hart_enable) if(tabdata.hart_enable)
{ {
result = 1; result = 1;
sig_trans = TRANS_PC_TO_HART; sig_trans = TRANS_PC_TO_HART;
return result;
} }
else if(tabdata.bluetooth_enable) else if(tabdata.bluetooth_enable)
{ {
result = 1; result = 1;
sig_trans = TRANS_PC_TO_BLE; sig_trans = TRANS_PC_TO_BLE;
return result;
} }
else if(tabdata.modbus_enable) else if(tabdata.modbus_enable)
{ {
result = 1; if(tabdata.modbus_type == SIG_SLAVE)
switch (tabdata.modbus_type)
{
case SIG_SLAVE:
{ {
sig_trans = TRANS_MODBUS_PC_TO_SIG; sig_trans = TRANS_MODBUS_PC_TO_SIG;
} }
break; else
case SIG_MASTER:
{ {
sig_trans = TRANS_MODBUS_SIG_TO_SLAVE; sig_trans = TRANS_MODBUS_SIG_TO_SLAVE;
} }
break; result = 1;
default: return result;
break;
}
} }
} }

View File

@ -114,6 +114,9 @@ void coil_deal_light(void)
{ {
LIGHT_OFF; LIGHT_OFF;
} }
//如果当前页面存在该内容,则更新文本
if( (menu_data.scr_now == SCREEN_SETTING)&&(tabdata.item_cursor == ITEM_3) ) set_item3_text(LIGHT_STATUS);
} }
} }
@ -217,40 +220,53 @@ void modbus_reg_update_dis(void)
//保持寄存器,读写 //保持寄存器,读写
void modbus_reg_update_hold(void) void modbus_reg_update_hold(void)
{ {
//保持寄存器,处理工作模式的修改事件
hold_deal_set_work_mode(); hold_deal_set_work_mode();
//保持寄存器处理mux输出设定值的修改事件
hold_deal_muxsv(); hold_deal_muxsv();
//保持寄存器,量程类型选择
hold_deal_range_type(); hold_deal_range_type();
//保持寄存器,处理量程上限的修改事件
hold_deal_range_max(); hold_deal_range_max();
//保持寄存器,处理量程下限的修改事件
hold_deal_range_min(); hold_deal_range_min();
//保持寄存器,处理采样间隔修改事件
hold_deal_sample_interval(); hold_deal_sample_interval();
//保持寄存器,处理描点数量的修改事件
hold_deal_plot_counts(); hold_deal_plot_counts();
//保持寄存器,处理输入曲线&图例颜色修改事件
hold_deal_color_input(); hold_deal_color_input();
//保持寄存器,处理输出曲线&图例颜色修改事件
hold_deal_color_output(); hold_deal_color_output();
//保持寄存器,处理语言选择事件
hold_deal_language_select(); hold_deal_language_select();
} }
void hold_deal_set_work_mode(void) void hold_deal_set_work_mode(void)
{ {
//计算当前工作模式的对应编码参照Modbus寄存器配置表excel文件
uint16_t work_mode_pv = (menu_data.io_mode == IO_INPUT)*( (uint16_t)menu_data.input_mode_type + 1 ) + \ uint16_t work_mode_pv = (menu_data.io_mode == IO_INPUT)*( (uint16_t)menu_data.input_mode_type + 1 ) + \
(menu_data.io_mode == IO_OUTPUT)*( (uint16_t)menu_data.output_mode_type + 15 ); (menu_data.io_mode == IO_OUTPUT)*( (uint16_t)menu_data.output_mode_type + 15 );
//工作模式符合编码的情况下,发生改变才执行以下操作 //工作模式符合编码的情况下,发生改变才执行以下操作
if( (HoldReg[HOLD_ADDR_SET_WORK_MODE] != work_mode_pv)&&(0 < HoldReg[HOLD_ADDR_SET_WORK_MODE])&&(HoldReg[HOLD_ADDR_SET_WORK_MODE] <= 28) ) if( (HoldReg[HOLD_ADDR_SET_WORK_MODE] != work_mode_pv)&&(0 < HoldReg[HOLD_ADDR_SET_WORK_MODE])&&(HoldReg[HOLD_ADDR_SET_WORK_MODE] <= 28) )
{ {
//只有在主界面才接修改 //只有在主界面才接修改
if(menu_data.scr_now == SCREEN_MAIN) if(menu_data.scr_now == SCREEN_MAIN)
{ {
SIG_FUNCTIONS iom; SIG_FUNCTIONS iom;
SIG_FUNCTIONS_TYPE iomt; SIG_FUNCTIONS_TYPE iomt;
//根据编码值倒推工作模式与工作模式的类型
iomt = (SIG_FUNCTIONS_TYPE)( HoldReg[HOLD_ADDR_SET_WORK_MODE] - 1 - 14 * (HoldReg[HOLD_ADDR_SET_WORK_MODE] > 14) ); iomt = (SIG_FUNCTIONS_TYPE)( HoldReg[HOLD_ADDR_SET_WORK_MODE] - 1 - 14 * (HoldReg[HOLD_ADDR_SET_WORK_MODE] > 14) );
switch (iomt) switch (iomt)
{ {
@ -334,16 +350,17 @@ void hold_deal_muxsv(void)
} }
int16_t rg_max = 0, rg_min = 0; int16_t rg_max = 0, rg_min = 0;
uint16_t range_max_prv = 0, range_min_prv = 0;
uint16_t phyunit_prv = 0; uint16_t phyunit_prv = 0;
uint8_t *p8low = 0, *p8up = 0; uint8_t *p8low = 0, *p8up = 0, *p8low_prv = 0, *p8up_prv = 0;
int16_t *p16low = 0, *p16up = 0; int16_t *p16low = 0, *p16up = 0, *p16low_prv = 0, *p16up_prv = 0;
void hold_deal_range_type(void) void hold_deal_range_type(void)
{ {
//发生变化时才执行以下操作 //发生变化时才执行以下操作
if( HoldReg[HOLD_ADDR_PHY_UNIT] == phyunit_prv ) return; if( HoldReg[HOLD_ADDR_PHY_UNIT] == phyunit_prv ) return;
phyunit_prv = HoldReg[HOLD_ADDR_PHY_UNIT]; phyunit_prv = HoldReg[HOLD_ADDR_PHY_UNIT];
if( HoldReg[HOLD_ADDR_PHY_UNIT] == 0 ) return; range_max_prv = 0;
range_min_prv = 0;
//选择指定物理量之后,更新上限和下限的寄存器值 //选择指定物理量之后,更新上限和下限的寄存器值
switch (HoldReg[HOLD_ADDR_PHY_UNIT]) switch (HoldReg[HOLD_ADDR_PHY_UNIT])
@ -471,12 +488,24 @@ void hold_deal_range_type(void)
} }
} }
uint16_t range_max_prv = 0;
void hold_deal_range_max(void) void hold_deal_range_max(void)
{ {
//发生改变才执行 //发生改变才执行(只需判断是否变化,不用处理符号)
if(range_max_prv == HoldReg[HOLD_ADDR_PHY_UP]) return; if(range_max_prv == HoldReg[HOLD_ADDR_PHY_UP])
{
//处理 当前选中的物理量在本地进行了修改 的情况
if(*p8up != *p8up_prv)
{
*p8up_prv = *p8up;
HoldReg[HOLD_ADDR_PHY_UP] = 0x00FF & (*p8up);
}
else if(*p16up != *p16up_prv)
{
*p16up_prv = *p16up;
memcpy(HoldReg + HOLD_ADDR_PHY_UP, p16up, 2);
}
return;
}
range_max_prv = HoldReg[HOLD_ADDR_PHY_UP]; range_max_prv = HoldReg[HOLD_ADDR_PHY_UP];
//数据类型不同电流mA(0-25)和频率KHz(0-100)的数据类型时uint8其他都是int16 //数据类型不同电流mA(0-25)和频率KHz(0-100)的数据类型时uint8其他都是int16
@ -486,10 +515,10 @@ void hold_deal_range_max(void)
if( (!p8up)|(!p8low) ) return; if( (!p8up)|(!p8low) ) return;
uint8_t hold_temp8 = 0x00FF & HoldReg[HOLD_ADDR_PHY_UP]; uint8_t hold_temp8 = 0x00FF & HoldReg[HOLD_ADDR_PHY_UP];
if( (*p8low <= hold_temp8)&&(hold_temp8 <= (uint8_t)rg_max) ) if( (*p8low <= hold_temp8)&&(hold_temp8 <= (uint8_t)rg_max) )
{ {
*p8up = hold_temp8; *p8up = hold_temp8;
*p8up_prv = *p8up;
if(menu_data.scr_now == SCREEN_MAIN) if(menu_data.scr_now == SCREEN_MAIN)
{ {
@ -499,6 +528,10 @@ void hold_deal_range_max(void)
up2down_update(*p8low, *p8up); up2down_update(*p8low, *p8up);
} }
} }
else if(menu_data.scr_now == SCREEN_SETTING)
{
setting_items_page(ITEM_0, 1);
}
} }
else else
{ {
@ -516,6 +549,7 @@ void hold_deal_range_max(void)
if( (*p16low <= hold_temp16)&&(hold_temp16 <= rg_max) ) if( (*p16low <= hold_temp16)&&(hold_temp16 <= rg_max) )
{ {
*p16up = hold_temp16; *p16up = hold_temp16;
*p16up_prv = *p16up;
if(menu_data.scr_now == SCREEN_MAIN) if(menu_data.scr_now == SCREEN_MAIN)
{ {
@ -525,6 +559,10 @@ void hold_deal_range_max(void)
up2down_update(*p16low, *p16up); up2down_update(*p16low, *p16up);
} }
} }
else if(menu_data.scr_now == SCREEN_SETTING)
{
setting_items_page(ITEM_0, 1);
}
} }
else else
{ {
@ -534,12 +572,24 @@ void hold_deal_range_max(void)
} }
} }
uint16_t range_min_prv = 0;
void hold_deal_range_min(void) void hold_deal_range_min(void)
{ {
//与hold_deal_range_max相同 //发生改变才执行(只需判断是否变化,不用处理符号)
if(range_min_prv == HoldReg[HOLD_ADDR_PHY_LOW]) return; if(range_min_prv == HoldReg[HOLD_ADDR_PHY_LOW])
{
//处理 当前选中的物理量在本地进行了修改 的情况
if(*p8low != *p8low_prv)
{
*p8low_prv = *p8low;
HoldReg[HOLD_ADDR_PHY_LOW] = 0x00FF & (*p8low);
}
else if(*p16low != *p16low_prv)
{
*p16low_prv = *p16low;
memcpy(HoldReg + HOLD_ADDR_PHY_LOW, p16low, 2);
}
return;
}
range_min_prv = HoldReg[HOLD_ADDR_PHY_LOW]; range_min_prv = HoldReg[HOLD_ADDR_PHY_LOW];
if( (HoldReg[HOLD_ADDR_PHY_UNIT] == 1)|(HoldReg[HOLD_ADDR_PHY_UNIT] == 5) ) if( (HoldReg[HOLD_ADDR_PHY_UNIT] == 1)|(HoldReg[HOLD_ADDR_PHY_UNIT] == 5) )
@ -547,11 +597,9 @@ void hold_deal_range_min(void)
if( (!p8up)|(!p8low) ) return; if( (!p8up)|(!p8low) ) return;
uint8_t hold_temp8 = 0x00FF & HoldReg[HOLD_ADDR_PHY_LOW]; uint8_t hold_temp8 = 0x00FF & HoldReg[HOLD_ADDR_PHY_LOW];
if( ((uint8_t)rg_min <= hold_temp8)&&(hold_temp8 <= *p8up) ) if( ((uint8_t)rg_min <= hold_temp8)&&(hold_temp8 <= *p8up) )
{ {
*p8low = hold_temp8; *p8low = hold_temp8;
if(menu_data.scr_now == SCREEN_MAIN) if(menu_data.scr_now == SCREEN_MAIN)
{ {
SIG_FUNCTIONS_TYPE typ = (SIG_FUNCTIONS_TYPE)(menu_data.input_mode_type*(!menu_data.io_mode) + menu_data.output_mode_type*menu_data.io_mode); SIG_FUNCTIONS_TYPE typ = (SIG_FUNCTIONS_TYPE)(menu_data.input_mode_type*(!menu_data.io_mode) + menu_data.output_mode_type*menu_data.io_mode);
@ -560,6 +608,10 @@ void hold_deal_range_min(void)
up2down_update(*p8low, *p8up); up2down_update(*p8low, *p8up);
} }
} }
else if(menu_data.scr_now == SCREEN_SETTING)
{
setting_items_page(ITEM_0, 1);
}
} }
else else
{ {
@ -586,6 +638,10 @@ void hold_deal_range_min(void)
up2down_update(*p16low, *p16up); up2down_update(*p16low, *p16up);
} }
} }
else if(menu_data.scr_now == SCREEN_SETTING)
{
setting_items_page(ITEM_0, 1);
}
} }
else else
{ {
@ -603,6 +659,8 @@ void hold_deal_sample_interval(void)
if( (MENU_TASK_PERIOD <= HoldReg[HOLD_ADDR_SAMPLE_INTERVAL])&&(HoldReg[HOLD_ADDR_SAMPLE_INTERVAL] <= SAMPLE_INTERVAL_MAX) ) if( (MENU_TASK_PERIOD <= HoldReg[HOLD_ADDR_SAMPLE_INTERVAL])&&(HoldReg[HOLD_ADDR_SAMPLE_INTERVAL] <= SAMPLE_INTERVAL_MAX) )
{ {
tabdata.item1_page0_sample_interval = HoldReg[HOLD_ADDR_SAMPLE_INTERVAL]; tabdata.item1_page0_sample_interval = HoldReg[HOLD_ADDR_SAMPLE_INTERVAL];
if( (menu_data.scr_now == SCREEN_SETTING)&&(tabdata.item_cursor == ITEM_1) ) set_item1_text(SAMPLE_INTERVAL);
} }
else else
{ {
@ -628,6 +686,10 @@ void hold_deal_plot_counts(void)
pltdata.y_pri_value = 0; pltdata.y_pri_value = 0;
pltdata.y_scd_value = 0; pltdata.y_scd_value = 0;
} }
else if(menu_data.scr_now == SCREEN_SETTING)
{
set_item1_text(PLOT_NUM);
}
} }
else else
{ {
@ -650,6 +712,10 @@ void hold_deal_color_input(void)
{ {
scr_main_chart_update(); scr_main_chart_update();
} }
else if( (menu_data.scr_now == SCREEN_SETTING)&&(tabdata.item_cursor == ITEM_1) )
{
set_obj_color(guider_ui.screen_setting_label_21, tabdata.item1_page0_color_input);
}
} }
else else
{ {
@ -672,6 +738,10 @@ void hold_deal_color_output(void)
{ {
scr_main_chart_update(); scr_main_chart_update();
} }
else if( (menu_data.scr_now == SCREEN_SETTING)&&(tabdata.item_cursor == ITEM_1) )
{
set_obj_color(guider_ui.screen_setting_label_31, tabdata.item1_page0_color_output);
}
} }
else else
{ {

View File

@ -45,7 +45,6 @@
/* Private variables ---------------------------------------------------------*/ /* Private variables ---------------------------------------------------------*/
/* USER CODE BEGIN Variables */ /* USER CODE BEGIN Variables */
uint16_t breathe_cnt = 0;
uint8_t screen_suspend_flag = 0; uint8_t screen_suspend_flag = 0;
/* USER CODE END Variables */ /* USER CODE END Variables */
osThreadId defaultTaskHandle; osThreadId defaultTaskHandle;
@ -164,9 +163,18 @@ void MX_FREERTOS_Init(void) {
void StartDefaultTask(void const * argument) void StartDefaultTask(void const * argument)
{ {
/* USER CODE BEGIN StartDefaultTask */ /* USER CODE BEGIN StartDefaultTask */
uint8_t default_enable = 0;
system_sts.default_stack_consume_max = 0;
/* Infinite loop */ /* Infinite loop */
for (;;) for (;;)
{ {
system_sts.default_stack_consume = DEFAULT_STACK_SIZE_WORD - uxTaskGetStackHighWaterMark(NULL);
if(system_sts.default_stack_consume_max < system_sts.default_stack_consume) system_sts.default_stack_consume_max = system_sts.default_stack_consume;
//一般情况下不启用本任务
if( !default_enable ) vTaskSuspend(NULL);
osDelay(5000); osDelay(5000);
} }
/* USER CODE END StartDefaultTask */ /* USER CODE END StartDefaultTask */
@ -182,6 +190,7 @@ void StartDefaultTask(void const * argument)
void start_task_lcd(void const * argument) void start_task_lcd(void const * argument)
{ {
/* USER CODE BEGIN start_task_lcd */ /* USER CODE BEGIN start_task_lcd */
system_sts.lvgl_stack_consume_max = 0;
/* Infinite loop */ /* Infinite loop */
for (;;) for (;;)
{ {
@ -190,9 +199,8 @@ void start_task_lcd(void const * argument)
lv_timer_handler(); //LVGL刷新任务 lv_timer_handler(); //LVGL刷新任务
system_sts.lvgl_stack_consume = uxTaskGetStackHighWaterMark(NULL); system_sts.lvgl_stack_consume = LVGL_STACK_SIZE_WORD - uxTaskGetStackHighWaterMark(NULL);
system_sts.lvgl_stack_consume = 768 - system_sts.lvgl_stack_consume; if(system_sts.lvgl_stack_consume_max < system_sts.lvgl_stack_consume) system_sts.lvgl_stack_consume_max = system_sts.lvgl_stack_consume;
osDelay(LVGL_TASK_PERIOD); osDelay(LVGL_TASK_PERIOD);
} }
/* USER CODE END start_task_lcd */ /* USER CODE END start_task_lcd */
@ -210,6 +218,7 @@ float32 fre_set_hart = 0;
void start_task_hart(void const * argument) void start_task_hart(void const * argument)
{ {
/* USER CODE BEGIN start_task_hart */ /* USER CODE BEGIN start_task_hart */
system_sts.hart_stack_consume_max = 0;
/* Infinite loop */ /* Infinite loop */
for (;;) for (;;)
{ {
@ -240,6 +249,8 @@ void start_task_hart(void const * argument)
} }
} }
system_sts.hart_stack_consume = HART_STACK_SIZE_WORD - uxTaskGetStackHighWaterMark(NULL);
if(system_sts.hart_stack_consume_max < system_sts.hart_stack_consume) system_sts.hart_stack_consume_max = system_sts.hart_stack_consume;
osDelay(HART_TASK_PERIOD); osDelay(HART_TASK_PERIOD);
} }
/* USER CODE END start_task_hart */ /* USER CODE END start_task_hart */
@ -256,6 +267,7 @@ uint8_t ble_send_test = 0;
void start_task_ble(void const * argument) void start_task_ble(void const * argument)
{ {
/* USER CODE BEGIN start_task_ble */ /* USER CODE BEGIN start_task_ble */
system_sts.ble_stack_consume_max = 0;
/* Infinite loop */ /* Infinite loop */
for (;;) for (;;)
{ {
@ -276,6 +288,8 @@ void start_task_ble(void const * argument)
} }
} }
system_sts.ble_stack_consume = BLE_STACK_SIZE_WORD - uxTaskGetStackHighWaterMark(NULL);
if(system_sts.ble_stack_consume_max < system_sts.ble_stack_consume) system_sts.ble_stack_consume_max = system_sts.ble_stack_consume;
osDelay(BLE_TASK_PERIOD); osDelay(BLE_TASK_PERIOD);
} }
/* USER CODE END start_task_ble */ /* USER CODE END start_task_ble */
@ -291,11 +305,11 @@ void start_task_ble(void const * argument)
void start_rs485(void const * argument) void start_rs485(void const * argument)
{ {
/* USER CODE BEGIN start_rs485 */ /* USER CODE BEGIN start_rs485 */
system_sts.rs485_stack_consume_max = 0;
/* Infinite loop */ /* Infinite loop */
for (;;) for (;;)
{ {
//该任务用于处理寄存器的数值的读写、当前通讯状态的更新 //当前通讯状态的更新
if( !(tabdata.bluetooth_enable||tabdata.hart_enable||tabdata.modbus_enable) ) if( !(tabdata.bluetooth_enable||tabdata.hart_enable||tabdata.modbus_enable) )
{ {
sig_trans = TRANS_NONE; sig_trans = TRANS_NONE;
@ -304,6 +318,8 @@ void start_rs485(void const * argument)
//更新modbus的寄存器值 //更新modbus的寄存器值
modbus_registers_update(); modbus_registers_update();
system_sts.rs485_stack_consume = RS485_STACK_SIZE_WORD - uxTaskGetStackHighWaterMark(NULL);
if(system_sts.rs485_stack_consume_max < system_sts.rs485_stack_consume) system_sts.rs485_stack_consume_max = system_sts.rs485_stack_consume;
osDelay(RS485_TASK_PERIOD); osDelay(RS485_TASK_PERIOD);
} }
/* USER CODE END start_rs485 */ /* USER CODE END start_rs485 */
@ -322,6 +338,7 @@ void start_mux_analog(void const * argument)
{ {
/* USER CODE BEGIN start_mux_analog */ /* USER CODE BEGIN start_mux_analog */
SIG24130_Init(); //多路输入输出初始化 SIG24130_Init(); //多路输入输出初始化
system_sts.mux_stack_consume_max = 0;
/* Infinite loop */ /* Infinite loop */
for (;;) for (;;)
{ {
@ -353,6 +370,7 @@ void start_mux_analog(void const * argument)
//输出&输入通道切换 //输出&输入通道切换
mux_signal_switch(&mux_signal); mux_signal_switch(&mux_signal);
//内存、内存碎片、CPU占用监控
my_monitor_cnt++; my_monitor_cnt++;
if( my_monitor_cnt * MUX_TASK_PERIOD >= 200) if( my_monitor_cnt * MUX_TASK_PERIOD >= 200)
{ {
@ -366,6 +384,8 @@ void start_mux_analog(void const * argument)
system_sts.mem_consume_max = (system_sts.mem_consume_max < system_sts.mem_consume)?(system_sts.mem_consume):(system_sts.mem_consume_max); system_sts.mem_consume_max = (system_sts.mem_consume_max < system_sts.mem_consume)?(system_sts.mem_consume):(system_sts.mem_consume_max);
} }
system_sts.mux_stack_consume = MUX_STACK_SIZE_WORD - uxTaskGetStackHighWaterMark(NULL);
if(system_sts.mux_stack_consume_max < system_sts.mux_stack_consume) system_sts.mux_stack_consume_max = system_sts.mux_stack_consume;
osDelay(MUX_TASK_PERIOD); osDelay(MUX_TASK_PERIOD);
} }
/* USER CODE END start_mux_analog */ /* USER CODE END start_mux_analog */
@ -381,7 +401,8 @@ void start_mux_analog(void const * argument)
void start_menu(void const * argument) void start_menu(void const * argument)
{ {
/* USER CODE BEGIN start_menu */ /* USER CODE BEGIN start_menu */
screen_data_init(); //显示数据初始化 screen_data_init();
system_sts.menu_stack_consume_max = 0;
/* Infinite loop */ /* Infinite loop */
for(;;) for(;;)
{ {
@ -390,9 +411,8 @@ void start_menu(void const * argument)
screen_run(); screen_run();
system_sts.menu_stack_consume = uxTaskGetStackHighWaterMark(NULL); system_sts.menu_stack_consume = MENU_STACK_SIZE_WORD - uxTaskGetStackHighWaterMark(NULL);
system_sts.menu_stack_consume = 512 - system_sts.menu_stack_consume; if(system_sts.menu_stack_consume_max < system_sts.menu_stack_consume) system_sts.menu_stack_consume_max = system_sts.menu_stack_consume;
osDelay(MENU_TASK_PERIOD); osDelay(MENU_TASK_PERIOD);
} }
/* USER CODE END start_menu */ /* USER CODE END start_menu */
@ -404,12 +424,12 @@ void start_menu(void const * argument)
* @param argument: Not used * @param argument: Not used
* @retval None * @retval None
*/ */
//char task_status[255];
/* USER CODE END Header_start_task_monitor */ /* USER CODE END Header_start_task_monitor */
void start_task_monitor(void const * argument) void start_task_monitor(void const * argument)
{ {
/* USER CODE BEGIN start_task_monitor */ /* USER CODE BEGIN start_task_monitor */
uint8_t monitor_enable = 0;
system_sts.monitor_stack_consume_max = 0;
/* Infinite loop */ /* Infinite loop */
for(;;) for(;;)
{ {
@ -418,6 +438,12 @@ void start_task_monitor(void const * argument)
//vTaskList(task_status); //vTaskList(task_status);
//HAL_UART_Transmit(&huart3, (uint8_t *)task_status, 255, 0xFFFF); //HAL_UART_Transmit(&huart3, (uint8_t *)task_status, 255, 0xFFFF);
system_sts.monitor_stack_consume = MONITOR_STACK_SIZE_WORD - uxTaskGetStackHighWaterMark(NULL);
if(system_sts.monitor_stack_consume_max < system_sts.monitor_stack_consume) system_sts.monitor_stack_consume_max = system_sts.monitor_stack_consume;
//一般情况下不启用本任务
if( !monitor_enable ) vTaskSuspend(NULL);
osDelay(3000); osDelay(3000);
} }
/* USER CODE END start_task_monitor */ /* USER CODE END start_task_monitor */

View File

@ -625,7 +625,7 @@ void proc_huart_it_dma(UART_HandleTypeDef *huart)
//计算接收到的数据长度 //计算接收到的数据长度
scom->rx_len = BUFFER_SIZE - __HAL_DMA_GET_COUNTER(huart->hdmarx); scom->rx_len = BUFFER_SIZE - __HAL_DMA_GET_COUNTER(huart->hdmarx);
if( ( 0 < scom->rx_len )&&( scom->rx_len < BUFFER_SIZE ) ) if( ( 0 < scom->rx_len )&&( scom->rx_len <= BUFFER_SIZE ) )
{ {
scom->rx_flag = TRUE; scom->rx_flag = TRUE;
} }

File diff suppressed because it is too large Load Diff