更新:
1、线圈寄存器的开关量配置完成; 2、本地按键操作时寄存器值能够正常跟随; 3、上位机发送指令时可以实现对应功能;
This commit is contained in:
parent
8c6c7c3618
commit
d2f454235e
|
@ -135,6 +135,7 @@ void scr_init_run(void)
|
||||||
{
|
{
|
||||||
menu_data.scr_init_flag = 1; //开机动画结束,只执行一次
|
menu_data.scr_init_flag = 1; //开机动画结束,只执行一次
|
||||||
menu_data.scr_now = SCREEN_MAIN; //开机动画结束后,默认进入主界面
|
menu_data.scr_now = SCREEN_MAIN; //开机动画结束后,默认进入主界面
|
||||||
|
set_coil_val(COIL_ADDR_SCREEN_SWITCH, 0);
|
||||||
|
|
||||||
init_step = 0;
|
init_step = 0;
|
||||||
}
|
}
|
||||||
|
|
|
@ -643,7 +643,10 @@ void deal_data_save(void)
|
||||||
//出现过错误,未保存
|
//出现过错误,未保存
|
||||||
tabdata.item3_page0_saveflag = 0;
|
tabdata.item3_page0_saveflag = 0;
|
||||||
}
|
}
|
||||||
set_item3_text(DATA_SAVE);
|
|
||||||
|
setting_items_check(ITEM_NONE, tabdata.item_cursor);
|
||||||
|
tabdata.item_cursor = ITEM_3;
|
||||||
|
setting_items_check(tabdata.item_cursor, ITEM_NONE);
|
||||||
|
|
||||||
//使能所有按键
|
//使能所有按键
|
||||||
key_config(KEY_ALL, KEY_STATUS_ENABLE);
|
key_config(KEY_ALL, KEY_STATUS_ENABLE);
|
||||||
|
@ -690,17 +693,17 @@ void deal_data_reset(void)
|
||||||
if(reset_cnt > 5)
|
if(reset_cnt > 5)
|
||||||
{
|
{
|
||||||
reset_cnt = 0;
|
reset_cnt = 0;
|
||||||
tabdata.item3_page0_resetflag = 2;
|
tabdata.item3_page0_resetflag = 2; //已复位
|
||||||
|
tabdata.item3_page0_saveflag = 0; //保存状态更改为“未保存”
|
||||||
|
|
||||||
//更新本页文本
|
//复位后语言可能发生改变,因此刷新选项卡与标题
|
||||||
//保存状态更改为“已保存”
|
|
||||||
tabdata.item3_page0_saveflag = 0;
|
|
||||||
set_item3_text(DATA_SAVE);
|
|
||||||
|
|
||||||
//选项卡与标题
|
|
||||||
setting_laguage_switch(tabdata.item3_page0_language);
|
setting_laguage_switch(tabdata.item3_page0_language);
|
||||||
title_item_refresh();
|
title_item_refresh();
|
||||||
setting_items_page(ITEM_3, 1);
|
|
||||||
|
//通过modbus触发时,需要刷新一下选项卡的内容
|
||||||
|
setting_items_check(ITEM_NONE, tabdata.item_cursor);
|
||||||
|
tabdata.item_cursor = ITEM_3;
|
||||||
|
setting_items_check(tabdata.item_cursor, ITEM_NONE);
|
||||||
|
|
||||||
//使能所有按键
|
//使能所有按键
|
||||||
key_config(KEY_ALL, KEY_STATUS_ENABLE);
|
key_config(KEY_ALL, KEY_STATUS_ENABLE);
|
||||||
|
|
|
@ -99,14 +99,15 @@ void key_functions_main(void)
|
||||||
key_char2struct();
|
key_char2struct();
|
||||||
|
|
||||||
//加载菜单界面
|
//加载菜单界面
|
||||||
lv_scr_load(guider_ui.screen_setting);
|
|
||||||
scr_setting_recover();
|
scr_setting_recover();
|
||||||
|
lv_scr_load(guider_ui.screen_setting);
|
||||||
lv_obj_clear_flag(guider_ui.screen_setting, LV_OBJ_FLAG_HIDDEN);
|
lv_obj_clear_flag(guider_ui.screen_setting, LV_OBJ_FLAG_HIDDEN);
|
||||||
|
|
||||||
//隐藏主界面对象
|
//隐藏主界面对象
|
||||||
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);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
|
|
@ -703,6 +703,7 @@ void key_functions_modbus(void)
|
||||||
lv_obj_del_async(guider_ui.screen_modbus_config);
|
lv_obj_del_async(guider_ui.screen_modbus_config);
|
||||||
|
|
||||||
menu_data.scr_now = SCREEN_SETTING;
|
menu_data.scr_now = SCREEN_SETTING;
|
||||||
|
set_coil_val(COIL_ADDR_SCREEN_SWITCH, 1);
|
||||||
|
|
||||||
//进入拓展功能选项卡
|
//进入拓展功能选项卡
|
||||||
tabdata.item_cursor = ITEM_2;
|
tabdata.item_cursor = ITEM_2;
|
||||||
|
|
|
@ -37,11 +37,8 @@ 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;
|
menu_data.scr_now = SCREEN_MAIN;
|
||||||
|
set_coil_val(COIL_ADDR_SCREEN_SWITCH, 0);
|
||||||
//当前操作从“选项卡选择” 返回 至“主要功能”,按键配置同步更新
|
|
||||||
current_operation = MAIN_FUNCTION;
|
|
||||||
key_config_update(current_operation);
|
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
|
|
@ -8,6 +8,7 @@
|
||||||
#define COIL_ADDR_LIGHT 0x01
|
#define COIL_ADDR_LIGHT 0x01
|
||||||
#define COIL_ADDR_CONFIG_SAVE 0x02
|
#define COIL_ADDR_CONFIG_SAVE 0x02
|
||||||
#define COIL_ADDR_CONFIG_RESET 0x03
|
#define COIL_ADDR_CONFIG_RESET 0x03
|
||||||
|
#define COIL_ADDR_SCREEN_SWITCH 0x04
|
||||||
|
|
||||||
//自定义离散状态寄存器地址
|
//自定义离散状态寄存器地址
|
||||||
|
|
||||||
|
|
|
@ -412,10 +412,9 @@ void modbus_registers_update(void)
|
||||||
//线圈寄存器,读写
|
//线圈寄存器,读写
|
||||||
void modbus_reg_update_coil(void)
|
void modbus_reg_update_coil(void)
|
||||||
{
|
{
|
||||||
if( get_coil_val(COIL_ADDR_ON_OFF) != menu_data.io_on2off )
|
if( (get_coil_val(COIL_ADDR_ON_OFF) != menu_data.io_on2off)&&(get_coil_val(COIL_ADDR_ON_OFF) < 2) )
|
||||||
{
|
{
|
||||||
//进入此处说明线圈寄存器的值被上位机修改
|
//进入此处说明线圈寄存器的值被上位机修改
|
||||||
|
|
||||||
if( menu_data.scr_now == SCREEN_MAIN )
|
if( menu_data.scr_now == SCREEN_MAIN )
|
||||||
{
|
{
|
||||||
//只有在主界面时,修改内容才生效
|
//只有在主界面时,修改内容才生效
|
||||||
|
@ -429,12 +428,10 @@ void modbus_reg_update_coil(void)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if( get_coil_val(COIL_ADDR_LIGHT) != tabdata.item3_page0_lightflag )
|
if( (get_coil_val(COIL_ADDR_LIGHT) != tabdata.item3_page0_lightflag)&&(get_coil_val(COIL_ADDR_LIGHT) < 2) )
|
||||||
{
|
{
|
||||||
//进入此处说明线圈寄存器的值被上位机修改
|
//进入此处说明线圈寄存器的值被上位机修改
|
||||||
|
|
||||||
tabdata.item3_page0_lightflag = get_coil_val(COIL_ADDR_LIGHT);
|
tabdata.item3_page0_lightflag = get_coil_val(COIL_ADDR_LIGHT);
|
||||||
|
|
||||||
if(tabdata.item3_page0_lightflag)
|
if(tabdata.item3_page0_lightflag)
|
||||||
{
|
{
|
||||||
LIGHT_ON;
|
LIGHT_ON;
|
||||||
|
@ -444,6 +441,91 @@ void modbus_reg_update_coil(void)
|
||||||
LIGHT_OFF;
|
LIGHT_OFF;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if( (get_coil_val(COIL_ADDR_CONFIG_SAVE) == 1)&&(tabdata.item3_page0_saveflag == 0) )
|
||||||
|
{
|
||||||
|
if( (menu_data.scr_now == SCREEN_SETTING)&&(tabdata.item3_page0_resetflag != 1) )
|
||||||
|
{
|
||||||
|
//当前处于设置界面,并且未处于重置过程中,执行保存
|
||||||
|
tabdata.item3_page0_saveflag = 1;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
//拒绝修改
|
||||||
|
set_coil_val(COIL_ADDR_CONFIG_SAVE, 0);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if( (get_coil_val(COIL_ADDR_CONFIG_RESET) == 1)&&(tabdata.item3_page0_resetflag == 0) )
|
||||||
|
{
|
||||||
|
if( (menu_data.scr_now == SCREEN_SETTING)&&(tabdata.item3_page0_saveflag != 1) )
|
||||||
|
{
|
||||||
|
//当前处于设置界面,并且未处于保存过程中,执行复位
|
||||||
|
tabdata.item3_page0_resetflag = 1;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
//拒绝修改
|
||||||
|
set_coil_val(COIL_ADDR_CONFIG_RESET, 0);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if( get_coil_val(COIL_ADDR_SCREEN_SWITCH) != ( (uint8_t)menu_data.scr_now - 1 ) )
|
||||||
|
{
|
||||||
|
switch (menu_data.scr_now)
|
||||||
|
{
|
||||||
|
case SCREEN_INIT:
|
||||||
|
{
|
||||||
|
//拒绝修改,开机动画视作主界面
|
||||||
|
set_coil_val(COIL_ADDR_SCREEN_SWITCH, 0);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
|
||||||
|
case SCREEN_MAIN:
|
||||||
|
{
|
||||||
|
//切换至设置界面;
|
||||||
|
scr_setting_recover();
|
||||||
|
lv_scr_load(guider_ui.screen_setting);
|
||||||
|
lv_obj_clear_flag(guider_ui.screen_setting, LV_OBJ_FLAG_HIDDEN);
|
||||||
|
|
||||||
|
//隐藏主界面对象
|
||||||
|
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);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
|
||||||
|
case SCREEN_SETTING:
|
||||||
|
{
|
||||||
|
//切换至主界面;
|
||||||
|
//加载主界面
|
||||||
|
if(!scr_main_set_flag)
|
||||||
|
{
|
||||||
|
scr_main_set_flag = 1;
|
||||||
|
setup_scr_screen_main(&guider_ui);
|
||||||
|
delay_cnt(200); //不加延时有概率卡死
|
||||||
|
}
|
||||||
|
scr_main_recover();
|
||||||
|
lv_scr_load(guider_ui.screen_main);
|
||||||
|
lv_obj_clear_flag(guider_ui.screen_main, LV_OBJ_FLAG_HIDDEN);
|
||||||
|
|
||||||
|
//隐藏设置界面对象
|
||||||
|
lv_obj_add_flag(guider_ui.screen_setting, LV_OBJ_FLAG_HIDDEN);
|
||||||
|
|
||||||
|
menu_data.scr_now = SCREEN_MAIN;
|
||||||
|
set_coil_val(COIL_ADDR_SCREEN_SWITCH, 0);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
|
||||||
|
default:
|
||||||
|
{
|
||||||
|
//拒绝修改,其他界面视作设置界面
|
||||||
|
set_coil_val(COIL_ADDR_SCREEN_SWITCH, 1);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
//离散输入寄存器,上位机只读
|
//离散输入寄存器,上位机只读
|
||||||
|
@ -460,9 +542,10 @@ void modbus_reg_update_input(void)
|
||||||
|
|
||||||
void set_coil_val(uint8_t addr, uint8_t bit_val)
|
void set_coil_val(uint8_t addr, uint8_t bit_val)
|
||||||
{
|
{
|
||||||
if( (addr < COIL_ADD_MIN)||(addr > COIL_ADD_MAX)||(bit_val > 1) ) return;
|
if( (addr > COIL_ADD_MAX)||(bit_val > 1) ) return;
|
||||||
|
|
||||||
addr -= COIL_ADD_MIN;
|
addr -= COIL_ADD_MIN;
|
||||||
|
if( addr > 200 ) return;
|
||||||
|
|
||||||
uint8_t pcoil = addr / 8; //数组的第几个元素, 0-7
|
uint8_t pcoil = addr / 8; //数组的第几个元素, 0-7
|
||||||
uint8_t pbit = addr % 8; //元素的第几位, 0-7
|
uint8_t pbit = addr % 8; //元素的第几位, 0-7
|
||||||
uint8_t fac = 0; //辅助计算的因子
|
uint8_t fac = 0; //辅助计算的因子
|
||||||
|
@ -490,10 +573,11 @@ void set_coil_val(uint8_t addr, uint8_t bit_val)
|
||||||
|
|
||||||
uint8_t get_coil_val(uint8_t addr)
|
uint8_t get_coil_val(uint8_t addr)
|
||||||
{
|
{
|
||||||
uint8_t result = 0;
|
if( addr > COIL_ADD_MAX ) return 99;
|
||||||
if( (addr < COIL_ADD_MIN)||(addr > COIL_ADD_MAX) ) return;
|
|
||||||
|
|
||||||
addr -= COIL_ADD_MIN;
|
addr -= COIL_ADD_MIN;
|
||||||
|
if( addr > 200 ) return 99;
|
||||||
|
|
||||||
|
uint8_t result = 0;
|
||||||
uint8_t pcoil = addr / 8; //数组的第几个元素, 0-7
|
uint8_t pcoil = addr / 8; //数组的第几个元素, 0-7
|
||||||
uint8_t pbit = addr % 8; //元素的第几位, 0-7
|
uint8_t pbit = addr % 8; //元素的第几位, 0-7
|
||||||
|
|
||||||
|
|
File diff suppressed because it is too large
Load Diff
Loading…
Reference in New Issue