ВходНаше всё Теги codebook 无线电组件 Поиск Опросы Закон Суббота
4 мая
175676
Связанные сообщения
Menu
Может это частная проблема, может,я все не так делаю... Посидел, подумал, почитал. Получается решение моих проблем одно-общая дл...2011-09-05
megajohn (14.12.2009 15:46, просмотров: 2745)
Концепция работы с 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 ?