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 - теперь в таргет- и веб-визуализации в подобных случаях все отображается корректно и идентично.
В сервисной визуализации отображение до сих пор отличается - пока еще не поправили.