То, что вы описываете - это штатный функционал. По умолчанию всё именно так и работает.
Вид для печати
Создается одинаковый набор экранов, но с разными ветками переходов и они не должны перекрещиваться.
У меня так работает две ветки. Одна на СПК с возможностью изменения уставок и вторая для инета без возможности изменений.
Если не ошибаюсь, в CODESYS возможны два способа переходов-навигации по страницам интерфейса. Первый, это когда к определенной кнопке непосредственно привязана команда (действие) на переход к другой странице интерфейса. И второй, когда страницы интерфейса можно отрывать программно, по командам от контроллера. Мне потребуется второй способ.
P.S. Видимо, цепочка рассуждений должна быть примерно такая:
MySetVisu: VU.FbChangeVisu;
MySetVisu(itfClientFilter:=VU.Globals.AllClients, xExecute:=TRUE, sVisuName:=MyVisuName);
А вот далее, как я понимаю (или пока не понимаю) фильтра по конкретному клиенту, хотя бы по IP, и нет.
Подумалось. Судя по всему, даже если в VU.Globals.AllClients заменить AllClients на CurrentClient, то это позволяет указать пользователя, который сам делал что-то с элементом визуализации (тут не понятно до конца, если честно),
т.е. опять по направленияю от страницы с визуализацией к контроллеру.
Но. Нельзя ли подобрать такой элемент визуализации (или не визуальный элемент страницы), что поддерживает "Конфигурация ввода" а в ней "Изменить показанную визуализацию". Тогда, посылая этому элементу (элементам) данные в переменные, можно было бы переключать страницы визуализации на нужном клиенте.
Если я вас правильно понял, то вам нужен элемент визуализации "Фрейм" содержащий несколько визуализаций (мб подойдёт ещё "Набор вкладок") и кнопки для переключения этих визуализаций. Единственное, если вы используете "Переменную-переключатель фрейма" Визуализация сменится на всех активных клиентах.
> Визуализация сменится на всех активных клиентах.
Спасибо за ответ. Но вот тут как раз и проблема - хотелось бы сделать так, что бы я мог по команде контроллера, а не оператора, открывать на одной из панелей (в браузере) нужную мне страницу или фрейм, причем это никак не должно отражаться на остальных панелях с интерфейсом. Год назад я делал нечто подобное через:
MyOpenDialog: VU.FbOpenDialog;
MyCloseDialog: VU.FbCloseDialog;
MySetVisu: VU.FbChangeVisu;
Но я умею применять это только для всех клиентов (браузеров).
Вызов там такой: MySetVisu(itfClientFilter:=VU.Globals.AllClients, xExecute:=TRUE, sVisuName:=MyVisuName);
И вот этот самый itfClientFilter, как я понял, допускает ограниченный набор ситуаций, без выбора нужного браузера, по IP например.
В теории, в нужный браузер, а точнее, страницу которая будет на нем открыта, мы можеи отправить что-то в переменную, которая для него индивидуальна (переменная). Вот как от нее, от самого факта изменения этой переменной, или ее значения, перейти к смене страницы интерфейса - я пока не могу придумать. У текстового поля нет, например, Сhange. А только Mouse Down ("Конфигурация ввода" а в ней "Изменить показанную визуализацию"). Иначе бы уже получилось.
Добрый день! Подскажите, возможно ли использовать анимацию в визуализации? Например, при изменении переменной лопасти вентилятора начинали вращаться
Фильтры, конечно же, есть.Цитата:
MySetVisu(itfClientFilter:=VU.Globals.AllClients, xExecute:=TRUE, sVisuName:=MyVisuName);
А вот далее, как я понимаю (или пока не понимаю) фильтра по конкретному клиенту, хотя бы по IP, и нет.
Можно с помощью VU.FbIterateClients пройтись по всем клиентам и найти нужного, после чего передать его интерфейс в вызове VU.FbChangeVisu.
В примере по ссылке есть всё необходимое для решения вашей задачи - потребуется только изучить и осмыслить его:
https://ftp.owen.ru/CoDeSys3/21_Exam...projectarchive
Добрый день.
См. пример: https://ftp.owen.ru/CoDeSys3/21_Exam...projectarchive
Привет.
Подскажите, есть ли способ перевести курсор (фокус ввода) сразу в текстовое поле?
Вот открылась визуализация N5 и на ней есть текстовое поле. И курсор (фокус ввода) уже там сразу и стоит. Так сказать без "трогательного прикосновения" или "мышечного движения". ;)
На прикрепленном рисунке курсор должен попасть сразу же в поле "введите значение".
Спасибо.
Вложение 62503
Добрый день.
Посмотрите этот пример:
https://forge.codesys.com/prj/codesy...nag/home/Home/
Несколько нюансов:
1. Пример сделан для одного клиента визуализации - пользователя таргет-визу.
Если, например, нужно активировать курсор для нескольких клиентов - то нужно получить их контекст (pClientData) и вызвать код примера для всех клиентов.
Как получить контекст клиента - см. здесь: https://ftp.owen.ru/CoDeSys3/21_Exam...projectarchive
2. В коде обработки xClick замените VisuElems.VISU_ET_KEYUP на VisuElems.VISU_ET_KEYDOWN (так как в примере запись в элемент повесили на OnMouseDown - вероятно, по ошибке - хотели на OnMouseUp).
3. Рекомендую использовать VISU_SELECTION_TAB и для нужного элемента установить порядковый номер 0 - тогда будет достаточно один раз вызвать xTab (добавьте его в пример) и xClick.
Вложение 62506
На досуге сделаю готовый пример на эту тему.
В общем...
Протестировал я этот проект. Упростил его для понимания работы.
Есть два элемента для вызова: 1 и 2.
Вводите в поле номер и нажимаете клавишу и должен выбраться соответствующий элемент.
Это должно работать именно так?
Вложение 62509
Тогда проблема осталась.
Вот элемент номер 2 - это и есть поле, которое мне нужно выбрать и чтобы там сразу был фокус ввода.
И этот элемент выбирается, если задать его номер "2" и нажать клавишу "Выбрать граф. элемент".
Но курсор там все равно отсутствует. Выделение есть, а курсора нет!
"Проблема", которую вы наблюдаете - это последствие вашего "упрощения" исходного примера.
В посте выше я написал всю необходимую информацию.
Возможно, будет проще подождать, пока я сделаю свою интерпретацию этого примера.
Upd. - сделал свою версию примера, совместив пример ClientManager и SelectionManager.
https://ftp.owen.ru/CoDeSys3/21_Exam...projectarchive
Для каждого подключенного клиента происходит выбор сиреневого прямоугольника (с ID = 24) и активация в нем ввода (в таргет-визу появляется Numpad, в web-визу - курсор).
Евгений! Более или менее заработало, но пока по такой схеме: VU.Visu_Globals.g_VisuManager.SetMainVisu(pClient, 'Vis2');
где pClient указывает на клиента визуализации, отобранного по нужному признаку.
Но как скрестить pClient с более новым VU.FbChangeVisu что-то пока не понимаю. Если будет врямя, покажите?
При вызове VU.FbIterateClients вы передаете на его вход itfIterationCallback имя экземпляра ФБ, реализующего интерфейс VU.IVisualizationClientIteration.
В примере такой ФБ называется VisuClientIteration. Методы этого ФБ вызываются автоматически.
При вызове метода HandleClient на вход itfClient подставляется экземпляр интерфейса очередного клиента визуализации.
Через этот интерфейс вы получаете доступ к данным клиента (в том числе, к указателю на его контекст - pClient) и можете определить, интересут ли он вас или нет.
Предположим, вам нужно вызывать VU.FbChangeVisu для конкретных клиентов.
Тогда вы должны создать ФБ с реализацией (EXTENDS) интерфейса IVisualizationClientFilter, объявить его экземпляр и передать его на вход FbChangeVisu.itfClientFilter при его вызове.
В блоке есть единственный метод - IsAccepted. Этот метод будет вызываться автоматически; на вход itfClient подставляется экземпляр интерфейса очередного клиента визуализации.
Для тех клиентов, которые вас интересуют - необходимо на выход метода присвоить TRUE.
Евгений!
> Тогда вы должны создать ФБ с реализацией (EXTENDS) интерфейса IVisualizationClientFilter, объявить его экземпляр и передать его на вход FbChangeVisu.itfClientFilter при его вызове.
Спасибо, займусь сегодня вечером. А не подскажите, HTML5 Control Editor в релизе SP18, он в бесплатной версии есть и полностью функционален?
Привет.
Подскажите, а в таргет-визуализации можно установить параметр "ввод текста по молчанию" так, что бы он принимал ввод и с клавиатуры и с сенсора одновременно? Или же только клава или только сенсор отдельно?
И если совмещённого ввода нет, то как это можно обыграть, что-бы он был.
Например, надо ходить по меню, но при этом кое-где надо ввести с клавиатуры что-либо без сенсора.
Спасибо.
Добрый день.
Такой возможности пока нет, но в баг-трекере есть соответствующее пожелание.
Вложение 62521
Но пока не понял, в чем у вас проблема. На "хождение по меню" способ ввода значений не влияет.
Я хочу реализовать задачу, при которой ПЛК управляется оператором при помощи сенсорного экрана. Настройку ПЛК выполняют редко, поэтому подойдет сенсорный ввод значений, переменных, пунктов меню. Т.е. сенсора будет достаточно.
И при этом, пока идет основной процесс, оператор может ставить испытуемые изделия в виртуальную очередь на обработку. Все это придумано из-за того, что все испытуемые изделия должны отлежаться не менее 2-х часов перед установкой в стенд. Такова дисциплина, потому-что необходимо гарантированное выравнивание по температуре вновь подносимых изделий с холодного склада. Оператор находится в 3-4 метрах от ПЛК и сканирует штрих-коды подготавливаемых изделий. При этом ПЛК продолжает работать по своей основной программе.
Как это реализовать:
Вариант А. Купить ПЛК ОВЕН. Задействовать библиотеку ОВЕН для сканеров. Тогда будет все работать супер-пупер: асинхронно и параллельно. Запустил ПЛК пальцем, отошел на приемку с беспроводным сканером и "пикай" себе по изделиям. ПЛК будет асинхронно ловить штрих-коды и ставить их на учет. При этом основная прога может работать в другой задаче. Профит!
Вариант Б. Не купить ПЛК ОВЕН, а пользоваться другим оборудованием в котором нет библиотеки для сканеров. Тогда сканер подключится в USB как клавиатура. И не будет работать, т.к. его штрих-код будет прилетать в никуда. Можно переиграть так: оператор запускает основную прогу, потом переходит на другой экран визуализации, там автоматически фокус ввода падает на текстовое поле (о чем мы тут и беседуем). В это поле прилетает штрих-код и нажимается enter. После учета этого штрих кода, фокус ввода падает снова на текстовое поле и всё по кругу. Но так не работает, потому-что если вы включили сенсорное управление, то ввод от клавиатуры не работает. И наоборот.
В общем - не решаемая задача.
Или у Евгения нет нереализуемых задач? :)
Как обычно, вы не озвучиваете всю нужную информацию, но попробую дать комментарий по той, что есть.
1. Самый простой вариант решения вашей задачи вы уже сами упомянули - использовать ПЛК или СПК ОВЕН, для которого мы заботливо разработали библиотеку с поддержкой USB HID-сканеров штрихкодов.
2. Если вы используете Raspberry Pi или его аналоги с CODESYS - то можете найти (или разработать сами) для него подобную библиотеку на C/Python/чем угодно и интегрировать ее с CODESYS.
3. Если вы используете другой панельный контроллер с CODESYS (назовем его условно "UnrealLab"), который не позволяет работать с внешними библиотеками или делает это слишком трудоемким - то есть несколько вариантов.
3.1. В таргет-визуализации включить Ввод текста по умолчанию - Клавиатура. Тогда в плане работы со сканером проблем нет.
Остается вопрос с оператором, которому, например, надо вводить уставки. Но как вы упомянули - "настройку ПЛК выполняют редко".
Поэтому можно сделать вариант операторского интерфейса, в котором ввод значений реализован "аналоговым" способом - с помощью слайдеров и кнопок типа +1/-1 (+5/-5 и т.д.).
3.2. Использовать библиотеку OwenVisuDialogs с кастомными диалогами ввода - в них поддерживаются "горячие клавиши".
В этом случае для оператора все удобно - нажал на элемент, появилась экранная клавиатура.
При работе со сканером - когда вы сымитируете нажатие на элемент из кода, то откроется окно Numpad'a или Keypad'a с активным курсором.
При этом так как горячие клавиши поддерживаются - то при получении штрихкода он будет "набран" в поле ввода диалога.
Но здесь начинаются нюансы - поддержка горячих клавиш может потребовать правок таргет-файла и конфига CODESYS (в частности, для поддержки спецсимволов).
Кроме того, возникает вопрос с раскладками - если штрих-код может содержать спецсимволы (типа #, @ и т.д.), то это обработать будет проблематично.
Можно попробовать сделать свою клавиатуру, на которой будут все нужные клавиши, но мне кажется, что на этом этапе возникнет много нюансов.
Но самый главный вопрос, который касается и п. 3.1, и п. 3.2 - как будет осуществляться подтверждение ввода?
Если сканер вам после штрих-кода присылает код нажатия на Enter - то вопросов нет.
Если он его не присылает - то каких-то очевидных решений я не вижу.
Да, можно сымитировать нажатие на элемент из кода - но в какой момент? Можно сказать - в тот момент, когда изменилось значение переменной, привязанной к элементу.
Но ведь пока в элементе ввода не произошло нажатие на Enter - строка еще не попала в переменную.
В общем, на мой взгляд, самый простой и идеологически правильный путь - вариант 1.
Вариант 2 тоже без сомнений реализуем, но потребует существенно больше времени.
Хотел использовать в визуализации прозрачность элементов, но такое ощущение, что не СПК оно не работает. Или я неправильно что-то сделал?
Есть элемент, например "Скругленный прямоугольник". Хотелось видеть, что под ним при появлении полупрозрачного поля с сообщением. Ну и текст тоже должен быть полупрозрачный.
У меня все работает корректно. На фото - прозрачный скругленный прямоугольник с прозрачным текстом наложен поверх изображения.
Вложение 62531
Вложение 62532
Странно! Со второго раза у меня получилось.:(
Добрый день!
А есть способ выключить у элемента Кнопка внешнюю рамку, если в кнопке например круглое изображение SVG, то выглядит не очень...
Попробовал так сделать. Библиотеку подключил.
Действительно: и сенсорный ввод и ввод от сканера работают.
Но проблема заключается в том, что сканер очень быстро отдает свои символы и после присылает код клавиши Enter. А может клавиатурный буфер очень короткий. ХЗ...
На коротких штрихах (EAN8): начало пакета ловится хорошо, а в конце то символ пропустит, то Enter не словит.
На длинных штрихах (EAN13): конец пакета никогда нормально не ловится. Enter никогда не нажимается.
Засада. :(
P.S. Выбор графического элемента из программы пока не реализовывал. Нажимаю на текстовое поле пальцем. Потом сканирую сканером.
Как сделать в диалоговых окнах "User management" полностью русский язык?
Используйте библиотеку OwenVisuDialogs - в ней эти диалоги локализованы.
https://owen.ru/forum/showthread.php?t=34327
День добрый! подскажите в чем проблема. Вставляю картинку, в редакторе ее не видно (полностью прозрачная или не отображается), в эмуляторе все нормально. Редактировать визуализацию вообще не удобно.Вложение 62626Вложение 62627
Здравствуйте!
Подскажите, пожалуйста, каким образом можно соотнести свойство объекта с каналом Modbus ? При попытке привязки получаем ошибку "...недопустим в качестве операнда для ADR".
Вложение 62684
Дело в том, что переменная DWORD привязывается, т.к. на нее возможен указатель (ее можно использовать в качестве операнда ADR), а со свойством это не проходит. Вопрос в том, как привязать именно свойство, а не переменную?
Вложение 62687
Компилируется без ошибок, но при загрузке в устройство (Логине) выдает ошибку.
Вложение 62688
В данный момент V3.5 SP5 Patch 5 СПК207, но с на V3.5 SP16 Patch 3 СПК110 тоже самое.