PDA

Просмотр полной версии : CODESYS V3.5. Онлайн-FAQ



Евгений Кислов
09.02.2018, 09:36
CODESYS V3.5 – достаточно сложный программный продукт, и довольно часто у пользователей возникают вопросы по работе с ним. Эти вопросы публикуются на форуме, поступают в техподдержку и т.д. Ответы на наиболее часто задаваемые вопросы собраны в документе CODESYS V3.5. FAQ (https://ftp.owen.ru/CoDeSys3/11_Documentation/03_3.5.11.5/CDSv3.5_Faq_v.2.2.pdf). В этой теме будут публиковаться ответы на более специфические вопросы, которые, тем не менее, могут представлять интерес для определенного числа пользователей. Вполне вероятно, что часть из них также войдет в следующую версию документа.

ОГЛАВЛЕНИЕ:

1. Как настроить воспроизведение звука в web-визуализации? (http://www.owen.ru/forum/showthread.php?t=28167&p=269327&viewfull=1#post269327)
2. Как настроить обмен по протоколу MQTT? (http://www.owen.ru/forum/showthread.php?t=28167&p=269327&viewfull=1#post269329)
3. Как по RS-485 опросить устройство, работающее на скорости <4800 бод? (http://www.owen.ru/forum/showthread.php?t=28167&p=269327&viewfull=1#post269330)
4. Какие сетевые порты контроллера использует среда исполнения? (http://www.owen.ru/forum/showthread.php?t=28167&p=269331&viewfull=1#post269331)
5. Почему при делении происходит округление значения? (http://www.owen.ru/forum/showthread.php?t=28167&p=269333&viewfull=1#post269333)
6. Контроллер - Modbus Slave. Можно ли изменить его адрес (slave ID) в процессе работы? (http://www.owen.ru/forum/showthread.php?t=28167&p=269342&viewfull=1#post269342)
7. Какие горячие клавиши используются в CODESYS 3.5? (http://www.owen.ru/forum/showthread.php?t=28167&p=269352&viewfull=1#post269352)
8. Как включить отображение пиктограмм POU в редакторе CFC? (http://www.owen.ru/forum/showthread.php?t=28167&p=269367&viewfull=1#post269367)
9. Как проверить, что число имеет значение NaN? (http://www.owen.ru/forum/showthread.php?t=28167&p=269644&viewfull=1#post269644)
10. Как переключить режим отображения переменных? (DEC/HEX) (http://www.owen.ru/forum/showthread.php?t=28167&p=269744&viewfull=1#post269744)
11. Как изменить версию библиотеки в проекте? (http://www.owen.ru/forum/showthread.php?t=28167&p=269968&viewfull=1#post269968)
12. Как синхронизировать системное время контроллера с NTP-сервером? (http://www.owen.ru/forum/showthread.php?t=28167&p=270061&viewfull=1#post270061)
13. Как при отладке увидеть промежуточные значения переменных? (http://www.owen.ru/forum/showthread.php?t=28167&p=270119&viewfull=1#post270119)
14. Можно ли считать тексты из компонента Список текстов в переменные программы? (http://www.owen.ru/forum/showthread.php?t=28167&p=270124&viewfull=1#post270124)
15. Как определить неиспользуемые в проекте переменные? (http://www.owen.ru/forum/showthread.php?t=28167&p=270461&viewfull=1#post270461)
16. Как установить и добавить библиотеку? (http://www.owen.ru/forum/showthread.php?t=28167&p=270817&viewfull=1#post270817)
17. Как преобразовывать данные? (2 WORD в REAL и т.п.) (http://www.owen.ru/forum/showthread.php?t=28167&p=270832&viewfull=1#post270832)
18. Как изменить имя переменной во всех местах проекта, где она используется? (http://www.owen.ru/forum/showthread.php?t=28167&p=270853&viewfull=1#post270853)
19. Почему при конверсии кириллицы из STRING в WSTRING получаются "крокозябры"? (http://www.owen.ru/forum/showthread.php?t=28167&p=270862&viewfull=1#post270862)
20. Как считать информацию об устройстве в переменные программы? (http://www.owen.ru/forum/showthread.php?t=28167&p=270875&viewfull=1#post270875)
21. Как считать информацию о проекте в переменные программы? (http://www.owen.ru/forum/showthread.php?t=28167&p=270876&viewfull=1#post270876)
22. Как организовать обмен по протоколу Modbus ASCII? (http://www.owen.ru/forum/showthread.php?t=28167&p=270952&viewfull=1#post270952)
23. Где хранятся изображения стандартных ламп и кнопок, используемые в визуализации? (http://www.owen.ru/forum/showthread.php?t=28167&p=270953&viewfull=1#post270953)
24. Можно ли изменить внешний вид диалогов ввода? (Numpad, Keypad) (http://www.owen.ru/forum/showthread.php?t=28167&p=270956&viewfull=1#post270956)
25. Чем отличаются типы данных WORD и UINT? (http://www.owen.ru/forum/showthread.php?t=28167&p=271057&viewfull=1#post271057)
26. Как подключить контроллер к SCADA-системе TraceMode? (http://www.owen.ru/forum/showthread.php?t=28167&p=271278&viewfull=1#post271278)
27. Некоторые особенности языка CFC (http://www.owen.ru/forum/showthread.php?t=28167&p=271279&viewfull=1#post271279)
28. Как сделать ярлык для англоязычной версии CODESYS? (http://www.owen.ru/forum/showthread.php?t=28167&p=271282&viewfull=1#post271282)
29. В каких форматах можно сохранить проект CODESYS? (http://www.owen.ru/forum/showthread.php?t=28167&p=271506&viewfull=1#post271506)
30. Как из программы изменить диапазон элемента Стрелочный индикатор? (http://www.owen.ru/forum/showthread.php?t=28167&p=271814&viewfull=1#post271814)
31. Почему вместо элемента Индикатор добавляется Стрелочный индикатор? (http://www.owen.ru/forum/showthread.php?t=28167&p=271818&viewfull=1#post271818)
32. Вопросы по таймерам (http://www.owen.ru/forum/showthread.php?t=28167&p=272238&viewfull=1#post272238)
33. Что можно использовать вместо ФБ Сhange_Real_Time_Clock из библиотеки SPK_Tools? (http://www.owen.ru/forum/showthread.php?t=28167&p=272254&viewfull=1#post272254)
34. Как вывести сообщение в лог CODESYS из программы? (http://www.owen.ru/forum/showthread.php?t=28167&p=272260&viewfull=1#post272260)
35. Как переинициализировать компонент ModbusCom? (http://www.owen.ru/forum/showthread.php?t=28167&p=272286&viewfull=1#post272286)
36. Как создать в визуализации вертикальный текст? (http://www.owen.ru/forum/showthread.php?t=28167&p=277518&viewfull=1#post277518)
37. При запуске CODESYS возникает ошибка... (http://www.owen.ru/forum/showthread.php?t=28167&p=278736&viewfull=1#post278736)
38. Как работать с длинными (>255 символов) строками? (http://www.owen.ru/forum/showthread.php?t=28167&p=289762&viewfull=1#post289762)
39. Как сделать резервную копию, если нет исходников проекта? (http://www.owen.ru/forum/showthread.php?t=28167&p=294787&viewfull=1#post294787)
40. Как защитить загруженный в контроллер проект от копирования? (http://www.owen.ru/forum/showthread.php?t=28167&p=294788&viewfull=1#post294788)
41. Как реализовать управление пользователями визуализации из кода? (http://www.owen.ru/forum/showthread.php?t=28167&p=295107&viewfull=1#post295107)
42. Как проверить проект в эмуляции? (http://www.owen.ru/forum/showthread.php?t=28167&p=296706&viewfull=1#post296706)
43. Modbus TCP - изменение сетевых настроек из кода программы (http://www.owen.ru/forum/showthread.php?t=28167&p=296714&viewfull=1#post296714)
44. Как настроить обмен с электросчетчиками Меркурий? (http://www.owen.ru/forum/showthread.php?t=28167&p=298761&viewfull=1#post298761)
45. Как использовать кириллицу для логинов/паролей? (http://www.owen.ru/forum/showthread.php?t=28167&p=300498&viewfull=1#post300498)
46. Как обновить изображение в визуализации с USB- или SD-накопителя? (http://www.owen.ru/forum/showthread.php?t=28167&p=300747&viewfull=1#post300747)
47. Как выполнить фрагмент кода однократно при старте приложения? (https://www.owen.ru/forum/showthread.php?t=28167&p=304642&viewfull=1#post304642)
48. Как отключить устройство из опроса при обмене через конфигурацию? (https://www.owen.ru/forum/showthread.php?t=28167&p=304649&viewfull=1#post304649)
49. Что делать, если в визуализации происходит "наложение" текстов? (https://www.owen.ru/forum/showthread.php?t=28167&p=304650&viewfull=1#post304650)
50. Можно ли изменить картинку "Отсутствует визуализация"? (https://www.owen.ru/forum/showthread.php?t=28167&p=305476&viewfull=1#post305476)
51. Что делать, если появляется ошибка "Адрес уже используется" ? (https://www.owen.ru/forum/showthread.php?t=28167&p=305691&viewfull=1#post305691)
52. Что делать, если при загрузке проекта появляется ошибка "Download denied..." ? (https://www.owen.ru/forum/showthread.php?t=28167&p=308387&viewfull=1#post308387)
53. Как организовано сохранение retain-переменных? (https://www.owen.ru/forum/showthread.php?t=28167&p=308592&viewfull=1#post308592)
54. Что делать, если не удается подключиться к контроллеру через кабель USB B? (https://www.owen.ru/forum/showthread.php?t=28167&p=309085&viewfull=1#post309085)
55. Как настроить favicon для страницы web-визуализации? (https://www.owen.ru/forum/showthread.php?t=28167&p=309157&viewfull=1#post309157)
56. Как запаковать файл в архив с установкой пароля? (https://owen.ru/forum/showthread.php?t=28167&p=312153&viewfull=1#post312153)
57. Как переключить экран визуализации при входе пользователя в систему? (https://owen.ru/forum/showthread.php?t=28167&p=312297&viewfull=1#post312297)
58. Особенности выполнения команды "Создать загрузочное приложение" (https://owen.ru/forum/showthread.php?t=28167&p=312974&viewfull=1#post312974)
59. При открытии диалога на экране наблюдаются артефакты или пропадание элементов... (https://owen.ru/forum/showthread.php?t=28167&page=6&p=323241&posted=1#post323241)
60. При использовании трендов возникает ошибка... (https://owen.ru/forum/showthread.php?t=28167&p=325383&viewfull=1#post325383)
61. Можно ли установить среду программирования CODESYS на ПК с ОС Linux? (https://owen.ru/forum/showthread.php?t=28167&p=328720&viewfull=1#post328720)
62. Как считать данные мониторинга задач в переменные программы? (https://owen.ru/forum/showthread.php?t=28167&p=329098&viewfull=1#post329098)
63. Можно ли подключить к контроллеру преобразователь АС4-М? (https://owen.ru/forum/showthread.php?t=28167&p=329252&viewfull=1#post329252)
64. Что делать, если контроллер не обнаруживается при сканировании сети? (https://owen.ru/forum/showthread.php?t=28167&p=330018&viewfull=1#post330018)
65. Как включить/отключить поддержку multi-touch для различных клиентов визуализации? (https://owen.ru/forum/showthread.php?t=28167&p=331174&viewfull=1#post331174)
66. Как в визуализации посмотреть список файлов ПЛК или подключенного накопителя? (https://owen.ru/forum/showthread.php?t=28167&p=331389&viewfull=1#post331389)

Евгений Кислов
09.02.2018, 09:38
Вопрос: при возникновении аварии оператор должен услышать аварийный сигнал. Как реализовать это при использовании web-визуализации?

Ответ: см. данное видео (https://www.youtube.com/watch?v=uJvpz0PP7C8).

Евгений Кислов
09.02.2018, 09:42
Вопрос: как в CODESYS 3.5 настроить обмен по протоколу MQTT (https://ru.wikipedia.org/wiki/MQTT)?

Ответ: можно воспользоваться библиотекой MQTT Client - она содержит реализацию клиента для протокола MQTT. Поддерживается подписка и публикация. Исходные коды библиотеки открыты.
Скачать библиотеку и посмотреть примеры ее использования можно на данной странице (codesys-mqtt-library.sourceforge.net).

Евгений Кислов
09.02.2018, 09:48
Вопрос: как по RS-485 опросить устройство, работающее на скорости <4800 бод?

Ответ: для контроллеров, программируемых в CODESYS V3.5 SP11 Patch 5 или выше, скорости обмена 1200...4800 работают без дополнительных настроек.

В старых версиях CODESYS (3.5.5.5) нет возможности при открытии порта выбрать скорость меньше 4800.
Тем не менее, это можно сделать через Linux с помощью библиотеки CmpSysExec.
С помощью функции SysExecute необходимо однократно отправить в терминал команду типа


stty -F /dev/ttyS2 2400

где 2 - номер порта, совпадающий с маркировкой на задней крышке СПК;
2400 - скорость, на которой должен работать порт.

После этого можно открыть порт на любой скорости (с помощью соответствующего ФБ из библиотеки CAA SerialCom, SysCom или др.) - данная настройка уже не будет ни на что влиять, порт будет работать на скорости, заданной ранее.

Евгений Кислов
09.02.2018, 10:07
Вопрос: какие сетевые порты (TCP и UDP) использует среда исполнения контроллера в процессе работы?

Ответ: 1217 (Gateway), 1740-1743, 11740 (коммуникация со средой исполнения), 8080 (сервер web-визуализации по умолчанию). Порт 502 по умолчанию используется для обмена по протоколу Modbus TCP.

Примечание: для контроллеров, программируемых в CODESYS V3.5 SP11 Patch 5 или выше, порты web-визуализации (для HTTP и HTTPS) могут быть заданы в конфигураторе.

Евгений Кислов
09.02.2018, 10:21
Вопрос: почему в результате выполнения следующего кода...



VAR
rVar: REAL;
iVar1: INT := 10;
iVar2: INT := 4;
END_VAR

rVar := iVar1 / iVar2;



...переменная rVar принимает значение 2, а не 2.5? Ведь она имеет тип REAL - с плавающей точкой!

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



VAR
rVar: REAL;
iVar1: INT := 10;
iVar2: INT := 4;
END_VAR

rVar := INT_TO_REAL(iVar1) / iVar2;



Если в делении участвуют константы, то можно сделать так:


rVar := iVar1 / 4.0; // 4.0, а не 4

или


rVar := iVar1 / REAL#4;

Евгений Кислов
09.02.2018, 11:39
Вопрос: контроллер выполняет функцию Modbus RTU Slave. Можно ли изменить его адрес (slave ID) в процессе работы (например, с дисплея контроллера)?

Ответ: да, это возможно при использовании библиотеки OwenCommunication. Подробная информация приведена в данном видео (https://youtu.be/NzDdo6Hllm8).

Евгений Кислов
09.02.2018, 13:04
Вопрос: какие горячие клавиши используются в CODESYS 3.5? Можно ли их переназначить?

Ответ: Список горячих клавиш приведен в данном документе (https://ftp.owen.ru/CoDeSys3/99_ForumFiles/CODESYS-keyboard-shortcuts.pdf). Переназначить горячие клавиши можно в меню Инструменты - Настройки - Клавиатура. Выберите нужное действие, установите курсор на поле Горячие клавиши, нажмите комбинацию клавиш (Ctrl+<...> или Ctrl+Shift+<...>), после чего нажмите Назначить.

Евгений Кислов
09.02.2018, 13:57
Вопрос: при создании программ на языках LD и FBD каждый оператор/POU имеет пиктограмму, характеризующее его назначение. В редакторе CFC эти пиктограммы не отображаются. Можно ли их включить?

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

35474 35475

Для POU, созданных пользователем, можно задать произвольную пиктограмму (ПКМ на POU - Свойства - Изображение).

Евгений Кислов
12.02.2018, 15:18
Вопрос: как проверить, что число имеет значение NaN?

Комментарий: NaN (Not-a-Number) - это особое состояние числа с плавающей точкой, возникающее при специфических (в большинстве случаев - некорректных) математических операциях. Подробнее см. в статье на Википедии (https://ru.wikipedia.org/wiki/NaN).

Ответ: например, можно воспользоваться функцией IsRealNaN из библиотеки FloatingPointUtils:



VAR
rVar: REAL;

xIsNaN: BOOL;
END_VAR

rVar := SQRT(-1.0); // генерируем NaN

xIsNaN := FPU.IsRealNaN(rVar);



или с помощью конвертации значения в строковый вид:



VAR
rVar: REAL;

sVar: STRING;
xIsNaN: BOOL;
END_VAR

rVar := SQRT(-1.0); // генерируем NaN

sVar := REAL_TO_STRING(rVar);

xIsNaN := (sVar='#NaN');



Можно также воспользоваться особым свойством NaN - оно не равно ни одному числу, в т.ч. и самому себе:



VAR
rVar: REAL;

xIsNaN: BOOL;
END_VAR

rVar := SQRT(-1.0); // генерируем NaN

xIsNaN := (rVar<>rVar);

Евгений Кислов
13.02.2018, 11:51
Вопрос: как переключить режим отображения переменных? (DEC/HEX)

Ответ: меню Отладка - Режим отображения.

Эта функция меняет режим отображения для всех типов числовых переменных (кроме REAL и LREAL).
В некоторых случаях представляется удобным единовременно использовать разные режимы для различных переменных.

Для этого следует при объявлении переменных использовать директиву displaymode:



{attribute 'displaymode':='bin'}
byVar: BYTE := 2#0011_1100;
{attribute 'displaymode':='dec'}
uiVar: UINT := 123;
{attribute 'displaymode':='hex'}
wVar: WORD := 16#ABCD;


35563

Евгений Кислов
15.02.2018, 09:18
Вопрос: как изменить версию библиотеки в проекте?

Ответ: в Менеджере библиотек нажмите кнопку Плейсхолдеры. В появившимся списке однократным нажатием ЛКМ выберите нужную библиотеку (соответствующая строка выделится синим).
Нажмите ЛКМ на текущую версию библиотеки - появится окно со списком всех установленных системе версий данной библиотеки. Выберите нужную.

35603

Евгений Кислов
15.02.2018, 15:59
Вопрос: как синхронизировать системное время контроллера с NTP-сервером?

Примечание: для контроллеров, программируемых в CODESYS V3.5 SP11 Patch 5 или выше, этот функционал доступен в конфигураторе и узле OwenRTC таргет-файла.

Примечание: для контроллеров, программируемых в CODESYS V3.5 SP14 Patch 3 или выше, этот функционал доступен в web-конфигураторе.

Ответ: см. пример (https://ftp.owen.ru/CoDeSys3/99_ForumFiles/Example_SNTP.projectarchive) (создан в 3.5 SP7 Patch4). В нем демонстрируется отправка запроса на NTP-сервер и разбор ответа. На основе примера пользователь может создать ФБ с нужным для его задачи поведением. Записать полученное время в системные часы контроллера можно с помощью библиотеки CAA DTUtil (см. ее описание (http://ftp.owen.ru/CoDeSys3/11_Documentation/01_SPK/SPK_SystemTime_v.1.0.pdf)).

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

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

35622 35623

Примечания: при использовании данного режима:

1. возрастает время выполнения цикла;
2. невозможно использование точек останова;
3. ввод значений переменных возможен только в поле объявления (но не напрямую в редакторе).

Евгений Кислов
16.02.2018, 09:31
Вопрос: можно ли считать тексты из компонента Список текстов в переменные программы? Можно ли отредактировать список текстов в процессе работы программы?

Ответ: да, это возможно. См. этот документ (https://ftp.owen.ru/CoDeSys3/98_Books/CodesysTextLists.pdf).

Евгений Кислов
19.02.2018, 08:25
Вопрос: как определить неиспользуемые в проекте переменные?

Ответ: в меню Проект выберите пункт Установки проекта, и в появившемся окне найдите вкладку Статический анализ. Установите нужные галочки.

35680

После этого при выполнении команды Генерация кода (меню Компиляция) на панели сообщений будет выводится соответствующая информация:

35681

Евгений Кислов
21.02.2018, 08:29
Вопрос: как установить и добавить библиотеку?

Ответ: в целом, есть три способа способа распространения библиотек:

1.В виде архива репозитория. Архив содержит все версии системных библиотек, начиная с самых ранних релизов CODESYS V3 и заканчивая 3.5 SP4. Он необходим для работы с контроллерами Овен.
Скачать архив репозитория можно здесь (http://www.owen.ru/catalog/codesys_v3/opisanie). Архив представляет собой файл формата .msi, который необходимо запустить для начала установки.

2. В виде пакета (формата .package). В виде пакетов распространяются компоненты и библиотеки ОВЕН, а также, например, библиотеки OSCAT. Для установки пакета следует на вкладке Инструменты выбрать пункт Менеджер пакетов и нажать кнопку Установить.

3. В видео отдельного файла (формата .library, .compiled-library). Для установки библиотеки следует на вкладке Инструменты выбрать пункт Репозиторий библиотек в и нажать кнопку Установить.

35752

Все установленные библиотеки по умолчанию размещаются в папке C:\ProgramData\CODESYS\Managed Libraries

Важно отметить, что версии библиотек устанавливаются независимо (в отличие от Codesys 2.3, где каждая новая версия перезаписывала предыдущую).
При этом автоматического обновления библиотеки в проекте не происходит - при необходимости следует произвести эту операцию вручную в Менеджере библиотек (см. подробности здесь (http://www.owen.ru/forum/showthread.php?t=28167&p=269968&viewfull=1#post269968)).

Евгений Кислов
21.02.2018, 09:18
Вопрос: в процессе разработки программы часто возникают задачи преобразования данных. В некоторых случаях достаточно стандартных операторов конверсии (например, REAL_TO_INT). Но иногда возникают вопросы другого рода, например - как разбить переменную DWORD на 4 отдельных байта, как преобразовать 2 переменные типа WORD в REAL и т.д. Очевидно, что можно сделать это с помощью указателей. Но есть ли более простые способы?

Ответ: такие способы есть. Рассмотрим три библиотеки:

1. Библиотека Util содержит функции, позволяющие:


собирать переменные типов BYTE/WORD/DWORD из отдельных битов и разделять их на отдельные биты (удобно для графических языков);
выделять/устанавливать конкретный бит переменных типа BYTE/WORD/DWORD;
преобразовывать данные из десятичного формата в двоично-десятичный (https://ru.wikipedia.org/wiki/%D0%94%D0%B2%D0%BE%D0%B8%D1%87%D0%BD%D0%BE-%D0%B4%D0%B5%D1%81%D1%8F%D1%82%D0%B8%D1%87%D0%BD%D 1%8B%D0%B9_%D0%BA%D0%BE%D0%B4) и обратно.

а также:


функции конверсии для кода Грея (https://ru.wikipedia.org/wiki/%D0%9A%D0%BE%D0%B4_%D0%93%D1%80%D0%B5%D1%8F);
функции преобразования HEX-значений в ASCII-коды и обратно (пример: 16#30--->16#3330, где 16#33 - ASCII-код символа '3', а 16#30 - ASCII-код символа '0').


35757

2. Библиотека CAA Memory содержит функции, позволяющие:


выделять младшие и старшие байты/слова из переменных типа WORD/DWORD;
собирать переменные типов BYTE/WORD/DWORD из отдельных битов/байт/слов и разделять их на отдельные биты/байты/слова;
изменять порядок бит/байт/слов в переменных типа BYTE/WORD/DWORD.


35758

Приведем также пример конвертации 2 WORD в REAL с помощью данной библиотеки:



VAR
wLow: WORD := 16#851F;
wHigh: WORD := 16#4133;

dwVar: DWORD;

rVar: REAL;
END_VAR


dwVar := MEM.PackWordsToDword(wHigh, wLow);

MEM.MemMove(ADR(dwVar), ADR(rVar), SIZEOF(rVar));

// rVar теперь имеет значение 11.22


3. Библиотека OwenCommunication содержит функции и ФБ, позволяющие:


преобразовать REAL в 2 WORD и наоборот с возможностью изменения порядка байт;
преобразовать DWORD в 2 WORD и наоборот с возможностью изменения порядка байт;
преобразовать любой тип данных в любой.


47274



VAR
wLow: WORD := 16#851F;
wHigh: WORD := 16#4133;

rVar: REAL;
END_VAR

rVar := OCL.WORD2_TO_REAL(wHigh, wLow, FALSE);

// rVar теперь имеет значение 11.22

Евгений Кислов
21.02.2018, 10:06
Вопрос: как изменить имя переменной во всех местах проекта, где она используется?

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

35760

Евгений Кислов
21.02.2018, 10:49
Вопрос: почему при конверсии кириллицы из STRING в WSTRING (и наоборот) получаются "крокозябры"?

Ответ: напомним, что переменные типа STRING используются для представления символов кодировки из семейства ASCII (https://ru.wikipedia.org/wiki/ASCII) (каждый символ - байт), а WSTRING - для кодировки UCS2 (http://www.unicode.org/faq/utf_bom.html#utf16-11) из семейства Unicode (каждый символ - два байта, т.е. WORD).

При конверсии STRING в WSTRING (и наоборот) происходит не интерпретация данных, а обычное перемещение байт. Проще всего пояснить это на примере, разместив строки в объединениях (UNION), чтобы иметь возможность просматривать содержимое их отдельных байтов:

35761

Для конверсии с интерпретацией данных ('тест'--->"тест") используйте функции CP1251_TO_UNICODE и UNICODE_TO_CP1251 из библиотеки OwenStringUtils (http://www.owen.ru/catalog/codesys_v3/80224381).

Примечание: не забудьте установить галочку Использовать строки Unicode в Менеджере визуализации для отображения кириллицы в WSTRING в визуализации проекта.

Евгений Кислов
21.02.2018, 12:13
Вопрос: как считать информацию об устройстве в переменные программы?

Примечание: для контроллеров, программируемых в CODESYS V3.5 SP11 Patch 5 или выше, эта информация доступна в узле таргет-файла Info.

Ответ: см. пример (https://ftp.owen.ru/CoDeSys3/99_ForumFiles/Example_SysTarget.projectarchive) (создан в 3.5 SP7 Patch4).

35762

Евгений Кислов
21.02.2018, 12:13
Вопрос: как считать информацию о проекте (с одноименной вкладки CODESYS) в переменные программы?

Примечание: для контроллеров, программируемых в CODESYS V3.5 SP11 Patch 5 или выше, эта информация доступна в узле таргет-файла Info.

Ответ: см. пример (https://ftp.owen.ru/CoDeSys3/99_ForumFiles/Example_ProjectInfo.projectarchive) (создан в 3.5 SP7 Patch4).

35763

Примечание: остальная информация может быть получена с помощью автоматически создаваемых (при наличии галочки на вкладке Информация проекта) функций панели POU:

35764

Евгений Кислов
22.02.2018, 10:10
Вопрос: как организовать обмен по протоколу Modbus ASCII?

Примечание: для контроллеров, программируемых в CODESYS V3.5 SP11 Patch 5 или выше, в компоненте Modbus Master COM Port доступен выбор протокола Modbus ASCII.

Ответ: это возможно с помощью библиотеки OwenCommunication, которую можно скачать здесь (http://www.owen.ru/catalog/codesys_v3/80224381).
У ФБ MB_SerialRequest (Modbus Master) есть вход xIsAsciiMode. Если он имеет значение TRUE - то блок работает по протоколу Modbus ASCII.
В ФБ MB_SerialSlave реализовано автоопределение протокола, так что блок отвечает на запросы и по протоколу Modbus RTU, и Modbus ASCII - задавать какие-то настройки для этого не требуется.

Евгений Кислов
22.02.2018, 10:15
Вопрос: где хранятся изображения стандартных ламп и кнопок, используемые в визуализации?

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

C:\ProgramData\CODESYS\Visualization Styles\3S-Smart Software Solutions GmbH

Далее нужно открыть папку с названием нужного стиля и выбрать версию. Изображения хранятся в формате .svg.

Евгений Кислов
22.02.2018, 10:46
Вопрос: можно ли изменить внешний вид диалогов ввода? (Numpad, Keypad)

Ответ: да, это возможно. Исходники лежат в папке установки по пути ...\CODESYS\Projects\Visu\Dialogs\VisuDialogs.libr ary

Откройте файл в CODESYS (желательно предварительно сделать копию). Дальше можно либо отредактировать библиотеку и сохранить ее под новым названием (обязательно также отредактируйте информацию проекта - заголовок и плейсхолдер), либо добавить в библиотеку новый диалог, созданный на основе существующего. Помимо визуализаций, библиотека содержит программную часть - желательно не редактировать ее (или же редактировать с четким пониманием происходящего).
Сохраните библиотеку в репозиторий.

35772 35774 35773

В проекте CODESYS добавьте вашу библиотеку (если вы редактировали существующую и сохранили ее под новым названием).

35775

В настройках элемента ввода появится возможность выбрать ваш диалог:

35776 35777

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

Евгений Кислов
22.02.2018, 21:04
Вопрос: чем отличаются типы данных WORD и UINT? (а также BYTE и USINT, DWORD и UDINT, LWORD и ULINT) Ведь они занимают одинаковое количество памяти и имеют совпадающий диапазон возможных значений.

Ответ: в соответствии со стандартом МЭК 61131-3 типы USINT/UINT/UDINT/ULINT относятся к группе "целые беззнаковые числа", а BYTE/WORD/DWORD/LWORD - к группе "наборы бит" (bit strings). Для целых чисел определены арифметические операции. Для наборов бит определен побитовый доступ к данным. CODESYS 3.5 позволяет производить арифметические операции и обеспечивает побитовый доступ к любому из этих типов данных - так что фактически отличия отсутствуют. Поддержка всех типов сохранена для соответствия стандарту и совместимости с другим ПО. В целом, можно порекомендовать использовать UINT (и остальные схожие типы) для представления исчислимых величин (например, количества подсчитанных импульсов, числа произведенных продуктов и т.д.), а наборы бит - для представления бинарных данных (например, битовой маски состояния входов/выходов, кода ошибки и т.д.).

Евгений Кислов
26.02.2018, 11:07
Вопрос: как подключить контроллер к SCADA-системе TraceMode (http://www.adastra.ru/)?

Ответ: см. видео для СПК1хх (https://www.youtube.com/watch?v=KBwymJL_niU) и видео для СПК1хх [М01] (https://youtu.be/Ee0wZNTV-Ew).

Евгений Кислов
26.02.2018, 11:22
1. Команда Удалить неиспользуемые контакты позволяет удалить входы и выходы блока, к которым не привязаны переменные. Это позволяет сэкономить место на холсте.

35834

2. Метки соединений позволяют перейти к именованным связям - это особенно удобно, если ФБ, выходы и входы которых следует соединить, разнесены друг от друга на холсте.

35835

3. Параметры (VAR_INPUT CONSTANT) позволяют уменьшить число входов блока. Параметры представляют собой настройки, которые не изменяются в процессе работы блока.

35836

Примечание: язык CFC удобен для наглядного представления алгоритмов, но это достоинство часто сводится на нет смешением разных уровней абстракции в пределах одного POU. На следующем рисунке (в верхней части) используются как блоки высокого уровня (PID), так и низкого (триггеры, таймеры, операторы конверсии и т.д.). Оптимальным решением является сокрытие обвязки ПИД-регулятора в отдельные POU (см. нижнюю часть рисунка).

35837

Евгений Кислов
26.02.2018, 11:27
Вопрос: как сделать ярлык для англоязычной версии CODESYS?

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

Ответ: скопируйте существующий ярлык и в его свойствах замените путь на что-то вроде этого (конкретный путь зависит от места установки CODESYS и его версии):

"D:\Soft\3S CODESYS 3.5 SP5 Patch5\CODESYS\Common\CODESYS.exe" --Profile="CODESYS V3.5 SP5 Patch 5" --Culture="En"

Евгений Кислов
28.02.2018, 10:05
Вопрос: в каких форматах можно сохранить проект CODESYS?

Ответ: доступно 4 формата сохранения/экспорта проекта:

1. .project (Файл - Сохранить проект) - стандартный формат сохранения проектов CODESYS;
2. .projectarchive (Файл - Архив проекта - Сохранить проект) - включает в свой состав проект и все компоненты (таргет-файлы, библиотеки и т.д.). Этот формат удобен для переноса проекта на другой ПК (на котором, например, могут отсутствовать библиотеки, использующиеся в проекте). При отправке проектов в техподдержку - пожалуйста, используйте именно этот формат. Обратите внимание, что вес архива достаточно велик и может превышать 20 Мб - в этом случае рекомендуется загрузить его на любой файловый хостинг и отправить в письме ссылку.
3. .export (Проект - Экспорт) - позволяет экспортировать проект или его фрагмент в специфичном для CODESYS xml-подобном формате. Для импорта следует выделить в проекте узел Application и использовать команду Проект - Импорт.
4. .xml (Проект - Export PLCopen XML) - позволяет экспортировать проект или его фрагмент в универсальном xml-подобном формате, разработанном организацией PLCopen. В будущем планируется включение этого формата в стандарт МЭК 61131 (как МЭК 61131-10). Таким образом, проект, сохраненный в данном формате, можно перенести в другую среду разработки с поддержкой PLCopen XML. Полная совместимость в настоящий момент не гарантируется.

Евгений Кислов
05.03.2018, 09:48
Вопрос: как из программы изменить диапазон элемента Стрелочный индикатор?

Ответ: привязка переменных к параметрам Начало шкалы и Конец шкалы поддерживается начиная с версии CODESYS V3.5 SP14 Patch 3.

Евгений Кислов
05.03.2018, 09:57
Вопрос: почему в редакторе визуализации при добавлении на экран элемента Индикатор (лампа) добавляется Стрелочный индикатор?

Примечание: это проявляется в версии CODESYS V3.5 SP5 Patch 5 при использовании русскоязычного интерфейса.

Ответ: если вы наблюдает такой эффект - значит, перетаскиваете элемент из Панели элементов на экран визуализации при зажатой клавише мыши (drag-and-drop).
В данном случае для корректного добавления элемента следует произвести один клик на Панель элементов (выделив элементов) и один клик - на экран визуализации (разместив элемент).

Евгений Кислов
12.03.2018, 09:00
Вопросы:

1. Как запускать таймеры TON/TOF по импульсу на входе IN?
2. Как реализовать таймер с возможностью установки паузы?
3. Как реализовать таймер обратного отсчета?

Ответ: см. пример (https://ftp.owen.ru/CoDeSys3/99_ForumFiles/Example_Timers.projectarchive) (создан в 3.5 SP7 Patch4). В его состав входит:

1. Демонстрация запуска таймера TON по импульсу с помощью конструкции типа


fbTon (IN := xStart OR fbTon.IN);

где xStart - переменная, по импульсу которой происходит запуск таймера. Для сброса таймера необходимо вызвать его со значением FALSE на входе IN.

2. ФБ таймеров с возможностью установки паузы (TONP, TOFP).
3. ФБ таймеров обратного отсчета (TONR, TOFR).

Евгений Кислов
12.03.2018, 10:14
Вопрос: что можно использовать вместо ФБ Сhange_Real_Time_Clock из библиотеки SPK_Tools?

Примечание: для контроллеров, программируемых в CODESYS V3.5 SP11 Patch 5 или выше, работа с системным временем реализована через узел OwenRTC таргет-файла.

Ответ: действительно, библиотека SPK_Tools не рекомендуется к использованию. Основная часть ее функционала была перенесена в узлы таргет-файлов (начиная с версии 3.5.4.26).
Тем не менее, узел для работы с системным временем в настоящий момент отсутствует (но его создание запланировано). Пока что можно воспользоваться примером (https://ftp.owen.ru/CoDeSys3/99_ForumFiles/Example_RealTimeClock.projectarchive) (создан в 3.5 SP7 Patch4).
В его состав входит ФБ REAL_TIME_CLOCK, чей функционал полностью перекрывает функционал ФБ Сhange_Real_Time_Clock.

Евгений Кислов
12.03.2018, 10:55
Вопрос: как вывести сообщение в лог CODESYS из программы?

Ответ: рассмотрим самый простой способ:



VAR
xWriteToLog: BOOL;
sMessage: STRING:='Hello, world!';
END_VAR

IF xWriteToLog THEN
VisuElems.Visu_Output(sMessage, VisuElems.LogClass.LOG_INFO);
xWriteToLog:=FALSE;
END_IF


35989

Второй аргумент функции определяет жесткость (класс) сообщения:

35990

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

Евгений Кислов
12.03.2018, 14:00
Вопрос: как переинициализировать компонент ModbusCom?

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

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

35995

Компонент Modbus Master содержит переменную xResetComPort, по переднему фронту которой происходит переинициализация порта.

Рассмотрим несколько вариантов воздействия на эту переменную:

1. Если опрос организован исключительно через шаблоны, то можно контролировать их переменные xError (обратите внимание, что требуется требуется добавить постфикс _Modbus к названию устройства для доступа к ним) или привязать переменные к каналам Флаг ошибки. На скриншоте ниже приведены оба варианта (в реальном проекте, конечно, разумнее использовать только один из способов).

35993

2. Если опрос организован через стандартные компоненты Modbus Slave, то можно контролировать их переменные xError (в этом случае доступ осуществляется по названию устройства, без постфикса).

35994

3. Если опрос организован и через шаблоны, и через стандартные компоненты Modbus Slave, то можно использовать переменную xAllSlavesOk компонента Modbus Master (обратите внимание, что в этом случае переинициализация порта будет происходить при появлении ошибки у любого устройства. В некоторых ситуациях это решение является не самым удачным - например, если из-за проблем на полевом уровне (помехи/некорректная топология сети/etc.) возникновение ошибок, не связанных с зависанием порта, неизбежно, а их частота - высока.

35998

Евгений Кислов
03.05.2018, 15:53
Вопрос: как создать в визуализации вертикальный текст?

Ответ: см. видео (https://youtu.be/lXvVoTkXnIo) + пример. (https://ftp.owen.ru/CoDeSys3/99_ForumFiles/Example_VerticalText.projectarchive)

Евгений Кислов
18.05.2018, 13:52
Вопрос: при запуске CODESYS возникает следующая ошибка. Что нужно сделать?

37318

Ответ: перейдите в папку C:\ProgramData\CODESYS и удалите все файлы с разрешением .opt.

37319

После этого запустите CODESYS, создайте и сохраните новый проект. В результате .opt файлы будут автоматически пересозданы.

Евгений Кислов
15.10.2018, 08:48
Вопрос: Как работать с длинными строками?

Ответ: Функции библиотеки Standard позволяют работать только со строками, длина которых не превышает 255 символов. В случае необходимости работы с более длинными строками используйте библиотеку StringUtils.

Евгений Кислов
10.12.2018, 09:43
Вопрос: как сделать резервную копию проекта, если нет исходников (файла .project или .projectarchive).

Комментарий: описанные ниже способы подходят только для контроллеров, программируемых в CODESYS V3.5 SP11 Patch 5 или выше.

Ответ: есть два способа:

1. С использованием среды CODEYS - вкладка Backup&Restore в узле Device (см. видео (https://youtu.be/UDi8OTZvvlI?t=231)). В этом случае в состав бэкапа войдут энергонезависимые переменные.

2. Без использования среды CODESYS - подключить к контроллеру USB или SD-накопитель, перейти в конфигуратор и на вкладке Накопители для нужного накопителя нажать кнопку Резервная копия, нажать Сохранить, установить галочку Добавить проект СODESYS в резервную копию и нажать кнопку Сохранить резервную копию. На накопителе будет создан файл backup_spk1xxm01_<метка_времени_создания_резервной_копии>.tar.gz, который содержит резервную копию настроек контроллера и проекта CODESYS, но не предоставляет доступа к исходным кодам проекта.

Также создать резервную копию можно в web-конфигураторе на вкладке Система/Резервное копирование.

Евгений Кислов
10.12.2018, 10:04
Вопрос: в контроллер загружен проект и создано загрузочное приложение. Как защитить его от копирования? (при условии, что исходники проекты никому не передаются)

Комментарий: приведенная ниже информация актуальна для контроллеров, программируемых в CODESYS V3.5 SP11 Patch 5 или выше.
Обратите внимание, что проект загружается в контроллер в скомпилированном виде - таким образом, "вытащить" из него исходные коды невозможно.
Исходники проекта могут находиться в контроллере исключительно в том случае, если они были загружены владельцем исходников в CODESYS с помощью команды Файл - Загрузка исходного кода.

Ответ: для гарантированной защиты проекта от копирования рекомендуется выполнить все перечисленные ниже пункты:

1. В конфигураторе установить пароль на вход в конфигуратор, отличающийся от стандартного (owen).

2. Установить пароль на доступ к контроллеру из среды CODESYS (см. видео (https://www.youtube.com/watch?v=yhfUygKHYU4)) - чтобы нельзя было воспользоваться функцией Backup&Restore или скачать файлы проекта через Device - Файлы.
Альтернативный вариант - использовать ФБ PlcOperationControl из библиотеки Component Manager: он позволяет из кода программы запретить выполнение заданных действий (например, выгрузку файлов).
См. видео (https://youtu.be/M9aXq00Ldvw) и описание:
https://help.codesys.com/webapp/_cds_operation_control_via_system_variables;produc t=codesys;version=3.5.10.0

40306

3. Использовать в программе привязку к серийному номеру конкретного контроллера (в дереве проекта узел Info - папка Информация об устройстве - канал SERIAL) - и, например, при несовпадении заданного и считанного номеров не выполнять никаких действий. Привязка к серийному номеру делает бессмысленным копирование файлов проекта, даже если пароли, установленные в п. 1 и 2, были скомпрометированы.

Евгений Кислов
14.12.2018, 07:47
Вопрос: в проекте используется управление пользователями визуализации (User Managment). Для логина/выхода используются кнопки (InputConfiguration - OnMouseClick - Управление пользователями).
А как сделать тоже самое из кода программы?

Комментарий: приведенная ниже информация актуальна только для контроллеров, программируемых в CODESYS V3.5 SP11 Patch 5 или выше.

Ответ: в первую очередь необходимо получить контекст пользователя (pstClientData) - см. соответствующий пример (https://ftp.owen.ru/CoDeSys3/21_Examples/01_3.5.11.5/02_Visu/03_Additional/Example_ClientManager_3511v1.projectarchive).
Зная контекст, вы можете организовать логин или отключение данного клиента из кода программы:



// dwGroupId - ID группы пользователей (DWORD)
// wsLogin, wsPassword - имя пользователя и пароль (WSTRING)
// эта информация задается в Менеджере визуализации на вкладке Управление пользователями
VisuUserManagement.g_VisuUserMgmt2.LoginToUserGrou p(pstClientData, dwGroupId, wsLogin, wsPassword);




VisuElems.Visu_FctLogoutUser(pstClientData);

Евгений Кислов
11.01.2019, 11:34
Вопрос: как проверить проект в эмуляции, без подключения к контроллеру?

Ответ: для запуска проекта в режиме эмуляции следует выполнить команду Онлайн - Эмуляция и Онлайн - Логин.

Следует отметить, что режим эмуляции имеет множество ограничений:


не поддерживается обмен (по любым интерфейсам);
не поддерживается работа с файлами (из-за этого в частности не будут работать тренды и таблица тревог);
не поддерживается веб-визуализация.


Альтернативным и более функциональным вариантом, лишенным всех описанных недостатков, является использование виртуального контроллера.

Запустить виртуальный контроллер можно с помощью иконки на панели задач Windows:

40729

После этого следует в проекте выбрать выбрать таргет-файл CODESYS Control Win V3 (Device - Обновить устройство) и подключить к нему (Device - Сканирование сети).
Желательно выбирать версию, соответствующую версию системы исполнения реального ПЛК, на котором впоследствии будет запускаться проект.

40730

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


функционал таргет-файлов (узлы OwenRTC, Buzzer и т.д.);
внешние (реализованные в прошивке контроллера) библиотеки - например, CmpSysExec.


Примечание:

1. для одновременного запуска нескольких экземпляров виртуального контроллера следует воспользоваться ярлыком 3S CODESYS - CODESYS Control Win V3 из меню Пуск или ярлыком с ссылкой типа

"D:\Soft\3S CODESYS 3.5 SP11 Patch5\GatewayPLC\CODESYSControlService.exe" -d

2. рабочая директория для виртуального контроллера (для CODESYS V3.5 SP11 и выше):

C:\ProgramData\CODESYS\CODESYSControlWinV3\<идентификатор_версии> (например, для 3.5.11.5 идентификатор = 35A42129)

Евгений Кислов
11.01.2019, 12:18
Вопрос: в приложении настроен обмен по протоколу Modbus TCP через конфигурацию в дереве проекта. Как изменить из кода сетевые настройки?

Ответ:

1. если контроллер работает в режиме Modbus TCP Slave, то достаточно изменить сетевые настройки через узел Network.

2. если контроллер работает в режиме Modbus TCP Master и необходимо менять сетевые настройки опрашиваемых slave-устройств, то следует:

На вкладке Device - Установки ПЛК установить галочку Включить диагностику для устройств.

40731

В программе использовать следующий код:



// новый IP-адрес для слэйва
abyNewSlaveIp: ARRAY [0..3] OF BYTE := [10, 2, 11, 177];
// бит обновления настроек слэйва
xUpdate: BOOL;


// Modbus_TCP_Slave - имя нужного компонента из дерева проекта

40732

Modbus_TCP_Slave.xConfirmError := FALSE;

IF xUpdate THEN

// тормозим опрос слэйва
Modbus_TCP_Slave.Enable := FALSE;

// проверяем, что слэйв остановлен
IF Modbus_TCP_Slave.ComState = 0 THEN

// задаем новые настройки
Modbus_TCP_Slave.UpdateCommunicationSettings(ipAdd ress := abyNewSlaveIp, uiPort := 502);

// включаем слэйв в работу
Modbus_TCP_Slave.xConfirmError := TRUE;
Modbus_TCP_Slave.Enable := TRUE;
xUpdate := FALSE;
END_IF
END_IF



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

Евгений Кислов
12.02.2019, 13:00
Вопрос: как настроить обмен с электросчетчиками Меркурий (https://www.incotexcom.ru/catalogue/odnofaznye-schyotchiki)?

Ответ: компания ОВЕН разработала библиотеки для опроса счетчиков Меркурий 206 и Меркурий 23x:
https://www.owen.ru/product/codesys_v3/libraries

Обзор библиотек приведен в статье (http://old.owen.ru/uploads/36-37_trofimov_merkurii_plk.pdf) Артема Трофимова (http://www.owen.ru/forum/member.php?u=18914), опубликованной в журнале АиП (https://www.owen.ru/aip), №6 (№1/16).

Пример от пользователя SA104 (http://www.owen.ru/forum/member.php?u=64812) с опросом счетчика Меркурий 230: скачать (https://ftp.owen.ru/CoDeSys3/99_ForumFiles/SA104_Mercury230.projectarchive)

Пример создан в CODESYS V3.5 SP11 Patch 5 для виртуального контроллера и может быть с легкостью портирован на СПК1хх [М01] - достаточно изменить таргет-файл и указать нужный номер СOM-порта.
В примере значение потребленной энергии (в кВт⋅ч) считывается в переменную resultat.

Евгений Кислов
06.03.2019, 07:24
Вопрос: хотелось бы в настройках Управления пользователями задавать русскоязычные логины и пароли. Но как их потом вводить в визуализации?

Комментарий: приведенная ниже информация актуальна только для контроллеров, программируемых в CODESYS V3.5 SP11 Patch 5 или выше.

Ответ:

1. Установите библиотеку VisuKeyboardEnRu 1.3.0.0 (https://ftp.owen.ru/CoDeSys3/04_Library/04_Components/VisuKeyboardEnRu.package).
2. Установите библиотеку VisuUserMgmtDialogsRu (https://ftp.owen.ru/CoDeSys3/99_ForumFiles/VisuUserMgmtDialogsRu.library).
3. Создайте проект и добавьте библиотеки VisuKeyboardEnRu 1.3.0.0, VisuUserMgmtDialogsRu и VisuUserMgmtDialogs.

41556

4. В Менеджере визуализации на вкладке Dialogs Settings для управления пользователями выберите диалоги из библиотеки VisuUserMgmtDialogsRu.

41557

5. В Менеджере визуализации на вкладке Визуализации должны быть активированы диалоги из п. 4 и диалог VisuKbEnRu/Keypad.

41558

6. Создайте проект, добавьте в него Управление пользователями (см., например, п. 10.3.7 из документа CODESYS V3.5. Визуализация (https://ftp.owen.ru/CoDeSys3/11_Documentation/03_3.5.11.5/CDSv3.5_Visu_v2.0.pdf)), установите для пользователей русскоязычные имена и пароли.

Готовый пример: Example_UserManagmentWstring.projectarchive (https://ftp.owen.ru/CoDeSys3/99_ForumFiles/Example_UserManagmentWstring.projectarchive)

41559

Евгений Кислов
11.03.2019, 08:01
Вопрос: в проекте используются рецепты. Периодически они меняются, и хотелось бы вместе с этим изменять их пиктограммы без перезаливки программы. В связи с этим вопрос - можно ли обновить в проекте графические файлы с USB- или SD-накопителя?

Ответ: это возможно.

Предположим, в Пул изображений добавлена картинка с именем test.png:

41610

Она отображается в визуализации с помощью элемента Изображение. К параметру Динамическое изображение/Версия изображения привяжем переменную типа DWORD:

41611

Подготовим USB-накопитель, в корне которого будет находиться новое изображение с названием test.png.
Необходимо заменить старый файл (который находится в памяти контроллера в директории /visu) на новый файл с USB-накопителя.

Для этого можно воспользоваться ФБ Copy из библиотеки CAA File:

41672

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

Примечание:

1. Рекомендуется выполнять копирование файла только при определении подключенного накопителя (см. узел Drives в дереве проекта).
2. В случае использования SD-накопителя при вызова ФБ Copy на входе sFileNameSource требуется указать путь /mnt/ufs/media/mmcblk0p1/test.png
3. Для контроллеров СПК1хх (без Ethernet) и СПК207 при вызова ФБ Copy на входе sFileNameDest требуется указать путь /mnt/ufs/root/CoDeSysSP_wrk/visu/test.png

Евгений Кислов
29.04.2019, 12:10
Вопрос: как выполнить фрагмент кода однократно при старте приложения?

Ответ: пример кода:



PROGRAM PLC_PRG

VAR
xIsPlcStarted: BOOL;
END_VAR

IF NOT(xIsPlcStarted) THEN

// нужные операции
// ...
xIsPlcStarted := TRUE;

END_IF

Евгений Кислов
29.04.2019, 13:29
Вопрос: как отключить устройство из опроса при обмене через конфигурацию?

Ответ:

1. В компоненте Device на вкладке Установки ПЛК поставьте галочку Включить диагностику для устройств.

42500

2. Для отключения устройства из опроса в программе присвойте переменной <имя_устройства_из_дерева_проекта>.Enable значение FALSE.

42515

3. Для возобновления опроса присвойте переменной <имя_устройства_из_дерева_проекта>.Enable значение TRUE.

4. При использовании шаблонов соответствующий канал доступен на вкладке Соотнесение входов-выходов:

42498

Евгений Кислов
29.04.2019, 13:38
Вопрос: что делать, если в визуализации происходит "наложение" текстов?

42501

Ответ: у элементов, в которых наблюдается наложение, параметру Цвета/Нормальное состояние/Цвет заливки/Прозрачность следует присвоить значение 255 (полностью непрозрачный).

42502

При использовании аварийного состояния следует выполнить аналогичную процедуру для параметра Цвета/Аварийное состояние/Цвет заливки/Прозрачность.

Евгений Кислов
14.05.2019, 07:31
Вопрос: можно ли изменить картинки "Отсутствует визуализация" и "Отсутствует загрузочное приложение"?

42694

Комментарий: приведенная ниже информация актуальна только для контроллеров, программируемых в CODESYS V3.5 SP11 Patch 5 или выше.

Ответ: это возможно.

Подключитесь к контроллеру по SSH (см. CODESYS V3.5. FAQ (https://ftp.owen.ru/CoDeSys3/11_Documentation/03_3.5.11.5/CDSv3.5_Faq_v.2.0.pdf), п. 13.4) и выполните команду mount -o remount,rw / /

После этого подключитесь к контроллеру с помощью WinSCP (см. CODESYS V3.5. FAQ (https://ftp.owen.ru/CoDeSys3/11_Documentation/03_3.5.11.5/CDSv3.5_Faq_v.2.0.pdf), п. 13.5) и перейдите в директорию /usr/bin/CODESYS.

Вы увидите 4 нужных вам файла (не удаляйте и не редактируйте остальные файлы - это может нарушить нормальную работу контроллера):


stop_plc.jpg (Отсутствует загрузочное приложение, горизонтальная ориентация дисплея)
stop_plc_v.jpg (Отсутствует загрузочное приложение, вертикальная ориентация дисплея)
stop_visu.jpg (Отсутствует визуализация, горизонтальная ориентация дисплея)
stop_visu_v.jpg (Отсутствует визуализация, вертикальная ориентация дисплея)


Вы можете заменить эти изображения на свои, при этом сохранив названия, формат и разрешение.

После загрузки новых картинок необходимо перезагрузить контроллер командой reboot
При перезагрузке путем выключения и подачи питания файловая система контроллера может быть повреждена, так как в данный момент она еще примонтирована в режиме read-write.
После перезагрузки по команде reboot файловая система опять будет смонтирована в режиме read-only.

Евгений Кислов
17.05.2019, 07:39
Вопрос: при компиляции проекта появляется ошибка "Адрес %<...> уже используется". Как ее убрать?

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

В этом случае рядом с ними появляется синяя буква М (42756):

42754

Следует проверить все узлы таргет-файла с каналами (системные узлы типа Drives, компоненты Modbus, OwenArhiver) и отменить ручное распределение адресов.

Для этого следует нажать на ячейку, в которой расположена синяя буква М (42756) и удалить в ней все символы, после чего нажать Enter. В результате адрес канала будет рассчитан автоматически.

Евгений Кислов
26.06.2019, 08:20
Вопрос: что делать, если при загрузке проекта появляется подобная ошибка?

43309

Ответ: вероятно, ранее контроллер был переведен в режим Заблокировано или Рабочий с помощью команды Онлайн - Режим работы.
Требуется установить соединение с контроллером (Device - Сканировать сеть - подключиться к контроллеру без загрузки проекта) и использовать команду Онлайн - Режим работы - Отладка.
После этого можно будет загрузить проект.

Также такое сообщение может появиться, если загрузка проекта запрещена из кода программы через ФБ PlcOperationControl (https://www.owen.ru/forum/showthread.php?t=28167&page=5&p=294788&viewfull=1#post294788).
В этом случае требуется удалить текущий проект из контроллера через конфигуратор, после чего загрузить новый.

Евгений Кислов
27.06.2019, 15:01
Вопрос: как организовано сохранение энергонезависимых переменных (RETAIN и PERSISTENT) в контроллерах ОВЕН?

Ответ: в контроллерах СПК1хх [М01] и ПЛК210 энергонезависимые переменные сохраняются в микросхеме MRAM (https://ru.wikipedia.org/wiki/%D0%9C%D0%B0%D0%B3%D0%BD%D0%B8%D1%82%D0%BE%D1%80%D 0%B5%D0%B7%D0%B8%D1%81%D1%82%D0%B8%D0%B2%D0%BD%D0% B0%D1%8F_%D0%BE%D0%BF%D0%B5%D1%80%D0%B0%D1%82%D0%B 8%D0%B2%D0%BD%D0%B0%D1%8F_%D0%BF%D0%B0%D0%BC%D1%8F %D1%82%D1%8C). Сохранение энергонезависимых переменных выполняется по изменению любой из переменных, но не чаще раза в секунду - при этом вся область RETAIN-памяти перезаписывается целиком. Число циклов перезаписи MRAM практически бесконечно. MRAM включает в себя две дублирующие друг друга области памяти. При старте контроллер проверяет CRC этих областей - если для одной области рассчитанный CRC не соответствует сохраненному (такое может быть, например, при пропадании питания в момент сохранения), то значения RETAIN переменных восстанавливаются из другой.

Евгений Кислов
03.07.2019, 13:30
Вопрос: что делать, если не удается подключиться к контроллеру через кабель USB B?

Ответ:

1. Убедитесь в исправности кабеля.
2. Убедитесь, что на ПК установлен драйвер (https://ftp.owen.ru/CoDeSys3/06_SPK_USB_Driver/USB_Driver_v.1.5.102.zip).
3. Убедитесь, что в сетевых настройках ПК для виртуального адаптера задан корректный адрес и маска (см. пример ниже).
4. Убедитесь, что в конфигураторе для интерфейсов Ethernet и USB настроены разные подсети.

Пример корректных настроек:



Устройство/Параметр
IP
Маска
Шлюз


Контроллер (Ethernet)
192.168.0.10
255.255.0.0
192.168.0.1


Контроллер (USB)
10.0.6.10
255.255.0.0
10.0.6.1


ПК (виртуальный адаптер)
10.0.6.1
255.255.0.0
-




43456

Евгений Кислов
04.07.2019, 10:17
Вопрос: как настроить favicon (https://ru.wikipedia.org/wiki/Favicon) для страницы web-визуализации?

Ответ: для этого достаточно загрузить (о том, как это сделать - см. п. 13.5 в документе CODESYS V3.5. FAQ) файл favicon.ico в директорию /mnt/ufs/home/root/CODESYS_WRK/PlcLogic/visu
Чтобы увидеть изменения в браузере потребуется обновить страницу c очисткой кеша (в Google Chrome - Ctrl+F5).

43468

Также можно настроить мобильный значок страницы (https://ru.wikipedia.org/wiki/Favicon#%D0%9C%D0%BE%D0%B1%D0%B8%D0%BB%D1%8C%D0%BD %D1%8B%D0%B9_%D0%B7%D0%BD%D0%B0%D1%87%D0%BE%D0%BA_ %D1%81%D0%B0%D0%B9%D1%82%D0%B0). Для этого потребуется загрузить файл значка (например, owen.png) в директорию /mnt/ufs/home/root/CODESYS_WRK/PlcLogic/visu и добавить в файл webvisu.htm (расположенный в той же директории) строку типа


<link rel="apple-touch-icon" sizes="196x196" href="owen.png" />

43469

Более подробная информация по синтаксису приведена по ссылке (https://mathiasbynens.be/notes/touch-icons).

Обратите внимание, что при перезагрузке по питанию файл webvisu.htm будет создан заново, поэтому удобнее всего записывать в него эту строку из кода программы при запуске приложения.

Источник информации: https://www.codesys-blog.com/visualisierung/codesys-webvisu-app-icon/

Евгений Кислов
16.08.2019, 10:56
Вопрос: на контроллере сохраняются файлы отчетов, которые требуется передавать на web-сервер в виде запароленных архивов. Каким образом это можно сделать?

Примечание: для контроллеров СПК1хх [М01] описанный ниже способ поддерживается начиная с версии прошивки 1.1.0611.1056.

Ответ: предположим, в контроллер есть файл Arc1.log, размещенный в директории /mnt/ufs/home/root:

44125

В проект нужно добавить библиотеку CmpSysExeс.
Для добавления файла в архив с установкой пароля требуется выполнить следующий код:



VAR
xCreateArchiveWithPassword: BOOL;
fbSysExec3: CmpSysExec.sysExecute3;
END_VAR

fbSysExec3(xExecute := xCreateArchiveWithPassword, sCommand := '/usr/bin/7za a -p123 /mnt/ufs/home/root/Arc1.7z /mnt/ufs/home/root/Arc1.log');



В приведенном выше примере кода:


123 - пароль на архив
/mnt/ufs/home/root/Arc1.7z - путь к создаваемому файлу архива
/mnt/ufs/home/root/Arc1.log - путь к файлу, добавляемого в архив


Файл архива будет создан по переднему фронту переменной xCreateArchiveWithPassword:

44126

Для распаковки архива потребуется ввести пароль:

44127

Евгений Кислов
19.08.2019, 10:57
Вопрос: в проекте есть несколько пользователей web-визуализации.
Требуется при авторизации конкретного пользователя переключить экран визуализации (только для данного пользователя).
Как это можно сделать?

Примечание: приведенный ниже пример подходит для контроллеров, программируемых в CODESYS V3.5 SP11 Patch 5 или выше.

Ответ: см. данный пример (https://ftp.owen.ru/CoDeSys3/99_ForumFiles/Example_ClientManager_SwitchVisuAfterLogin.project archive), который сделан на базе примера получения информации о пользователях визуализации (https://ftp.owen.ru/CoDeSys3/21_Examples/01_3.5.11.5/02_Visu/03_Additional/Example_ClientManager_3511v1.projectarchive).

В примере создано два пользователя: User1 с паролем 1 и User2 с паролем 2.

44158

На основном экране (Vis1) расположена кнопка Войти в систему. При нажатии на кнопку появляется окно авторизации.
После авторизации выполняется сбор информации о пользователя (для этого в настройках кнопки в конфигурации ввода на вкладке OnDialogClosed переменной xLogin присваивается TRUE).
Сбор информации осуществляется в программе ClientPrg.
Если обнаружен вход пользователя User1, то осуществляется переход на экран Vis2.
Если обнаружен вход пользователя User2, то осуществляется переход на экран Vis3.



// переключаем экраны в зависимости от имен залогинившихся пользователей
FOR i:=1 TO iVisuClientCount DO

IF astVisuClientData[i].wsCurrentUserName = "User1" AND NOT(axIsLogged[i]) THEN
axIsLogged[i] := TRUE;
VisuElems.g_VisuManager.SetMainVisu(astVisuClientD ata[i].pstClientData, 'Vis2');
ELSIF astVisuClientData[i].wsCurrentUserName = "User2" AND NOT(axIsLogged[i]) THEN
axIsLogged[i] := TRUE;
VisuElems.g_VisuManager.SetMainVisu(astVisuClientD ata[i].pstClientData, 'Vis3');
ELSIF astVisuClientData[i].wsCurrentUserName = "" THEN
axIsLogged[i] := FALSE;
END_IF

END_FOR


Если пользователь нажимает кнопку Назад, то выполняются три действия:


переключение на экран Vis1
"разлогинивание" пользователя
обновление информации о пользователях (xLogin := TRUE), чтобы в программе снять флаг логина данного клиента

Евгений Кислов
27.08.2019, 14:59
Приведенная информация актуальна для контроллеров СПК1хх [М01] и ПЛК2xx.

В прошивке 1.0.1229.1031 для СПК1хх [М01] загрузочное приложение создавалось неявно при загрузке проекта - такой подход используется в современных версиях CODESYS по умолчанию.
Этот подход имеет существенный недостаток - пользователь не может избежать загрузочного приложения даже в тех случаях, когда оно не требуется.
Например, в процессе отладки некорректно написанная программа может привести к перезагрузке контроллера.
Неявно созданное загрузочное приложение в данном случае приведет к циклической перезагрузке контроллера - поэтому потребуется перейти в конфигуратор и удалить проект.

В прошивке 1.1.0611.1056 для СПК1хх [М01] и всех прошивках для ПЛК2хх (точнее - в таргет-файлах для этих прошивок) неявное создание загрузочного приложения отключено.
Загрузочное приложение создается только при выполнении команды Создать загрузочное приложение из меню Онлайн.
Этот подход не имеет описанного выше недостатка, но при определенных обстоятельствах может привести к неочевидному для пользователя поведению контроллера.
Предположим, в контроллере создано загрузочное приложение. Происходит загрузка нового проекта (или онлайн-изменение).
В этот момент выполняется инициализация области RETAIN-переменных - даже если они отсутствуют в проекте (потому что, например, узел таргет-файла Watchdog использует Retain-память).
Предположим, пользователь не создает загрузочного проекта и перезагружает контроллер по питанию.
При старте система исполнения определяет, что загрузочное приложение и образ retain-памяти не соответствуют друг другу.
В результате генерируется исключение RETAIN_IDENTITY_MISMATCH (его можно увидеть на дисплее, если в конфигураторе включен режим обработки ошибок TraceInfo или TraceInfoAndReboot).
Пользовательский проект, соответственно, не запускается.
Если опять перезагрузить контроллер - то retain-память будет заново проинициализирована и проект будет запущен.

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

При желании пользователь может включить неявное создание загрузочного приложения при загрузке и онлайн-изменении.
Это выполняется в настройка приложения (Application - Свойства - Установки загрузочного приложения).

44326

Евгений Кислов
13.01.2020, 14:42
Вопрос: после открытия диалога на экране визуализации, поверх которого он открывается, наблюдаются визуальные артефакты (полосы, "лишние" прямоугольники, пропадание элементов). Как можно решить эту проблему?

Примечание: данная проблема связана с багом в версии CODESYS V3.5 SP11 (присутствует во всех патчах).

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

46659

Евгений Кислов
07.02.2020, 10:16
Вопрос: при использовании трендов возникает одна из следующих проблем:

1. На тренде вместо данных отображается сообщение "Error 30405 occurred" (число может быть другим)
2. На тренде вместо данных отображется сообщение "Some kind of disk I/O error occurred. Check disk space"
3. В визуализации контроллера отображается следующее сообщение:

47153

4. В проекте возникает исключение с приблизительно следующим содержанием (его можно увидеть на вкладке Device - Журнал при подключении к контроллеру):


Due to the exception the visualization goes into a safe mode until restart
Exception happened while evaluating main visu 'Trend2', exception code: 0
*SOURCEPOSITION* App=[<app>Application</app>] area=<area>0</area>, offset=<off>4131956</off>
*EXCEPTION* App=[<app>Application</app>], Exception=[<excpt>FPU DivisionByZero]

Чем они вызваны и что можно сделать?


Ответ: в большинстве случаев подобные проблемы возникают при перезагрузке контроллера по питанию в тот момент, когда происходит работа с файлом тренда - что приводит к повреждению этого файла.
С этим связаны ситуации из п. 1 и 3, а в некоторых случаях - из п. 2.
Ситуация из п. 2 также возникает, если файлы трендов были удалены из контроллера (например, через вкладку Device - Файлы).

В свежих версиях CODESYS (SP14) исправлено две критических ошибок, связанных с трендами:

47154 47155

Исправление еще двух запланировано в версии SP16:

47156 47157

И еще в одной - в SP17:

48179

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

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

47160

2. В настройках тренда на вкладке Сохранение трендов следует настроить параметр Сохранение каждые N мс. Этот параметр определяет периодичность записи данных из буфера тренда в файл.

47161

Соответственно, чем реже происходит запись в файл - тем меньше вероятность того, что она произойдет в момент пропадания питания контроллера и тем меньше вероятность возникновения ситуаций из п. 1-3.


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

1. Не привязывать к тренду выходы ФБ (предварительно следует копировать их в локальные переменные программы).
2. Обрабатывать значения, записываемые в эти переменные, через оператор LIMIT. Это связано с тем, что описанное исключение может возникнуть при резком изменении значений переменных, отображаемых на тренде (например, когда между циклами значение переменной изменяется от 10 до 100000000). Такая ситуация может возникнуть, если, например, в значении аналогового канала также кодируется его статус.

Евгений Кислов
20.03.2020, 10:17
Вопрос: можно ли установить среду программирования CODESYS на ПК с ОС Linux?

Ответ: да, такая возможность поддерживается начиная с версии V3.5 SP13. Инструкция по установке приведена в этой статье. (https://forge.codesys.com/hax/blog/2018/07/codesys-on-linux/)
Для упрощения установки доступен docker-контейнер (https://forge.codesys.com/tol/codesys-4-linux/home/Home/).

Евгений Кислов
25.03.2020, 14:25
Вопрос: как считать данные мониторинга задач (отображаемые в компоненте Конфигурация задач при онлайн-подключении к ПЛК) в переменные программы?
Ответ: это можно сделать с помощью библиотеки CmpIecTask. См. видео (https://youtu.be/bS4CrfbuQkk).

Евгений Кислов
27.03.2020, 11:30
Вопрос: можно ли подключить к контроллеру преобразователь АС4-М и работать с ним в CODESYS как c виртуальным COM-портом?

Ответ: это возможно при работе с контроллерам ПЛК210 и СПК1хх [М01] (для СПК1хх [М01] - начиная с прошивки 1.2.0131.1405).
Поддерживается АС4-М и другие преобразователи на базе чипа cp210x.

После подключения преобразователя к порту USB A контроллера в web-конфигураторе на вкладке Состояние/Журнал ядра появится информация о подключении устройства:

48141

После этого можно работать с преобразователем в CODESYS как с COM-портом:


Для ПЛК210 - ID COM-порта в CODESYS = 11
Для СПК1хх [М01] - ID COM-порта в CODESYS = 6

Евгений Кислов
08.04.2020, 20:50
Вопрос: при выполнении команды Сканировать сеть (вкладка Device - Установки соединения) контроллер не обнаруживается. Что делать?

48346

Ответ: сканирование сети производится путем рассылки широковещательных UDP-пакетов. Они могут быть заблокированы в рамках конкретной сети.
Например, это характерно при подключении через VPN.
В этом случае необходимо ввести IP-адреса контроллера и нажат Enter:

48345

Если это не решит проблему - то следует проверить, не заблокированы ли на сетевом оборудовании порты, используемые CODESYS (http://www.owen.ru/forum/showthread.php?t=28167&p=269331&viewfull=1#post269331) или не запрещен доступ из CODESYS в web-конфигураторе контроллера (вкладка Сеть - Межсетевой экран - Правила для трафика - проверить, что включены правила Allow-CODESYS-GATEWAY-TCP и Allow-CODESYS-GATEWAY-UDP).

Евгений Кислов
25.04.2020, 18:23
Вопрос: как включить/отключить поддержку multi-touch для различных клиентов визуализации?

Ответ: в установках Менеджера визуализации есть галочка Обработка мультикасания, которая активирует multi-touch для всех клиентов визуализации.
Галочка влияет на поддержку жестов и взаимодействие с некоторыми элементами, поддерживающими прокрутку (Таблица, Combobox и др.).

48643

В некоторых случаях требуется, чтобы для одних клиентов multi-touch был активирован (например, он необходим для корректной работы с web-визуализацией на панели ВП110 (https://owen.ru/product/vp110)), а на других - отключен (например, на ПК).
В таких ситуациях можно в URL web-визуализации использовать специальный флаг ?CFG_TouchHandlingActive=Trueили ?CFG_TouchHandlingActive=False.

Пример полного URL:
http://192.168.0.33:8080/webvisu.htm?CFG_TouchHandlingActive=False

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

Ответ: можно использовать диалог FileOpenSave из библиотеки VisuDialogs. См. видеопример (https://youtu.be/d-gLwtmJnlk).

Ссылка на архив проекта из примера (создан в CODESYS V3.5 SP14 Patch 3):
https://ftp.owen.ru/CoDeSys3/21_Examples/01_3.5.11.5/02_Visu/03_Additional/Example_DialogFileOpenSaveRu.projectarchive

Ссылка на отредактированную библиотеку VisuDialogs из примера:
https://ftp.owen.ru/CoDeSys3/21_Examples/01_3.5.11.5/02_Visu/03_Additional/VisuDialogsFileRu.library