ВходНаше всё Теги codebook 无线电组件 Поиск Опросы Закон Понедельник
25 ноября
175676
Связанные сообщения
Menu
Может это частная проблема, может,я все не так делаю... Посидел, подумал, почитал. Получается решение моих проблем одно-общая дл...2011-09-05
megajohn (14.12.2009 15:46, просмотров: 2847)
Концепция работы с HMI (touch-screen панелями) по ModBus. Вообщем, в начале реализовал типо так  Tmenu_item PGM menu[] = { // desktop MENU_LB( 0, only_show_once, &pars.b_hmi_edited_en, true ), MENU_LW( 0, only_show, &pars.count_pots, 0 ), // test MENU_LW(100, only_show, &caret_pos_need_clk_, 0 ), // test MENU_LW( 99, only_show, &caret_pos_curr_clk_, 0 ), // test MENU_LW( 98, only_show, &pendulum_curr_clk_, 0 ), // test MENU_LB( 1, only_show, &pars.b_startstop_ico, false ), MENU_LB( 2, edited, &pars.b_startstop_btn, false ), // vertical 1 MENU_LW( 1, edited, &base.w_level_step, 5 ), // шаг между этажами MENU_LW( 2, edited, &base.w_pos_upload, 9 ), // Уровень транспортера MENU_LW( 3, both_dir, &base.w_len_stop, 2 ), // Путь торможения каретки MENU_LW( 4, edited, &base.w_cyl_up_delay_s, 1 ), // задержка снятия давления с цилиндра подъёма MENU_LW( 5, edited, &base.w_transp_off_delay_clk, 1 ), // Время остановки ленты до постановки банок на ленту } структура меню: LB - coil, LW - reg (в понятиях Weintek) адрес в панели Тип параметра: изменяется на панели, изменяется в контроллере, либо там либо там адрес переменной значение по умолчанию и каждый параметр передается по отдельности. но когда количество пунктов меню перевалило за 100, то оказалось, что суммарный опрос стал большим, и соотвесвенно реакция системы уменьшилась. Хотел ввести еще типа приоритетов для параметров, то есть параметры с приоритетом High отправляются чаще, чем Low. В итоге остановился на варианте меню работы с блоками: bool *group_lb_show_p[] = { &pars.b_hmi_edited_en, // 0 &pars.b_startstop_ico, // 1 }; bool *group_lb_edited_p[] = { &pars.b_startstop_btn, // 50 &pars.b_adjust_out_en, // 51 &base.b_recipe_30_13, // 52 }; bool *group_lb_both_dir_p[] = { &pars.bo_capture_pot, // 100 &pars.bo_caret_brake, // 101 ... &pars.b_floor30, // 129 }; u16 *group_lw_show_p[] = { &pars.count_pots, // 0 &caret_pos_curr_clk, // 1 &pendulum_curr_clk, // 2 }; u16 *group_lw_edited_p[] = { &base.w_level_step, // 50 &base.w_pos_upload, // 51 &base.w_len_stop, // 52 ... &base.w_soap_time_s, // 70 &base.w_delay_rotate_s, // 71 &base.w_delay_pump_s, // 72 }; Tmenu_item2 PGM menu[] = { MENU_GROUP_LB( only_show, 0, 1, group_lb_show_p ), MENU_GROUP_LB( edited, 50, 52, group_lb_edited_p ), MENU_GROUP_LB( both_dir, 100, 129, group_lb_both_dir_p ), MENU_GROUP_LW( only_show, 0, 2, group_lw_show_p ), MENU_GROUP_LW( edited, 50, 72, group_lw_edited_p ), } в итоге все быстро, но данные одного типа должны идти друг за другом. Посему вопрос: может кто лучше реализовывал вариант работы меню для HMI ?