|
SMLogix Вопросы о работе в среде SMLogix и о FBD-программировании |
|
Опции темы | Поиск в этой теме |
12.06.2019, 15:59 | #1 |
Member
Регистрация: Jun 2019
Адрес: Новосибирск
Сообщения: 76
Благодарил(а): 1 раз(а)
Поблагодарили:
1 раз в 1 сообщении
|
Странная работа FBD-блока Fronts? или ClrSrcreen? (нет проблемы)
Здравствуйте, товарищи и коллеги.
Изучаю работу SMLogix, это для меня новая среда. И конкретно сейчас столкнулся с нюансом, который объяснить для себя не могу. В чём суть: решаю элементарую формальную задачку. поверх текущего экрана (в данном случае это просто картинка на весь экран) нарисовать прямоугольник при касании экрана, потом этот прямоугольник убрать, когда убирают палец. Поскольку у нас нет возможности при отрисовке чего-либо на экране запоминать старое содержимое экрана, и нет в картинках прозрачности, то нам необходимо при "убирании" динамического объекта чистить весь экран и перерисовывать фон. Вот с этим и возник вопрос. Как следует из хелпов, блок очистки экрана работает по уровню управляющего сигнала: пока там 1, Трим непрерывно циклически чистит экран. В этом можно убедиться на практике, если в проекте тупо соединить выход "состояние" от экранной кнопки и вход enable у блока очистки. Держим палец на кнопке - экран залит, отпускаем - снова видим текущий экран. Если же мы хотим производить отрисовку и очистку по фронту (однократно, в момент нажимании-отпускании), то тут начинается непонятное. Если используем блок Fronts (см. картинку 1), то при отпускании кнопки мы не увидим текущий экран проекта. Мы будем наблюдать очищеный экран устройства. Если же детектировать спадающий фронт ручками (см. картинку 2), то экран устройства очищается, и задник текущего экрана вслед за этим прорисовывается. Насколько я понимаю, и связи между блоками, и сами блоки работают в единой временной сетке, задаваемой тиками. Следовательно, две схемы эквивалентны, но реальное поведение разное. Вопросы: в какие моменты в работающем проекте происходит перерисовка экрана? Можно ли как-то влиять на этот процесс? В лоджиксе есть UI-выходы, но где их найти СМАрте и как ими пользоваться? Можно просто ссылку. Какой из двух вариантов поведения проекта является глючным, а какой правильным с точки зрения идеологии сегнетикс? Что из этого мне лучше использовать в своих проектах в дальнейшем? Если я перерисую вручную задник экрана (передёрну видимость), то перекроет ли он всё остальное, что было до этого поверх него (кнопки, текст и тд)? Лоджикс 3.28, Trim5 |
12.06.2019, 16:46 | #2 | |
Senior Member
Регистрация: May 2009
Сообщения: 1 034
Благодарил(а): 9 раз(а)
Поблагодарили:
22 раз(а) в 22 сообщениях
|
Ответ: Странная работа FBD-блока Fronts? или ClrSrcreen?
Цитата:
А 1 на выходе AND у вас откуда берётся? __________________ RTFM |
|
12.06.2019, 18:05 | #3 |
Member
Регистрация: Jun 2019
Адрес: Новосибирск
Сообщения: 76
Благодарил(а): 1 раз(а)
Поблагодарили:
1 раз в 1 сообщении
|
Ответ: Странная работа FBD-блока Fronts? или ClrSrcreen?
оччень, знаете-ли уместный вопрос )) присмотрелся к своей "схеме", стыдно стало ... а ещё такую а простыню накатал действительно, единице там взяться неоткуда... и вообще, как выяснилось, всё предельно просто, а я начитался устаревших хелпов. Оказывается, блоки вывода прекрасно умеют сами себя стирать, и не надо ничего мудрить.
фух... ну надо же такую глупость ляпнуть, а )) Разобрались. |
13.06.2019, 11:16 | #4 |
Сотрудник Сегнетикс
Регистрация: Mar 2016
Адрес: SPb
Сообщения: 4 341
Благодарил(а): 0 раз(а)
Поблагодарили:
255 раз(а) в 251 сообщениях
|
Ответ: Странная работа FBD-блока Fronts? или ClrSrcreen? (нет проблемы)
А вы пока просто "играетесь" и это была конечная цель? Или она глобальнее?
|
13.06.2019, 19:41 | #5 | |
Member
Регистрация: Jun 2019
Адрес: Новосибирск
Сообщения: 76
Благодарил(а): 1 раз(а)
Поблагодарили:
1 раз в 1 сообщении
|
Ответ: Странная работа FBD-блока Fronts? или ClrSrcreen? (нет проблемы)
Цитата:
Теперь я собираюсь развивать функционал, делать дополнительные меню, алгоритмы регулирования, ротации, оповещения и тд И конечно же, красивую графику, дабы заказчик увидел "товар лицом". С этой целью пытаюсь получше прочувствовать механизмы работы лоджикса (а точнее - проектов и графики в частности), чтобы понять свои возможности и ограничения. Надо выработать функциональную базу для построения развитого графического интерфейса. Чтобы в едином подходе все было построено, и в будущем можно было масштабировать и заимствовать. Сейчас я выяснил: информация, что графические блоки не умеют себя стирать, всётки актуальна. Но по событиям на тачскрине (или где-то уровнем выше) происходит автоматическая перерисовка экрана... и при отпускании кнопки блок как бы "стирается". Вобщем, актуальными остались следующие вопросы: 1 как передавать в SMArt значения с UI-выходов, и что с ними можно там делать? В хелпах есть есть об этом упоминание, но ни конкретных инструкций, ни чего-то такого в интерфейсе я не нашёл 2 можно ли как-то из fbd-редактора активировать/деактивировать, переключать экраны? или как-то вызывать обновление экрана обходными путями? |
|
13.06.2019, 19:53 | #6 |
Senior Member
Регистрация: May 2009
Сообщения: 1 034
Благодарил(а): 9 раз(а)
Поблагодарили:
22 раз(а) в 22 сообщениях
|
Ответ: Странная работа FBD-блока Fronts? или ClrSrcreen? (нет проблемы)
Можно. С помощью UI-переменных. Под изображением контроллера в SMArt-е есть конфигуратор переходов. Просто наведите на него курсор, всплывёт подсказка.
__________________ RTFM |
13.06.2019, 22:26 | #7 |
Member
Регистрация: Jun 2019
Адрес: Новосибирск
Сообщения: 76
Благодарил(а): 1 раз(а)
Поблагодарили:
1 раз в 1 сообщении
|
Ответ: Странная работа FBD-блока Fronts? или ClrSrcreen? (нет проблемы)
Да, нашёл.
В подсказке написано, что переход происходит по положительному фронту ui-переменной, к нему привязанной. Это вполне логично, я бы тоже так сделал. Однако, это на практике не так. На самом деле переход происходит при условии переменная=1. Посмотрите на скриншоты. Пока тик=1, экраны быстро-быстро переключаются друг на друга. Когда тик=0, ничего не происходит. И на главные вопросы я пока не могу найти ответ. 1 что сделать, чтобы после очистки экрана прорисовалась форма SMArt? 2 в какие моменты (или при каких условиях) обновляется экран SMArt? За всем этим стоит желание делать комбинированный графический интерфейс: что-то мы прописываем в SMArt, а что-то в fbd. Так можно создавать "композитные" элементы вывода в макросах (например число в рамке, табличка) и параметризовать графику, легко менять внешний вид и легенду. Ну и в общем-то нет проблем, кроме одной: можно показать, но нельзя погасить... Последний раз редактировалось MadKid, 13.06.2019 в 22:44 |
14.06.2019, 00:04 | #8 |
Member
Регистрация: Jun 2019
Адрес: Новосибирск
Сообщения: 76
Благодарил(а): 1 раз(а)
Поблагодарили:
1 раз в 1 сообщении
|
Ответ: Странная работа FBD-блока Fronts? или ClrSrcreen? (нет проблемы)
Собсно, всё придумал, задача решена.
Может кто воспользуется. Задача: поверх экрана SMArt выводить и гасить fbd-элементы графики. Решение. Помещаем на экран "прозрачку" - картинку .png, любого размера, в любом месте, с полностью прозрачным изображением. Из fbd меняем видимость этой картинки только для того, чтобы перерисовывался экран. Собсно, ClrScreen в этом случае не нужен, вся fbd-графика, у которой выключен enable, сама стряхивается. Документация не рекомендует нам рисовать фигуры непрерывно-циклично. Тогда мы будем держать enable=0, и надо будет его передёргивать всякий раз, как только на экране что-то меняется, чтобы и наша графика тоже отобразилась. Не очень удобно, но можно. ЗЫ можно и не прозрачку, а любую картинку, лишь бы на самый задний план, чтоб её никогда видно не было. Последний раз редактировалось MadKid, 14.06.2019 в 00:18 |
14.06.2019, 00:17 | #9 | |
Senior Member
Регистрация: May 2009
Сообщения: 1 034
Благодарил(а): 9 раз(а)
Поблагодарили:
22 раз(а) в 22 сообщениях
|
Ответ: Странная работа FBD-блока Fronts? или ClrSrcreen? (нет проблемы)
Цитата:
__________________ RTFM |
|
14.06.2019, 00:27 | #10 | |
Member
Регистрация: Jun 2019
Адрес: Новосибирск
Сообщения: 76
Благодарил(а): 1 раз(а)
Поблагодарили:
1 раз в 1 сообщении
|
Ответ: Странная работа FBD-блока Fronts? или ClrSrcreen? (нет проблемы)
Цитата:
Эт саааавсем не то же самое, и как минимум доку надо подкорректить. Ведь это важно: все переменные, по которым возможен выход из экрана, должны быть = 0 при входе в него. Несмотря на то, что управление вроде как фронтом осуществляется. |
|
14.06.2019, 00:58 | #11 |
Senior Member
Регистрация: May 2009
Сообщения: 1 034
Благодарил(а): 9 раз(а)
Поблагодарили:
22 раз(а) в 22 сообщениях
|
Ответ: Странная работа FBD-блока Fronts? или ClrSrcreen? (нет проблемы)
А так оно чаще всего и бывает.
__________________ RTFM |
14.06.2019, 10:03 | #12 |
Member
Регистрация: Jun 2019
Адрес: Новосибирск
Сообщения: 76
Благодарил(а): 1 раз(а)
Поблагодарили:
1 раз в 1 сообщении
|
Ответ: Странная работа FBD-блока Fronts? или ClrSrcreen? (нет проблемы)
Согласен с Вами в этом, потому как нормальный человек в своём проекте закодирует экраны по принципу "one-hot".
Однако, не хочу показаться занудой, но всё же. "Чаще всего" != "всегда". Если вдруг у кого-то будет другой подход при создании проекта, и он будет полагаться на определение "по фронту ui-переменной", то у него могут возникнуть непонятки. И такой момент: это особенно вероятно, если человек в этой области ещё свежий )), что само по себе не добавляет ситуации ловкости. Ведь фактически выход из экрана управляется уровнем ui-переменной. Активность = !переменная (только на 1 цикл нарушается). И сразу требования к схеме управления экранами становятся другие. А так-то понятно всё. |
14.06.2019, 10:25 | #13 |
Сотрудник Segnetics
Регистрация: Jan 2006
Адрес: Russia, SPb
Сообщения: 18 159
Благодарил(а): 15 раз(а)
Поблагодарили:
665 раз(а) в 607 сообщениях
|
Ответ: Странная работа FBD-блока Fronts? или ClrSrcreen? (нет проблемы)
Это является баяном для нашего форума) Вашу придумку мы буквально устали рассказывать в каждой второй теме)
Но оно понятно, гораздо приятнее придумывать, чем читать Добавлено через 1 минуту Управление уровнями. В справке ошибка, если фронт написан. __________________ Программа делает то что написал программист, а не то что он хотел. Добро всегда побеждает зло. Кто победил - тот и добрый. |