更新:
1、本地按键&上位机modbus指令冲突处理:量程、描点个数、曲线颜色、语言选择; 2、主界面:数据范围“/”修改成“~”;
This commit is contained in:
parent
e5a2c352ec
commit
3cab4d8fcc
|
@ -41,7 +41,8 @@
|
|||
"key_functions_main.h": "c",
|
||||
"eeprom_spi.h": "c",
|
||||
"math.h": "c",
|
||||
"modbus_register_process.h": "c"
|
||||
"modbus_register_process.h": "c",
|
||||
"modbus_rtu_master.h": "c"
|
||||
},
|
||||
"C_Cpp.errorSquiggles": "disabled",
|
||||
"idf.pythonInstallPath": "F:\\Espressif\\tools\\idf-python\\3.11.2\\python.exe",
|
||||
|
|
|
@ -93,6 +93,16 @@ extern SIG_TRANSMISSION sig_trans; //通讯模式
|
|||
//绝对值计算
|
||||
#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 LVGL_TASK_PERIOD 5 //LVGL任务周期
|
||||
#define MENU_TASK_PERIOD 300 //显示内容设置周期
|
||||
|
@ -100,7 +110,6 @@ extern SIG_TRANSMISSION sig_trans; //通讯模式
|
|||
#define HART_TASK_PERIOD 100 //HART任务周期
|
||||
#define RS485_TASK_PERIOD MUX_TASK_PERIOD //485任务周期
|
||||
|
||||
|
||||
//屏幕显示
|
||||
void screen_run(void);
|
||||
|
||||
|
|
|
@ -39,7 +39,6 @@ typedef struct
|
|||
SIG_FUNCTIONS_TYPE typ; //类型
|
||||
int16_t up; //上限
|
||||
int16_t low; //下限
|
||||
float32 pv; //当前值
|
||||
}PHYSICAL_QUANTITY;
|
||||
|
||||
typedef enum
|
||||
|
@ -90,15 +89,31 @@ typedef enum
|
|||
|
||||
typedef struct
|
||||
{
|
||||
uint16_t lvgl_stack_consume; //LVGL栈占用
|
||||
uint16_t menu_stack_consume; //menu栈占用
|
||||
uint8_t cpu_consume; //cpu使用率,0-100
|
||||
uint8_t mem_consume; //内存使用率,0-100
|
||||
uint8_t mem_frag; //内存碎片占比,0-100
|
||||
uint8_t mem_consume_max; //最大内存占用占用,0-100
|
||||
uint8_t eeprom_read_error; //eeprom读是否出现过错误
|
||||
uint8_t eeprom_write_error; //eeprom写是否出现过错误
|
||||
uint8_t eeprom_current_status; //eeprom状态
|
||||
uint16_t lvgl_stack_consume; //LVGL任务栈占用
|
||||
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 mem_consume; //内存使用率,0-100
|
||||
uint8_t mem_frag; //内存碎片占比,0-100
|
||||
uint8_t mem_consume_max; //最大内存占用占用,0-100
|
||||
uint8_t eeprom_read_error; //eeprom读是否出现过错误
|
||||
uint8_t eeprom_write_error; //eeprom写是否出现过错误
|
||||
uint8_t eeprom_current_status; //eeprom状态
|
||||
|
||||
}SYSTEM_STATUS_WATCH;
|
||||
|
||||
|
@ -117,7 +132,7 @@ typedef struct
|
|||
uint8_t runtime_seconds; //秒
|
||||
uint8_t runtime_minutes; //分钟
|
||||
uint8_t runtime_hours; //小时
|
||||
char runtime_show[16]; //存放运行时间转化得到的字符串
|
||||
char runtime_show[10]; //存放运行时间转化得到的字符串
|
||||
uint8_t battery_cnt; //电池计数
|
||||
uint8_t io_cursor; //当前游标位置, [0000,000], 0~6整数表示7个位置
|
||||
uint8_t io_cursor_prv; //前一时刻的游标位置
|
||||
|
@ -274,7 +289,7 @@ typedef struct
|
|||
COLORS item1_page0_color_output; //输出曲线及其图例的颜色
|
||||
|
||||
//ITEMS_2
|
||||
char log_time[60][16]; //输入&输出记录,时间戳
|
||||
char log_time[60][10]; //输入&输出记录,时间戳
|
||||
float32 input_log_value[60]; //输入记录,实际值
|
||||
SIG_FUNCTIONS_TYPE input_log_unit[60]; //输入记录,单位
|
||||
float32 output_log_value[60]; //输出记录,实际值
|
||||
|
|
|
@ -38,26 +38,30 @@ typedef enum
|
|||
PROGOUT_WAITING = 0,
|
||||
PROGOUT_START,
|
||||
PROGOUT_RUNNING,
|
||||
PROGOUT_PAUSE,
|
||||
PROGOUT_END
|
||||
}PROGRAM_OUT_PROCESS;
|
||||
|
||||
typedef struct
|
||||
{
|
||||
uint8_t output_unit;
|
||||
uint8_t output_mode;
|
||||
uint8_t circulations;
|
||||
uint16_t hold_time;
|
||||
uint8_t start_percent;
|
||||
uint8_t end_percent;
|
||||
uint8_t step_percent;
|
||||
uint8_t rising_percent;
|
||||
uint8_t falling_percent;
|
||||
uint16_t period;
|
||||
uint8_t output_unit; //输出信号的物理量单位,mA、V
|
||||
uint8_t output_mode; //输出模式,阶跃、三角波
|
||||
uint8_t circulations; //循环次数,1-10、无穷
|
||||
uint16_t hold_time; //阶跃保持时间,开始和结束的等待时间
|
||||
uint8_t start_percent; //起点百分比
|
||||
uint8_t end_percent; //终点百分比
|
||||
uint8_t step_percent; //步长百分比
|
||||
uint8_t rising_percent; //三角波爬升占比
|
||||
uint8_t falling_percent; //三角波下降占比
|
||||
uint16_t period; //三角波周期
|
||||
|
||||
PROGRAM_OUT_PROCESS process;
|
||||
int16_t out_max;
|
||||
int16_t out_min;
|
||||
PROGRAM_OUT_PROCESS process; //过程,当前处于哪一步
|
||||
int16_t out_max; //输出物理量的实际值上限
|
||||
int16_t out_min; //输出物理量的实际值下限
|
||||
uint8_t out_percent; //当前输出百分比
|
||||
|
||||
int progout_tick_flag; //计时标志,1:定时器计时,0:暂停计时
|
||||
int progout_tick; //计时计数,正常情况下不会溢出
|
||||
}PROGRAM_OUT_DATA;
|
||||
|
||||
extern PROGRAM_OUT_DATA progout_data;
|
||||
|
|
|
@ -13,8 +13,6 @@ extern int twk_1000ms_flag;
|
|||
extern int twk_1000ms_cnt;
|
||||
extern int input_500ms_flag;
|
||||
extern uint16_t sig2slave_current_tick;
|
||||
extern uint8_t progout_tick_flag;
|
||||
extern int progout_tick;
|
||||
|
||||
void duty_tim3(void);
|
||||
void duty_tim6(void);
|
||||
|
|
|
@ -1018,7 +1018,7 @@ void up2down_update(int16_t low, int16_t up)
|
|||
|
||||
//数值上下限显示
|
||||
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_OUT, str_tep);
|
||||
}
|
||||
|
|
|
@ -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_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,"");
|
||||
|
|
|
@ -1055,7 +1055,7 @@ void setting_window2val(void)
|
|||
else
|
||||
{
|
||||
tabdata.item0_page0_vup[1] = val_win;
|
||||
}
|
||||
}
|
||||
}
|
||||
break;
|
||||
|
||||
|
|
|
@ -53,56 +53,48 @@ void TC_init(void)
|
|||
TC[0].typ = TC_K;
|
||||
TC[0].low = TC_TABLE_TEMP[0][0];
|
||||
TC[0].up = TC_TABLE_TEMP[0][10];
|
||||
TC[0].pv = 0;
|
||||
|
||||
//热电偶S
|
||||
TC[1].tag = SIG_TC;
|
||||
TC[1].typ = TC_S;
|
||||
TC[1].low = TC_TABLE_TEMP[1][0];
|
||||
TC[1].up = TC_TABLE_TEMP[1][10];
|
||||
TC[1].pv = 0;
|
||||
|
||||
//热电偶N
|
||||
TC[2].tag = SIG_TC;
|
||||
TC[2].typ = TC_N;
|
||||
TC[2].low = TC_TABLE_TEMP[2][0];
|
||||
TC[2].up = TC_TABLE_TEMP[2][10];
|
||||
TC[2].pv = 0;
|
||||
|
||||
//热电偶B
|
||||
TC[3].tag = SIG_TC;
|
||||
TC[3].typ = TC_B;
|
||||
TC[3].low = TC_TABLE_TEMP[3][0];;
|
||||
TC[3].up = TC_TABLE_TEMP[3][10];;
|
||||
TC[3].pv = 0;
|
||||
|
||||
//热电偶E
|
||||
TC[4].tag = SIG_TC;
|
||||
TC[4].typ = TC_E;
|
||||
TC[4].low = TC_TABLE_TEMP[4][0];
|
||||
TC[4].up = TC_TABLE_TEMP[4][10];
|
||||
TC[4].pv = 0;
|
||||
|
||||
//热电偶J
|
||||
TC[5].tag = SIG_TC;
|
||||
TC[5].typ = TC_J;
|
||||
TC[5].low = TC_TABLE_TEMP[5][0];
|
||||
TC[5].up = TC_TABLE_TEMP[5][10];
|
||||
TC[5].pv = 0;
|
||||
|
||||
//热电偶R
|
||||
TC[6].tag = SIG_TC;
|
||||
TC[6].typ = TC_R;
|
||||
TC[6].low = TC_TABLE_TEMP[6][0];
|
||||
TC[6].up = TC_TABLE_TEMP[6][10];
|
||||
TC[6].pv = 0;
|
||||
|
||||
//热电偶T
|
||||
TC[7].tag = SIG_TC;
|
||||
TC[7].typ = TC_T;
|
||||
TC[7].low = TC_TABLE_TEMP[7][0];
|
||||
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].low = 0;
|
||||
VOL[0].up = 30;
|
||||
VOL[0].pv = 0;
|
||||
|
||||
VOL[1].tag = SIG_VOLTAGE;
|
||||
VOL[1].typ = VOLTAGE_MV;
|
||||
VOL[1].low = -2500;
|
||||
VOL[1].up = 2500;
|
||||
VOL[1].pv = 0;
|
||||
|
||||
CUR.tag = SIG_CURRENT;
|
||||
CUR.typ = CURRENT_MA;
|
||||
CUR.low = 0;
|
||||
CUR.up = 25;
|
||||
CUR.pv = 0;
|
||||
|
||||
RES.tag = SIG_RESISTANT;
|
||||
RES.typ = RESISTANT_OHM;
|
||||
RES.low = 0;
|
||||
RES.up = 4000;
|
||||
RES.pv = 0;
|
||||
|
||||
FRE.tag = SIG_FREQUENCE;
|
||||
FRE.typ = FREQUENCE_KHZ;
|
||||
FRE.low = 0;
|
||||
FRE.up = 100;
|
||||
FRE.pv = 0;
|
||||
|
||||
TC_init();
|
||||
|
||||
|
@ -145,7 +132,6 @@ void physical_quantity_init(void)
|
|||
RTD.typ = RTD_DC;
|
||||
RTD.low = RTD_TABLE_TEMP[0];
|
||||
RTD.up = RTD_TABLE_TEMP[10];
|
||||
RTD.pv = 0;
|
||||
}
|
||||
|
||||
void screen_run(void)
|
||||
|
@ -421,22 +407,15 @@ void sig_sv_update(void)
|
|||
}
|
||||
else
|
||||
{
|
||||
//软件设定输出百分比 -> 百分比转化成mux值(mux任务)-> mux转化为实际值在屏幕上显示
|
||||
if(menu_data.io_on2off == IO_ON)
|
||||
{
|
||||
program_out_run();
|
||||
set_output( mux2real(mux_signal.data_sv) );
|
||||
}
|
||||
program_out_run();
|
||||
set_output( mux2real(mux_signal.data_sv) );
|
||||
}
|
||||
|
||||
//本地控制的情况下,保持寄存器的值跟随设定值变化
|
||||
if(get_coil_val(COIL_ADDR_HOLD_SV_CTRL) == 0)
|
||||
{
|
||||
uint32_t mcpy_temp = 0;
|
||||
float32 muxpv_temp = mux2real(mux_signal.data_sv);
|
||||
memcpy(&mcpy_temp, &muxpv_temp, 4);
|
||||
HoldReg[HOLD_ADDR_MUX_SV_H] = mcpy_temp >> 16;
|
||||
HoldReg[HOLD_ADDR_MUX_SV_L] = mcpy_temp & 0x0000FFFF;
|
||||
HoldReg[HOLD_ADDR_MUX_SV_H] = ( (uint32_t)mux2real(mux_signal.data_sv) ) >> 16;
|
||||
HoldReg[HOLD_ADDR_MUX_SV_L] = ( (uint32_t)mux2real(mux_signal.data_sv) ) & 0x0000FFFF;
|
||||
}
|
||||
|
||||
//手动输入flt_test,拆分成高低位之后重新拼接成flt_test_rev,验证前后是否一致
|
||||
|
|
|
@ -209,16 +209,26 @@ void key_functions_main(void)
|
|||
if(menu_data.io_on2off == IO_ON)
|
||||
{
|
||||
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
|
||||
{
|
||||
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状态指示
|
||||
|
@ -398,8 +408,8 @@ void key_functions_main(void)
|
|||
if(current_operation == PROG_OUT_PROCESSING)
|
||||
{
|
||||
progout_data.process = PROGOUT_END;
|
||||
progout_tick_flag = 0;
|
||||
progout_tick = 0;
|
||||
progout_data.progout_tick_flag = 0;
|
||||
progout_data.progout_tick = 2500;
|
||||
}
|
||||
}
|
||||
break;
|
||||
|
|
|
@ -1013,8 +1013,6 @@ void key_functions_setting(void)
|
|||
//隐藏设置界面对象
|
||||
lv_obj_add_flag(guider_ui.screen_setting, LV_OBJ_FLAG_HIDDEN);
|
||||
|
||||
menu_data.scr_now = SCREEN_MAIN;
|
||||
|
||||
//当前操作切换至“编程输出执行”,按键配置同步更新
|
||||
current_operation = PROG_OUT_PROCESSING;
|
||||
key_config_update(current_operation);
|
||||
|
@ -1049,6 +1047,10 @@ void key_functions_setting(void)
|
|||
|
||||
//切换至本地控制
|
||||
set_coil_val(COIL_ADDR_HOLD_SV_CTRL, 0);
|
||||
|
||||
//当前页面为主界面
|
||||
menu_data.scr_now = SCREEN_MAIN;
|
||||
set_coil_val(COIL_ADDR_SCREEN_SWITCH, 0);
|
||||
}
|
||||
}
|
||||
break;
|
||||
|
|
|
@ -249,18 +249,20 @@ void set_item1_value(ITEM_CONTENTS con, int8_t step)
|
|||
case SAMPLE_INTERVAL:
|
||||
{
|
||||
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 < MENU_TASK_PERIOD ) tabdata.item1_page0_sample_interval = MENU_TASK_PERIOD;
|
||||
|
||||
HoldReg[HOLD_ADDR_SAMPLE_INTERVAL] = tabdata.item1_page0_sample_interval;
|
||||
}
|
||||
break;
|
||||
|
||||
case PLOT_NUM:
|
||||
{
|
||||
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_MIN ) tabdata.item1_page0_plot_num = PLOT_NUM_MIN;
|
||||
|
||||
HoldReg[HOLD_ADDR_PLOT_COUNTS] = 0x00FF & tabdata.item1_page0_plot_num;
|
||||
}
|
||||
break;
|
||||
|
||||
|
@ -285,6 +287,7 @@ void set_item1_value(ITEM_CONTENTS con, int8_t step)
|
|||
if( val_temp < val_start ) val_temp = val_end;
|
||||
|
||||
tabdata.item1_page0_color_input = (COLORS)val_temp;
|
||||
HoldReg[HOLD_ADDR_INPUT_COLOR] = 0x00FF & (uint8_t)tabdata.item1_page0_color_input;
|
||||
}
|
||||
break;
|
||||
|
||||
|
@ -309,6 +312,7 @@ void set_item1_value(ITEM_CONTENTS con, int8_t step)
|
|||
if( val_temp < val_start ) val_temp = val_end;
|
||||
|
||||
tabdata.item1_page0_color_output = (COLORS)val_temp;
|
||||
HoldReg[HOLD_ADDR_OUTPUT_COLOR] = 0x00FF & (uint8_t)tabdata.item1_page0_color_output;
|
||||
}
|
||||
break;
|
||||
|
||||
|
@ -381,6 +385,7 @@ void set_item3_value(ITEM_CONTENTS con, int8_t step)
|
|||
if( val_temp < val_start ) val_temp = val_end;
|
||||
|
||||
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_resetflag == 2) tabdata.item3_page0_resetflag = 0;
|
||||
|
|
|
@ -18,6 +18,9 @@ void program_out_init(void)
|
|||
progout_data.rising_percent = 100;
|
||||
progout_data.falling_percent = 0;
|
||||
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)
|
||||
|
@ -567,11 +570,11 @@ void program_out_step(void)
|
|||
{
|
||||
case PROGOUT_START:
|
||||
{
|
||||
if( progout_tick_flag == 0 )
|
||||
if( progout_data.progout_tick_flag == 0 )
|
||||
{
|
||||
//计时开始
|
||||
progout_tick_flag = 1;
|
||||
progout_tick = 0;
|
||||
progout_data.progout_tick_flag = 1;
|
||||
progout_data.progout_tick = 0;
|
||||
|
||||
progout_data.out_percent = progout_data.start_percent;
|
||||
percent2val_out(progout_data.out_percent);
|
||||
|
@ -580,11 +583,11 @@ void program_out_step(void)
|
|||
else
|
||||
{
|
||||
//到达起点%后等待一段时间
|
||||
if(progout_tick >= 3000)
|
||||
if(progout_data.progout_tick >= 3000)
|
||||
{
|
||||
//计时结束
|
||||
progout_tick_flag = 0;
|
||||
progout_tick = 0;
|
||||
progout_data.progout_tick_flag = 0;
|
||||
progout_data.progout_tick = 0;
|
||||
|
||||
progout_data.process = PROGOUT_RUNNING;
|
||||
}
|
||||
|
@ -598,12 +601,15 @@ void program_out_step(void)
|
|||
}
|
||||
break;
|
||||
|
||||
case PROGOUT_PAUSE:
|
||||
{}
|
||||
break;
|
||||
|
||||
case PROGOUT_END:
|
||||
{
|
||||
if( progout_tick_flag == 0 )
|
||||
if( progout_data.progout_tick_flag == 0 )
|
||||
{
|
||||
progout_tick_flag = 1;
|
||||
progout_tick = 0;
|
||||
progout_data.progout_tick_flag = 1;
|
||||
|
||||
//相关参数清零
|
||||
step_dir = 0;
|
||||
|
@ -612,11 +618,11 @@ void program_out_step(void)
|
|||
else
|
||||
{
|
||||
//等待3秒后返回config2界面
|
||||
if(progout_tick >= 3000)
|
||||
if(progout_data.progout_tick >= 3000)
|
||||
{
|
||||
//计时结束
|
||||
progout_tick_flag = 0;
|
||||
progout_tick = 0;
|
||||
progout_data.progout_tick_flag = 0;
|
||||
progout_data.progout_tick = 0;
|
||||
|
||||
//输出关闭、清零
|
||||
menu_data.io_on2off = IO_OFF;
|
||||
|
@ -631,7 +637,8 @@ void program_out_step(void)
|
|||
lv_obj_add_flag(guider_ui.screen_main, LV_OBJ_FLAG_HIDDEN);
|
||||
|
||||
//当前界面为详细设置菜单,切换至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 = ITEM_2;
|
||||
setting_items_check(tabdata.item_cursor, tabdata.item_cursor_prv);
|
||||
|
@ -654,11 +661,11 @@ void program_out_step(void)
|
|||
|
||||
void running_process_step(void)
|
||||
{
|
||||
if(progout_tick_flag == 0)
|
||||
if(progout_data.progout_tick_flag == 0)
|
||||
{
|
||||
//计时开始
|
||||
progout_tick_flag = 1;
|
||||
progout_tick = 0;
|
||||
progout_data.progout_tick_flag = 1;
|
||||
progout_data.progout_tick = 0;
|
||||
|
||||
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)
|
||||
{
|
||||
progout_data.process = PROGOUT_END;
|
||||
progout_tick_flag = 0;
|
||||
progout_tick = 0;
|
||||
progout_data.progout_tick_flag = 0;
|
||||
progout_data.progout_tick = 0;
|
||||
}
|
||||
}
|
||||
else
|
||||
|
@ -695,11 +702,11 @@ void running_process_step(void)
|
|||
}
|
||||
else
|
||||
{
|
||||
if( progout_tick >= progout_data.hold_time )
|
||||
if( progout_data.progout_tick >= progout_data.hold_time )
|
||||
{
|
||||
//计时结束
|
||||
progout_tick_flag = 0;
|
||||
progout_tick = 0;
|
||||
progout_data.progout_tick_flag = 0;
|
||||
progout_data.progout_tick = 0;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -714,11 +721,11 @@ void program_out_triangle(void)
|
|||
{
|
||||
case PROGOUT_START:
|
||||
{
|
||||
if( progout_tick_flag == 0 )
|
||||
if( progout_data.progout_tick_flag == 0 )
|
||||
{
|
||||
//计时开始
|
||||
progout_tick_flag = 1;
|
||||
progout_tick = 0;
|
||||
progout_data.progout_tick_flag = 1;
|
||||
progout_data.progout_tick = 0;
|
||||
|
||||
progout_data.out_percent = progout_data.start_percent;
|
||||
percent2val_out(progout_data.out_percent);
|
||||
|
@ -746,11 +753,11 @@ void program_out_triangle(void)
|
|||
else
|
||||
{
|
||||
//到达起点%后等待一段时间
|
||||
if(progout_tick >= 3000)
|
||||
if(progout_data.progout_tick >= 3000)
|
||||
{
|
||||
//计时结束
|
||||
progout_tick_flag = 0;
|
||||
progout_tick = 0;
|
||||
progout_data.progout_tick_flag = 0;
|
||||
progout_data.progout_tick = 0;
|
||||
|
||||
progout_data.process = PROGOUT_RUNNING;
|
||||
}
|
||||
|
@ -764,12 +771,15 @@ void program_out_triangle(void)
|
|||
}
|
||||
break;
|
||||
|
||||
case PROGOUT_PAUSE:
|
||||
{}
|
||||
break;
|
||||
|
||||
case PROGOUT_END:
|
||||
{
|
||||
if( progout_tick_flag == 0 )
|
||||
if( progout_data.progout_tick_flag == 0 )
|
||||
{
|
||||
progout_tick_flag = 1;
|
||||
progout_tick = 0;
|
||||
progout_data.progout_tick_flag = 1;
|
||||
|
||||
//相关参数清零
|
||||
step_dir = 0;
|
||||
|
@ -782,11 +792,11 @@ void program_out_triangle(void)
|
|||
else
|
||||
{
|
||||
//等待3秒后返回config2界面
|
||||
if(progout_tick >= 3000)
|
||||
if(progout_data.progout_tick >= 3000)
|
||||
{
|
||||
//计时结束
|
||||
progout_tick_flag = 0;
|
||||
progout_tick = 0;
|
||||
progout_data.progout_tick_flag = 0;
|
||||
progout_data.progout_tick = 0;
|
||||
|
||||
//输出关闭、清零
|
||||
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);
|
||||
|
||||
menu_data.scr_now = SCREEN_SETTING; //当前界面为详细设置菜单
|
||||
set_coil_val(COIL_ADDR_SCREEN_SWITCH, 1);
|
||||
|
||||
tabdata.item_cursor_prv = ITEM_0;
|
||||
tabdata.item_cursor = ITEM_2;
|
||||
|
@ -824,11 +835,11 @@ void program_out_triangle(void)
|
|||
|
||||
void running_process_triangle(void)
|
||||
{
|
||||
if( progout_tick_flag == 0 )
|
||||
if( progout_data.progout_tick_flag == 0 )
|
||||
{
|
||||
//计时开始
|
||||
progout_tick_flag = 1;
|
||||
progout_tick = 0;
|
||||
progout_data.progout_tick_flag = 1;
|
||||
progout_data.progout_tick = 0;
|
||||
|
||||
if(step_dir == 1)
|
||||
{
|
||||
|
@ -851,7 +862,12 @@ void running_process_triangle(void)
|
|||
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
|
||||
{
|
||||
|
@ -864,11 +880,11 @@ void running_process_triangle(void)
|
|||
}
|
||||
else
|
||||
{
|
||||
if(progout_tick >= tri_interval)
|
||||
if(progout_data.progout_tick >= tri_interval)
|
||||
{
|
||||
//计时结束
|
||||
progout_tick_flag = 0;
|
||||
progout_tick = 0;
|
||||
progout_data.progout_tick_flag = 0;
|
||||
progout_data.progout_tick = 0;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -11,8 +11,6 @@ int twk_1000ms_cnt = 0;
|
|||
int input_500ms_flag = 0;
|
||||
int input_500ms_cnt = 0;
|
||||
uint16_t sig2slave_current_tick = 0;
|
||||
uint8_t progout_tick_flag = 0;
|
||||
int progout_tick = 0;
|
||||
|
||||
void duty_tim3(void)
|
||||
{
|
||||
|
@ -58,9 +56,9 @@ void duty_tim6(void)
|
|||
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
|
||||
HAL_UART_Receive_DMA(&huart2, scom2_rs485.rx_buff, BUFFER_SIZE);
|
||||
}
|
||||
|
||||
if(huart == &huart2)
|
||||
else if(huart == &huart2)
|
||||
{
|
||||
memset(scom2_rs485.tx_buff, 0, scom2_rs485.tx_len);
|
||||
scom2_rs485.tx_len = 0;
|
||||
|
@ -145,8 +142,7 @@ void HAL_UART_TxCpltCallback(UART_HandleTypeDef *huart)
|
|||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if(huart == &huart6)
|
||||
else if(huart == &huart6)
|
||||
{
|
||||
memset(scom6_ble.tx_buff, 0, scom6_ble.tx_len);
|
||||
scom6_ble.tx_len = 0;
|
||||
|
|
|
@ -14,43 +14,6 @@ void ble_send(UART_HandleTypeDef *huart, uint8_t *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)
|
||||
{
|
||||
if(!id) return -1;
|
||||
|
|
|
@ -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;
|
||||
// }
|
||||
// }
|
||||
|
||||
|
||||
|
|
|
@ -11,6 +11,7 @@
|
|||
#define TX_NONE 0x00 //没有需要发送的数据
|
||||
#define TX_WAITING 0x01 //数据准备完成,等待发送
|
||||
#define TX_OK 0x02 //发送完成
|
||||
|
||||
#define RX_NONE 0x00 //没有接收到数据
|
||||
#define RX_WAITING 0x01 //等待接收
|
||||
#define RX_OK 0x02 //接收完成
|
||||
|
|
|
@ -231,10 +231,12 @@ void trans_modbus_sig2slave(void)
|
|||
//记录第一次接收到的数据长度
|
||||
sig2slave_data_length_total = scom2_rs485.rx_len;
|
||||
|
||||
//修改剩余buff长度,继续接收
|
||||
buffer_size_temp -= scom2_rs485.rx_len;
|
||||
HAL_UART_Receive_DMA(&huart2, scom2_rs485.rx_buff + sig2slave_data_length_total, buffer_size_temp);
|
||||
|
||||
if(scom2_rs485.rx_len < BUFFER_SIZE)
|
||||
{
|
||||
//修改剩余buff长度,继续接收
|
||||
buffer_size_temp -= scom2_rs485.rx_len;
|
||||
HAL_UART_Receive_DMA(&huart2, scom2_rs485.rx_buff + sig2slave_data_length_total, buffer_size_temp);
|
||||
}
|
||||
sig2slave_step++;
|
||||
}
|
||||
break;
|
||||
|
@ -306,51 +308,49 @@ uint8_t trans_enable_check(st_scom *scom)
|
|||
{
|
||||
result = 1;
|
||||
sig_trans = TRANS_HART_TO_PC;
|
||||
|
||||
return result;
|
||||
}
|
||||
}
|
||||
|
||||
if( scom == &scom6_ble )
|
||||
else if( scom == &scom6_ble )
|
||||
{
|
||||
if(tabdata.bluetooth_enable)
|
||||
{
|
||||
result = 1;
|
||||
sig_trans = TRANS_BLE_TO_PC;
|
||||
|
||||
return result;
|
||||
}
|
||||
}
|
||||
|
||||
if( scom == &scom2_rs485 )
|
||||
else if( scom == &scom2_rs485 )
|
||||
{
|
||||
if(tabdata.hart_enable)
|
||||
{
|
||||
result = 1;
|
||||
sig_trans = TRANS_PC_TO_HART;
|
||||
|
||||
return result;
|
||||
}
|
||||
else if(tabdata.bluetooth_enable)
|
||||
{
|
||||
result = 1;
|
||||
sig_trans = TRANS_PC_TO_BLE;
|
||||
|
||||
return result;
|
||||
}
|
||||
else if(tabdata.modbus_enable)
|
||||
{
|
||||
if(tabdata.modbus_type == SIG_SLAVE)
|
||||
{
|
||||
sig_trans = TRANS_MODBUS_PC_TO_SIG;
|
||||
}
|
||||
else
|
||||
{
|
||||
sig_trans = TRANS_MODBUS_SIG_TO_SLAVE;
|
||||
}
|
||||
result = 1;
|
||||
|
||||
switch (tabdata.modbus_type)
|
||||
{
|
||||
case SIG_SLAVE:
|
||||
{
|
||||
sig_trans = TRANS_MODBUS_PC_TO_SIG;
|
||||
}
|
||||
break;
|
||||
|
||||
case SIG_MASTER:
|
||||
{
|
||||
sig_trans = TRANS_MODBUS_SIG_TO_SLAVE;
|
||||
}
|
||||
break;
|
||||
|
||||
default:
|
||||
break;
|
||||
}
|
||||
return result;
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -114,6 +114,9 @@ void coil_deal_light(void)
|
|||
{
|
||||
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)
|
||||
{
|
||||
//保持寄存器,处理工作模式的修改事件
|
||||
hold_deal_set_work_mode();
|
||||
|
||||
//保持寄存器,处理mux输出设定值的修改事件
|
||||
hold_deal_muxsv();
|
||||
|
||||
//保持寄存器,量程类型选择
|
||||
hold_deal_range_type();
|
||||
|
||||
//保持寄存器,处理量程上限的修改事件
|
||||
hold_deal_range_max();
|
||||
|
||||
//保持寄存器,处理量程下限的修改事件
|
||||
hold_deal_range_min();
|
||||
|
||||
//保持寄存器,处理采样间隔修改事件
|
||||
hold_deal_sample_interval();
|
||||
|
||||
//保持寄存器,处理描点数量的修改事件
|
||||
hold_deal_plot_counts();
|
||||
|
||||
//保持寄存器,处理输入曲线&图例颜色修改事件
|
||||
hold_deal_color_input();
|
||||
|
||||
//保持寄存器,处理输出曲线&图例颜色修改事件
|
||||
hold_deal_color_output();
|
||||
|
||||
//保持寄存器,处理语言选择事件
|
||||
hold_deal_language_select();
|
||||
}
|
||||
|
||||
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 ) + \
|
||||
(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(menu_data.scr_now == SCREEN_MAIN)
|
||||
{
|
||||
SIG_FUNCTIONS iom;
|
||||
SIG_FUNCTIONS_TYPE iomt;
|
||||
|
||||
//根据编码值倒推工作模式与工作模式的类型
|
||||
iomt = (SIG_FUNCTIONS_TYPE)( HoldReg[HOLD_ADDR_SET_WORK_MODE] - 1 - 14 * (HoldReg[HOLD_ADDR_SET_WORK_MODE] > 14) );
|
||||
switch (iomt)
|
||||
{
|
||||
|
@ -334,16 +350,17 @@ void hold_deal_muxsv(void)
|
|||
}
|
||||
|
||||
int16_t rg_max = 0, rg_min = 0;
|
||||
uint16_t range_max_prv = 0, range_min_prv = 0;
|
||||
uint16_t phyunit_prv = 0;
|
||||
uint8_t *p8low = 0, *p8up = 0;
|
||||
int16_t *p16low = 0, *p16up = 0;
|
||||
uint8_t *p8low = 0, *p8up = 0, *p8low_prv = 0, *p8up_prv = 0;
|
||||
int16_t *p16low = 0, *p16up = 0, *p16low_prv = 0, *p16up_prv = 0;
|
||||
void hold_deal_range_type(void)
|
||||
{
|
||||
//发生变化时才执行以下操作
|
||||
if( HoldReg[HOLD_ADDR_PHY_UNIT] == phyunit_prv ) return;
|
||||
|
||||
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])
|
||||
|
@ -471,12 +488,24 @@ void hold_deal_range_type(void)
|
|||
}
|
||||
}
|
||||
|
||||
uint16_t range_max_prv = 0;
|
||||
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];
|
||||
|
||||
//数据类型不同,电流mA(0-25)和频率KHz(0-100)的数据类型时uint8,其他都是int16
|
||||
|
@ -486,10 +515,10 @@ void hold_deal_range_max(void)
|
|||
if( (!p8up)|(!p8low) ) return;
|
||||
|
||||
uint8_t hold_temp8 = 0x00FF & HoldReg[HOLD_ADDR_PHY_UP];
|
||||
|
||||
if( (*p8low <= hold_temp8)&&(hold_temp8 <= (uint8_t)rg_max) )
|
||||
{
|
||||
*p8up = hold_temp8;
|
||||
*p8up_prv = *p8up;
|
||||
|
||||
if(menu_data.scr_now == SCREEN_MAIN)
|
||||
{
|
||||
|
@ -499,6 +528,10 @@ void hold_deal_range_max(void)
|
|||
up2down_update(*p8low, *p8up);
|
||||
}
|
||||
}
|
||||
else if(menu_data.scr_now == SCREEN_SETTING)
|
||||
{
|
||||
setting_items_page(ITEM_0, 1);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
|
@ -516,6 +549,7 @@ void hold_deal_range_max(void)
|
|||
if( (*p16low <= hold_temp16)&&(hold_temp16 <= rg_max) )
|
||||
{
|
||||
*p16up = hold_temp16;
|
||||
*p16up_prv = *p16up;
|
||||
|
||||
if(menu_data.scr_now == SCREEN_MAIN)
|
||||
{
|
||||
|
@ -525,6 +559,10 @@ void hold_deal_range_max(void)
|
|||
up2down_update(*p16low, *p16up);
|
||||
}
|
||||
}
|
||||
else if(menu_data.scr_now == SCREEN_SETTING)
|
||||
{
|
||||
setting_items_page(ITEM_0, 1);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
|
@ -534,12 +572,24 @@ void hold_deal_range_max(void)
|
|||
}
|
||||
}
|
||||
|
||||
uint16_t range_min_prv = 0;
|
||||
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];
|
||||
|
||||
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;
|
||||
|
||||
uint8_t hold_temp8 = 0x00FF & HoldReg[HOLD_ADDR_PHY_LOW];
|
||||
|
||||
if( ((uint8_t)rg_min <= hold_temp8)&&(hold_temp8 <= *p8up) )
|
||||
{
|
||||
*p8low = hold_temp8;
|
||||
|
||||
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);
|
||||
|
@ -560,6 +608,10 @@ void hold_deal_range_min(void)
|
|||
up2down_update(*p8low, *p8up);
|
||||
}
|
||||
}
|
||||
else if(menu_data.scr_now == SCREEN_SETTING)
|
||||
{
|
||||
setting_items_page(ITEM_0, 1);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
|
@ -586,6 +638,10 @@ void hold_deal_range_min(void)
|
|||
up2down_update(*p16low, *p16up);
|
||||
}
|
||||
}
|
||||
else if(menu_data.scr_now == SCREEN_SETTING)
|
||||
{
|
||||
setting_items_page(ITEM_0, 1);
|
||||
}
|
||||
}
|
||||
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) )
|
||||
{
|
||||
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
|
||||
{
|
||||
|
@ -628,6 +686,10 @@ void hold_deal_plot_counts(void)
|
|||
pltdata.y_pri_value = 0;
|
||||
pltdata.y_scd_value = 0;
|
||||
}
|
||||
else if(menu_data.scr_now == SCREEN_SETTING)
|
||||
{
|
||||
set_item1_text(PLOT_NUM);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
|
@ -650,6 +712,10 @@ void hold_deal_color_input(void)
|
|||
{
|
||||
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
|
||||
{
|
||||
|
@ -672,6 +738,10 @@ void hold_deal_color_output(void)
|
|||
{
|
||||
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
|
||||
{
|
||||
|
|
|
@ -45,7 +45,6 @@
|
|||
|
||||
/* Private variables ---------------------------------------------------------*/
|
||||
/* USER CODE BEGIN Variables */
|
||||
uint16_t breathe_cnt = 0;
|
||||
uint8_t screen_suspend_flag = 0;
|
||||
/* USER CODE END Variables */
|
||||
osThreadId defaultTaskHandle;
|
||||
|
@ -164,9 +163,18 @@ void MX_FREERTOS_Init(void) {
|
|||
void StartDefaultTask(void const * argument)
|
||||
{
|
||||
/* USER CODE BEGIN StartDefaultTask */
|
||||
uint8_t default_enable = 0;
|
||||
system_sts.default_stack_consume_max = 0;
|
||||
/* Infinite loop */
|
||||
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);
|
||||
}
|
||||
/* USER CODE END StartDefaultTask */
|
||||
|
@ -182,6 +190,7 @@ void StartDefaultTask(void const * argument)
|
|||
void start_task_lcd(void const * argument)
|
||||
{
|
||||
/* USER CODE BEGIN start_task_lcd */
|
||||
system_sts.lvgl_stack_consume_max = 0;
|
||||
/* Infinite loop */
|
||||
for (;;)
|
||||
{
|
||||
|
@ -190,9 +199,8 @@ void start_task_lcd(void const * argument)
|
|||
|
||||
lv_timer_handler(); //LVGL刷新任务
|
||||
|
||||
system_sts.lvgl_stack_consume = uxTaskGetStackHighWaterMark(NULL);
|
||||
system_sts.lvgl_stack_consume = 768 - system_sts.lvgl_stack_consume;
|
||||
|
||||
system_sts.lvgl_stack_consume = LVGL_STACK_SIZE_WORD - uxTaskGetStackHighWaterMark(NULL);
|
||||
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);
|
||||
}
|
||||
/* USER CODE END start_task_lcd */
|
||||
|
@ -210,6 +218,7 @@ float32 fre_set_hart = 0;
|
|||
void start_task_hart(void const * argument)
|
||||
{
|
||||
/* USER CODE BEGIN start_task_hart */
|
||||
system_sts.hart_stack_consume_max = 0;
|
||||
/* Infinite loop */
|
||||
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);
|
||||
}
|
||||
/* USER CODE END start_task_hart */
|
||||
|
@ -256,6 +267,7 @@ uint8_t ble_send_test = 0;
|
|||
void start_task_ble(void const * argument)
|
||||
{
|
||||
/* USER CODE BEGIN start_task_ble */
|
||||
system_sts.ble_stack_consume_max = 0;
|
||||
/* Infinite loop */
|
||||
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);
|
||||
}
|
||||
/* USER CODE END start_task_ble */
|
||||
|
@ -291,11 +305,11 @@ void start_task_ble(void const * argument)
|
|||
void start_rs485(void const * argument)
|
||||
{
|
||||
/* USER CODE BEGIN start_rs485 */
|
||||
system_sts.rs485_stack_consume_max = 0;
|
||||
/* Infinite loop */
|
||||
for (;;)
|
||||
{
|
||||
//该任务用于处理寄存器的数值的读写、当前通讯状态的更新
|
||||
|
||||
//当前通讯状态的更新
|
||||
if( !(tabdata.bluetooth_enable||tabdata.hart_enable||tabdata.modbus_enable) )
|
||||
{
|
||||
sig_trans = TRANS_NONE;
|
||||
|
@ -304,6 +318,8 @@ void start_rs485(void const * argument)
|
|||
//更新modbus的寄存器值
|
||||
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);
|
||||
}
|
||||
/* USER CODE END start_rs485 */
|
||||
|
@ -322,11 +338,12 @@ void start_mux_analog(void const * argument)
|
|||
{
|
||||
/* USER CODE BEGIN start_mux_analog */
|
||||
SIG24130_Init(); //多路输入输出初始化
|
||||
system_sts.mux_stack_consume_max = 0;
|
||||
/* Infinite loop */
|
||||
for (;;)
|
||||
{
|
||||
//编程输出过程,放在此处实时性更好
|
||||
if( progout_data.process == PROGOUT_RUNNING)
|
||||
if(progout_data.process == PROGOUT_RUNNING)
|
||||
{
|
||||
switch (progout_data.output_mode)
|
||||
{
|
||||
|
@ -353,6 +370,7 @@ void start_mux_analog(void const * argument)
|
|||
//输出&输入通道切换
|
||||
mux_signal_switch(&mux_signal);
|
||||
|
||||
//内存、内存碎片、CPU占用监控
|
||||
my_monitor_cnt++;
|
||||
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.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);
|
||||
}
|
||||
/* USER CODE END start_mux_analog */
|
||||
|
@ -381,7 +401,8 @@ void start_mux_analog(void const * argument)
|
|||
void start_menu(void const * argument)
|
||||
{
|
||||
/* USER CODE BEGIN start_menu */
|
||||
screen_data_init(); //显示数据初始化
|
||||
screen_data_init();
|
||||
system_sts.menu_stack_consume_max = 0;
|
||||
/* Infinite loop */
|
||||
for(;;)
|
||||
{
|
||||
|
@ -390,9 +411,8 @@ void start_menu(void const * argument)
|
|||
|
||||
screen_run();
|
||||
|
||||
system_sts.menu_stack_consume = uxTaskGetStackHighWaterMark(NULL);
|
||||
system_sts.menu_stack_consume = 512 - system_sts.menu_stack_consume;
|
||||
|
||||
system_sts.menu_stack_consume = MENU_STACK_SIZE_WORD - uxTaskGetStackHighWaterMark(NULL);
|
||||
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);
|
||||
}
|
||||
/* USER CODE END start_menu */
|
||||
|
@ -404,12 +424,12 @@ void start_menu(void const * argument)
|
|||
* @param argument: Not used
|
||||
* @retval None
|
||||
*/
|
||||
//char task_status[255];
|
||||
|
||||
/* USER CODE END Header_start_task_monitor */
|
||||
void start_task_monitor(void const * argument)
|
||||
{
|
||||
/* USER CODE BEGIN start_task_monitor */
|
||||
uint8_t monitor_enable = 0;
|
||||
system_sts.monitor_stack_consume_max = 0;
|
||||
/* Infinite loop */
|
||||
for(;;)
|
||||
{
|
||||
|
@ -418,6 +438,12 @@ void start_task_monitor(void const * argument)
|
|||
//vTaskList(task_status);
|
||||
//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);
|
||||
}
|
||||
/* USER CODE END start_task_monitor */
|
||||
|
|
|
@ -625,7 +625,7 @@ void proc_huart_it_dma(UART_HandleTypeDef *huart)
|
|||
|
||||
//计算接收到的数据长度
|
||||
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;
|
||||
}
|
||||
|
|
File diff suppressed because it is too large
Load Diff
Loading…
Reference in New Issue