PDA

Просмотр полной версии : Примеры HMI для СП270



petera
14.06.2014, 21:40
Может кто-либо желает поделится своими наработками по реализации элементов управления для СП270:confused:.

petera
14.06.2014, 21:52
Для затравки.
Для экономии места на экране, предлагаю реализацию выпадающих списков. Подходит для тех случаев, когда нужно для какого-либо параметра выбирать одно значение из заранее заданных.
http://www.owen.ru/forum/attachment.php?attachmentid=13286&d=1402766858
Выпадающие списки сделаны только стандартными средствами конфигуратора. Список может содержать не обязательно цифровые значения параметра, а например его название.

ЗЫ. Во вложении обновленный вариант

petera
16.06.2014, 23:53
UPD. Немного исправил проект со списком. Т.к. в предыдущем варианте окна Меню1 и Меню2 ошибочно были с рамкой.

petera
17.06.2014, 16:32
Видео инструкция по созданию выпадающего списка

https://www.youtube.com/watch?v=9MAHZtxAooA

Для того, что бы список был красивым я использовал свое оформление кнопок для списка.

https://www.youtube.com/watch?v=AU8WHTuVd6k
Если все сделать по видео инструкции,то должно быть так

http://youtu.be/8ca7Z8EjMMY

ЗЫ. Лишние "телодвижения" в первом видео после 7:25, связаны с тем, что забыл в начале исправить вариационный текст http://www.owen.ru/forum/showthread.php?t=14191&p=139860&viewfull=1#post139860 иначе значения 38400 и 56000 не отображаются:(

petera
25.03.2015, 02:58
Пример -не пример, а может просто баловство http://www.owen.ru/forum/attachment.php?attachmentid=16916&d=1425224278
Интерфейс для игры двух игроков, один играет за "Х", второй - за "О".
Крестики начинают первыми.

https://www.youtube.com/watch?v=Q4POzKTYpwg
17334

Проект специально сделал без ГМ, используются только стандартные компоненты. Хотя с помощью ГМ можно было все упростить
Игровое поле - девять индикаторов "пусто-О-Х" в виде динамического текста, для каждого индикатора свой регистр PSW256..PSW264. В этих регистрах хранится информация о клетках игрового поля в виде:
0 -не занятая клетка, текст "пусто";
2 -в клетке находится "О";
8 -в клетке находится "Х".
Для отображения "О" и "Х" использую шрифт "Marlett". Для этого шрифта символ "r" соответствует "Х", а символ "n" соответствует "О"
Почему использую числа 2 и 8 объясню ниже.

Поверх индикаторов расположены функциональные кнопки, невидимые, хотя можно их не скрывать. Каждая кнопка имеет бит разрешения PSB256..PSB264.
Дополнительно используются два бита очередности хода игроков -PSB265 ход игрока "Х", PSB266 ход игрока "О", пришлось использовать два раздельных бита, т.к. ф.кнопки и ф.области не могут анализировать нулевое состояние управляющих битов, так же нельзя анализировать переход управляющего бита из "1" в "0".
Индикатор очередности хода(счетчик ходов) и результата игры - динамический текст с регистром управления PSW269.
Четыре регистра для анализа выигрышной комбинации для "Х" или "О":
PSW265 -в одной из трех строк;
PSW266 -в одном из трех столбцов;
PSW267 -в первой диагонали;
PSW267 -во второй диагонали.
При запуске экрана или при нажатии кнопки "Сброс" все биты разрешения кнопок PSB256..PSB264 устанавливаются в "1", PSB265=1, PSB266=0(ход "Х"), клетки игрового поля очищаются (PSW256..PSW264=0), счетчик ходов PSW269=0.
Теперь игрок "Х", может нажать любую из девяти кнопок, т.к. биты разрешения у кнопок в "1". В конце списка функций при нажатии любой кнопки(Pressing) стоят функции:
-реверс бит очередности хода игроков (PSB265, PSB266), таким образом последующее нажатие другой кнопки будет обеспечивать ввод в другую клетку противоположного символа.

-сброс бита разрешения для этой же кнопки, таким образом нажатая кнопка будет скрыта и повторное нажатие на нее будет не возможно.
При отпускании кнопки(Releasing) происходит инкремент счетчика ходов, соответственно будет меняться надпись на индикаторе очередности ходов. При достижении счетчиком состояния 9, если не было выигрышных комбинаций, на индикаторе очередности хода будет надпись "Ничья" и так как все кнопки уже нажаты, то игра окончена и необходимо нажать кнопку "Сброс".
Теперь вернемся к списку функций при нажатии любой кнопки(Pressing),
17336
полу схематично список можно представить так

PSW265=Сумма чисел в клетках в этой строки, за исключением текущей клетки;
PSW266=Сумма чисел в клетках в этом столбце, за исключением текущей клетки;
PSW267=Сумма чисел в клетках на диагонали, за исключением текущей клетки. Только для кнопок на диагоналях и центральной кнопки;
PSW268=Сумма чисел в клетках на второй диагонали, за исключением текущей клетки. Только для центральной кнопки;
Записать в текущую клетку "8", если ход у "Х";
Записать в текущую клетку "2", если ход у "О";


Примечание. Анализ "если ход у Х и если ход у О" осуществляется с помощью битов разрешения для каждой из функций. Доступ к этим битам -кнопка "Пароль". http://www.owen.ru/forum/showthread.php?t=14132&p=100969&viewfull=1#post100969


Функции 1, 2, 3 и 4 вычисляют выигрышные комбинации по строкам, столбцам и диагоналям игрового поля. Как это работает. Смотрим на функции 5 и 6. На предыдущих шагах эти функции могли записывать в клетки игрового поля или 2 или 8, или в клетках еще нет "О" и "Х" -значит будет число 0. И так, что мы можем получить в результате суммирования двух ячеек на текущих строке, столбце или диагонали?
Если в обоих ячейках находились "О", то сумма=4, что соответствует установленному второму биту в результате суммирования.
Если в обоих ячейках находились "Х", то сумма=16, что соответствует установленному четвертому биту в результате суммирования.
Если в обоих ячейках нет одинаковых символов, то нет ни второго ни четвертого бита.
Но если игрок в текущую клетку сейчас ставит "Х", то анализировать надо наличие четвертого бита в сумме чисел соседних клеток, а не второго. И наоборот, если игрок в текущую клетку сейчас ставит "О", то анализировать надо наличие второго бита в сумме чисел соседних клеток, а не четвертого.
Для этого, в зависимости от, очередности хода выполняются оставшиеся функции при нажатии любой кнопки(Pressing):
Сбросить бит PSW265.2, если ход у "Х";
Сбросить бит PSW266.2, если ход у "Х";
Сбросить бит PSW267.2, если ход у "Х";
Сбросить бит PSW265.4, если ход у "О";
Сбросить бит PSW265.4, если ход у "О";
Сбросить бит PSW265.4, если ход у "О".
Примечание см.выше.

Осталось рассказать про фиксацию выигрышных комбинаций. Для этого используются четыре функциональные области для определения выигрыша "Х" и четыре функциональные области для определения выигрыша "О". В каждой из четырех ф.областей одни и те же функции, только запускаются они от разных бит. Это все по тому, что стандартными компонентами нельзя реализовать операцию ИЛИ.
В группе функций для определения выигрыша "Х" каждая запускается от четвертого бита сумм ячеек по строкам, столбцам и диагоналям.
17346
Что они делают. Записывают в счетчик очередности ходов "10", что соответствует надписи Выигрыш "Х", биты разрешения для всех кнопок сбрасываются, что исключает возможность нажимать кнопки после завершения игры.
Аналогично и для группы функций для определения выигрыша "О", только надпись будет другая - Выигрыш "О".

petera
05.04.2015, 05:24
Тут один форумчанин захотел сделать меню в стиле Windows :rolleyes:
http://www.owen.ru/forum/attachment.php?attachmentid=16915&d=1425224217 Однако мне кажется, что он слишком сложным путем пошел.
Решил поучаствовать, может и мне пригодится. Предлагаю два варианта. Оба практически одинаковые, только в первом кнопка вызова меню вверху экрана

https://www.youtube.com/watch?v=sYU-txp1M4Q
А во втором -в стиле кнопки "Пуск" Windows.

https://www.youtube.com/watch?v=x8CbaLaljtQ
В таких меню можно использовать выпадающие списки.
Для меню специально не использовал ГМ, все сделано с помощью стандартных компонентов.
Описание проектов и методика создания таких меню сделаю позже.

petera
06.04.2015, 14:48
Обещанное описание проекта с меню.
Каждое подменю реализовано в отдельном окне.
17545
В качестве строк меню использую функциональные кнопки двух типов

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


17547



для строк имеющих подменю следующего уровня. В них находятся функции закрытия всех подменю последующих уровней и открытия исходящей ветви. Эти кнопки отличаются визуальным оформлением (стрелочка - уголок). Кроме того под такими кнопками находится лампа для подсветки выбранного пути в дереве меню. В такие кнопки тоже можно добавить нужные функции, например для подготовки нужных данных для последующего уровня.


17548
Оформление кнопок зависит от места, которое занимает кнопка в списке. Всего используется 10 типов оформления
17544
Все кнопки прозрачные и имеют только контур и надпись.
Кнопки, расположенные на против вызывающих кнопок меню предыдущего уровня, не имеют левой вертикальной линии. Это сделано для визуального выделения соответствия подменю пункту в меню предыдущего уровня. Т.к. ниспадающую структуру дерева каждого меню сделать не получится из-за ограничения вертикального размера экрана. По этому подменю последующих уровней придется размещать выше или ниже строки в текущем уровне.
Каждое подменю вызывается стандартным "Вызовом окна". Вызовы окна размещаются на специальном невидимом окне по заранее известным координатам узловых точек, которые определяются по структуре дерева меню. Таким образом "Вызовы окон" не засоряют поле экранов и такое меню очень удобно редактировать -перемещать, добавлять или удалять требуемые "Вызовы окон" на служебном окне.
Шаг узловых точек по горизонтали кратен ширине окон, а по вертикали -ширине строки меню.
17546
Последнее меню в ветви может иметь ширину отличную от шага по горизонтали.
В каждом столбце в одной ключевой точке может находится более одного "Вызова окна" для подменю этого уровня, по этому искать их нужно под другими "Вызовами окна"
В качестве битов управления использую разряды трех регистров PSW, каждый регистр для своего уровня. Получилось меню с тремя уровнями.
Регистры PSW использую потому, что так проще закрывать все открытые подменю, записал в регистр "0" и готово. Хотя можно было использовать биты PSB. Если правильно выбирать адрес для первого PSB в группе, то к такой группе можно обращаться как к одному регистру WORD или DWORD http://www.owen.ru/forum/showthread.php?t=15352
Скрытое окно со структурой меню должно иметь высоту равную 234-высота кнопки вызова меню, ширина этого окна 480. Это окно вызывается в скрытом режиме функцией главной кнопки "Меню". Координаты вызова окна, если кнопка внизу экрана -{0,0}. Если кнопка будет вверху экрана, то координаты вызова окна ={0, высота кнопки}
Главная кнопка вызова меню
Функции в момент нажатия
17549
функции в момент отпускания
17550
результат выполнения будет зависеть от вспомогательного бита разрешения (кнопка "Пароль") http://www.owen.ru/forum/showthread.php?t=14132&p=100969&viewfull=1#post100969. В результате при первом нажатие кнопки окна со структурой меню открываются, а при повторном нажатии закрываются.

petera
28.11.2015, 18:15
Пример использования многоуровнего меню.

https://www.youtube.com/watch?v=Kb7xo4ALnEc

Исходный проект без меню здесь http://www.owen.ru/forum/showthread.php?t=7977&p=187330&viewfull=1#post187330

Идеологию построения меню пришлось немного изменить, но об этом позже.

petera
21.06.2016, 23:38
Озадачил меня таким графиком werg http://www.owen.ru/forum/showthread.php?t=24685&p=212794&viewfull=1#post212794

AutoScale сиречь автоматическое изменение масштаба графика, нужен мне для того, что бы на панельке с манюсеньким экранчиком
наблюдать графическое отображение переменной с приличной точностью.
Например величина переменной возрастает от 0 до 120 едениц а потом продолжает колебаться в пределах от 79 до 81.
Вот и хотелось бы, что бы автоматически мин и макс оси Y был равен величина переменной +\- еденица например.

И вот, что у меня получилось после реализации такого алгоритма решения http://www.owen.ru/forum/showthread.php?t=24685&p=212850&viewfull=1#post212850
25072

https://www.youtube.com/watch?v=4kyxcpcu5ck