PDA

Просмотр полной версии : CODESYS V3.5. Визуализация



Страницы : 1 2 3 4 5 [6]

Евгений Кислов
23.04.2021, 11:35
я выложил тестовый проект. поможете его исправить?

Что именно вы хотите в нем исправить?

-=Vovka=-
23.04.2021, 11:42
Что именно вы хотите в нем исправить?
1. Чтоб перед открытием окна редактирования настроек считывались настройки с МВ210
2. Сохранение отредактированной настройки в МВ210

Евгений Кислов
23.04.2021, 12:56
1. Чтоб перед открытием окна редактирования настроек считывались настройки с МВ210
2. Сохранение отредактированной настройки в МВ210

Поправил.
IP модуля изменил на свой для теста - вам нужно будет поменять его обратно.

54791

-=Vovka=-
23.04.2021, 13:37
Поправил.
Немного не то. Мне нужно чтоб я сам в коде программы мог считать и записать настройки МВ210.

Хорошо, допустим нет визуализации. Я хочу в коде программы изменить настройку канала.
Этот код не работает:


TargetVars.MB210_101_GO_ReadNastr1 := TRUE; // команда чтения из МВ210-10
TargetVars.MB210_101_ValueEditH1 := TargetVars.MB210_101_ReadNastr1.rUpperLimit; // считали данные, но не считались - 0.0 :(
// теперь пишем
TargetVars.MB210_101_WriteNastr1.rUpperLimit := 1234; // установили новое значение настройки
TargetVars.MB210_101_GO_WriteNastr1 := TRUE; // команда записи в MB210-101
// по идее на этой строчке настройка должна сохраниться в МВ210-101

Как это исправить?

Евгений Кислов
23.04.2021, 13:50
В выложенном мной примере ваш код работает корректно.
https://dropmefiles.com/4O8Qk

Естественно, вместо констант TRUE надо использовать переменные и генерировать в них импульсы в нужные моменты времени.

-=Vovka=-
23.04.2021, 15:08
Естественно, вместо констант TRUE надо использовать переменные и генерировать в них импульсы в нужные моменты времени.

Ну вот, а с этим как бороться?
54797

Ноут и маршрутизатор перезагружал. В проекте делал "Очистить все" и "Перекомпиляция" - не помогло. Контроллер пока не трогаю - жду ответа...

Зинько Владислав
23.04.2021, 15:44
Ну вот, а с этим как бороться?
54797

Ноут и маршрутизатор перезагружал. В проекте делал "Очистить все" и "Перекомпиляция" - не помогло. Контроллер пока не трогаю - жду ответа...

Добрый день.
В СПК необходимо делать загрузочное приложение при каждой загрузке проекта. Как сделать этот процесс более удобным описано Евгением здесь (https://owen.ru/forum/showthread.php?t=28167&p=312974&viewfull=1#post312974).

Чтобы ошибка прошла, перезагрузите контроллер.

-=Vovka=-
23.04.2021, 16:46
Добрый день
Добрый день. Не сработало:
54798

-=Vovka=-
23.04.2021, 17:00
В выложенном мной примере ваш код работает корректно.
https://dropmefiles.com/4O8Qk

Естественно, вместо констант TRUE надо использовать переменные и генерировать в них импульсы в нужные моменты времени.

Под отладчиком пошагово он работает, а вот если дать фрагмент выполнить, то не работает:
54800

Я так понимаю, что тут нужен контроль окончания записи и чтения

Евгений Кислов
23.04.2021, 17:06
Добрый день. Не сработало:
54798

Нужно полностью загружать проект, а не делать онлайн-изменение.

Евгений Кислов
23.04.2021, 17:10
Под отладчиком пошагово он работает, а вот если дать фрагмент выполнить, то не работает:
54800

Я так понимаю, что тут нужен контроль окончания записи и чтения

Потому что этот фрагмент написан некорректно.
Запись в канал произойдет только после выполнения цикла - так что в пределах цикла нет смысла менять значение переменной несколько раз.
Вам нужно по событию генерировать единичный импульс - см. в библиотеке Standard блок R_TRIG, например.
Вообще, я бы рекомендовал вам посетить курсы нашего учебного центра - они хорошо умеют объяснять такие базовые вещи тем, кто только начинает работать с ПЛК.
https://owen.ru/plk2xxbazovykurs

-=Vovka=-
23.04.2021, 17:10
Это ответ на совет от Зинько Владислава, чтоб окно не выскакивало: установил галки, но не помогло!
А проект я всегда полностью загружаю - жаль, что нет возможности по умолчанию второй пункт использовать и не выводить это окно.

Евгений Кислов
23.04.2021, 17:12
Это ответ на совет от Зинько Владислава, чтоб окно не выскакивало: установил галки, но не помогло!
А проект я всегда полностью загружаю - жаль, что нет возможности по умолчанию второй пункт использовать и не выводить это окно.

На вашем скриншоте видно, что выбран режим онлайн-изменения.

-=Vovka=-
23.04.2021, 17:44
Потому что этот фрагмент написан некорректно.
Запись в канал произойдет только после выполнения цикла - так что в пределах цикла нет смысла менять значение переменной несколько раз.
Вот к чему я и подводил!

Вам нужно по событию генерировать единичный импульс - см. в библиотеке Standard блок R_TRIG, например
Как сгенерировать, если он сгенерируется только после выполнения цикла?
Ведь мне нужно по нажатию на кнопку выполнить чтение настройки и вывести страничку настроек.
А между чтением настройки и выводом странички никакой паузы для библиотеки работы с МВ210 быть не может, т.к. нужно окончание цикла чтоб эта библиотека сработала и считала настройку!
Хорошо, попробую разбить на фрагменты через CASE

-=Vovka=-
23.04.2021, 17:45
На вашем скриншоте видно, что выбран режим онлайн-изменения.
Я ничего не выбирал: появилось окошко - сделал скриншот чтоб показать, что окно все равно появляется!

Евгений Кислов
23.04.2021, 18:03
Я ничего не выбирал: появилось окошко - сделал скриншот чтоб показать, что окно все равно появляется!

Так это окно и будет всегда появляться - это нормально.

Евгений Кислов
23.04.2021, 18:05
Вот к чему я и подводил!

Как сгенерировать, если он сгенерируется только после выполнения цикла?
Ведь мне нужно по нажатию на кнопку выполнить чтение настройки и вывести страничку настроек.
А между чтением настройки и выводом странички никакой паузы для библиотеки работы с МВ210 быть не может, т.к. нужно окончание цикла чтоб эта библиотека сработала и считала настройку!
Хорошо, попробую разбить на фрагменты через CASE

Я выкладывал исправленную версию вашего проекта, в которой всё так и работает.
Поскольку ваша задача от поста к посту постоянно меняется - довольно сложно дать вам какой-то совет, извините.

-=Vovka=-
23.04.2021, 18:12
Я выкладывал исправленную версию вашего проекта, в которой всё так и работает.
Поскольку ваша задача от поста к посту постоянно меняется - довольно сложно дать вам какой-то совет, извините.
Моя задача никак не меняется: мне нужно отредактировать параметр в МВ210.
Т.е. по нажатию на кнопку вывести окно, в котором ОДНО поле редактирования для этого параметра и две кнопки: Отменить и Запомнить.

Евгений Кислов
23.04.2021, 18:14
Моя задача никак не меняется: мне нужно отредактировать параметр в МВ210.
Т.е. по нажатию на кнопку вывести окно, в котором ОДНО поле редактирования для этого параметра и две кнопки: Отменить и Запомнить.

Считываемое и записываемое значение параметра - это два разных канала.
Переменных всегда будет две.
С помощью логики это можно попробовать свести к одному визуальному элементу - но гораздо проще просто сделать два поля: текущее значение и записываемое.
Особенно если нет самоцели специально переусложнить себе задачу.

Votrj1
23.04.2021, 18:44
В визуальных компонентах в свойствах есть выполнение действий например по нажатию мыши.
Вопрос: если на это событие повесить несколько обработчиков, например по порядку: ввод переменной(через клавиатуру), выполнение кода и может еще что, как выполняются эти обработчики, по порядку как выстроены в дереве при конфигурации и пока не выполнится одно не запускается следующее или.... А если одно из них с вводом с клавиатуры, затормозится цепочка обработчиков?

Евгений Кислов
23.04.2021, 18:50
В визуальных компонентах в свойствах есть выполнение действий например по нажатию мыши.
Вопрос: если на это событие повесить несколько обработчиков, например по порядку: ввод переменной(через клавиатуру), выполнение кода и может еще что, как выполняются эти обработчики, по порядку как выстроены в дереве при конфигурации и пока не выполнится одно не запускается следующее или.... А если одно из них с вводом с клавиатуры, затормозится цепочка обработчиков?

Нет, не затормозится.
Ввод переменной - это просто вызов диалогового окна.
Сразу после его открытия (и независимо от того, будет ли что-то введено и т.д.) произойдет последовательный вызов остальных "обработчиков".
Есть событие OnDialogClosed, чтобы сделать что-то после закрытия диалога, открытого из элемента.

-=Vovka=-
23.04.2021, 19:25
Считываемое и записываемое значение параметра - это два разных канала.
Переменных всегда будет две.
С помощью логики это можно попробовать свести к одному визуальному элементу - но гораздо проще просто сделать два поля: текущее значение и записываемое.
Особенно если нет самоцели специально переусложнить себе задачу.

Вот я и хочу эту логику! Чтоб было как привык пользователь: с одним полем для редактирования!

Евгений Кислов
23.04.2021, 19:57
Вот я и хочу эту логику! Чтоб было как привык пользователь: с одним полем для редактирования!

Вот пример костыля, который позволяет сделать так, "как привык пользователь".

-=Vovka=-
23.04.2021, 20:17
Вот пример костыля, который позволяет сделать так, "как привык пользователь".
Ввожу новое значение, жму "Отмена" и новое число сохраняется!

Евгений Кислов
23.04.2021, 20:25
Ввожу новое значение, жму "Отмена" и новое число сохраняется!

Изучив, как настроены остальные кнопки - не составит труда и для кнопки "Отмена" написать нужную вам логику.

Votrj1
26.04.2021, 11:06
Декартовый график: можно в нем программно отображать в виде точки на графике или хотя бы вертикального маркера текущую позицию по Х. Главный маркер написано в инструкции из ПО не управляется.

IgnatTali
21.05.2021, 12:04
Добрый день, есть вопрос по диалогам:

есть необходимость ввода временных интервалов. Eсть возможность ввода с помощью двоеточия, но некоторые тяжело воспринимают ввод таким способом.
Чтобы ввести один час надо набрать 01:00:00. Иногда пытаются просто "1" ввести или вводят без двоеточий и т.д.

Есть идея сделать следующее диалоговое окно:

ввод каждого разряда отдельно, т.е. копки "больше"-"меньше" для каждого разряда времени формата ЧЧ:ММ

55231

Соответственно, необходимо реализовать проверки формата при нажатии (например, макс. значение минут 59, т.е. для второго разряда минут макс. значение "5" и т.д. + проверка на МИН и МАКС)

Вопрос, собственно, в следующем:
- как реализовать соотвествующие проверки непосредственно в самом диалоге?
- функции и функц. блоки - как они вызываются и инициализируются при вызове диалога?

В библиотеке множество функций, и, судя по их именам, часть из них как раз отвечает за проверку значения при вводе. Но по cross reference показывает только объявления, вызовов нет.

55232

Есть ли описание/мануалы/информация по тому, как это всё устроено.

Буду признателен любой информации.

Евгений Кислов
21.05.2021, 13:29
Добрый день.
Посмотрите эту библиотеку:
https://owen.ru/forum/showthread.php?t=34327

По-моему, вы можете взять за основу диалог DateTimeSetOwen из этой библиотеки и на его основе сделать диалог для ввода только часов-минут (библиотека доступна в исходниках).

Votrj1
27.05.2021, 19:51
А как после закрытия диалога numpad в последующем обработчике OnClose отловить нажатие клавиш cancel, esc, ok?

Евгений Кислов
27.05.2021, 20:44
А как после закрытия диалога numpad в последующем обработчике OnClose отловить нажатие клавиш cancel, esc, ok?

Я не видел подобных примеров.
Но можно модифицировать стандартный Numpad, привязав к кнопкам глобальные переменные.

Денис Дьяченко
28.05.2021, 00:49
Добрый день.
Существуют ли библиотеки графических примитивов элементов технологических систем (задвижки, насосы, трубы, баки и т.п.)?
Поиск в интернете особо ничего не дал. Все пути ведут к вашему документу.

Евгений Кислов
28.05.2021, 06:11
Добрый день.
Существуют ли библиотеки графических примитивов элементов технологических систем (задвижки, насосы, трубы, баки и т.п.)?
Поиск в интернете особо ничего не дал. Все пути ведут к вашему документу.

Добрый день.
Библиотек конкретно для CODESYS нет - разработчики в данный момент не заинтересованы в их создании.
В сети можно найти несколько паков картинок, подходящих для промышленности.
Один из них выложен в первом посте этой темы:
https://owen.ru/forum/showthread.php?t=29152&p=283403&viewfull=1#post283403

Денис Дьяченко
28.05.2021, 11:00
Спасибо. Это то что нужно, но мало))). Буду искать еще.

Votrj1
28.05.2021, 12:34
Я не видел подобных примеров.
Но можно модифицировать стандартный Numpad, привязав к кнопкам глобальные переменные.

А тогда я не понял. Если перед вызовом numpad выполняются гекоторые подготовительные операции которые надо отменить если далее пользователь нажал ESC, то как это решается если не известно был ввод или нет.

Евгений Кислов
28.05.2021, 14:32
А тогда я не понял. Если перед вызовом numpad выполняются гекоторые подготовительные операции которые надо отменить если далее пользователь нажал ESC, то как это решается если не известно был ввод или нет.

Стандартного функционала для такого решения, к сожалению, нет.

Votrj1
28.05.2021, 14:36
Стандартного функционала для такого решения, к сожалению, нет.

Я поражен!

Евгений Кислов
28.05.2021, 14:42
Я поражен!

Да, я понимаю, что это вызывает удивление. Мне тоже это кажется странным.
Я постараюсь подготовить пример, как можно решить эту проблему доступными средствами.

Votrj1
28.05.2021, 14:56
Да, я понимаю, что это вызывает удивление. Мне тоже это кажется странным.
Я постараюсь подготовить пример, как можно решить эту проблему доступными средствами.

Задача: идет график во времени который пользователь может скорректировать на ходу сдвинув вверх или вниз. Соответственно внутрь numpada передается на коррекцию текущее значение на момент ввода. Но если пользователь просидит во воде час то корректировать он уже будет не то значение. Можно было бы оперировать величиной сдвига графика, но тогда вводить не удобно, пользователь видит 500градусов текущие и вводит 550, соответственно график поднимается весь на 50 и это понятно. По моему кому то уже это надо было. Я предлагаю включить обработку в вашу библиотеку OwenVisuDialogs. Что скажите?

Евгений Кислов
28.05.2021, 16:29
Я предлагаю включить обработку в вашу библиотеку OwenVisuDialogs. Что скажите?

Это разумное предложение - я добавлю это в список наших работ.

Юра54
31.05.2021, 05:51
Здравствуйте! Пропала Панель инструментов визуализации. Точнее она остается пустой.
Подскажите, Как можно все вернуть?55344

Евгений Кислов
31.05.2021, 06:21
Закройте все вкладки визуализации и откройте заново.

Юра54
31.05.2021, 06:28
Не помогает.

Евгений Кислов
31.05.2021, 06:29
Не помогает.

Предоставьте доступ по TeamViewer.

Юра54
31.05.2021, 06:39
Спасибо!!!!

Евгений Кислов
31.05.2021, 13:49
Задача: идет график во времени который пользователь может скорректировать на ходу сдвинув вверх или вниз. Соответственно внутрь numpada передается на коррекцию текущее значение на момент ввода. Но если пользователь просидит во воде час то корректировать он уже будет не то значение. Можно было бы оперировать величиной сдвига графика, но тогда вводить не удобно, пользователь видит 500градусов текущие и вводит 550, соответственно график поднимается весь на 50 и это понятно. По моему кому то уже это надо было. Я предлагаю включить обработку в вашу библиотеку OwenVisuDialogs. Что скажите?

Немного адаптированный пример от разработчиков CODESYS по получению в коде результата закрытия диалога:
https://ftp.owen.ru/CoDeSys3/21_Examples/01_3.5.11.5/02_Visu/03_Additional/Example_NumpadKeypadResultListener_3514v1.projecta rchive

В OwenVisuDialogs тоже добавим информацию об этом - через готовые глобальные переменные библиотеки.

Максим Ульянов
31.05.2021, 13:56
Продолжу здесь...панель СПК 110 ,элемент визуализации- "Комбинированное окно- целочисленный" не переключается не в эмуляции ,не на реальной панели...на что бы посмотреть?

Евгений Кислов
31.05.2021, 14:10
Продолжу здесь...панель СПК 110 ,элемент визуализации- "Комбинированное окно- целочисленный" не переключается не в эмуляции ,не на реальной панели...на что бы посмотреть?

Я бы на ваш проект посмотрел для начала.

Максим Ульянов
31.05.2021, 14:13
Я бы на ваш проект посмотрел для начала.

вам будет удобно на почту? отправил

Евгений Кислов
31.05.2021, 14:22
Ничего не пришло - возможно, файл слишком большой.
Залейте сюда https://dropmefiles.com/ и выложите ссылку.

Максим Ульянов
31.05.2021, 14:27
Ничего не пришло - возможно, файл слишком большой.
Залейте сюда https://dropmefiles.com/ и выложите ссылку.

https://dropmefiles.com/rntJZ

Евгений Кислов
31.05.2021, 14:35
https://dropmefiles.com/rntJZ

Элемент "Комбинированное окно - целочисленный" подразумевает, что к нему привязываются целочисленные переменные.
В вашем проекте к нему привязаны строки.

Максим Ульянов
31.05.2021, 15:15
Элемент "Комбинированное окно - целочисленный" подразумевает, что к нему привязываются целочисленные переменные.
В вашем проекте к нему привязаны строки.

хм..там же привязан список текстов...поставить "Комбинированное окно - Массив" ? зачем тогда там к нему привязывается "список текстов"??

Евгений Кислов
31.05.2021, 17:23
Список текстов позволяет связать численное значение с текстовым описанием.
Элемент Комбинированное окно - Целочисленный позволяет это визуализировать и изменять значение целочисленной переменной.

Максим Ульянов
31.05.2021, 20:42
хм....задам вопрос по другому....как сделать чтоб при выборе строки выпадающего списка ,переменная устанавливалась в номер строки? разве не Списком Текстов? Тогда объясните как?

Евгений Кислов
31.05.2021, 20:54
как сделать чтоб при выборе строки выпадающего списка ,переменная устанавливалась в номер строки?

Задать в списке текстов ID, совпадающие с номерами строк.

Максим Ульянов
31.05.2021, 21:06
Задать в списке текстов ID, совпадающие с номерами строк.

хм...дык так же и сделано....Притом если как то изловчится пару раз получилось щелкнуть в какаю то строку и выбрать на реальной панели...

Евгений Кислов
01.06.2021, 04:45
хм...дык так же и сделано....Притом если как то изловчится пару раз получилось щелкнуть в какаю то строку и выбрать на реальной панели...

Я уже выше писал - у вас проблема с типом данных переменной, используемой для привязки к элементу.
Замените его на UINT, например.

Максим Ульянов
01.06.2021, 07:05
Я уже выше писал - у вас проблема с типом данных переменной, используемой для привязки к элементу.
Замените его на UINT, например.
А вот про это вы не писали) Спасибо за то что ткнули носом)

Евгений Кислов
01.06.2021, 07:11
А вот про это вы не писали) Спасибо за то что ткнули носом)

https://owen.ru/forum/showthread.php?t=22038&p=357136&viewfull=1#post357136

Linker1989
01.06.2021, 22:50
Тогда, с вашего позволения.

22669

Трассировка на базе элемента Ломаная. Автор проекта - firetester.

Проект сделан в 3.5 SP8.

Подразумевается отображение 12-часового графика, поэтому при необходимости соответствия дискретности срезов оси времени необходимо поменять значения переменных timelow и timehigh на 30 секунд.

Евгений подскажите, можно ли как то сделать чтобы каждый раз когда запускаешь запись тренда, он писался бы с 0 точки времени?

Евгений Кислов
02.06.2021, 06:21
Евгений подскажите, можно ли как то сделать чтобы каждый раз когда запускаешь запись тренда, он писался бы с 0 точки времени?

Речь о процитированном примере, я правильно я понимаю?
Это возможно - достаточно по команде запуска обнулять массив arrOfPoints и сбрасывать pointsNum в 0.

Linker1989
02.06.2021, 08:46
Речь о процитированном примере, я правильно я понимаю?
Это возможно - достаточно по команде запуска обнулять массив arrOfPoints и сбрасывать pointsNum в 0.

Да именно про это, с масивами не работал ещё, как его обнулить?

Евгений Кислов
02.06.2021, 08:54
Да именно про это, с масивами не работал ещё, как его обнулить?

См. в библиотеке CAA Memory функцию MemFill.

Linker1989
02.06.2021, 09:30
См. в библиотеке CAA Memory функцию MemFill.

А есть где то подробный пример вообще не понимаю как это работает! Я так понимаю блок надо вызвать при старте? как это сделать?

Евгений Кислов
02.06.2021, 10:02
А есть где то подробный пример вообще не понимаю как это работает! Я так понимаю блок надо вызвать при старте? как это сделать?

Пример кода кнопки обнуления графика в рамках упомянутого проекта:

55388

Евгений Кислов
02.06.2021, 10:40
По недавним запросам пользователей доработали библиотеку OwenVisuDialogs до версии 3.5.14.3.

1. Добавили возможность получения информации о результате закрытия диалогов ввода (NumpadOwen, KeypadOwen) - теперь можно в коде определить, по какой кнопке был закрыт диалог (ОК или CANCEL).
По запросу https://owen.ru/forum/showthread.php?t=22038&p=356855&viewfull=1#post356855

А как после закрытия диалога numpad в последующем обработчике OnClose отловить нажатие клавиш cancel, esc, ok?


2. Добавили диалоги для порязрядного ввода переменных типа DATE и TIME.
По запросу https://owen.ru/forum/showthread.php?t=22038&p=356505&viewfull=1#post356505

есть необходимость ввода временных интервалов. Eсть возможность ввода с помощью двоеточия, но некоторые тяжело воспринимают ввод таким способом.
Чтобы ввести один час надо набрать 01:00:00. Иногда пытаются просто "1" ввести или вводят без двоеточий и т.д.

Есть идея сделать следующее диалоговое окно: ввод каждого разряда отдельно, т.е. копки "больше"-"меньше" для каждого разряда времени формата ЧЧ:ММ



55392 55393

Более подробное описание по ссылке, скачать библиотеку и пример можно в первом посте той же темы:
https://owen.ru/forum/showthread.php?t=34327&p=357269&viewfull=1#post357269

Алексей 1
05.06.2021, 23:48
Добрый день!! Подскажите, а есть ли какие-то готовые библиотеки визуализации????? Кнопки, тумблеры, стрелки это конечно хорошо...., а вот насос??? мотор??? 3-х ходовой клапан?? вентилятор??? Горелка???Есть какие-то образцы???
Или кто-то может поделиться готовыми моделями???

Нужно сделать нормальную мнемосхему котельной, и согласитесь прорисовывать каждый насос тяжко.... может есть у кого-то готовые модели???

RV9WFJ
06.06.2021, 13:56
Они есть, но сомневаюсь что вы их сможете использовать. Они у меня оформлены в виде фреймов и жестко связаны с моими библиотеками структур данных этих элементов. Т.е я во фрейм передаю только номер насоса или клапана и т.д. Все остальное подтягивается автоматически. Я наверно могу вам дать просто картинки в виде svg этих элементов. Но если вам знаком Adobe Illustrator то проще самому нарисовать.

Юра54
09.06.2021, 07:06
Здравствуйте!
Проблема с визуализацией на СПК107М01. (Release 1.3.0312.1112 target3.5.16.31)
Не появляются динамические тексты.
В режиме эмуляции на ноутбуке все работает, тексты появляются, изменяются при при изменении переменных.
Что можно сделать?

Евгений Кислов
09.06.2021, 07:12
Добрый день.



Что можно сделать?

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

ekostq
11.06.2021, 00:52
Здравствуйте!

Подскажите:
1.Есть какое-то ограничение на вывод строки в Текстовом поле визуализации?
У меня она обрезается где-то на 1249 символах (т.е. дальше не отображается).
В файл с этой же переменной пишет нормально. Если ограничение есть, то можно ли его как-то обойти или может есть какое-то другое решение данной проблемы?

2.И еще вопрос - есть ли возможность копировать текст с Текстового поля визуализации или может есть другой элемент визуализации у которого есть такая возможность? Почему-то у полей ввода есть возможность копирования, а у вывода нет.

Евгений Кислов
11.06.2021, 06:30
Здравствуйте!

Подскажите:
1.Есть какое-то ограничение на вывод строки в Текстовом поле визуализации?
У меня она обрезается где-то на 1249 символах (т.е. дальше не отображается).
В файл с этой же переменной пишет нормально. Если ограничение есть, то можно ли его как-то обойти или может есть какое-то другое решение данной проблемы?

2.И еще вопрос - есть ли возможность копировать текст с Текстового поля визуализации или может есть другой элемент визуализации у которого есть такая возможность? Почему-то у полей ввода есть возможность копирования, а у вывода нет.

Добрый день.

1. По умолчанию для буфера форматирования строк визуализации выделено 2500 байт (этого как раз хватает для WSTRING(1249) ).

Чтобы увеличить размер буфера - создайте программу с вызовом системной функции:



PROGRAM VisuSetStringBuffer
VAR
END_VAR

// Выделяем буфер для форматирования строк визуализации на 10000 байт
// его хватит для STRING(9999) или WSTRING(4998)

VisuElems.VisuFctConfigureTextBufferSize(10000);


55515

В Менеджере визуализации привяжите эту программу во вкладке Вызов после запуска визуализации (привязывать ее к какой-либо задаче не надо):

55516

2. Текстовое поле поддерживает копирование текста, но для этого нужно настроить возможность записи для отображаемой переменной.

55517

ekostq
11.06.2021, 17:08
Добрый день.

1. По умолчанию для буфера форматирования строк визуализации выделено 2500 байт (этого как раз хватает для WSTRING(1249) ).

Чтобы увеличить размер буфера - создайте программу с вызовом системной функции:

Спасибо! Это получилось. А скроллинг можно как-то сделать (длинный текст теперь в поле не влезает) ?



2. Текстовое поле поддерживает копирование текста, но для этого нужно настроить возможность записи для отображаемой переменной.

А тут не очень хорошо получилось, во-первых копируются только первые 255 символов, во-вторых. Через какое-то время появляется исключение.

Мне кажется это связано с тем, что у нас в программе этот текст постоянно обновляется и обновляется он уже в момент, когда его пытаешься скопировать.

Можно эти проблемы как-то обойти? Т.е. копировать большие тексты (до 10000 символов) и чтобы исключение не возникало?

Евгений Кислов
11.06.2021, 23:37
А скроллинг можно как-то сделать (длинный текст теперь в поле не влезает)?

Предположим, у вас есть основной экран, на котором вы хотите отобразить длинный текст.
Создаете еще один экран, размеры которого (по одному измерению или обоим) превышают основной экран.
Размещаете на нем элемент вывода таких же размеров (которые превышают один или оба размера основного экрана).
На основном экране размещаете фрейм с созданным экраном (размеры фрейма должны быть меньше размеров основного экрана) и тип масштабирования Фиксировано и прокручивается.


Можно эти проблемы как-то обойти? Т.е. копировать большие тексты (до 10000 символов) и чтобы исключение не возникало?

Вообще, желательно разобраться в причинах исключения.
Если есть возможность - выложите простой проект, на котором оно воспроизводится.

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

RomeoVar
14.06.2021, 12:13
ДОбрый день
НЕ стал заводить новую тему, решил спросить здесь
Пытаюсь использовать библиотеку OwenVisuDialogs элемент OVD.KeypadOwen. при переключении на русскую раскладку на клавишах остается английскй алфавит, при этом печатает кирилицей.
Скрины во вложении
Codesys 3.5 sp14 ПЛк210-3

Я что-то делаю не правильно?

Зинько Владислав
14.06.2021, 12:44
ДОбрый день
НЕ стал заводить новую тему, решил спросить здесь
Пытаюсь использовать библиотеку OwenVisuDialogs элемент OVD.KeypadOwen. при переключении на русскую раскладку на клавишах остается английскй алфавит, при этом печатает кирилицей.
Скрины во вложении
Codesys 3.5 sp14 ПЛк210-3

Я что-то делаю не правильно?

Добрый день.
Написал Вам в личных сообщениях.

RomeoVar
14.06.2021, 13:27
БОльшое спасибо
Разобрались

Зинько Владислав
14.06.2021, 13:53
ДОбрый день
НЕ стал заводить новую тему, решил спросить здесь
Пытаюсь использовать библиотеку OwenVisuDialogs элемент OVD.KeypadOwen. при переключении на русскую раскладку на клавишах остается английскй алфавит, при этом печатает кирилицей.
Скрины во вложении
Codesys 3.5 sp14 ПЛк210-3

Я что-то делаю не правильно?

Нюанс заключался в галочке "Менеджера визуализации" - "Режим передачи файлов".
Необходимо, чтобы галочка было установлена в положение "Передавать файлы визуализации в ПЛК" (см. вложение).

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

Ereke
16.06.2021, 06:44
Здравствуйте! Я новичок в codesys. Можно ли добавлять графический элементы в режиме runtime а также редактировать параметры этих элементов. Если можно то как?

Евгений Кислов
16.06.2021, 06:46
Здравствуйте! Я новичок в codesys. Можно ли добавлять графический элементы в режиме runtime а также редактировать параметры этих элементов. Если можно то как?

Добрый день.
Опишите, пожалуйста, задачу, которую вы пытаетесь решить.

Андрей Косоротов
16.06.2021, 08:33
Добрый день!

Можно ли каким-то образом указать для для записи трендов SD-карту в ПЛК210? Или всё пишется только во встроенную Flash-память?

Спасибо.

Евгений Кислов
16.06.2021, 08:47
Добрый день!

Можно ли каким-то образом указать для для записи трендов SD-карту в ПЛК210? Или всё пишется только во встроенную Flash-память?

Спасибо.

Добрый день.
Тренды и тревоги пишутся только во внутреннюю память.

Андрей Косоротов
16.06.2021, 08:50
Добрый день.
Тренды и тревоги пишутся только во внутреннюю память.

Спасибо. А в перспективе возможность записи на SD рассматривается?

Евгений Кислов
16.06.2021, 08:53
Спасибо. А в перспективе возможность записи на SD рассматривается?

Да, такое пожелание зафиксировано для следующего крупного обновления прошивки.

ekostq
16.06.2021, 23:36
...На основном экране размещаете фрейм с созданным экраном (размеры фрейма должны быть меньше размеров основного экрана) и тип масштабирования Фиксировано и прокручивается.
Проблема со скроллингом длинных строк практически решилась, единственное разрыв строк в Текстовом поле в Web-визуализации почему-то происходит только на пробелах (которые не всегда есть в строках), а в визуализации самой среды CoDeSys перенос делается всегда, независимо от того есть ли пробелы в строке. Для установки разрыва строк в Свойствах Текстового поля указываю в Свойствах текста\Формат текста - Разрыв строки.
Возможно ли разрывать строки в текстовом поле и в Web-визуализации в конце Текстового поля, а не только в местах пробелов?

Разрыв строки удобно использовать совместно с одним вертикальным скроллингом (при этом текст полностью заполняет текстовое поле по ширине и высоте и в этом случае можно разместить много текста), но из-за того что разрыв строки в Web-визуализации не работает при отсутствии пробелов в строке - это не получается сделать.




Можно эти проблемы как-то обойти? Т.е. копировать большие тексты (до 10000 символов) и чтобы исключение не возникало?
Вообще, желательно разобраться в причинах исключения.
Если есть возможность - выложите простой проект, на котором оно воспроизводится.
Подготовил простой проект:
https://dropmefiles.com/x2EVv
В нем как раз наблюдаются эти 2 проблемы - во-первых копируются только 255 символов, во-вторых возникает исключение в визуализации.

В проекте, сначала сделал чтобы содержимое Тестового поля динамически менялось раз 5 сек, а потом оказалось, что даже если не изменять содержимое Текстового поля, проблема также остается, поэтому этот код закомментировал.
Сейчас в проекте длинная строка размером 328 символов (с объявленным максимальным размером в 4500 символов).
Также там есть 2 длинные строки на 3200 символов, которые закомментированы, поскольку проблема наблюдается уже при размерах строк превышающих 255 и объявленных максимальных размерах 4500 символов.



В принципе, чтобы обойти - можно просто сделать кнопку и по ее нажатию копировать содержимое одной строкой переменной в другую.
Это не понял как сделать. Может не правильно сформулировал задачу - требуется скопировать текст с текстового поля в Web-визуализации в буфер обмена.
Может есть возможность просто по нажатию кнопки скопировать текст из Текстового поля в буфер обмена?

Ereke
17.06.2021, 05:34
Добрый день.
Опишите, пожалуйста, задачу, которую вы пытаетесь решить.

Имеется стегальный чпу станок. необходимо создать программу которое выполняет следующее:
1)рисование простые узоры
2) конвертирование g код
3) управление машиной

Вчера пробовал вставить элемент "веб броузер" в визуализацию и там открыть заранее созданный html файл
теперь попытаюсь:
1) рисовать svg элементы
2) конвертировать g код с помощью javascript
3) открыть текстовый файл разобрать g код и соответственно управлять Х, У осями и др. устройствами

Евгений Кислов
17.06.2021, 06:10
Имеется стегальный чпу станок. необходимо создать программу которое выполняет следующее:
1)рисование простые узоры
2) конвертирование g код
3) управление машиной

Вчера пробовал вставить элемент "веб броузер" в визуализацию и там открыть заранее созданный html файл
теперь попытаюсь:
1) рисовать svg элементы
2) конвертировать g код с помощью javascript
3) открыть текстовый файл разобрать g код и соответственно управлять Х, У осями и др. устройствами

Если я правильно понимаю, то вопрос "Можно ли добавлять графический элементы в режиме runtime а также редактировать параметры этих элементов." связан только с пунктом 1)
Что вы называете "простыми узорами"?

Евгений Кислов
17.06.2021, 06:41
Проблема со скроллингом длинных строк практически решилась, единственное разрыв строк в Текстовом поле в Web-визуализации почему-то происходит только на пробелах (которые не всегда есть в строках), а в визуализации самой среды CoDeSys перенос делается всегда, независимо от того есть ли пробелы в строке. Для установки разрыва строк в Свойствах Текстового поля указываю в Свойствах текста\Формат текста - Разрыв строки.
Возможно ли разрывать строки в текстовом поле и в Web-визуализации в конце Текстового поля, а не только в местах пробелов?

Разрыв строки удобно использовать совместно с одним вертикальным скроллингом (при этом текст полностью заполняет текстовое поле по ширине и высоте и в этом случае можно разместить много текста), но из-за того что разрыв строки в Web-визуализации не работает при отсутствии пробелов в строке - это не получается сделать.


Подготовил простой проект:
https://dropmefiles.com/x2EVv
В нем как раз наблюдаются эти 2 проблемы - во-первых копируются только 255 символов, во-вторых возникает исключение в визуализации.

В проекте, сначала сделал чтобы содержимое Тестового поля динамически менялось раз 5 сек, а потом оказалось, что даже если не изменять содержимое Текстового поля, проблема также остается, поэтому этот код закомментировал.
Сейчас в проекте длинная строка размером 328 символов (с объявленным максимальным размером в 4500 символов).
Также там есть 2 длинные строки на 3200 символов, которые закомментированы, поскольку проблема наблюдается уже при размерах строк превышающих 255 и объявленных максимальных размерах 4500 символов.


Это не понял как сделать. Может не правильно сформулировал задачу - требуется скопировать текст с текстового поля в Web-визуализации в буфер обмена.
Может есть возможность просто по нажатию кнопки скопировать текст из Текстового поля в буфер обмена?

1. "В нем как раз наблюдаются эти 2 проблемы - во-первых копируются только 255 символов, во-вторых возникает исключение в визуализации." - спасибо, воспроизвел у себя. Отпишусь разработчикам CODESYS, чтобы поправили в следующих версиях.

2. Насчет "разрыв строк происходит только на пробелах" - не понял, о чем речь. Поясните проблему скриншотами, пожалуйста.

3. В данный момент я вижу только один вариант для копирования длинных строк в буфер обмена - сохранить эту строку в файл (который должен быть создан в <директория CODESYS>/PlcLogic/Visu) и открыть его в элементе визуализации Web-браузер (указав URL типа 'http://localhost:8080/file.txt')

VadimS
17.06.2021, 10:57
Добрый день.
Подскажите по озвучке в визуализации.
Делал на базе Вашего примера.
Уже оставил только браузер в визуализации, в нем прописал:
URL = sUrl
Show = xPlay


ПЛК 200.
xPlay - на переключателе.
Однозначно определяю переменную:
sURL: STRING := '/plclogic/visu/audio.htm';

Файл audio.htm виден в папке /PlcLogic/visu/, там же аудиофайл (копирую принудительно).

Содержимое audio.htm:
<audio source src="/PlcLogic/visu/vorona.mp3" autoplay controls hidden> (без лупа).
На компе, с корректировкой ... "D:\vorona.mp3" .... все каркает :).

Браузер приложения пишет "The requested URL was not found on this server.".

Где-то не правильно путь определен к файлу, подскажите - где ошибка?

Евгений Кислов
17.06.2021, 11:17
sURL: STRING := '/plclogic/visu/audio.htm';

Тут лучше указать полный путь и с правильным регистром (PlcLogic)

ekostq
17.06.2021, 11:37
2. Насчет "разрыв строк происходит только на пробелах" - не понял, о чем речь. Поясните проблему скриншотами, пожалуйста.
Это можно наблюдать на том же примере что выслал ранее!
Так выглядит строка БЕЗ пробелов в Текстовом поле в Визуализации в среде CoDeSys (на картинке справа в Свойствах указано делать Разрыв строки):
55599

А так она же выглядит в Текстовом поле в Web-визуализации:
55600
т.е. в случае Web-визуализации строка БЕЗ пробелов вообще не разрывается не смотря на указание производить Разрыв строки в свойствах Текстового поля.

Далее вставляем в произвольных местах в эту же строку 4-ре пробела:
str1:WSTRING(4500):="ABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWX YZ ABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHI JKLMNOPQRSTUVWXYZ ABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWX YZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUV WXYZABCDEFGHIJKLMNOPQRSTUVWXYZ ABCDEFGHIJKLMNOPQRSTUABCDEFGHIJKLMNOPQRSTUVWXYZABC DEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTU";

Так выглядит строка с 4-мя пробелами в Текстовом поле в Визуализации в среде CoDeSys (на картинке справа в Свойствах также указано делать Разрыв строки):
55601
тут видно, что она уже и в среде CoDeSys разрывается по пробелам.

А так выглядит та же строка с 4-мя пробелами в Текстовом поле в Web-визуализации:
55602
тут видно, что там где были пробелы, строка перенеслась на следующую строку поля, а где не было - просто обрезалась в конце поля.



3. В данный момент я вижу только один вариант для копирования длинных строк в буфер обмена - сохранить эту строку в файл (который должен быть создан в <директория CODESYS>/PlcLogic/Visu) и открыть его в элементе визуализации Web-браузер (указав URL типа 'http://localhost:8080/file.txt')
Спасибо, тогда пока воспользуемся этим предложением!

Евгений Кислов
17.06.2021, 11:44
Это можно наблюдать на том же примере что выслал ранее!
Так выглядит строка БЕЗ пробелов в Текстовом поле в Визуализации в среде CoDeSys (на картинке справа в Свойствах указано делать Разрыв строки):
55599

А так она же выглядит в Текстовом поле в Web-визуализации:
55600
т.е. в случае Web-визуализации строка БЕЗ пробелов вообще не разрывается не смотря на указание производить Разрыв строки в свойствах Текстового поля.

Далее вставляем в произвольных местах в эту же строку 4-ре пробела:
str1:WSTRING(4500):="ABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWX YZ ABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHI JKLMNOPQRSTUVWXYZ ABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWX YZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUV WXYZABCDEFGHIJKLMNOPQRSTUVWXYZ ABCDEFGHIJKLMNOPQRSTUABCDEFGHIJKLMNOPQRSTUVWXYZABC DEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTU";

Так выглядит строка с 4-мя пробелами в Текстовом поле в Визуализации в среде CoDeSys (на картинке справа в Свойствах также указано делать Разрыв строки):
55601
тут видно, что она уже и в среде CoDeSys разрывается по пробелам.

А так выглядит та же строка с 4-мя пробелами в Текстовом поле в Web-визуализации:
55602
тут видно, что там где были пробелы, строка перенеслась на следующую строку поля, а где не было - просто обрезалась в конце поля.


Спасибо, тогда пока воспользуемся этим предложением!

Я использовал для тестов ваш проект (немного отредактированный) с такой строкой (пробелов в ней нет):


str1 : WSTRING(4500):="ABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWX YZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUV WXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRST UVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQR STUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOP QRSTUABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRS TUVWXYZABCDEFGHIJKLMNOPQRSTU123456789B123456789C12 3456789D123456789E123456789F123456789G123456789H12 3456789I123456789J123456789KA23456789B123456789C12 3456789D123456789E123456789F123456789G123456789H12 3456789I123456789J123456789KB23456789B123456789C12 3456789D123456789E123456789F123456123456789B123456 789C123456789D123456789E123456789F123456789G123456 789H12";

В CODESYS и web-визуализации она у меня отображается так:

55606

55607

Небольшая разница в местах переносов есть, но, в целом, я не вижу каких-то проблем (типа отображения текстов в одну строку без разрывов строк).

ekostq
17.06.2021, 12:45
Я использовал для тестов ваш проект (немного отредактированный) с такой строкой (пробелов в ней нет):
...
Небольшая разница в местах переносов есть, но, в целом, я не вижу каких-то проблем (типа отображения текстов в одну строку без разрывов строк).

Очень странно... Может есть зависимость от версии CoDeSys или самого контроллера? Что еще может влиять?
У нас версия CoDeSys v3.5 SP14 Patch 3 + (32-bit) установлен на Windows 7 (64-бит).
ПЛК210-01-CS и ПЛК210-02-CS.
Браузеры использовал разные (32 и 64 бит) и Mozilla Firefox, Chrome, Edge и разных версий - везде наблюдалась проблема, хотя в Chrome, был немного другой результат, но все равно проблема была.

Евгений Кислов
17.06.2021, 12:47
Очень странно... Может есть зависимость от версии CoDeSys или самого контроллера? Что еще может влиять?
У нас версия CoDeSys v3.5 SP14 Patch 3 + (32-bit) установлен на Windows 7 (64-бит).
ПЛК210-01-CS и ПЛК210-02-CS.
Браузеры использовал разные (32 и 64 бит) и Mozilla Firefox, Chrome, Edge и разных версий - везде наблюдалась проблема, хотя в Chrome, был немного другой результат, но все равно проблема была.

Предоставьте, пожалуйста, доступ по TeamViewer - посмотрим, что может влиять.

VadimS
18.06.2021, 10:48
Тут лучше указать полный путь и с правильным регистром (PlcLogic)

Заработало, но всё не так :).
Ни с полным путём, ни с регистром - реакция прежняя. В логах журнала нашел, что ПЛК сам подставляет путь /$PlcLogic$/$visu$/ при запросах к файловой системе. Таким образом решением оказалось - оставить ссылку на файл audio.htm совсем без пути и в содержании htm файла убрать все пути.
А я еще думал, почему обязательно файлы в папку visu кидать... прописал путь к апликэйшн и всё...
Видно есть некие различия у эмулятора и ПЛК.

ekostq
18.06.2021, 13:03
Предоставьте, пожалуйста, доступ по TeamViewer - посмотрим, что может влиять.
Установить программы удаленного доступа вряд ли возможно.
Пока по перетыкали все опции в Менеджере визуализации, меняли стили, опции Масштабирования и Сглаживания - ничего не помогло.

А вы проверяли на реальном ПЛК210 или на другом контроллере или на эмуляторе?
Мне кажется из-за этого результат может отличаться, в недавнем сообщении на форуме об этом тоже было сказано: "Видно есть некие различия у эмулятора и ПЛК".

Евгений Кислов
18.06.2021, 13:06
Установить программы удаленного доступа вряд ли возможно.
Пока по перетыкали все опции в Менеджере визуализации, меняли стили, опции Масштабирования и Сглаживания - ничего не помогло.

А вы проверяли на реальном ПЛК210 или на другом контроллере или на эмуляторе?
Мне кажется из-за этого результат может отличаться, в недавнем сообщении на форуме об этом тоже было сказано: "Видно есть некие различия у эмулятора и ПЛК".

Я проверял в том числе и на ПЛК.
В недавнем сообщении речь вообще не о том, что происходит у вас.

saii
18.06.2021, 14:51
Небольшая разница в местах переносов есть, но, в целом, я не вижу каких-то проблем (типа отображения текстов в одну строку без разрывов строк).

На СПК107 все гораздо интересней :)
Один и тот же экран:
1. В браузере:

55622
2. В среде Codesys:

55623
3. На экране панели:

55624

Евгений Кислов
18.06.2021, 16:32
На СПК107 все гораздо интересней :)
Один и тот же экран:
1. В браузере:

55622
2. В среде Codesys:

55623
3. На экране панели:

55624

Проект выложите, пожалуйста, на котором я смогу это повторить.

saii
18.06.2021, 20:46
Проект выложите, пожалуйста, на котором я смогу это повторить.

Здесь (https://dropmefiles.com/841LF)

Ereke
19.06.2021, 15:06
Если я правильно понимаю, то вопрос "Можно ли добавлять графический элементы в режиме runtime а также редактировать параметры этих элементов." связан только с пунктом 1)
Что вы называете "простыми узорами"?

Здравствуйте! Да правильно. Пробовал ознакомиться примером 11_2_1_Example_Rectangle_3511v1.project, но там не показано как создавать элементы в runtime. Сейчас пробую с примером 11_2_12_Example_TextEditor_3511v1.project работать. Примере не показано как считать текст со строки iLine и присвоить Текстовому переменную например sLine. Как это Сделать?

Евгений Кислов
19.06.2021, 19:55
но там не показано как создавать элементы в runtime.

Потому что такой возможности нет:
https://forge.codesys.com/forge/talk/Visualization/thread/daab85943a/


Как это Сделать?

Такой возможности нет.

Ereke
20.06.2021, 11:26
Потому что такой возможности нет:
https://forge.codesys.com/forge/talk/Visualization/thread/daab85943a/



Такой возможности нет.

Здравствуйте! Спасибо за ответ :)

Евгений Кислов
21.06.2021, 10:40
Здесь (https://dropmefiles.com/841LF)

Если вы используете списки текстов - то переносы придется расставлять вручную (через Ctrl+Enter в тексте).
Ничего особо интересного в этом нет.


55648

55646

55647

saii
21.06.2021, 10:53
Если вы используете списки текстов - то переносы придется расставлять вручную (через Ctrl+Enter в тексте).
Ничего особо интересного в этом нет.

Про переносы я в курсе. Вопрос в другом, почему одна и та же визуализация отображается по разному в разных средах?

Евгений Кислов
21.06.2021, 11:11
Про переносы я в курсе. Вопрос в другом, почему одна и та же визуализация отображается по разному в разных средах?

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

Евгений Кислов
21.06.2021, 18:24
1. "В нем как раз наблюдаются эти 2 проблемы - во-первых копируются только 255 символов, во-вторых возникает исключение в визуализации." - спасибо, воспроизвел у себя. Отпишусь разработчикам CODESYS, чтобы поправили в следующих версиях.

2. Насчет "разрыв строк происходит только на пробелах" - не понял, о чем речь. Поясните проблему скриншотами, пожалуйста.

3. В данный момент я вижу только один вариант для копирования длинных строк в буфер обмена - сохранить эту строку в файл (который должен быть создан в <директория CODESYS>/PlcLogic/Visu) и открыть его в элементе визуализации Web-браузер (указав URL типа 'http://localhost:8080/file.txt')

По п. 1 - информация добавлена в баг-трекер CODESYS:

55658

SemAndr
28.06.2021, 09:13
Коллеги, приветствую!
Вопрос следующий. Можно ли в редакторе стилей установить размер шрифта для надписи вкладок? Пока что не получается такое свойство добавить.

55772

Евгений Кислов
28.06.2021, 09:20
Коллеги, приветствую!
Вопрос следующий. Можно ли в редакторе стилей установить размер шрифта для надписи вкладок? Пока что не получается такое свойство добавить.

55772

Добрый день.
Нет, в данный момент это не реализовано.

Юра54
28.06.2021, 12:38
Здравствуйте!
Упорно выскакивает такое сообщение.
На СПК 107M001, CoDeSys 3.5 patch16.
И не выводятся динамические тексты.
Что нужно сделать?55780

Евгений Кислов
28.06.2021, 13:01
Что нужно сделать?

Выложить проект и пояснить, где в нем динамические тексты, которые не выводятся.

СергейНовосиб
30.06.2021, 07:35
У меня при редактировании визуализаций через некоторое время перестает возможность удалять элементы. Не работает кнопка "DEL" и правая кнопка мыши не открывает контекстное меню. В меню "Правка" тоже не активен пункт "Удаление". При этом тексты в элементах могу удалять. Перемещать и менять размеру тоже можно. Лечиться перезагрузкой CS. На разных проектах пробовал. CS3.5.14. Что может быть?

В окне "Устройства" тоже правая кнопка мыши не работает, не открывает меню.

RV9WFJ
01.07.2021, 04:30
Это похоже сугубо ваша особенность. Я нечто подобное наблюдал при работе через Anydesk с 4к мониторами но во всех программах, возможно у вас тоже что-то подобное.

DenisV
05.07.2021, 12:55
Добрый день, коллеги!
Возник следующий вопрос. В коде программы используется функциональный блок усреднения значений,который вызывается раз в секунду. После усреднения необходимо округлить значение до определенного разряда, в данном примере до одной значащей цифры после запятой. Для этого используются функция ROUND библиотеки OSCAT_BASIC. Результат округления отображается в визуализации с форматированием %s, и вроде бы всё работает как надо, но в определенный момент времени с периодичностью примерно раз в три секунды к результату округления добавляется 0.00001.55901 Первое число - выходное значение блока усреднения, второе число результат работы функции Round( где вход это выход с блока усреднения и N=1). Оба числа это Real. Почему округление иногда срабатывает некорректно и как можно решить этот вопрос?

Евгений Кислов
05.07.2021, 13:12
Добрый день, коллеги!
Возник следующий вопрос. В коде программы используется функциональный блок усреднения значений,который вызывается раз в секунду. После усреднения необходимо округлить значение до определенного разряда, в данном примере до одной значащей цифры после запятой. Для этого используются функция ROUND библиотеки OSCAT_BASIC. Результат округления отображается в визуализации с форматированием %s, и вроде бы всё работает как надо, но в определенный момент времени с периодичностью примерно раз в три секунды к результату округления добавляется 0.00001.55901 Первое число - выходное значение блока усреднения, второе число результат работы функции Round( где вход это выход с блока усреднения и N=1). Оба числа это Real. Почему округление иногда срабатывает некорректно и как можно решить этот вопрос?

Добрый день.

В онлайн-отладке в редакторе кода значения переменных отображаются корректно или тоже с округлением?


После усреднения необходимо округлить значение до определенного разряда, в данном примере до одной значащей цифры после запятой

Для этого можно обойтись без функций - просто использовать спецификатор %.1f
Или нужно округлить не только для визуализации, но и для дальнейшей обработки в программе?

DenisV
05.07.2021, 13:59
Добрый день.

В онлайн-отладке в редакторе кода значения переменных отображаются корректно или тоже с округлением?



Для этого можно обойтись без функций - просто использовать спецификатор %.1f
Или нужно округлить не только для визуализации, но и для дальнейшей обработки в программе?

В редакторе кода отображается корректно, да округление также необходимо для дальнейших вычислений, спецификатор %.1f не совсем подходит, потому что в некоторых случаях необходимо, чтобы разряд менялся в зависимости от диапазона. Также он неудобен для визуализации потому что при большом целом числе будет отображаться 100000.0 или при %.2f 100000.00, а хотелось бы отбросить не значащие нули, если это возможно.

Ещё попробовал функцию из РП "Архивация"(стр.53) называется REAL_TO_FWSTRING, она округляет корректнее то есть без периодического появления 0.00001 , но опять же при заданном количестве значащих цифр после запятой=0, значение будет в любом случае выглядеть "X.0", то есть ноль не отбросится.

Евгений Кислов
05.07.2021, 14:10
Я думаю, у вас отклоение появляется при конвертации в строку (потому что %s) - не уверен, что его вообще можно избежать, это особенности типа с плавающей точкой.

DenisV
05.07.2021, 14:28
А из кода программы возможно менять спецификатор? Что-нибудь в духе %.iF, где i - переменная int

Евгений Кислов
05.07.2021, 14:29
А из кода программы возможно менять спецификатор? Что-нибудь в духе %.iF, где i - переменная int

Нет, но можно в коде строку сформировать по нужным вам правилам и отдавать на визуализацию уже её.

DenisV
05.07.2021, 14:31
Нет, но можно в коде строку сформировать по нужным вам правилам и отдавать на визуализацию уже её.

Хорошо, спасибо!

GoodLuck
05.07.2021, 15:47
Добрый день!

Есть главная визуализация Visualisation, на ней элемент Набор вкладок (3 вкладки, соответственно, на каждой по визуализации: Visu1, Visu2, Visu3). Переменная VisuElems.CURRENTVISU в любом случае, независимо от того, какая вкладка, принимает значение 'Visualisation'.

Существует ли способ из программы узнать, какая вкладка активна? Без использования переменной-переключателя.

Евгений Кислов
05.07.2021, 17:05
Добрый день!

Есть главная визуализация Visualisation, на ней элемент Набор вкладок (3 вкладки, соответственно, на каждой по визуализации: Visu1, Visu2, Visu3). Переменная VisuElems.CURRENTVISU в любом случае, независимо от того, какая вкладка, принимает значение 'Visualisation'.

Существует ли способ из программы узнать, какая вкладка активна? Без использования переменной-переключателя.

Добрый день.
Для начала потребуется получить контекст клиента (pClientData) - см. этот пример:
https://ftp.owen.ru/CoDeSys3/21_Examples/01_3.5.11.5/02_Visu/03_Additional/Example_ClientManager_3511v1.projectarchive

После этого в программе:



VAR
itfFrameManager: VisuElems.VisuElemBase.IFrameManager;
aiCurrentFrameIndex: ARRAY [1..VISU_MAX_NUMBER_OF_CLIENTS] OF INT; // индексы текущих экранов фреймов для всех клиентов
END_VAR



itfFrameManager := VisuElems.VisuElemBase.g_VisuManager.GetFrameManag er();

FOR := 1 TO VISU_MAX_NUMBER_OF_CLIENTS DO

aiCurrentFrameIndex[i] := itfFrameManager.GetSelectedVisu('MyVisu.MyFrameNam e', apClientData[i]);
// MyVisu - название экрана, на котором расположен фрейм
// MyFrameName - имя элемента, заданное в параметра фрейма (первый параметр в списке)
// apClienData - массив с контекстами клиентов

END_FOR



Если у вас используется VisuElems.CURRENTVISU - то контексты клиентов должны совпадать, так что достаточно работать с одним из них.

RV9WFJ
06.07.2021, 03:44
Добрый день, коллеги!
Возник следующий вопрос. В коде программы используется функциональный блок усреднения значений,который вызывается раз в секунду. После усреднения необходимо округлить значение до определенного разряда, в данном примере до одной значащей цифры после запятой. Для этого используются функция ROUND библиотеки OSCAT_BASIC. Результат округления отображается в визуализации с форматированием %s, и вроде бы всё работает как надо, но в определенный момент времени с периодичностью примерно раз в три секунды к результату округления добавляется 0.00001.55901 Первое число - выходное значение блока усреднения, второе число результат работы функции Round( где вход это выход с блока усреднения и N=1). Оба числа это Real. Почему округление иногда срабатывает некорректно и как можно решить этот вопрос?
Потому что округлять Real так себе затея. Округляйте WString или в INT перекидывайте. Вот код для генерации WString с округлением:

FUNCTION fRealToWString : WSTRING
VAR_INPUT
In: REAL;
iDec: INT; (*Количество знаков после запятой*)
END_VAR
VAR
diValue: DINT;
i: INT;
END_VAR
VAR CONSTANT
sDot: WSTRING(1):=".";
END_VAR


(*Значение с плавающей точкой*)
iDec:= LIMIT(0,iDec,6);

diValue:= LREAL_TO_DINT(ABS(In) * EXPT(10, iDec));
IF ABS(In) * EXPT(10, iDec) - DINT_TO_REAL(diValue) > 0.5 THEN
diValue:= diValue + 1;
END_IF

fRealToWString:= DINT_TO_WSTRING(diValue);

FOR i:= WLEN(fRealToWString) TO iDec DO
fRealToWString:= WCONCAT("0", fRealToWString);
END_FOR

IF iDec > 0 THEN
fRealToWString:= WINSERT(fRealToWString, sDot, WLEN(fRealToWString) - iDec);
END_IF

IF In < 0 THEN
fRealToWString:= WCONCAT("-", fRealToWString);
END_IFСобственно большая его часть из OSCAT

capzap
06.07.2021, 07:51
Почему округление иногда срабатывает некорректно и как можно решить этот вопрос?

у меня не воспроизвелось, но можете попробовать как еще один из вариантов округления INT_TO_REAL(REAL_TO_INT(VALUE / 0.1)) * 0.1, где 0.1 один знак после запятой

DenisV
06.07.2021, 09:49
Потому что округлять Real так себе затея. Округляйте WString или в INT перекидывайте. Вот код для генерации WString с округлением:

FUNCTION fRealToWString : WSTRING
VAR_INPUT
In: REAL;
iDec: INT; (*Количество знаков после запятой*)
END_VAR
VAR
diValue: DINT;
i: INT;
END_VAR
VAR CONSTANT
sDot: WSTRING(1):=".";
END_VAR


(*Значение с плавающей точкой*)
iDec:= LIMIT(0,iDec,6);

diValue:= LREAL_TO_DINT(ABS(In) * EXPT(10, iDec));
IF ABS(In) * EXPT(10, iDec) - DINT_TO_REAL(diValue) > 0.5 THEN
diValue:= diValue + 1;
END_IF

fRealToWString:= DINT_TO_WSTRING(diValue);

FOR i:= WLEN(fRealToWString) TO iDec DO
fRealToWString:= WCONCAT("0", fRealToWString);
END_FOR

IF iDec > 0 THEN
fRealToWString:= WINSERT(fRealToWString, sDot, WLEN(fRealToWString) - iDec);
END_IF

IF In < 0 THEN
fRealToWString:= WCONCAT("-", fRealToWString);
END_IFСобственно большая его часть из OSCAT

Да, спасибо, тоже её находил, но посчитал её слишком ресурсозатратной для ПЛК при большом количестве округляемых значений (могу ошибаться, мб ощутимой разницы и нет) в сравнении например с этой.

FUNCTION REAL_TO_FWSTRING : wstring
VAR_INPUT
rVar: REAL;
usiPrecision: USINT; //кол-во знаков после запятой

END_VAR
VAR
uliVar: ULINT;
lrVar: lreal;
END_VAR

uliVar:= LREAL_TO_ULINT((rVar)* EXPT(10,usiPrecision));
lrVar := ULINT_TO_LREAL(uliVar)/EXPT(10,usiPrecision);
REAL_TO_FWSTRING:= LREAL_TO_WSTRING(lrVar);

IgnatTali
08.07.2021, 15:37
что касается чисто отображения можно сделать немного по-другому, используя динамические тексты для текстового поля:
создать динамический лист для переменной вида:
id текст
0 - %d //отображение без цифр после запятой
1 - %.1f // с одним знаком после запятой
2 - %.2f // 2
3 - %.3f // 3
и т.д.

Только потребуется присвоить для каждого текстового поля переменную с типом отображения и добавить некоторый обработчик в код программы - условия выбора того или иного отображения.

Что касается появления некоторого 'приращения' у значения, это связано с кодированием типа REAL, также сталкивался с подобным.
Собс-но с этим же связаны трудности сравнения переменных REAL на равенство, рекомендуется (кажется это было у OSCAT) сравнивать через некотрую дельту, а не в лоб.
Т.е. код ниже не корректен, т.к. возможны отличия в последних значащих знаках и условие никогда не выполнится (при этом при отладке может казаться что все ок, будет отображаться как будто два одинаковых числа)
rTmp1 :REAL;
rTmp2 :REAL;

IF rTmp1 = rTmp2 <...>

Соот-но рекомендуется в этом случае сравнивать таким образом

IF ABS(rTmp1 - rTmp2) < 0000.1 <...> // дельта в зависимости от требуемой точности

Петр Петрович
13.07.2021, 11:46
Добрый день.
Посмотрите, пожалуйста.

Нужно, что бы на каждом подключаемом WEB-клиенте открывались одни и те же страницы и созданные мной диалоги, что и на первом клиенте, на котором могли быть произведены уже какие-либо действия в интерфейсе.
Погуглив, пришел к такой конструккции:

VAR pClientData: POINTER TO VisuElems.VisuStructClientData;

Далее с помощью

VisuElems.g_ClientManager.BeginIteration();
pClientData := VisuElems.g_ClientManager.GetNextClient();

по числу pClientData > 0 определяем, что произошло изменение числа активных клиентов.
При увеличении числа активных клиентов, для всех клиентов применяем в цикле сначала открытие нужной страницы, а затем и открытие диалога (информация об открытых хранится в паре массивов), причем эту "синхронгизацию" начинам не сразу, а спустя секунду после подключения клиента, что бы уже загрузиласть стартовая страница.

Диалоги вызываются так:

VisuElems.g_ClientManager.BeginIteration();
REPEAT
pClientData := VisuElems.g_ClientManager.GetNextClient();
IF pClientData > 0 THEN
itfDialogManager:=VisuElems.VisuElemBase.g_VisuMan ager.GetDialogManager();
itfMyDialog := itfDialogManager.GetDialog('имя нужного диалога');
itfDialogManager.OpenDialog(itfMyDialog, pClientData, TRUE, null);
END_IF
UNTIL pClientData = 0
END_REPEAT;


Вопрос. Почти работает - но только для двух вкладок в браузере. Попытка третьего подключения приводит с исключению, которое ведет куда-то вглубь библиотеки визуализации. Может, это потому, что я повторно пытаюсь открыть уже открытые диалоги на более ранних двух клиентах (маловероятно) ? А может, я вообще изобретаю велосипед и есть более простые и правильные способы такой синхронизации интерфейсов?
Да - специфика задачи. У меня все страницы и диалоги открываются программно. В дизайненре форм к кнопкам никакие действия по открытию страниц или диалогов привязать не получится. Еще среда рекомендует использовть более новую библиотеку VU. Но по ней не нашел особо документации и примеров. Да и не в этом дело, наверное...

Евгений Кислов
13.07.2021, 12:01
А может, я вообще изобретаю велосипед и есть более простые и правильные способы такой синхронизации интерфейсов?
Еще среда рекомендует использовть более новую библиотеку VU. Но по ней не нашел особо документации и примеров.

Добрый день.
Посмотрите это видео: https://youtu.be/_kA9WVtbg3A

Петр Петрович
13.07.2021, 13:55
Добрый день.
Посмотрите это видео: https://youtu.be/_kA9WVtbg3A

Спасибо, посмотрел. Но диалог почему-то не открывается. И ошибок при исполнении вроде не возникает. В среде только начал работать.
Подскажите, я вообще правильно делаю, в главном цикле, может вызываться при каждом подключении: MyOpenDialog(itfClientFilter:=VU.Globals.AllClient s, xExecute:=TRUE, sDialogName:=sVisuName, xModal:=TRUE);
sVisuName на момент вызова имеет правильное имя диалога - 'Visualization_3'

Евгений Кислов
13.07.2021, 14:03
Спасибо, посмотрел. Но диалог почему-то не открывается. И ошибок при исполнении вроде не возникает. В среде только начал работать.
Подскажите, я вообще правильно делаю, в главном цикле, может вызываться при каждом подключении: MyOpenDialog(itfClientFilter:=VU.Globals.AllClient s, xExecute:=TRUE, sDialogName:=sVisuName, xModal:=TRUE);
sVisuName на момент вызова имеет правильное имя диалога - 'Visualization_3'

Диалог однократно вызывается по переднему фронту на входе xExecute.
В вашем случае он должен открыться только один раз (и больше открыть его из кода вы не сможете).

Петр Петрович
13.07.2021, 14:15
Да, но он что-то вообще пока не открывается, увы. Не понимаю пока, почему...
А вообще, после того, как открытие заработает, возможна такая логика - предположим, подключился очередной клиент, и я опять выполняю эту строку, и на новом клиенте открывается диалог?

Евгений Кислов
13.07.2021, 14:16
Да, но он что-то вообще пока не открывается, увы. Не понимаю пока, почему...
А вообще, после того, как открытие заработает, возможна такая логика - предположим, подключился очередной клиент, и я опять выполняю эту строку, и на новом клиенте открывается диалог?

Диалог откроется на всех клиентах (VU.Globals.AllClient).
Чтобы понять, почему у вас это не работает - нужно организовать удаленное подключение.
Могу к вам подключиться завтра утром.

Петр Петрович
13.07.2021, 14:17
Ясно, спасибо. Пока попробую сам...
Хм. В порядке бреда сделал вот так:

MyOpenDialogFlag:=FALSE;
MyOpenDialog(itfClientFilter:=VU.Globals.AllClient s, xExecute:=MyOpenDialogFlag, sDialogName:=sVisuName, xModal:=TRUE);

IF Find(Show_SubPage_Name[Byte_1-Digital_Offset],'Visual')<>0 THEN
MyOpenDialogFlag:=TRUE;
sVisuName:=Show_SubPage_Name[Byte_1-Digital_Offset];
MyOpenDialog(itfClientFilter:=VU.Globals.AllClient s, xExecute:=MyOpenDialogFlag, sDialogName:=sVisuName, xModal:=TRUE);
END_IF

И вроде заработало. Десять вкладок - полет нормальный.

Евгений, большое спасибо за помощь. А не подскажите, через VU экраны (не диалоги) визуализации ведь тоже можно открывать ? Там где-то есть аналог SetMainVisu ?

Евгений Кислов
13.07.2021, 16:26
См. VU.fbChangeVisu

Петр Петрович
13.07.2021, 16:42
Понял, VU.FbChangeVisu. Спасибо!

Петр Петрович
15.07.2021, 10:33
Добрый день!
А как думаете - почему может быть такая штука. Не критично, но не приятно. У меня стоит задача открыть для вновь подключаещегося клиента ту же экранную форму и диалог, что и у ранее подключенного.
Для начала я просто попробовал открывать диалоги на всех клиентах, но при этом возникало в журнале предупреждение, что что превышено число экземпляров формы диалога. Что, в обшем, логично. Если, скажем, на момент подключения был уже один клиент - одно сообщение, если два - то два сообщения и т.д. Частично проблема решилась превентивным закрытием диалога и открытием его вновь (на глаз это не заметно вообще):

MyCloseDialog(itfClientFilter:=VU.Globals.AllClien ts, xExecute:=FALSE, sDialogName:=MyVisuName);
MyCloseDialog(itfClientFilter:=VU.Globals.AllClien ts, xExecute:=TRUE, sDialogName:=MyVisuName);
MyOpenDialog(itfClientFilter:=VU.Globals.AllClient s, xExecute:=FALSE, sDialogName:=MyVisuName, xModal:=TRUE);
MyOpenDialog(itfClientFilter:=VU.Globals.AllClient s, xExecute:=TRUE, sDialogName:=MyVisuName, xModal:=TRUE);

Но. При числе клиентов больше 4х стабильно опять возникает предупреждение в журнале, что превышено число экземпляров формы диалога. Причем вываливается их сразу пачка, штук 20-30.
Если клиентов четыре и менее, все пока стабильно, может работать часами при активном использовании интерфейса.

Вероятно, лучше было бы конечно вести учет указателей pClientData, тем более, что для обнаружения новых клиентов я пользуюсь этим старым методом. Но все равно не понятно. Тем более, что в настройках визуализации стоит макс. число соединений - 100. Конечно, у меня вряд ли будет более 2-3 клиентов визуализации одновременно, но все же.

Евгений Кислов
15.07.2021, 10:38
Тем более, что в настройках визуализации стоит макс. число соединений - 100.

А число экземпляров для диалога в Менеджере визуализации какое выставлено?

56039

Петр Петрович
15.07.2021, 10:49
А число экземпляров для диалога в Менеджере визуализации какое выставлено?

56039

О. Не знал про эту настройку, да. Выставлено 1. Но ведь это, вероятно, имеется ввиду на каждом экземпляре WEB-клиента? Тем более, перед открытием диалога я сначала закрываю его, что вначале помогло полностью, но не более чем для 4х подключенных клинетов.

Евгений Кислов
15.07.2021, 11:06
О. Не знал про эту настройку, да. Выставлено 1. Но ведь это, вероятно, имеется ввиду на каждом экземпляре WEB-клиента? Тем более, перед открытием диалога я сначала закрываю его, что вначале помогло полностью, но не более чем для 4х подключенных клинетов.

Вы не закрываете диалог.
Функциональный блок FbOpenDialog может только открывать диалоги (это, в принципе, понятно из его названия).

Петр Петрович
15.07.2021, 11:27
Вы не закрываете диалог.
Функциональный блок FbOpenDialog может только открывать диалоги (это, в принципе, понятно из его названия).

Да, но у меня же

VAR MyCloseDialog: VU.FbCloseDialog;

MyCloseDialog(itfClientFilter:=VU.Globals.AllClien ts, xExecute:=FALSE, sDialogName:=MyVisuName);
MyCloseDialog(itfClientFilter:=VU.Globals.AllClien ts, xExecute:=TRUE, sDialogName:=MyVisuName);
MyOpenDialog(itfClientFilter:=VU.Globals.AllClient s, xExecute:=FALSE, sDialogName:=MyVisuName, xModal:=TRUE);
MyOpenDialog(itfClientFilter:=VU.Globals.AllClient s, xExecute:=TRUE, sDialogName:=MyVisuName, xModal:=TRUE);

Евгений Кислов
15.07.2021, 11:31
Да, но у меня же

VAR MyCloseDialog: VU.FbCloseDialog;

MyCloseDialog(itfClientFilter:=VU.Globals.AllClien ts, xExecute:=FALSE, sDialogName:=MyVisuName);
MyCloseDialog(itfClientFilter:=VU.Globals.AllClien ts, xExecute:=TRUE, sDialogName:=MyVisuName);
MyOpenDialog(itfClientFilter:=VU.Globals.AllClient s, xExecute:=FALSE, sDialogName:=MyVisuName, xModal:=TRUE);
MyOpenDialog(itfClientFilter:=VU.Globals.AllClient s, xExecute:=TRUE, sDialogName:=MyVisuName, xModal:=TRUE);

Вы используете CODESYS V3.5 SP17?
Для какого контроллера разрабатываете проект?

Петр Петрович
15.07.2021, 11:39
Вы используете CODESYS V3.5 SP17?
Для какого контроллера разрабатываете проект?

Да, CODESYS V3.5 SP17. Для Raspberry Pi SL.

Евгений Кислов
15.07.2021, 11:59
Да, CODESYS V3.5 SP17. Для Raspberry Pi SL.

По Raspberry - лучше уточните у CODESYS Group.
Мы пока не поддериживаем SP17 для своих контроллеров.

Петр Петрович
15.07.2021, 12:15
Понял, спасибо.

Петр Петрович
15.07.2021, 14:18
Интересно, чисто в теории CODESYS Group предоставляет информацию о методике разработки визуальных компонентов для WEB-визуализации? Партнеры компании, например, могут разрабатывать свои компонеты? Желательно с перемещением элементов внутри компонента мышкой. В другой системе я использовал парадигму на основе готового виджета-коммутатора, где источники сигнала (пиктограммы) перемещались на прямоугольные области с подписями, обозначающие дисплеи. Очень удобно. Там это правда было сделано на устаревшем Flash, но выглядело и работало супер.

Евгений Кислов
15.07.2021, 14:26
Интересно, чисто в теории CODESYS Group предоставляет информацию о методике разработки визуальных компонентов для WEB-визуализации? Партнеры компании, например, могут разрабатывать свои компонеты? Желательно с перемещением элементов внутри компонента мышкой. В другой системе я использовал парадигму на основе готового виджета-коммутатора, где источники сигнала (пиктограммы) перемещались на прямоугольные области с подписями, обозначающие дисплеи. Очень удобно. Там это правда было сделано на устаревшем Flash, но выглядело и работало супер.

В данный момент свои элементы можно разрабатывать с помощью платного плагина Visual Element Toolkit.
По вопросам приобретения можете написать на info@prolog-plc.ru

В CODESYS V3.5 SP18 анонсирована поддержна интеграции HTML5-контролов в web-визуализацию.

Петр Петрович
15.07.2021, 16:51
В данный момент свои элементы можно разрабатывать с помощью платного плагина Visual Element Toolkit.
По вопросам приобретения можете написать на info@prolog-plc.ru

В CODESYS V3.5 SP18 анонсирована поддержна интеграции HTML5-контролов в web-визуализацию.

Потрясающе... будем смотреть. А скажите пожалуйста, детали может пока и не важны, модель WEB визуализации позволяет перебрать все контролы, определить их типы и индивидуальные имена, что бы потом в программе я смог автоматически обрабатывать события от них и для них? Сейчас я в каждый контрол занес несколько строк кода - индекс, флаг нажатия. В принципе - работает. Но ведь можно пойти и дальше, просто разработав для себя определенные правила по наименованию контролов.

Евгений Кислов
15.07.2021, 17:12
Потрясающе... будем смотреть. А скажите пожалуйста, детали может пока и не важны, модель WEB визуализации позволяет перебрать все контролы, определить их типы и индивидуальные имена, что бы потом в программе я смог автоматически обрабатывать события от них и для них? Сейчас я в каждый контрол занес несколько строк кода - индекс, флаг нажатия. В принципе - работает. Но ведь можно пойти и дальше, просто разработав для себя определенные правила по наименованию контролов.

Нет, не позволяет.

Петр Петрович
24.07.2021, 14:09
Добрый день!

Скажите, а никто не наблюдал такую штуку. Есть текущий экран в визуализации. На него поступают короткие символьные данные (примерно 16 строк в элементы Текстовое поле, в каждое поле около 10 символов), а также преключаются состояние кнопок (цвет обычный или тревога) в зависимости от состояния системы. Цвет кнопок переключается не сказать чтоб интенсивно, примерно 4 изменения в секунду, скажем так. Всего кнопок 40 штук. Да и строки меняются раз в несколько секунд, но зато все сразу, одна за другой. Потом по строкам опять пауза, меняется только состояние кнопок.

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

P.S. Да нет, похоже я был не прав. Снял всю нагрузку с визуализации, оставил только переключение экранов. Все равно иногда не переключается, хотя на текущем экране ничего не обновляется. Переменные привязаны к визуальным компонентам, но они, переменные, не обновляются в программе, соотв. строки закоментированны.

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

MySetVisu(itfClientFilter:=VU.Globals.AllClients, xExecute:=FALSE, sVisuName:=MyVisuName); // Взбадриваем подсистему
MySetVisu(itfClientFilter:=VU.Globals.AllClients, xExecute:=TRUE, sVisuName:=MyVisuName); // По переднему фронту отображаем нужный экран по имени визуализации

обладает каким-то принципиальным недостатком. И еще - когда не ждешь, этот дефект проявляется. Начинаешь его ловить при прочих равных - щелкаешь, щелкаешь - и ничего. Я уж тут думал - не JS ли в браузе тормозит иногда? Но сомнительно, сомнительно. Хотя, у всех наверное, бывали ситуации, когда для отправки формы в браузере приходилось нажимать кнопку еще раз. Но, наверное, это было бы слишком просто.

Петр Петрович
27.07.2021, 12:29
Добрый день!

Вдогонку. Понял, что установка "Использовать переменную CurrentVisu" решает проблему автоматической синхронизации начальных экранов при подключении нового WEB-клиента без всякого дополнительного кода (это я как-то просмотрел ранее). Но, к сожалению, это не распространяется на открытые диалоги. Интересно, если диалоги заменить на фреймы - будут ли они отображаться автоматически, а не как с диалогами, которые приходится открывать из программы? И будет ли фрейм, если он не на весь экран, модальным как диалог?

Евгений Кислов
27.07.2021, 12:36
Интересно, если диалоги заменить на фреймы - будут ли они отображаться автоматически, а не как с диалогами, которые приходится открывать из программы?

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


И будет ли фрейм, если он не на весь экран, модальным как диалог?

Нет.

Петр Петрович
27.07.2021, 13:21
>> Для фреймов можно настроить поведение, которое вы называете "отображаться автоматически".

В т.ч. если фреймы (и экраны) вызываются у меня из программы? Не привязаны к кнопкам в визуализации явно. Конечная цель - полная синхронизация интерфейса на вновь подключившимся клиенте. Почти работает, с "Использовать переменную CurrentVisu" нужная страница открывается всегда, нужный диалог через VU.FbOpenDialog открывается ПОЧТИ всегда.

Евгений Кислов
27.07.2021, 13:30
>> Для фреймов можно настроить поведение, которое вы называете "отображаться автоматически".

В т.ч. если фреймы (и экраны) вызываются у меня из программы? Не привязаны к кнопкам в визуализации явно. Конечная цель - полная синхронизация интерфейса на вновь подключившимся клиенте. Почти работает, с "Использовать переменную CurrentVisu" нужная страница открывается всегда, нужный диалог через VU.FbOpenDialog открывается ПОЧТИ всегда.

Фрейм всегда присутствует на экране, из программы вы можете только выбрать экран, который будет в нем открыт.

Петр Петрович
27.07.2021, 13:46
Интересно, а не может быть нестабильность с программным открытием диалогов быть связана с тем, что фактически приходится выполнять такую последовательность:

MyCloseDialog(itfClientFilter:=VU.Globals.AllClien ts, xExecute:=FALSE, sDialogName:=MyVisuName);
MyCloseDialog(itfClientFilter:=VU.Globals.AllClien ts, xExecute:=TRUE, sDialogName:=MyVisuName);
MyOpenDialog(itfClientFilter:=VU.Globals.AllClient s, xExecute:=FALSE, sDialogName:=MyVisuName, xModal:=TRUE);
MyOpenDialog(itfClientFilter:=VU.Globals.AllClient s, xExecute:=TRUE, sDialogName:=MyVisuName, xModal:=TRUE);

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

Евгений Кислов
27.07.2021, 13:59
Интересно, а не может быть нестабильность с программным открытием диалогов быть связана с тем, что фактически приходится выполнять такую последовательность:

MyCloseDialog(itfClientFilter:=VU.Globals.AllClien ts, xExecute:=FALSE, sDialogName:=MyVisuName);
MyCloseDialog(itfClientFilter:=VU.Globals.AllClien ts, xExecute:=TRUE, sDialogName:=MyVisuName);
MyOpenDialog(itfClientFilter:=VU.Globals.AllClient s, xExecute:=FALSE, sDialogName:=MyVisuName, xModal:=TRUE);
MyOpenDialog(itfClientFilter:=VU.Globals.AllClient s, xExecute:=TRUE, sDialogName:=MyVisuName, xModal:=TRUE);

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

https://owen.ru/forum/showthread.php?t=22038&p=360045&viewfull=1#post360045

Петр Петрович
29.07.2021, 17:47
Коротко расскажу о своих изысканиях :-) нужно было синхронизировать экраны визуализации на вновь подключаемых клиентах.

1. Незнание об опции (просмотрел, каюсь) "Использовать переменную CurrentVisu" привело к долгому и извилистому пути с перебором подключившихся клиентов, ручному открытию страниц и диалогов и прочему. Оказалось, что все это не нужно. Но хоть немного больше узнал о системе. Сейчас достаточно Visuelems.CURRENTVISU:=MyVisuName; для всех клиентов.

2. Упрямое желание использовать Диалоги вместо Фреймов тоже приводило к неким тормозам и диалоги открывались не всегда. С фреймами похоже намного лучше. Жаль только, что их нельзя на время скрыть со страницы во время разоаботки интерфейса, впрочем, можно его просто удалить или передвинуть немного. И жаль, что фрейм не модальный, если он меньше чем страница-подложка. Можно, конечно, управляющие элементы фрейма разместить на такой странице, что бы она полностью перекрывала предыдущую, но иногда удобно видеть и предудущую страницу, для ориентировки. Ну да ничего, заголовок фрейма поможет я думаю, что бы человек помнил, что он сейчас делает и для какого экрана...

saii
29.07.2021, 21:20
2. Упрямое жедание использовать Диалоги вместо Фреймов тоже приводило к неким тормозам и диалоги открывались не всегда. С фреймами похоже намного лучше. Жаль только, что их нельзя на время скрыть со страницы во время разоаботки интерфейса, впрочем, можно его просто удалить или передвинуть немного. И жаль, что фрейм не модальный, если он меньше чем страница-подложка. Можно, конечно, управляющие элементы фрейма разместить на такой странице, что бы она полностью перекрывала предыдущую, но иногда удобно видеть и предудущую страницу, для ориентировки. Ну да ничего, заголовок фрейма поможет я думаю, что бы человек помнил, что он сейчас делает и для какого экрана...

1. Для "модальности" фрейма, можно между фреймом и элементами -визуализации расположить прозрачный прямоугольник или невидимый элемент. Его видимость можно связать с видимостью "модального" фрейма.

2. При разработке, фрейм можно увести за границу визуализации, и там его оставить, чтобы не мешал, а у фрейма "Absolute movement" связать с переменными, в которых указать нужные значения, чтобы фрейм встал в нужную позицию. Значения указываются относительно текущего размещения.

Петр Петрович
29.07.2021, 21:23
Очень интересно. Спасибо!

Upd. В "Absolute movement" задал, например, -1000 по X и передвинул его вправо. А в рантайме фрейм на нужном месте. Удобно, да.

fatlortroll
02.08.2021, 14:18
Если уже было, прошу прощения, но в руководстве "CODESYS V3.5 Визуализация 01.12.2019 версия 2.1" начиная с п. 7.2.1. ошибка -- переменная DWORD, определяющая цвет текста, не по модели RGBA, а по ARGB. По крайней мере, для СПК107.

Евгений Кислов
02.08.2021, 14:21
Если уже было, прошу прощения, но в руководстве "CODESYS V3.5 Визуализация 01.12.2019 версия 2.1" начиная с п. 7.2.1. ошибка -- переменная DWORD, определяющая цвет текста, не по модели RGBA, а по ARGB. По крайней мере, для СПК107.

Спасибо, поправлю при ревизии.

Солнечный заяц
02.08.2021, 15:47
Все разобрался. Надо было в Screen флаг Parameters are used в FALSE скинуть.

Я не понимаю, как можно поменять этот параметр? В документации об этом ни слова.

Евгений Кислов
02.08.2021, 15:51
Я не понимаю, как можно поменять этот параметр? В документации об этом ни слова.

С помощью двойного клика на значение параметра.

Солнечный заяц
02.08.2021, 16:00
С помощью двойного клика на значение параметра.
Не получается. Текущее значение <IoParam>. Во всплывающей подсказке "0 byte 0".
56326

Евгений Кислов
02.08.2021, 16:18
Не получается. Текущее значение <IoParam>. Во всплывающей подсказке "0 byte 0".
56326

Надо отключиться от контроллера - тогда получится.

Солнечный заяц
02.08.2021, 16:40
Надо отключиться от контроллера - тогда получится.
В отключенном состоянии то же самое56327
win7x86
cds3.5.16.3

Евгений Кислов
02.08.2021, 16:47
В отключенном состоянии то же самое56327
win7x86
cds3.5.16.3

Наведите курсор на вертикальную полоску слева от столбца Единица и раздвиньте ее вправо - появится столбец Значение.

Солнечный заяц
02.08.2021, 16:53
Наведите курсор на вертикальную полоску слева от столбца Единица и раздвиньте ее вправо - появится столбец Значение.

Теперь понятно. Спасибо!

Игорь Владимирович
04.08.2021, 12:10
Всем хорошего дня!
Не разберусь никак с графиками (трендами) в проекте 5 массивов глубиной 33 (0-32) каждый массив это отдельный тренд из памяти. как мне это все выводить в визуализацию?

Евгений Кислов
04.08.2021, 12:30
Всем хорошего дня!
Не разберусь никак с графиками (трендами) в проекте 5 массивов глубиной 33 (0-32) каждый массив это отдельный тренд из памяти. как мне это все выводить в визуализацию?

Добрый день.
Я думаю, проще всего использовать элемент XY-график для вашей задачи.
https://help.codesys.com/webapp/_visu_elem_xy_chart;product=core_visualization;ver sion=3.5.17.0

Игорь Владимирович
04.08.2021, 12:31
Добрый день.
Я думаю, проще всего использовать элемент XY-график для вашей задачи.
https://help.codesys.com/webapp/_visu_elem_xy_chart;product=core_visualization;ver sion=3.5.17.0

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

Евгений Кислов
04.08.2021, 12:32
да наверное, но я никогда не использовал и никак не могу вывести значения

Посмотрите пример:
https://ftp.owen.ru/CoDeSys3/21_Examples/01_3.5.11.5/02_Visu/04_3S/Visu%20Element%20XY%20Chart%20Example.package

Игорь Владимирович
04.08.2021, 12:40
Посмотрите пример:
https://ftp.owen.ru/CoDeSys3/21_Examples/01_3.5.11.5/02_Visu/04_3S/Visu%20Element%20XY%20Chart%20Example.package

как открыть ?

Евгений Кислов
04.08.2021, 12:43
как открыть ?

Инструменты - Менеджер пакетов

Игорь Владимирович
04.08.2021, 12:52
Инструменты - Менеджер пакетов

там отображается ху, а далее что?

Евгений Кислов
04.08.2021, 13:00
там отображается ху, а далее что?

Там - это где? Что значит "далее что"?
Выложите скриншот.

Игорь Владимирович
04.08.2021, 13:02
Там - это где? Что значит "далее что"?
Выложите скриншот.
вот скриншот
56374

Евгений Кислов
04.08.2021, 13:04
вот скриншот
56374

Во время установки вы должны были указать путь - по этому пути был распакован файл примера.

Игорь Владимирович
04.08.2021, 13:05
Во время установки вы должны были указать путь - по этому пути был распакован файл примера.

ну этого я же не знал(((
какой путь по умолчанию ?

Игорь Владимирович
04.08.2021, 13:30
запустил я пример, во там наворотили....

Игорь Владимирович
04.08.2021, 13:45
Во время установки вы должны были указать путь - по этому пути был распакован файл примера.

спасибо! разобрался! работает!

fatlortroll
10.08.2021, 08:38
Добрый день. Подскажите пожалуйста, при вызове диалога с параметрами (VAR_IN_OUT) из ST-программы, используя VisuUtils.FbOpenDialogExtended, за передачу этого VAR_IN_OUT диалогу отвечают параметры pbyDialogInterfaceData и udiDialogInterfaceDataSize?

Евгений Кислов
10.08.2021, 08:41
Добрый день. Подскажите пожалуйста, при вызове диалога с параметрами (VAR_IN_OUT) из ST-программы, используя VisuUtils.FbOpenDialogExtended, за передачу этого VAR_IN_OUT диалогу отвечают параметры pbyDialogInterfaceData и udiDialogInterfaceDataSize?

Добрый день.
Да.

fatlortroll
10.08.2021, 08:47
Спасибо.
А если параметров больше, чем один? Как их передавать в таком случае?

Евгений Кислов
10.08.2021, 08:48
Спасибо.
А если параметров больше, чем один? Как их передавать в таком случае?

Посмотрите пример.
https://ftp.owen.ru/CoDeSys3/21_Examples/01_3.5.11.5/02_Visu/03_Additional/Example_OwenVisuDialogs_3514v3.projectarchive

fatlortroll
10.08.2021, 08:54
Спасибо, посмотрю.

fatlortroll
10.08.2021, 09:59
Поля eType, eIconType, wsTitle и wsMessageTxt структуры stMessageInfo являются обязательными? Могу я после них добавить своё поле, функблок, например?

Евгений Кислов
10.08.2021, 10:04
Поля eType, eIconType, wsTitle и wsMessageTxt структуры stMessageInfo являются обязательными? Могу я после них добавить своё поле, функблок, например?

Эти поля объявлены в интерфейсе диалога примера - у вашего диалога они, очевидно, будут свои.

fatlortroll
10.08.2021, 10:05
Собственно, задача в том, чтобы передать диалогу экземпляр функблока, к переменным и методам которого диалог будет обращаться (по типу FileDirChoiceOwen, которому передаётся экземпляр Visu_OwenFbFileListProvider).

Игорь Владимирович
23.08.2021, 13:15
Всем привет!
в общем визуализация 1500 на 900 пикселей, ПЛК200. все ок, но мне нужно больше, добавляю ширину до 2000пикселей, в кодесисе самом отображается норм, а в браузере куска справа не хватает.. что делать?

Евгений Кислов
23.08.2021, 13:29
Всем привет!
в общем визуализация 1500 на 900 пикселей, ПЛК200. все ок, но мне нужно больше, добавляю ширину до 2000пикселей, в кодесисе самом отображается норм, а в браузере куска справа не хватает.. что делать?

Что значит "куска справа не хватает"?
Выложите скриншоты.

Игорь Владимирович
23.08.2021, 13:36
Что значит "куска справа не хватает"?
Выложите скриншоты.

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

Евгений Кислов
23.08.2021, 13:37
чистый лист в браузере, а в визуализации в кодесосе то там ок
также пытался расширить вниз страницу тоже упираюсь куда то, не пролистывается она а просто обрезается, при этом пиксели в каждой визуализации выставлены и в веб визуализации тоже

Выложите скриншоты или (лучше) предоставьте удаленный доступ к вашему ПК по TeamViewer или AnyDesk.

Игорь Владимирович
23.08.2021, 13:51
а вообще визуализацию можно по центру браузера сделать? а то прилипло к левой стороне))

Zerling
02.09.2021, 05:12
cds 3.5.7.4 spk107 старый
визуализация кажется тормознутой и изза этого часто двойные нажатия. можно ли как-то привязать зумер к прикосновению на экране?.. чтоб не не для всех элементов задавать ?

Евгений Кислов
02.09.2021, 06:26
cds 3.5.7.4 spk107 старый
визуализация кажется тормознутой и изза этого часто двойные нажатия. можно ли как-то привязать зумер к прикосновению на экране?.. чтоб не не для всех элементов задавать ?

Можно считывать счетчик нажатия на экран и по его изменению активировать зуммер.
См. п. 11.4.3:
https://ftp.owen.ru/CoDeSys3/11_Documentation/01_SPK/SPK_Visu_v.1.2.pdf

Но если вы используете таргет-файл с системными узлами в дереве проекта (Buzzer и т.д.) - то я не уверен, что этот способ сработает (по-моему, в этом случае обработку экрана перехватывает библиотека SPK_Drivers).

Максим Ульянов
04.09.2021, 17:44
Доброго времени коллеги) Прошу помощи в очередной раз) Элемент "Текстовое Поле " как бы так сделать вывод чтоб был текст типа: " Т=" и далее значение какой нето переменной .....помучался но два идентификатора %s и %f,подскажите как быть?

Евгений Кислов
04.09.2021, 17:45
Можно совмещать статический текст и спецификаторы: Т=%f

Максим Ульянов
04.09.2021, 20:38
Можно совмещать статический текст и спецификаторы: Т=%f

хм..все намного проще..Огромное спасибо)

collap5e
06.09.2021, 11:48
Возможно ли сделать так, чтобы при переменной 1 или 0 выключатель автоматически в нужное положение возвращался?
56865568665686756868

Евгений Кислов
06.09.2021, 12:08
Возможно ли сделать так, чтобы при переменной 1 или 0 выключатель автоматически в нужное положение возвращался?
56865568665686756868

Элемент так и работает, как вы описали - в зависимости от состояния привязанной переменной показывает то или иное изображение.
В чем у вас трудности?

collap5e
06.09.2021, 13:35
неправильно значит делаю. у меня эта кнопка Старт, но ей не присваивается 0, пока сам не нажму. Сейчас буду думать.

DenisV
10.09.2021, 09:48
Здравствуйте
Не получается получить доступ к визуализации ПЛК, и в локальной сети и при подключении через usb. Есть доступ к веб-конфигуратору, на ПЛК порт 8080 открыт, программа загружена и запущена, в онлайн режиме в codeys визуализация отображается, а в браузере "Попытка соединения не удалась"5694956950. Не первый раз возникает, в прошлый раз решилось перезагрузкой ПЛК, но как в целом можно решить проблему?

Евгений Кислов
10.09.2021, 09:51
Здравствуйте
Не получается получить доступ к визуализации ПЛК, и в локальной сети и при подключении через usb. Есть доступ к веб-конфигуратору, на ПЛК порт 8080 открыт, программа загружена и запущена, в онлайн режиме в codeys визуализация отображается, а в браузере "Попытка соединения не удалась"5694956950. Не первый раз возникает, в прошлый раз решилось перезагрузкой ПЛК, но как в целом можно решить проблему?

Добрый день.
Предоставьте, пожалуйста, удаленный доступ по TeamViewer или AnyDesc.

DenisV
21.09.2021, 10:14
Здравствуйте
Не получается получить доступ к визуализации ПЛК, и в локальной сети и при подключении через usb. Есть доступ к веб-конфигуратору, на ПЛК порт 8080 открыт, программа загружена и запущена, в онлайн режиме в codeys визуализация отображается, а в браузере "Попытка соединения не удалась"5694956950. Не первый раз возникает, в прошлый раз решилось перезагрузкой ПЛК, но как в целом можно решить проблему?

Удалось кое-что выяснить по поводу ошибки. Возможно проблема в OPC UA или взаимодействие компонентов OPC UA с компонентами журнала событий. Постепенно удаляя из проекта нововведения, после того как я удалил символьную конфигурацию (СК) всё заработало. Потом добавил СК в уже отлаженный рабочий проект, ошибка повторилась, потом создал проект содержащий только журнал событий и СК ошибка вновь повторилась причем на разных контроллерах 210, разных модификаций.
Характер и условия появления ошибки-исключения (предположительные):
Добавленная символьная конфигурация, выбираете несколько переменных для передачи и добавлен журнал событий(это не точно), в межсетевом экране ПЛК стоит галочка напротив правила Allow-CODESYS-OPCUA. Загружаете проект, создаёте загрузочное приложение. Открываете визуализацию в браузере и обычно я оставлял на ночь, то есть условно в 18:00 я загрузил проект и примерно в промежутке 3:00 -5:00 утра возникнет исключение: "runtime received SIGABRT - system may be in an inconsistent state". Утром вы придёте у вас останется доступ к веб-конфигуратору ПЛК, программа будет работать в рабочем режиме, но доступа к визуализации больше не будет. Иногда будет отображается один из экранов визуализации в уменьшенном виде, но ничего в нем сделать нельзя. Прилагаю ссылку на скачивание архива проекта.
https://dropmefiles.com/yyPTF

Евгений Кислов
23.09.2021, 08:24
Удалось кое-что выяснить по поводу ошибки. Возможно проблема в OPC UA или взаимодействие компонентов OPC UA с компонентами журнала событий. Постепенно удаляя из проекта нововведения, после того как я удалил символьную конфигурацию (СК) всё заработало. Потом добавил СК в уже отлаженный рабочий проект, ошибка повторилась, потом создал проект содержащий только журнал событий и СК ошибка вновь повторилась причем на разных контроллерах 210, разных модификаций.
Характер и условия появления ошибки-исключения (предположительные):
Добавленная символьная конфигурация, выбираете несколько переменных для передачи и добавлен журнал событий(это не точно), в межсетевом экране ПЛК стоит галочка напротив правила Allow-CODESYS-OPCUA. Загружаете проект, создаёте загрузочное приложение. Открываете визуализацию в браузере и обычно я оставлял на ночь, то есть условно в 18:00 я загрузил проект и примерно в промежутке 3:00 -5:00 утра возникнет исключение: "runtime received SIGABRT - system may be in an inconsistent state". Утром вы придёте у вас останется доступ к веб-конфигуратору ПЛК, программа будет работать в рабочем режиме, но доступа к визуализации больше не будет. Иногда будет отображается один из экранов визуализации в уменьшенном виде, но ничего в нем сделать нельзя. Прилагаю ссылку на скачивание архива проекта.
https://dropmefiles.com/yyPTF

У нас за почти полные сутки (~22 часа) с вашим проектом ситуация не воспроизвелась.
К вашему ПЛК есть доступ из внешней сети? У него не внешний IP?

DenisV
23.09.2021, 15:59
У нас за почти полные сутки (~22 часа) с вашим проектом ситуация не воспроизвелась.
К вашему ПЛК есть доступ из внешней сети? У него не внешний IP?

Сейчас нет,но я думаю будет возможность предоставить. А пока я еще раз попробую запустить до повторения ошибки.

Евгений Кислов
23.09.2021, 17:15
Сейчас нет,но я думаю будет возможность предоставить. А пока я еще раз попробую запустить до повторения ошибки.

Я имел в виду несколько другое - подобные проблемы я наблюдал только тогда, когда ПЛК висел на статическом IP и его постоянно сканировали всякие сервисы, ищущие уязвимости.
Если у вас ПЛК в локальной сети - то, вероятно, проблема не в этом.

Я бы вам рекомендовал попробовать ПЛК напрямую подключить к ПК по Ethernet и проверить, будет ли возникать исключение в этом случае.

confiden
24.09.2021, 13:16
Подскажите ответ на простейший вопрос. никак не найти ответ мне.
Переменная типа INT.
как при визуализации перенести на 2 знака запятую?

Евгений Кислов
24.09.2021, 13:23
Подскажите ответ на простейший вопрос. никак не найти ответ мне.
Переменная типа INT.
как при визуализации перенести на 2 знака запятую?

С INT так не получится - нужно привести к REAL.

confiden
24.09.2021, 13:27
вот как . а я все же надеялся что можно без перевода. просто как на панелях осуществить перенос точки

confiden
24.09.2021, 15:46
то есть в теле самой программы (CFC) все равно придется произвести преобразование? или это можно сделать в самом текстовом поле? и я так понимаю в свойстве %.2f

Зинько Владислав
24.09.2021, 16:09
то есть в теле самой программы (CFC) все равно придется произвести преобразование? или это можно сделать в самом текстовом поле? и я так понимаю в свойстве %.2f

Добрый день. Можете таким образом, как на скринах.
57157
57158

confiden
24.09.2021, 16:29
нет, я про это https://forge.codesys.com/forge/talk/Runtime/thread/085a6ce7fd/#4f97

да так работает . нужна подключенная библиотека CmpTargetVisu ,далее в строке текстовой переменной указываем TO_REAL(x)/100 ,а в поле текст %3.1f

confiden
04.10.2021, 14:56
подскажите думаю кто сталкивался. СПК107(М01) при использование тренда в визуализации не получается запустить в режиме эмуляции. выскакивает окно .57283 .Вроде и смысл то понятен,но никак не могу понять где найти нужные файлы

Евгений Кислов
04.10.2021, 16:28
подскажите думаю кто сталкивался. СПК107(М01) при использование тренда в визуализации не получается запустить в режиме эмуляции. выскакивает окно .57283 .Вроде и смысл то понятен,но никак не могу понять где найти нужные файлы

В режиме эмуляции тренды не поддерживаются.
Используйте виртуальный контроллер:
http://www.owen.ru/forum/showthread.php?t=28167&p=296706&viewfull=1#post296706

GoodLuck
07.10.2021, 10:53
Добрый день!

Необходимо сделать интерфейс на двух языках. Подскажите, возможно ли в Codesys это сделать какими-то встроенными средствами?

Евгений Кислов
07.10.2021, 11:00
Добрый день!

Необходимо сделать интерфейс на двух языках. Подскажите, возможно ли в Codesys это сделать какими-то встроенными средствами?

Добрый день.
Да, см. п. 10.3.5:
https://ftp.owen.ru/CoDeSys3/11_Documentation/03_3.5.11.5/CDSv3.5_Visu_v2.2.pdf

ekostq
17.10.2021, 16:35
Здравствуйте!

Подскажите, есть ли возможность передавать параметры по HTTP (в URL) при обращении к Web-визуализации в код ПЛК210 (CoDeSys 3.5 SP14 Patch 3) ?

Основная задача отображать нужную вкладку на странице Web-визуализации, при обращении к ней, в зависимости от параметра указанного в GET-запросе.

Или, если это не возможно, может есть какие-то другие предложения как реализовать эту задачу?

Евгений Кислов
17.10.2021, 17:47
Здравствуйте!

Подскажите, есть ли возможность передавать параметры по HTTP (в URL) при обращении к Web-визуализации в код ПЛК210 (CoDeSys 3.5 SP14 Patch 3) ?

Основная задача отображать нужную вкладку на странице Web-визуализации, при обращении к ней, в зависимости от параметра указанного в GET-запросе.

Или, если это не возможно, может есть какие-то другие предложения как реализовать эту задачу?

Добрый день.
Опишите, пожалуйста, задачу полностью - кто является клиентом, зачем ему переключать экраны через GET-запрос и т.д.

ekostq
17.10.2021, 18:30
Добрый день.
Опишите, пожалуйста, задачу полностью - кто является клиентом, зачем ему переключать экраны через GET-запрос и т.д.

Не обязательно в GET-запросе, если есть другие варианты, можно и по другому.
Может не совсем корректно выразился наверное правильнее это назвать URL-ссылкой с параметрами.

На ПЛК есть вкладки на которых отображается информация по параметрам и управление двигателями (двигателей больше десятка).
Есть отдельный сервер, содержащий совокупную информацию по всей системе автоматизации и на нем хотелось бы сделать отдельные ссылки переходя по которым
открывалась бы вкладка с информацией и управлением соответствующим двигателем.

Сейчас сделано так, что заходим на Web-визуализацию ПЛК и выбираем вкладку с нужным двигателем, а хотелось бы переходить по ссылке с сервера сразу на нужную вкладку с выбранным двигателем.
Например, чтобы при обращении с сервера по ссылкам:
http://192.168.0.11:8080?visutab=1
открывалась бы вкладка соответствующая двигателю 1

http://192.168.0.11:8080?visutab=2
открывалась бы вкладка соответствующая двигателю 2

и т.д.

Евгений Кислов
17.10.2021, 18:33
Не обязательно в GET-запросе, если есть другие варианты, можно и по другому.

На ПЛК есть вкладки на которых отображается информация по параметрам и управление двигателями (двигателей больше десятка).
Есть отдельный сервер, содержащий совокупную информацию по всей системе автоматизации и на нем хотелось бы сделать отдельные ссылки переходя по которым
открывалась бы вкладка с информацией и управлением соответствующим двигателем.

Сейчас сделано так, что заходим на Web-визуализацию ПЛК и выбираем вкладку с нужным двигателем, а хотелось бы переходить по ссылке с сервера сразу на нужную вкладку с выбранным двигателем.
Например, чтобы при обращении с сервера по ссылкам:
http://192.168.0.11:8080?visutab=1
открывалась бы вкладка соответствующая двигателю 1

http://192.168.0.11:8080?visutab=2
открывалась бы вкладка соответствующая двигателю 2

и т.д.

Добавьте в CODESYS в дереве проекта нужное количество узлов WebVisualization и задайте для каждого из них свое имя страницы и стартовый экран визуализации.

И получится так:

http://192.168.0.11:8080/visutab1.htm
http://192.168.0.11:8080/visutab2.htm
...

ekostq
17.10.2021, 20:55
Добавьте в CODESYS в дереве проекта нужное количество узлов WebVisualization и задайте для каждого из них свое имя страницы и стартовый экран визуализации.

И получится так:

http://192.168.0.11:8080/visutab1.htm
http://192.168.0.11:8080/visutab2.htm
...
Спасибо! В крайнем случае, наверное, придется так и сделать.

Однако, некоторые вкладки могут быть одинаковые (по типу и по количеству отображаемых параметров) и в этом случае было бы логичным использовать одну вкладку, подставляя параметры конкретного двигателя по его индексу, который бы как раз и можно было бы передавать в URL, не создавая при этом множество Web-страниц.

Правильно понимаю, что передача параметров через URL не предусмотрена и, если даже и возможна, то трудно реализуема или все-таки есть какая-то возможность передать параметры в URL в код?

Евгений Кислов
18.10.2021, 06:32
Правильно понимаю, что передача параметров через URL не предусмотрена и, если даже и возможна, то трудно реализуема или все-таки есть какая-то возможность передать параметры в URL в код?

Передавать через URL можно только конфигурационные параметры (например, флаг поддержки multi-touch на клиенте).
Передать пользовательский параметр нельзя.

Технически - можно в приложении ПЛК поднять TCP- или UDP-сервер, а на стороне клиента при нажатии на ссылку отправлять на него пакет с номером экрана - но это, на мой взгляд, выглядит избыточно сложным решением.

PavelGO
12.11.2021, 10:39
Добрый день. Существует ли русскоязычная клавиатура для 3.5.5? С ftp не подходит по версии. Как можно решить?

Евгений Кислов
12.11.2021, 10:45
Добрый день. Существует ли русскоязычная клавиатура для 3.5.5? С ftp не подходит по версии. Как можно решить?

А в какой версии CODESYS вы программируете ваш контроллер?
Именно в V3.5 SP5 Patch 5?

PavelGO
12.11.2021, 12:22
А в какой версии CODESYS вы программируете ваш контроллер?
Именно в V3.5 SP5 Patch 5?

Именно так. СПК207

Евгений Кислов
12.11.2021, 12:38
Именно так. СПК207

В этой версии вариантов нет.
Самая старая из библиотек с русскоязычной клавиатурой поддерживается начиная с V3.5 SP6.

PavelGO
12.11.2021, 13:26
Это очень печально. Т.е. никак не перекомпилировать ее? Можно не пытаться?

Евгений Кислов
12.11.2021, 13:31
Это очень печально. Т.е. никак не перекомпилировать ее? Можно не пытаться?

В V3.5 SP5 Patch 5 - можно не пытаться.

57911

GoodLuck
16.11.2021, 08:39
Добрый день!

Пишу проект, в котором интерфейс на 2-х языках. С элементами, где есть свойство Динамические тексты, проблем не возникает.
А есть ли возможность, сделать мультиязычными заголовки в таких элементах, как Набор вкладок или Таблица?

Евгений Кислов
16.11.2021, 09:01
Добрый день!

Пишу проект, в котором интерфейс на 2-х языках. С элементами, где есть свойство Динамические тексты, проблем не возникает.
А есть ли возможность, сделать мультиязычными заголовки в таких элементах, как Набор вкладок или Таблица?

Добрый день.
Да - см. GlobalTextList на вкладке POU.

GoodLuck
16.11.2021, 15:03
Добрый день.
Да - см. GlobalTextList на вкладке POU.

Подскажите, может есть способ сделать мультиязычным заголовок диалога (например, при вводе значения переменной). Через GlobalTextList не получается.

Евгений Кислов
16.11.2021, 15:11
Подскажите, может есть способ сделать мультиязычным заголовок диалога (например, при вводе значения переменной). Через GlobalTextList не получается.

Заголовок диалога можно изменять через переменную типа WSTRING:

57941

Изменяйте ее значение в коде в зависимости от выбранного языка.

2ar
28.11.2021, 11:58
Codesys 3.5 sp16
При создании проекта с визуализацией появляется данное сообщение. Подскажите где найти библиотеку с данным номером. На сайте скачал 3.5.16.3, подключил, но все равно вылазит данное сообщение
58113

Евгений Кислов
28.11.2021, 12:08
Codesys 3.5 sp16
При создании проекта с визуализацией появляется данное сообщение. Подскажите где найти библиотеку с данным номером. На сайте скачал 3.5.16.3, подключил, но все равно вылазит данное сообщение
58113

Дело не в отсутствии библиотеки - у вас исключение при запуске проекта возникает.
Выкладывайте файл проекта, посмотрим, в чем может быть дело.

2ar
28.11.2021, 12:36
Если подскажите буду благодарен. Урок из интернета. Вроде все делал как в уроке, но что-то пошло не так и в эмуляции не идет визуализация

Евгений Кислов
28.11.2021, 12:47
Если подскажите буду благодарен. Урок из интернета. Вроде все делал как в уроке, но что-то пошло не так и в эмуляции не идет визуализация

У вас в проекте выбран таргет-файл от старой модели СПК1хх - для ее программирования необходимо использовать CODESYS V3.5 SP5 Patch и установить архив репозитория (ссылка в моей подписи).

2ar
28.11.2021, 13:03
спасибо за быстрый ответ

2ar
28.11.2021, 14:45
У вас в проекте выбран таргет-файл от старой модели СПК1хх - для ее программирования необходимо использовать CODESYS V3.5 SP5 Patch и установить архив репозитория (ссылка в моей подписи).

Евгений, а можете еще подсказать. SP16 нормально запускается, а SP5 при запуске не отображаются окна. Это и стала причиной перехода на SP16
Вот так выглядит загруженный проект.
58118

Евгений Кислов
28.11.2021, 15:12
Евгений, а можете еще подсказать. SP16 нормально запускается, а SP5 при запуске не отображаются окна. Это и стала причиной перехода на SP16
Вот так выглядит загруженный проект.
58118

Какие окна? Вы про то, что у вас дерево проекта на скриншоте не отображается?
Для этого нужно сделать так: Вид - Устройства

2ar
28.11.2021, 15:21
Какие окна? Вы про то, что у вас дерево проекта на скриншоте не отображается?
Для этого нужно сделать так: Вид - Устройства

Получилось.:) Не много затупил.