更新:

1、modbus配置界面开发完成;
2、modbus收发界面,TX和RX开发完成;
This commit is contained in:
吴俊潮 2025-05-27 12:38:51 +08:00
parent c5f62d3d6a
commit c01717daac
12 changed files with 22475 additions and 18033 deletions

View File

@ -3,4 +3,17 @@
#include "apps_gather.h" #include "apps_gather.h"
//选中cur熄灭cur_prv
void window_num_check(uint8_t cur, uint8_t cur_prv);
void window_num_set(uint8_t pos, uint8_t num);
void value2window(void);
void window2value(void);
void cursor_move(int8_t step);
void window_display(void);
#endif #endif

View File

@ -289,18 +289,6 @@ uint8_t init_set_bar(uint8_t start, uint8_t end, uint16_t interval)
void scr_main_run(void) void scr_main_run(void)
{ {
//modbus主站功能测试
if(tabdata.modbus_master_send_flag == 1)
{
tabdata.modbus_enable = 1;
tabdata.modbus_type = SIG_MASTER;
tabdata.modbus_master_send_flag = 0;
modbus_rtu_master_load();
modbus_rtu_master_send();
}
//实时更新设定值 //实时更新设定值
sig_sv_update(); //不做延时,尽快响应 sig_sv_update(); //不做延时,尽快响应

View File

@ -142,8 +142,10 @@ void trx_items_check(MOD_TRX_ITEMS cur, MOD_TRX_ITEMS cur_prv)
void scr_modbus_config_recover(void) void scr_modbus_config_recover(void)
{ {
//标题
lv_label_set_text(guider_ui.screen_modbus_config_label_title, text_pack.modbus_master_title); lv_label_set_text(guider_ui.screen_modbus_config_label_title, text_pack.modbus_master_title);
//左列名称
lv_label_set_text(guider_ui.screen_modbus_config_label_device_addr, text_pack.modbus_master_item[0]); lv_label_set_text(guider_ui.screen_modbus_config_label_device_addr, text_pack.modbus_master_item[0]);
lv_label_set_text(guider_ui.screen_modbus_config_label_start_addr, text_pack.modbus_master_item[1]); lv_label_set_text(guider_ui.screen_modbus_config_label_start_addr, text_pack.modbus_master_item[1]);
lv_label_set_text(guider_ui.screen_modbus_config_label_bytes, text_pack.modbus_master_item[2]); lv_label_set_text(guider_ui.screen_modbus_config_label_bytes, text_pack.modbus_master_item[2]);
@ -153,6 +155,23 @@ void scr_modbus_config_recover(void)
lv_label_set_text(guider_ui.screen_modbus_config_label_calibration, text_pack.modbus_master_item[6]); lv_label_set_text(guider_ui.screen_modbus_config_label_calibration, text_pack.modbus_master_item[6]);
lv_label_set_text(guider_ui.screen_modbus_config_label_next, text_pack.modbus_master_item[7]); lv_label_set_text(guider_ui.screen_modbus_config_label_next, text_pack.modbus_master_item[7]);
char str_temp[16];
//右列值
sprintf(str_temp, "0x%02x", mod_master.target_id);
lv_label_set_text(guider_ui.screen_modbus_config_value_device_addr, str_temp);
sprintf(str_temp, "0x%04x", mod_master.start_address);
lv_label_set_text(guider_ui.screen_modbus_config_value_start_addr, str_temp);
sprintf(str_temp, "%d", mod_master.byte_num);
lv_label_set_text(guider_ui.screen_modbus_config_value_bytes, str_temp);
sprintf(str_temp, "%d", mod_master.timeout);
lv_label_set_text(guider_ui.screen_modbus_config_value_timeout, str_temp);
sprintf(str_temp, "0x%02x", mod_master.command_code);
lv_label_set_text(guider_ui.screen_modbus_config_value_cmd, str_temp);
sprintf(str_temp, "%d", mod_master.register_num);
lv_label_set_text(guider_ui.screen_modbus_config_value_register_num, str_temp);
//lv_label_set_text(guider_ui.screen_modbus_config_value_calibration, );
//lv_label_set_text(guider_ui.screen_modbus_config_value_next, );
mod_mas_conf_cursor = MOD_CONF_SLAVE_ID; //配置项的游标 mod_mas_conf_cursor = MOD_CONF_SLAVE_ID; //配置项的游标
mod_mas_conf_cursor_prv = MOD_CONF_NONE; mod_mas_conf_cursor_prv = MOD_CONF_NONE;
config_items_check(mod_mas_conf_cursor, mod_mas_conf_cursor_prv); config_items_check(mod_mas_conf_cursor, mod_mas_conf_cursor_prv);
@ -160,6 +179,9 @@ void scr_modbus_config_recover(void)
void scr_modbus_trx_recover(void) 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_value_Data,""); lv_label_set_text(guider_ui.screen_modbus_trx_value_Data,"");
lv_label_set_text(guider_ui.screen_modbus_trx_value_Tx,""); lv_label_set_text(guider_ui.screen_modbus_trx_value_Tx,"");

View File

@ -208,8 +208,8 @@ void setting_items_page(ITEMS ite, uint8_t page)
//特殊处理,避免其他选项卡也被染上颜色 //特殊处理,避免其他选项卡也被染上颜色
if(ite != ITEM_1) if(ite != ITEM_1)
{ {
set_obj_color(guider_ui.screen_setting_label_21, 7); set_obj_color(guider_ui.screen_setting_label_21, 6);
set_obj_color(guider_ui.screen_setting_label_31, 7); set_obj_color(guider_ui.screen_setting_label_31, 6);
} }
switch (ite) switch (ite)

View File

@ -1,6 +1,325 @@
#include "key_functions_modbus.h" #include "key_functions_modbus.h"
uint8_t mod_trx_set_flag = 0; //trx的屏幕是否加载过 uint8_t mod_trx_set_flag = 0; //trx的屏幕是否加载过
uint8_t window_cursor = 0; //弹窗游标位置
uint8_t window_cursor_prv = 0;
uint8_t window_num[4] = {0}; //窗口内的四个数字
void window_num_check(uint8_t cur, uint8_t cur_prv)
{
switch (cur)
{
case 0:
{
lv_obj_set_style_bg_color(guider_ui.screen_modbus_config_num_0, lv_color_hex(COLOR_CONTENTS_CHECKED), LV_PART_MAIN|LV_STATE_DEFAULT);
}
break;
case 1:
{
lv_obj_set_style_bg_color(guider_ui.screen_modbus_config_num_1, lv_color_hex(COLOR_CONTENTS_CHECKED), LV_PART_MAIN|LV_STATE_DEFAULT);
}
break;
case 2:
{
lv_obj_set_style_bg_color(guider_ui.screen_modbus_config_num_2, lv_color_hex(COLOR_CONTENTS_CHECKED), LV_PART_MAIN|LV_STATE_DEFAULT);
}
break;
case 3:
{
lv_obj_set_style_bg_color(guider_ui.screen_modbus_config_num_3, lv_color_hex(COLOR_CONTENTS_CHECKED), LV_PART_MAIN|LV_STATE_DEFAULT);
}
break;
default:
break;
}
switch (cur_prv)
{
case 0:
{
lv_obj_set_style_bg_color(guider_ui.screen_modbus_config_num_0, lv_color_hex(COLOR_CONTENTS_UNCHECKED), LV_PART_MAIN|LV_STATE_DEFAULT);
}
break;
case 1:
{
lv_obj_set_style_bg_color(guider_ui.screen_modbus_config_num_1, lv_color_hex(COLOR_CONTENTS_UNCHECKED), LV_PART_MAIN|LV_STATE_DEFAULT);
}
break;
case 2:
{
lv_obj_set_style_bg_color(guider_ui.screen_modbus_config_num_2, lv_color_hex(COLOR_CONTENTS_UNCHECKED), LV_PART_MAIN|LV_STATE_DEFAULT);
}
break;
case 3:
{
lv_obj_set_style_bg_color(guider_ui.screen_modbus_config_num_3, lv_color_hex(COLOR_CONTENTS_UNCHECKED), LV_PART_MAIN|LV_STATE_DEFAULT);
}
break;
default:
break;
}
}
void cursor_move(int8_t step)
{
switch (mod_mas_conf_cursor)
{
case MOD_CONF_SLAVE_ID:
{
window_cursor_prv = window_cursor;
window_cursor = 3*(window_cursor == 2) + 2*(window_cursor == 3);
}
break;
case MOD_CONF_START_ADDRESS:
{
window_cursor_prv = window_cursor;
window_cursor += step;
if(window_cursor > 200)
{
window_cursor = 3;
}
else if (window_cursor > 3)
{
window_cursor = 0;
}
}
break;
case MOD_CONF_COMMAND:
{
window_cursor_prv = window_cursor;
window_cursor = 3*(window_cursor == 2) + 2*(window_cursor == 3);
}
break;
case MOD_CONF_REGISTER_NUM:
{
window_cursor_prv = window_cursor;
window_cursor += step;
if(window_cursor < 1)
{
window_cursor = 3;
}
else if (window_cursor > 3)
{
window_cursor = 1;
}
}
break;
default:
break;
}
window_num_check(window_cursor, window_cursor_prv);
}
void window_num_set(uint8_t pos, uint8_t num)
{
char str_temp[8] = {0};
if( num <= 16 )
{
sprintf(str_temp, "%x", num);
}
else if (num == 20)
{
strcpy(str_temp, "0");
}
else if (num == 21)
{
strcpy(str_temp, "x");
}
else
{
strcpy(str_temp, "-");
}
switch (pos)
{
case 0:
{
lv_label_set_text(guider_ui.screen_modbus_config_num_0, str_temp);
}
break;
case 1:
{
lv_label_set_text(guider_ui.screen_modbus_config_num_1, str_temp);
}
break;
case 2:
{
lv_label_set_text(guider_ui.screen_modbus_config_num_2, str_temp);
}
break;
case 3:
{
lv_label_set_text(guider_ui.screen_modbus_config_num_3, str_temp);
}
break;
default:
break;
}
}
void value2window(void)
{}
void window2value(void)
{
char str_temp[16];
switch (mod_mas_conf_cursor)
{
case MOD_CONF_SLAVE_ID:
{
mod_master.target_id = window_num[2] & 0x0F;
mod_master.target_id <<= 4;
mod_master.target_id += window_num[3] & 0x0F;
sprintf(str_temp, "0x%02x", mod_master.target_id);
lv_label_set_text(guider_ui.screen_modbus_config_value_device_addr, str_temp);
}
break;
case MOD_CONF_START_ADDRESS:
{
mod_master.start_address = window_num[0] & 0x0F;
mod_master.start_address <<= 4;
mod_master.start_address += window_num[1] & 0x0F;
mod_master.start_address <<= 4;
mod_master.start_address += window_num[2] & 0x0F;
mod_master.start_address <<= 4;
mod_master.start_address += window_num[3] & 0x0F;
sprintf(str_temp, "0x%04x", mod_master.start_address);
lv_label_set_text(guider_ui.screen_modbus_config_value_start_addr, str_temp);
}
break;
case MOD_CONF_COMMAND:
{
mod_master.command_code= window_num[2];
mod_master.command_code <<= 4;
mod_master.command_code += window_num[3];
sprintf(str_temp, "0x%02x", mod_master.command_code);
lv_label_set_text(guider_ui.screen_modbus_config_value_cmd, str_temp);
}
break;
case MOD_CONF_REGISTER_NUM:
{
mod_master.register_num = window_num[1]*100 + window_num[2]*10 + window_num[3];
sprintf(str_temp, "%d", mod_master.register_num);
lv_label_set_text(guider_ui.screen_modbus_config_value_register_num, str_temp);
}
break;
default:
break;
}
}
void window_display(void)
{
switch (mod_mas_conf_cursor)
{
case MOD_CONF_SLAVE_ID:
{
//前两位显示“0x”游标从2开始2-3
window_num[0] = 20;
window_num[1] = 21;
window_num[2] = mod_master.target_id >> 4;
window_num[3] = mod_master.target_id & 0x0F;
for(uint8_t i = 0; i < 4; i++)
{
window_num_set(i, window_num[i]);
}
window_cursor = 2;
window_cursor_prv = 99;
window_num_check(window_cursor, window_cursor_prv);
lv_obj_clear_flag(guider_ui.screen_modbus_config_window_config, LV_OBJ_FLAG_HIDDEN);
}
break;
case MOD_CONF_START_ADDRESS:
{
//游标从0开始0-3
window_num[0] = 0x000F & (mod_master.start_address >> 12);
window_num[1] = 0x000F & (mod_master.start_address >> 8);
window_num[2] = 0x000F & (mod_master.start_address >> 4);
window_num[3] = 0x000F & (mod_master.start_address );
for(uint8_t i = 0; i < 4; i++)
{
window_num_set(i, window_num[i]);
}
window_cursor = 0;
window_cursor_prv = 99;
window_num_check(window_cursor, window_cursor_prv);
lv_obj_clear_flag(guider_ui.screen_modbus_config_window_config, LV_OBJ_FLAG_HIDDEN);
}
break;
case MOD_CONF_COMMAND:
{
//前两位显示“0x”游标从2开始2-3
window_num[0] = 20;
window_num[1] = 21;
window_num[2] = mod_master.command_code >> 4;
window_num[3] = mod_master.command_code & 0x0F;
for(uint8_t i = 0; i < 4; i++)
{
window_num_set(i, window_num[i]);
}
window_cursor = 2;
window_cursor_prv = 99;
window_num_check(window_cursor, window_cursor_prv);
lv_obj_clear_flag(guider_ui.screen_modbus_config_window_config, LV_OBJ_FLAG_HIDDEN);
}
break;
case MOD_CONF_REGISTER_NUM:
{
//第一位显示“0”游标从1开始1-3
window_num[0] = 0;
window_num[1] = mod_master.register_num / 100;
window_num[2] = (mod_master.register_num / 10) % 10;
window_num[3] = mod_master.register_num % 10;
for(uint8_t i = 0; i < 4; i++)
{
window_num_set(i, window_num[i]);
}
window_cursor = 1;
window_cursor_prv = 99;
window_num_check(window_cursor, window_cursor_prv);
lv_obj_clear_flag(guider_ui.screen_modbus_config_window_config, LV_OBJ_FLAG_HIDDEN);
}
break;
default:
break;
}
}
void key_functions_modbus(void) void key_functions_modbus(void)
{ {
if( key_pv.status == KEY_STATUS_DISABLE ) return; if( key_pv.status == KEY_STATUS_DISABLE ) return;
@ -35,6 +354,25 @@ void key_functions_modbus(void)
} }
break; break;
case MODBUS_MASTER_CONFIG_MODIFY:
{
if( (mod_mas_conf_cursor == MOD_CONF_SLAVE_ID)||(mod_mas_conf_cursor == MOD_CONF_START_ADDRESS)||(mod_mas_conf_cursor == MOD_CONF_COMMAND) )
{
window_num[window_cursor] += 1;
if(window_num[window_cursor] >= 16) window_num[window_cursor] = 0;
window_num_set(window_cursor, window_num[window_cursor]);
}
else if (mod_mas_conf_cursor == MOD_CONF_REGISTER_NUM)
{
window_num[window_cursor] += 1;
if(window_num[window_cursor] >= 10) window_num[window_cursor] = 0;
window_num_set(window_cursor, window_num[window_cursor]);
}
}
break;
case MODBUS_MASTER_TRX: case MODBUS_MASTER_TRX:
{ {
if(mod_mas_trx_cursor) if(mod_mas_trx_cursor)
@ -83,6 +421,25 @@ void key_functions_modbus(void)
} }
break; break;
case MODBUS_MASTER_CONFIG_MODIFY:
{
if( (mod_mas_conf_cursor == MOD_CONF_SLAVE_ID)||(mod_mas_conf_cursor == MOD_CONF_START_ADDRESS)||(mod_mas_conf_cursor == MOD_CONF_COMMAND) )
{
window_num[window_cursor] -= 1;
if(window_num[window_cursor] > 200) window_num[window_cursor] = 15;
window_num_set(window_cursor, window_num[window_cursor]);
}
else if (mod_mas_conf_cursor == MOD_CONF_REGISTER_NUM)
{
window_num[window_cursor] -= 1;
if(window_num[window_cursor] > 200) window_num[window_cursor] = 9;
window_num_set(window_cursor, window_num[window_cursor]);
}
}
break;
case MODBUS_MASTER_TRX: case MODBUS_MASTER_TRX:
{ {
if(!mod_mas_trx_cursor) if(!mod_mas_trx_cursor)
@ -128,6 +485,59 @@ void key_functions_modbus(void)
} }
break; break;
case MODBUS_MASTER_CONFIG_MODIFY:
{
switch (mod_mas_conf_cursor)
{
case MOD_CONF_SLAVE_ID:
{}
//break;
case MOD_CONF_START_ADDRESS:
{}
//break;
case MOD_CONF_COMMAND:
{}
//break;
case MOD_CONF_REGISTER_NUM:
{
cursor_move(-1);
}
break;
case MOD_CONF_BYTES:
{
char str_temp[16];
mod_master.byte_num -= 1;
if( mod_master.byte_num > 200) mod_master.byte_num = 16;
sprintf(str_temp, "%d", mod_master.byte_num);
lv_label_set_text(guider_ui.screen_modbus_config_value_bytes, str_temp);
}
break;
case MOD_CONF_TIMEOUT:
{
char str_temp[16];
mod_master.timeout -= 100;
if( mod_master.timeout > 60000) mod_master.timeout = 10000;
sprintf(str_temp, "%d", mod_master.timeout);
lv_label_set_text(guider_ui.screen_modbus_config_value_timeout, str_temp);
}
break;
default:
break;
}
}
break;
case MODBUS_MASTER_TRX: case MODBUS_MASTER_TRX:
{ {
if(mod_mas_trx_cursor) if(mod_mas_trx_cursor)
@ -177,6 +587,58 @@ void key_functions_modbus(void)
} }
break; break;
case MODBUS_MASTER_CONFIG_MODIFY:
{
switch (mod_mas_conf_cursor)
{
case MOD_CONF_SLAVE_ID:
{}
//break;
case MOD_CONF_START_ADDRESS:
{}
//break;
case MOD_CONF_COMMAND:
{}
//break;
case MOD_CONF_REGISTER_NUM:
{
cursor_move(1);
}
break;
case MOD_CONF_BYTES:
{
char str_temp[16];
mod_master.byte_num += 1;
if( mod_master.byte_num > 16) mod_master.byte_num = 0;
sprintf(str_temp, "%d", mod_master.byte_num);
lv_label_set_text(guider_ui.screen_modbus_config_value_bytes, str_temp);
}
break;
case MOD_CONF_TIMEOUT:
{
char str_temp[16];
mod_master.timeout += 100;
if( mod_master.timeout > 10000) mod_master.timeout = 0;
sprintf(str_temp, "%d", mod_master.timeout);
lv_label_set_text(guider_ui.screen_modbus_config_value_timeout, str_temp);
}
break;
default:
break;
}
}
break;
case MODBUS_MASTER_TRX: case MODBUS_MASTER_TRX:
{ {
if(mod_mas_trx_cursor) if(mod_mas_trx_cursor)
@ -212,30 +674,92 @@ void key_functions_modbus(void)
{ {
case MODBUS_MASTER_CONFIG: case MODBUS_MASTER_CONFIG:
{ {
if(mod_mas_conf_cursor == MOD_CONF_NEXT) switch(mod_mas_conf_cursor)
{ {
if(!mod_trx_set_flag) case MOD_CONF_SLAVE_ID:
{ {
mod_trx_set_flag = 1; window_display();
setup_scr_screen_modbus_trx(&guider_ui); current_operation = MODBUS_MASTER_CONFIG_MODIFY;
delay_cnt(200); //不加延时有概率卡死
} }
//加载trx界面 break;
scr_modbus_trx_recover();
lv_scr_load(guider_ui.screen_modbus_trx);
lv_obj_clear_flag(guider_ui.screen_modbus_trx, LV_OBJ_FLAG_HIDDEN);
menu_data.scr_now = SCREEN_MODBUS_MASTER_TRX; case MOD_CONF_START_ADDRESS:
{
//隐藏配置界面,熄灭当前游标 window_display();
lv_obj_add_flag(guider_ui.screen_modbus_config, LV_OBJ_FLAG_HIDDEN); current_operation = MODBUS_MASTER_CONFIG_MODIFY;
config_items_check(MOD_CONF_NONE, mod_mas_conf_cursor); }
break;
current_operation = MODBUS_MASTER_TRX; case MOD_CONF_BYTES:
{
lv_obj_set_style_bg_color(guider_ui.screen_modbus_config_value_bytes, lv_color_hex(COLOR_CONTENTS_FOCUSED), LV_PART_MAIN|LV_STATE_DEFAULT);
current_operation = MODBUS_MASTER_CONFIG_MODIFY;
}
break;
case MOD_CONF_TIMEOUT:
{
lv_obj_set_style_bg_color(guider_ui.screen_modbus_config_value_timeout, lv_color_hex(COLOR_CONTENTS_FOCUSED), LV_PART_MAIN|LV_STATE_DEFAULT);
current_operation = MODBUS_MASTER_CONFIG_MODIFY;
}
break;
case MOD_CONF_COMMAND:
{
window_display();
current_operation = MODBUS_MASTER_CONFIG_MODIFY;
}
break;
case MOD_CONF_REGISTER_NUM:
{
window_display();
current_operation = MODBUS_MASTER_CONFIG_MODIFY;
}
break;
case MOD_CONF_CALIBRATION:
{}
break;
case MOD_CONF_NEXT:
{
if(!mod_trx_set_flag)
{
mod_trx_set_flag = 1;
setup_scr_screen_modbus_trx(&guider_ui);
delay_cnt(200); //不加延时有概率卡死
}
//加载trx界面
scr_modbus_trx_recover();
lv_scr_load(guider_ui.screen_modbus_trx);
lv_obj_clear_flag(guider_ui.screen_modbus_trx, LV_OBJ_FLAG_HIDDEN);
menu_data.scr_now = SCREEN_MODBUS_MASTER_TRX;
//隐藏配置界面,熄灭当前游标
lv_obj_add_flag(guider_ui.screen_modbus_config, LV_OBJ_FLAG_HIDDEN);
config_items_check(MOD_CONF_NONE, mod_mas_conf_cursor);
current_operation = MODBUS_MASTER_TRX;
}
break;
case MOD_CONF_NONE:
{}
break;
default:
break;
} }
} }
break; break;
case MODBUS_MASTER_CONFIG_MODIFY:
{
}
break;
case MODBUS_MASTER_TRX: case MODBUS_MASTER_TRX:
{ {
switch (mod_mas_trx_cursor) switch (mod_mas_trx_cursor)
@ -255,16 +779,54 @@ void key_functions_modbus(void)
case MOD_TRX_SET: case MOD_TRX_SET:
{ {
trx_focus = 1; trx_focus = 1;
trx_items_check(mod_mas_trx_cursor, MOD_TRX_NONE); trx_items_check(mod_mas_trx_cursor, MOD_TRX_NONE);
modbus_rtu_master_load();
switch (mod_master.tx_error_message)
{
case TX_ERROR_WRONG_CMD:
{
lv_label_set_text(guider_ui.screen_modbus_trx_value_Tx, "EEROR: Wrong Command");
}
break;
case TX_ERROR_COIL_NUM:
{
lv_label_set_text(guider_ui.screen_modbus_trx_value_Tx, "EEROR: Wrong Coil Num");
}
break;
case TX_ERROR_HOLDREG_NUM:
{
lv_label_set_text(guider_ui.screen_modbus_trx_value_Tx, "EEROR: Wrong HoldReg Num");
}
break;
case TX_ERROR_NONE:
{
char str0[10] = {0};
char str_temp[256] = {0};
for(uint8_t i = 0; i < mod_master.data_tx_len; i++)
{
sprintf(str0, "%02x ", mod_master.data_tx[i]);
strcat(str_temp, str0);
}
lv_label_set_text(guider_ui.screen_modbus_trx_value_Tx, str_temp);
}
break;
default:
break;
}
} }
break; break;
case MOD_TRX_SEND: case MOD_TRX_SEND:
{ {
trx_focus = 1; trx_focus = 1;
trx_items_check(mod_mas_trx_cursor, MOD_TRX_NONE); trx_items_check(mod_mas_trx_cursor, MOD_TRX_NONE);
modbus_rtu_master_send();
} }
break; break;
@ -327,6 +889,54 @@ void key_functions_modbus(void)
} }
break; break;
case MODBUS_MASTER_CONFIG_MODIFY:
{
switch (mod_mas_conf_cursor)
{
case MOD_CONF_SLAVE_ID:
{}
//break;
case MOD_CONF_START_ADDRESS:
{}
//break;
case MOD_CONF_COMMAND:
{}
//break;
case MOD_CONF_REGISTER_NUM:
{
lv_obj_add_flag(guider_ui.screen_modbus_config_window_config, LV_OBJ_FLAG_HIDDEN);
window_num_check(99, window_cursor);
window_cursor = 0;
window_cursor_prv = 99;
window2value();
memset(window_num, 0, 4);
}
break;
case MOD_CONF_BYTES:
{
lv_obj_set_style_bg_color(guider_ui.screen_modbus_config_value_bytes, lv_color_hex(COLOR_CONTENTS_CHECKED), LV_PART_MAIN|LV_STATE_DEFAULT);
}
break;
case MOD_CONF_TIMEOUT:
{
lv_obj_set_style_bg_color(guider_ui.screen_modbus_config_value_timeout, lv_color_hex(COLOR_CONTENTS_CHECKED), LV_PART_MAIN|LV_STATE_DEFAULT);
}
break;
default:
break;
}
current_operation = MODBUS_MASTER_CONFIG;
}
break;
case MODBUS_MASTER_TRX: case MODBUS_MASTER_TRX:
{ {
//加载配置界面 //加载配置界面

View File

@ -61,6 +61,8 @@ void duty_tim6(void)
if( (sig2slave_step == 1)||(mod_master.tx_flag == TX_OK) ) if( (sig2slave_step == 1)||(mod_master.tx_flag == TX_OK) )
{ {
sig2slave_current_tick++; sig2slave_current_tick++;
mod_master.rx_error_message = RX_ERROR_NONE;
if(sig2slave_current_tick > mod_master.timeout) if(sig2slave_current_tick > mod_master.timeout)
{ {
if(sig2slave_step == 0) if(sig2slave_step == 0)
@ -74,8 +76,9 @@ void duty_tim6(void)
__HAL_UART_CLEAR_IDLEFLAG(&huart2); __HAL_UART_CLEAR_IDLEFLAG(&huart2);
sig2slave_current_tick = 0; sig2slave_current_tick = 0;
sig2slave_step++; sig2slave_step = 2; //无论是哪个阶段出现超时均跳转至step2
scom2_rs485.rx_flag = TRUE; scom2_rs485.rx_flag = TRUE;
sig_trans = TRANS_MODBUS_SIG_TO_SLAVE; //发送回调中会修改成none因此在这里重新赋值接收超时也属于接收的一种结果
} }
} }
} }

View File

@ -4,8 +4,8 @@
#include "apps_gather.h" #include "apps_gather.h"
#include "modbus_rtu.h" #include "modbus_rtu.h"
#define TX_BUFF_MAX 128 #define TX_BUFF_MAX 32
#define TX_DATA_MAX 100 #define TX_DATA_MAX 16
#define RX_BUFF_MAX 128 #define RX_BUFF_MAX 128
#define TX_NONE 0x00 //没有需要发送的数据 #define TX_NONE 0x00 //没有需要发送的数据
@ -42,7 +42,7 @@ typedef struct
uint16_t crc16; //MODBUS_CRC16校验码 uint16_t crc16; //MODBUS_CRC16校验码
uint8_t byte_num; //需要写入的线圈、保持寄存器字节数 uint8_t byte_num; //需要写入的线圈、保持寄存器字节数
uint8_t data_tx_value8[TX_DATA_MAX]; //需要写入的数值,8位 uint8_t data_tx_value8[TX_DATA_MAX]; //需要写入的数值,8位
uint16_t data_tx_value16[TX_DATA_MAX]; //需要写入的数值,16位 uint16_t data_tx_value16[TX_DATA_MAX/2];//需要写入的数值,16位
uint8_t data_tx[TX_BUFF_MAX]; //存放完整的发送数据报 uint8_t data_tx[TX_BUFF_MAX]; //存放完整的发送数据报
uint8_t data_rx[RX_BUFF_MAX]; //存放完整的接收数据报 uint8_t data_rx[RX_BUFF_MAX]; //存放完整的接收数据报
uint8_t data_tx_len; //发送的数据报长度 uint8_t data_tx_len; //发送的数据报长度

View File

@ -269,9 +269,9 @@ void trans_modbus_sig2slave(void)
strcpy(mod_master.result_display, "ERROR: TIMEOUT"); strcpy(mod_master.result_display, "ERROR: TIMEOUT");
} }
//在屏幕上显示 mod_master.result_display 字符串 //在屏幕上显示 mod_master.result_display 字符串
lv_label_set_text(guider_ui.screen_modbus_trx_value_Rx, mod_master.result_display);
//处理完成后复位相关参数 //处理完成后复位相关参数
modbus_rtu_master_init();
sig2slave_step = 0; sig2slave_step = 0;
sig_trans = TRANS_NONE; sig_trans = TRANS_NONE;
memset(scom2_rs485.rx_buff, 0, scom2_rs485.rx_len); memset(scom2_rs485.rx_buff, 0, scom2_rs485.rx_len);

View File

@ -29,6 +29,7 @@ void modbus_rtu_master_load(void)
mod_master.data_tx[0] = mod_master.target_id; mod_master.data_tx[0] = mod_master.target_id;
mod_master.data_tx[1] = mod_master.command_code; mod_master.data_tx[1] = mod_master.command_code;
memset(mod_master.data_rx, 0, sizeof(mod_master.data_rx)); memset(mod_master.data_rx, 0, sizeof(mod_master.data_rx));
mod_master.tx_error_message = TX_ERROR_NONE;
switch (mod_master.data_tx[1]) switch (mod_master.data_tx[1])
{ {

View File

@ -110,10 +110,10 @@ void setup_scr_screen_modbus_trx(lv_ui *ui)
//Write codes screen_modbus_trx_label_Rx //Write codes screen_modbus_trx_label_Rx
ui->screen_modbus_trx_label_Rx = lv_label_create(ui->screen_modbus_trx); ui->screen_modbus_trx_label_Rx = lv_label_create(ui->screen_modbus_trx);
lv_label_set_text(ui->screen_modbus_trx_label_Rx, "Rx:"); lv_label_set_text(ui->screen_modbus_trx_label_Rx, "(HEX)Rx:");
lv_label_set_long_mode(ui->screen_modbus_trx_label_Rx, LV_LABEL_LONG_WRAP); lv_label_set_long_mode(ui->screen_modbus_trx_label_Rx, LV_LABEL_LONG_WRAP);
lv_obj_set_pos(ui->screen_modbus_trx_label_Rx, 3, 150); lv_obj_set_pos(ui->screen_modbus_trx_label_Rx, 3, 150);
lv_obj_set_size(ui->screen_modbus_trx_label_Rx, 40, 18); lv_obj_set_size(ui->screen_modbus_trx_label_Rx, 90, 18);
//Write style for screen_modbus_trx_label_Rx, Part: LV_PART_MAIN, State: LV_STATE_DEFAULT. //Write style for screen_modbus_trx_label_Rx, Part: LV_PART_MAIN, State: LV_STATE_DEFAULT.
lv_obj_set_style_border_width(ui->screen_modbus_trx_label_Rx, 0, LV_PART_MAIN|LV_STATE_DEFAULT); lv_obj_set_style_border_width(ui->screen_modbus_trx_label_Rx, 0, LV_PART_MAIN|LV_STATE_DEFAULT);
@ -217,10 +217,10 @@ void setup_scr_screen_modbus_trx(lv_ui *ui)
//Write codes screen_modbus_trx_label_Tx //Write codes screen_modbus_trx_label_Tx
ui->screen_modbus_trx_label_Tx = lv_label_create(ui->screen_modbus_trx); ui->screen_modbus_trx_label_Tx = lv_label_create(ui->screen_modbus_trx);
lv_label_set_text(ui->screen_modbus_trx_label_Tx, "Tx:"); lv_label_set_text(ui->screen_modbus_trx_label_Tx, "(HEX)Tx:");
lv_label_set_long_mode(ui->screen_modbus_trx_label_Tx, LV_LABEL_LONG_WRAP); lv_label_set_long_mode(ui->screen_modbus_trx_label_Tx, LV_LABEL_LONG_WRAP);
lv_obj_set_pos(ui->screen_modbus_trx_label_Tx, 166, 3); lv_obj_set_pos(ui->screen_modbus_trx_label_Tx, 166, 3);
lv_obj_set_size(ui->screen_modbus_trx_label_Tx, 40, 18); lv_obj_set_size(ui->screen_modbus_trx_label_Tx, 90, 18);
//Write style for screen_modbus_trx_label_Tx, Part: LV_PART_MAIN, State: LV_STATE_DEFAULT. //Write style for screen_modbus_trx_label_Tx, Part: LV_PART_MAIN, State: LV_STATE_DEFAULT.
lv_obj_set_style_border_width(ui->screen_modbus_trx_label_Tx, 0, LV_PART_MAIN|LV_STATE_DEFAULT); lv_obj_set_style_border_width(ui->screen_modbus_trx_label_Tx, 0, LV_PART_MAIN|LV_STATE_DEFAULT);

File diff suppressed because one or more lines are too long

File diff suppressed because it is too large Load Diff