Показать сообщение отдельно
Старый 18.07.2017, 11:44   #2
Arsie
Сотрудник Segnetics
 
Аватара для Arsie
 
Регистрация: Jan 2006
Адрес: Russia, SPb
Сообщения: 18 117
Благодарил(а): 15 раз(а)
Поблагодарили: 660 раз(а) в 604 сообщениях
По умолчанию Ответ: Баг в примере построении иерархии меню(SMH2010)?

Цитата:
Сообщение от Roll4Repairs Посмотреть сообщение
Здравствуйте! Я решил в своем проекте добавить сервисное меню и взял за основу "example - построение иерархии меню" отсюда, проект делаю на SMH2010:
http://forum.segnetics.com/showthread.php?t=865

В процессе отладки проекта сделанного по аналогии, я обнаружил что если достаточно быстро двигаться вверх или вниз по пунктам подменю и быстро нажимать Enter, то могут получиться непредвиденные взаимодействия: на экране появится мигающий черный прямоугольник, как при работе с INPUT number, при этом не получится выйти из этого режима ни Esc, ни Enter, ни попыткой ввода чисел. Этот баг повторяется и в "example - построение иерархии меню", при чем срабатывает и для разделителей, и для булевых переменных.

Шаги повторения бага в "example - построение иерархии меню":
- зайти в меню нажав F1
- зайти в подменю "2.Настройки" и ввести пароль
- спустить курсор на Коэф P(авар)
- нажать кнопку вниз и почти сразу же кнопку enter
- появится курсор ввода чисел напротив "Коррекция:". после этого поможет только перезагрузка контроллера.

Возможная причина:
В процессе отладки я заметил что при быстрой смене пунктов подменю параметры в этом блоке AND "не поспевают" за работой контроллера. (выделен в приложении)

В принципе о таких вещах можно предупредить в руководстве, тем более что сервисный режим пользователю доступен не будет, но всё же хотелось исправить этот баг.
Вы первый человек с 2006 года, который обнаружил, что одновременное нажатие "вниз" и "ввод" напротив разделителя вводит макрос меню в ступор

Блоки работают как нужно и прекрасно за всем успевают. Просто данная ситуация не "разрулена" на уровне логики, т.к. вероятность найденного события... Ну вообще маловероятна. За почти 12 лет один известный случай.

Вы можете полностью исключить ситуацию, поставив на пути данных клавиатуры заслон из D-триггера, как показано на картинке.


PS. Вы, наверное, время тика установили большое, чтобы смотреть отладку было удобнее. В реальной жизни контроллер не будет работать настолько медленно) А нажимать кнопки со скоростью более 10-20 нажатий в секунду обычный оператор вряд ли сможет)
Изображения
Тип файла: png Безымянный.png (7.8 Кбайт, 44 просмотров)


__________________
Программа делает то что написал программист, а не то что он хотел.

Добро всегда побеждает зло. Кто победил - тот и добрый.
Arsie вне форума   Ответить с цитированием