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

ОГЛАВЛЕНИЕ:


IDE#01. Какие горячие клавиши используются в CODESYS 3.5? (http://www.owen.ru/forum/showthread.php?t=28167&p=269352&viewfull=1#post269352)
IDE#02. Как включить отображение пиктограмм POU в редакторе CFC? (http://www.owen.ru/forum/showthread.php?t=28167&p=269367&viewfull=1#post269367)
IDE#03. Как изменить версию библиотеки в проекте? (http://www.owen.ru/forum/showthread.php?t=28167&p=269968&viewfull=1#post269968)
IDE#04. Как определить неиспользуемые в проекте переменные? (http://www.owen.ru/forum/showthread.php?t=28167&p=270461&viewfull=1#post270461)
IDE#05. Как установить и добавить библиотеку? (http://www.owen.ru/forum/showthread.php?t=28167&p=270817&viewfull=1#post270817)
IDE#06. Как изменить имя переменной во всех местах проекта, где она используется? (http://www.owen.ru/forum/showthread.php?t=28167&p=270853&viewfull=1#post270853)
IDE#07. Как сделать ярлык для англоязычной версии CODESYS? (http://www.owen.ru/forum/showthread.php?t=28167&p=271282&viewfull=1#post271282)
IDE#08. В каких форматах можно сохранить проект CODESYS? (http://www.owen.ru/forum/showthread.php?t=28167&p=271506&viewfull=1#post271506)
IDE#09. При запуске CODESYS возникает ошибка... (http://www.owen.ru/forum/showthread.php?t=28167&p=278736&viewfull=1#post278736)
IDE#10. Можно ли установить среду программирования CODESYS на ПК с ОС Linux? (https://owen.ru/forum/showthread.php?t=28167&p=328720&viewfull=1#post328720)
IDE#11. Как восстановить проект после некорректного завершения работы CODESYS? (https://owen.ru/forum/showthread.php?t=28167&p=338726&viewfull=1#post338726)
IDE#12. При установке CODESYS возникает ошибка "gateway.exe is not marked..." (https://owen.ru/forum/showthread.php?t=28167&p=432181&viewfull=1#post432181)



PRG#01. Почему при делении происходит округление значения? (http://www.owen.ru/forum/showthread.php?t=28167&p=269333&viewfull=1#post269333)
PRG#02. Как проверить, что число имеет значение NaN? (http://www.owen.ru/forum/showthread.php?t=28167&p=269644&viewfull=1#post269644)
PRG#03. Можно ли считать тексты из компонента Список текстов в переменные программы? (http://www.owen.ru/forum/showthread.php?t=28167&p=270124&viewfull=1#post270124)
PRG#04. Как преобразовывать данные? (2 WORD в REAL и т.п.) (http://www.owen.ru/forum/showthread.php?t=28167&p=270832&viewfull=1#post270832)
PRG#05. Почему при конверсии кириллицы из STRING в WSTRING получаются "крокозябры"? (http://www.owen.ru/forum/showthread.php?t=28167&p=270862&viewfull=1#post270862)
PRG#06. Как считать информацию об устройстве в переменные программы? (http://www.owen.ru/forum/showthread.php?t=28167&p=270875&viewfull=1#post270875)
PRG#07. Как считать информацию о проекте в переменные программы? (http://www.owen.ru/forum/showthread.php?t=28167&p=270876&viewfull=1#post270876)
PRG#08. Чем отличаются типы данных WORD и UINT? (http://www.owen.ru/forum/showthread.php?t=28167&p=271057&viewfull=1#post271057)
PRG#09. Некоторые особенности языка CFC (http://www.owen.ru/forum/showthread.php?t=28167&p=271279&viewfull=1#post271279)
PRG#10. Вопросы по таймерам (http://www.owen.ru/forum/showthread.php?t=28167&p=272238&viewfull=1#post272238)
PRG#11. Что можно использовать вместо ФБ Сhange_Real_Time_Clock из библиотеки SPK_Tools? (http://www.owen.ru/forum/showthread.php?t=28167&p=272254&viewfull=1#post272254)
PRG#12. Как вывести сообщение в лог CODESYS из программы? (http://www.owen.ru/forum/showthread.php?t=28167&p=272260&viewfull=1#post272260)
PRG#13. Как работать с длинными (>255 символов) строками? (http://www.owen.ru/forum/showthread.php?t=28167&p=289762&viewfull=1#post289762)
PRG#14. Как выполнить фрагмент кода однократно при старте приложения? (https://www.owen.ru/forum/showthread.php?t=28167&p=304642&viewfull=1#post304642)
PRG#15. Как запаковать файл в архив с установкой пароля? (https://owen.ru/forum/showthread.php?t=28167&p=312153&viewfull=1#post312153)
PRG#16. Как считать данные мониторинга задач в переменные программы? (https://owen.ru/forum/showthread.php?t=28167&p=329098&viewfull=1#post329098)
PRG#17. Как работать с JSON в проекте CODESYS? (https://owen.ru/forum/showthread.php?t=28167&p=336595&viewfull=1#post336595)
PRG#18. Как в CODESYS организовано выполнение задач из Конфигурации задач? (https://owen.ru/forum/showthread.php?t=28167&p=336597&viewfull=1#post336597)
PRG#19. Как в коде программы прочитать и изменить сетевые настройки ПЛК2xx? (https://owen.ru/forum/showthread.php?t=28167&p=336649&viewfull=1#post336649)
PRG#20. Как организовать архивацию в формате ПЛК1хх? (для 20 функции Modbus, OPC HDA) (https://owen.ru/forum/showthread.php?t=28167&p=336651&viewfull=1#post336651)
PRG#21. Как реализовать энергонезависимый счетчик наработки оборудования? (https://owen.ru/forum/showthread.php?t=28167&p=336945&viewfull=1#post336945)
PRG#22. Как считать серийный номер USB-накопителя, подключенного к контроллеру? (https://owen.ru/forum/showthread.php?t=28167&p=340323&viewfull=1#post340323)
PRG#23. Как использовать функции для работы со временем из библиотеки Util? (https://owen.ru/forum/showthread.php?t=28167&p=351122&viewfull=1#post351122)
PRG#24. CAA Memory и работа с памятью (https://owen.ru/forum/showthread.php?t=28167&p=357824&viewfull=1#post357824)
PRG#25. Привязка переменных к каналам компонентов дерева проекта (https://owen.ru/forum/showthread.php?t=28167&p=358731&viewfull=1#post358731)
PRG#26. Ограничение библиотеки CmpSysExec на длину команды и способ его обхода (https://owen.ru/forum/showthread.php?t=28167&p=361101&viewfull=1#post361101)
PRG#27. Файловые плейсхолдеры (https://owen.ru/forum/showthread.php?t=28167&p=361653&viewfull=1#post361653)
PRG#28. Как инициализировать структуру в коде программы? (https://owen.ru/forum/showthread.php?t=28167&p=366762&viewfull=1#post366762)
PRG#29. Локальные перечисления (https://owen.ru/forum/showthread.php?t=28167&p=369251&viewfull=1#post369251)
PRG#30. Как выполнить действие при активации тревоги? (https://owen.ru/forum/showthread.php?t=28167&p=372944&viewfull=1#post372944)
PRG#31. Как инициализировать массивы и структуры? (https://owen.ru/forum/showthread.php?t=28167&p=374578&viewfull=1#post374578)
PRG#32. Как сбросить счетчики ПЛК2хх из кода программы? (https://owen.ru/forum/showthread.php?t=28167&p=374785&viewfull=1#post374785)
PRG#33. Что такое методы, свойства, действия и переходы? (https://owen.ru/forum/showthread.php?t=28167&p=381195&viewfull=1#post381195)
PRG#34. Где прочитать об использовании объектно-ориентированного подхода в CODESYS? (https://owen.ru/forum/showthread.php?t=28167&p=381247&viewfull=1#post381247)
PRG#35. Как определить объем используемой/свободной RETAIN-памяти? (https://owen.ru/forum/showthread.php?t=28167&p=381975&viewfull=1#post381975)
PRG#36. Как перенести проект из старой версии CODESYS в V3.5 SP17 Patch 3? (https://owen.ru/forum/showthread.php?t=28167&p=384158&viewfull=1#post384158)
PRG#37. Как перенести установленные плагины с одного ПК на другой? (https://owen.ru/forum/showthread.php?t=28167&p=384246&viewfull=1#post384246)
PRG#38. Как использовать блок ПИД для управления охладителем? (https://owen.ru/forum/showthread.php?t=28167&p=389192&viewfull=1#post389192)
PRG#39. Как вызвать метод в языке CFC? (https://owen.ru/forum/showthread.php?t=28167&p=389349&viewfull=1#post389349)
PRG#40. Как считать имя экземпляра ФБ в его коде для использования в логе ПЛК? (https://owen.ru/forum/showthread.php?t=28167&p=397786&viewfull=1#post397786)



VISU#01. Как настроить воспроизведение звука в web-визуализации? (http://www.owen.ru/forum/showthread.php?t=28167&p=269327&viewfull=1#post269327)
VISU#02. Где хранятся изображения стандартных ламп и кнопок, используемые в визуализации? (http://www.owen.ru/forum/showthread.php?t=28167&p=270953&viewfull=1#post270953)
VISU#03. Можно ли изменить внешний вид диалогов ввода? (Numpad, Keypad) (http://www.owen.ru/forum/showthread.php?t=28167&p=270956&viewfull=1#post270956)
VISU#04. Как из программы изменить диапазон элемента Стрелочный индикатор? (http://www.owen.ru/forum/showthread.php?t=28167&p=271814&viewfull=1#post271814)
VISU#05. Почему вместо элемента Индикатор добавляется Стрелочный индикатор? (http://www.owen.ru/forum/showthread.php?t=28167&p=271818&viewfull=1#post271818)
VISU#06. Как создать в визуализации вертикальный текст? (http://www.owen.ru/forum/showthread.php?t=28167&p=277518&viewfull=1#post277518)
VISU#07. Как реализовать управление пользователями визуализации из кода? (http://www.owen.ru/forum/showthread.php?t=28167&p=295107&viewfull=1#post295107)
VISU#08. Как использовать кириллицу для логинов/паролей? (http://www.owen.ru/forum/showthread.php?t=28167&p=300498&viewfull=1#post300498)
VISU#09. Как обновить изображение в визуализации с USB- или SD-накопителя? (http://www.owen.ru/forum/showthread.php?t=28167&p=300747&viewfull=1#post300747)
VISU#10. Что делать, если в визуализации происходит "наложение" текстов? (https://www.owen.ru/forum/showthread.php?t=28167&p=304650&viewfull=1#post304650)
VISU#11. Можно ли изменить картинку "Отсутствует визуализация"? (https://www.owen.ru/forum/showthread.php?t=28167&p=305476&viewfull=1#post305476)
VISU#12. Как настроить favicon для страницы web-визуализации? (https://www.owen.ru/forum/showthread.php?t=28167&p=309157&viewfull=1#post309157)
VISU#13. Как переключить экран визуализации при входе пользователя в систему? (https://owen.ru/forum/showthread.php?t=28167&p=312297&viewfull=1#post312297)
VISU#14. При открытии диалога на экране наблюдаются артефакты или пропадание элементов... (https://owen.ru/forum/showthread.php?t=28167&page=6&p=323241&posted=1#post323241)
VISU#15. При использовании трендов возникает ошибка... (https://owen.ru/forum/showthread.php?t=28167&p=325383&viewfull=1#post325383)
VISU#16. Как включить/отключить поддержку multi-touch для различных клиентов визуализации? (https://owen.ru/forum/showthread.php?t=28167&p=331174&viewfull=1#post331174)
VISU#17. Как в визуализации посмотреть список файлов ПЛК или подключенного накопителя? (https://owen.ru/forum/showthread.php?t=28167&p=331389&viewfull=1#post331389)
VISU#18. Можно ли изменить логотип на экране загрузки СПК1хх [М01]? (https://owen.ru/forum/showthread.php?t=28167&p=336593&viewfull=1#post336593)
VISU#19. Как создавать и использовать стили визуализации? (https://owen.ru/forum/showthread.php?t=28167&p=336598&viewfull=1#post336598)
VISU#20. Как задать цвет выделения элемента при использовании аппаратной клавиатуры? (https://owen.ru/forum/showthread.php?t=28167&p=336843&viewfull=1#post336843)
VISU#21. Как выводить в таблицу тревог сообщения о входе/выходе пользователя визуализации? (https://owen.ru/forum/showthread.php?t=28167&p=336956&viewfull=1#post336956)
VISU#22. Как сделать так, чтобы диалог открывался рядом с кнопкой его вызова? (https://owen.ru/forum/showthread.php?t=28167&p=341941&viewfull=1#post341941)
VISU#23. Как изменить язык по умолчанию в клавиатурах библиотеки OwenVisuDialogs? (https://owen.ru/forum/showthread.php?t=28167&p=352283&viewfull=1#post352283)
VISU#24. Как сделать скриншот web-страницы и отобразить его в визуализации? (https://owen.ru/forum/showthread.php?t=28167&p=354287&viewfull=1#post354287)
VISU#25. Как программно обработать результат закрытия диалога ввода? (Numpad, Keypad) (https://owen.ru/forum/showthread.php?t=28167&p=357280&viewfull=1#post357280)
VISU#26. Как считать информацию о пользователях визуализации в переменные программы? (https://owen.ru/forum/showthread.php?t=28167&p=357746&viewfull=1#post357746)
VISU#27. Проблемы с отображением длинных строковых переменных в визуализации (https://owen.ru/forum/showthread.php?t=28167&p=357821&viewfull=1#post357821)
VISU#28. Как переключить экран в фрейме из кода программы? (https://owen.ru/forum/showthread.php?t=28167&p=362310&viewfull=1#post362310)
VISU#29. Работа с тревогами из кода программы (AlarmManager) (https://owen.ru/forum/showthread.php?t=28167&p=362311&viewfull=1#post362311)
VISU#30. Как сделать всплывающее окно при появлении тревог? (https://owen.ru/forum/showthread.php?t=28167&p=381743&viewfull=1#post381743)
VISU#31. Медленное применение настроек тренда в плагине визуализации 4.2.0.0 (https://owen.ru/forum/showthread.php?t=28167&p=387214&viewfull=1#post387214)
VISU#32. Не удается ввести пароль пользователя визуализации в CODESYS V3.5 SP17 (https://owen.ru/forum/showthread.php?t=28167&p=407788&viewfull=1#post407788)
VISU#33. Почему в web-визуализации не работает зум на смартфоне? (https://owen.ru/forum/showthread.php?t=28167&p=415362&viewfull=1#post415362)
VISU#34. Формат базы данных элемента Тренд (.sqlite) (https://owen.ru/forum/showthread.php?t=28167&p=415504&viewfull=1#post415504)
VISU#35. Как отключить необходимость ввода пароля ПЛК для web-визуализации? (https://owen.ru/forum/showthread.php?t=28167&p=429387&viewfull=1#post429387)



COM#01. Как настроить обмен по протоколу MQTT? (http://www.owen.ru/forum/showthread.php?t=28167&p=269327&viewfull=1#post269329)
COM#02. Как по RS-485 опросить устройство, работающее на скорости <4800 бод? (http://www.owen.ru/forum/showthread.php?t=28167&p=269327&viewfull=1#post269330)
COM#03. Контроллер - Modbus Slave. Можно ли изменить его адрес (slave ID) в процессе работы? (http://www.owen.ru/forum/showthread.php?t=28167&p=269342&viewfull=1#post269342)
COM#04. Как организовать обмен по протоколу Modbus ASCII? (http://www.owen.ru/forum/showthread.php?t=28167&p=270952&viewfull=1#post270952)
COM#05. Как подключить контроллер к SCADA-системе TraceMode? (http://www.owen.ru/forum/showthread.php?t=28167&p=271278&viewfull=1#post271278)
COM#06. Как переинициализировать компонент ModbusCom? (http://www.owen.ru/forum/showthread.php?t=28167&p=272286&viewfull=1#post272286)
COM#07. Modbus TCP - изменение сетевых настроек из кода программы (http://www.owen.ru/forum/showthread.php?t=28167&p=296714&viewfull=1#post296714)
COM#08. Как настроить обмен с электросчетчиками Меркурий? (http://www.owen.ru/forum/showthread.php?t=28167&p=298761&viewfull=1#post298761)
COM#09. Как отключить устройство из опроса при обмене через конфигурацию? (https://www.owen.ru/forum/showthread.php?t=28167&p=304649&viewfull=1#post304649)
COM#10. Можно ли подключить к контроллеру преобразователь АС4-М? (https://owen.ru/forum/showthread.php?t=28167&p=329252&viewfull=1#post329252)
COM#11. Можно ли к контроллерам ОВЕН подключать USB HID устройства? (https://owen.ru/forum/showthread.php?t=28167&p=336591&viewfull=1#post336591)
COM#12. Проблемы с опросом Modbus Serial Slave устройств через МКОН (https://owen.ru/forum/showthread.php?t=28167&p=338820&viewfull=1#post338820)
COM#13. Как интегрировать контроллер с Telegram-ботом? (https://owen.ru/forum/showthread.php?t=28167&p=339890&viewfull=1#post339890)
COM#14. Почему при работе с шаблонами Mx210 настройки модулей сбрасываются на заводские? (https://owen.ru/forum/showthread.php?t=28167&p=343043&viewfull=1#post343043)
COM#15. Почему значения в каналах Modbus отображаются серым? (https://owen.ru/forum/showthread.php?t=28167&p=343792&viewfull=1#post343792)
COM#16. Как работать с OwenCloud через API? (https://owen.ru/forum/showthread.php?t=28167&p=343924&viewfull=1#post343924)
COM#17. Как настроить контроллер в режиме Slave по нестандартному протоколу обмена? (https://owen.ru/forum/showthread.php?t=28167&p=351298&viewfull=1#post351298)
COM#18. Как получить информацию о погоде? (https://owen.ru/forum/showthread.php?t=28167&p=356369&viewfull=1#post356369)
COM#19. Как настроить проброс портов для ПЛК2хх? (https://owen.ru/forum/showthread.php?t=28167&p=360662&viewfull=1#post360662)
COM#20. Как отмасштабировать значение, считываемое по Modbus? (https://owen.ru/forum/showthread.php?t=28167&p=363210&viewfull=1#post363210)
COM#21. Как подключиться к SQL-серверу? (https://owen.ru/forum/showthread.php?t=28167&p=364886&viewfull=1#post364886)
COM#22. Как подключить контроллер к VPN? (https://owen.ru/forum/showthread.php?t=28167&p=364889&viewfull=1#post364889)
COM#23. Как работать с GSM/GPRS-модемами? (https://owen.ru/forum/showthread.php?t=28167&p=364890&viewfull=1#post364890)
COM#24. Как настроить обмен между ПЛК, программируемыми в CODESYS V3.5? (https://owen.ru/forum/showthread.php?t=28167&p=365393&viewfull=1#post365393)
COM#25. Как записать данные из ПЛК в таблицу Google Spreadsheet? (https://owen.ru/forum/showthread.php?t=28167&p=373433&viewfull=1#post373433)
COM#26. В версии SP16 Patch 3 не удается опросить Modbus TCP Slave Device - ошибка 10 (https://owen.ru/forum/showthread.php?t=28167&p=373724&viewfull=1#post373724)
COM#27. Как считать информацию диагностики компонентов Modbus в переменные программы? (https://owen.ru/forum/showthread.php?t=28167&p=403643&viewfull=1#post403643)
COM#28. ПЛК2xx - настройка статических маршрутов (https://owen.ru/forum/showthread.php?t=28167&p=408935&viewfull=1#post408935)
COM#29. Обеспечение безопасного соединения по OPC UA (https://owen.ru/forum/showthread.php?t=28167&p=410126&viewfull=1#post410126)
COM#30. Как считать информацию о тревогах ПЧВ AFD-E? (Modbus-функции 0x07 и 0x08) (https://owen.ru/forum/showthread.php?t=28167&p=414869&viewfull=1#post414869)



DEBUG#01. Как переключить режим отображения переменных? (DEC/HEX) (http://www.owen.ru/forum/showthread.php?t=28167&p=269744&viewfull=1#post269744)
DEBUG#02. Как проверить проект в эмуляции? (http://www.owen.ru/forum/showthread.php?t=28167&p=296706&viewfull=1#post296706)
DEBUG#03. Что делать, если появляется ошибка "Адрес уже используется" ? (https://www.owen.ru/forum/showthread.php?t=28167&p=305691&viewfull=1#post305691)
DEBUG#04. Что делать, если при загрузке проекта появляется ошибка "Download denied..." ? (https://www.owen.ru/forum/showthread.php?t=28167&p=308387&viewfull=1#post308387)
DEBUG#05. Что делать, если контроллер не обнаруживается при сканировании сети? (https://owen.ru/forum/showthread.php?t=28167&p=330018&viewfull=1#post330018)
DEBUG#06. Что делать при возникновении ошибки "Недостаточно памяти на устройстве"? (https://owen.ru/forum/showthread.php?t=28167&p=336589&viewfull=1#post336589)
DEBUG#07. В чем причина ошибки "Processor load watchdog of all IEC-tasks detected"? (https://owen.ru/forum/showthread.php?t=28167&p=338728&viewfull=1#post338728)
DEBUG#08. Что делать, если системное время периодически отображается без учета UTC? (https://owen.ru/forum/showthread.php?t=28167&p=352087&viewfull=1#post352087)
DEBUG#09. Как при отладке увидеть промежуточные значения переменных? (https://owen.ru/forum/showthread.php?t=28167&p=270119&viewfull=1#post270119)
DEBUG#10. В проекте для СПК возникает 40 ошибок типа Screen.VisuElems... (https://owen.ru/forum/showthread.php?t=28167&p=373718&viewfull=1#post373718)
DEBUG#11. При переносе проекта в SP17 возникает ошибка "Идентификатор LANG не задан" (https://owen.ru/forum/showthread.php?t=28167&p=400351&viewfull=1#post400351)
DEGUG#12. Вопросы о сертификатах безопасности (https://owen.ru/forum/showthread.php?t=28167&p=428396&viewfull=1#post428396)
DEBUG#13. Не работает синхронизация по NTP (https://owen.ru/forum/showthread.php?t=28167&p=429402&viewfull=1#post429402)
DEBUG#14. При установке пакета возникает ошибка подтверждения подписи (https://owen.ru/forum/showthread.php?t=28167&p=430550&viewfull=1#post430550)



OTHER#01. Какие сетевые порты контроллера использует среда исполнения? (http://www.owen.ru/forum/showthread.php?t=28167&p=269331&viewfull=1#post269331)
OTHER#02. Как синхронизировать системное время контроллера с NTP-сервером? (http://www.owen.ru/forum/showthread.php?t=28167&p=270061&viewfull=1#post270061)
OTHER#03. Как сделать резервную копию, если нет исходников проекта? (http://www.owen.ru/forum/showthread.php?t=28167&p=294787&viewfull=1#post294787)
OTHER#04. Как защитить загруженный в контроллер проект от копирования? (http://www.owen.ru/forum/showthread.php?t=28167&p=294788&viewfull=1#post294788)
OTHER#05. Как организовано сохранение retain-переменных? (https://www.owen.ru/forum/showthread.php?t=28167&p=308592&viewfull=1#post308592)
OTHER#06. Что делать, если не удается подключиться к контроллеру через кабель USB B? (https://www.owen.ru/forum/showthread.php?t=28167&p=309085&viewfull=1#post309085)
OTHER#07. Особенности выполнения команды "Создать загрузочное приложение" (https://owen.ru/forum/showthread.php?t=28167&p=312974&viewfull=1#post312974)
OTHER#08. Как перепрошить СПК1хх с прошивкой SP14 на прошивку с SP11? (https://owen.ru/forum/showthread.php?t=28167&p=334198&viewfull=1#post334198)
OTHER#09. Можно ли использовать для ПЛК ОВЕН платные компоненты из CODESYS Store? (https://owen.ru/forum/showthread.php?t=28167&p=343879&viewfull=1#post343879)
OTHER#10. Можно ли организовать удаленный доступ к контроллеру из CODESYS для загрузки проектов? (https://owen.ru/forum/showthread.php?t=28167&p=347242&viewfull=1#post347242)
OTHER#11. Как исполнить на ПЛК "имперский марш"? (https://owen.ru/forum/showthread.php?t=28167&p=367079&viewfull=1#post367079)
OTHER#12. Как отключить диагностику дискретных выходов в ПЛК210-03? (https://owen.ru/forum/showthread.php?t=28167&p=385072&viewfull=1#post385072)
OTHER#13. Как определить, можно ли перепрошить ПЛК2xx на прошивку 2.4.xxxx.xxxx? (https://owen.ru/forum/showthread.php?t=28167&p=387637&viewfull=1#post387637)
OTHER#14. Как удалить пользователя виртуального контроллера? (https://owen.ru/forum/showthread.php?t=28167&p=401060&viewfull=1#post401060)
OTHER#15. Как отключить возможность входа в экранный конфигуратор СПК? (https://owen.ru/forum/showthread.php?t=28167&p=425752&viewfull=1#post425752)
OTHER#16. Накопители для обновления прошивки/приложения - требования и рекомендации (https://owen.ru/forum/showthread.php?t=28167&p=429393&viewfull=1#post429393)



IDE#01. Какие горячие клавиши используются в CODESYS 3.5? (http://www.owen.ru/forum/showthread.php?t=28167&p=269352&viewfull=1#post269352)
IDE#02. Как включить отображение пиктограмм POU в редакторе CFC? (http://www.owen.ru/forum/showthread.php?t=28167&p=269367&viewfull=1#post269367)
IDE#03. Как изменить версию библиотеки в проекте? (http://www.owen.ru/forum/showthread.php?t=28167&p=269968&viewfull=1#post269968)
IDE#04. Как определить неиспользуемые в проекте переменные? (http://www.owen.ru/forum/showthread.php?t=28167&p=270461&viewfull=1#post270461)
IDE#05. Как установить и добавить библиотеку? (http://www.owen.ru/forum/showthread.php?t=28167&p=270817&viewfull=1#post270817)
IDE#06. Как изменить имя переменной во всех местах проекта, где она используется? (http://www.owen.ru/forum/showthread.php?t=28167&p=270853&viewfull=1#post270853)
IDE#07. Как сделать ярлык для англоязычной версии CODESYS? (http://www.owen.ru/forum/showthread.php?t=28167&p=271282&viewfull=1#post271282)
IDE#08. В каких форматах можно сохранить проект CODESYS? (http://www.owen.ru/forum/showthread.php?t=28167&p=271506&viewfull=1#post271506)
IDE#09. При запуске CODESYS возникает ошибка... (http://www.owen.ru/forum/showthread.php?t=28167&p=278736&viewfull=1#post278736)
IDE#10. Можно ли установить среду программирования CODESYS на ПК с ОС Linux? (https://owen.ru/forum/showthread.php?t=28167&p=328720&viewfull=1#post328720)
IDE#11. Как восстановить проект после некорректного завершения работы CODESYS? (https://owen.ru/forum/showthread.php?t=28167&p=338726&viewfull=1#post338726)
IDE#12. При установке CODESYS возникает ошибка "gateway.exe is not marked..." (https://owen.ru/forum/showthread.php?t=28167&p=432181&viewfull=1#post432181)


PRG#01. Почему при делении происходит округление значения? (http://www.owen.ru/forum/showthread.php?t=28167&p=269333&viewfull=1#post269333)
PRG#02. Как проверить, что число имеет значение NaN? (http://www.owen.ru/forum/showthread.php?t=28167&p=269644&viewfull=1#post269644)
PRG#03. Можно ли считать тексты из компонента Список текстов в переменные программы? (http://www.owen.ru/forum/showthread.php?t=28167&p=270124&viewfull=1#post270124)
PRG#04. Как преобразовывать данные? (2 WORD в REAL и т.п.) (http://www.owen.ru/forum/showthread.php?t=28167&p=270832&viewfull=1#post270832)
PRG#05. Почему при конверсии кириллицы из STRING в WSTRING получаются "крокозябры"? (http://www.owen.ru/forum/showthread.php?t=28167&p=270862&viewfull=1#post270862)
PRG#06. Как считать информацию об устройстве в переменные программы? (http://www.owen.ru/forum/showthread.php?t=28167&p=270875&viewfull=1#post270875)
PRG#07. Как считать информацию о проекте в переменные программы? (http://www.owen.ru/forum/showthread.php?t=28167&p=270876&viewfull=1#post270876)
PRG#08. Чем отличаются типы данных WORD и UINT? (http://www.owen.ru/forum/showthread.php?t=28167&p=271057&viewfull=1#post271057)
PRG#09. Некоторые особенности языка CFC (http://www.owen.ru/forum/showthread.php?t=28167&p=271279&viewfull=1#post271279)
PRG#10. Вопросы по таймерам (http://www.owen.ru/forum/showthread.php?t=28167&p=272238&viewfull=1#post272238)
PRG#11. Что можно использовать вместо ФБ Сhange_Real_Time_Clock из библиотеки SPK_Tools? (http://www.owen.ru/forum/showthread.php?t=28167&p=272254&viewfull=1#post272254)
PRG#12. Как вывести сообщение в лог CODESYS из программы? (http://www.owen.ru/forum/showthread.php?t=28167&p=272260&viewfull=1#post272260)
PRG#13. Как работать с длинными (>255 символов) строками? (http://www.owen.ru/forum/showthread.php?t=28167&p=289762&viewfull=1#post289762)
PRG#14. Как выполнить фрагмент кода однократно при старте приложения? (https://www.owen.ru/forum/showthread.php?t=28167&p=304642&viewfull=1#post304642)
PRG#15. Как запаковать файл в архив с установкой пароля? (https://owen.ru/forum/showthread.php?t=28167&p=312153&viewfull=1#post312153)
PRG#16. Как считать данные мониторинга задач в переменные программы? (https://owen.ru/forum/showthread.php?t=28167&p=329098&viewfull=1#post329098)
PRG#17. Как работать с JSON в проекте CODESYS? (https://owen.ru/forum/showthread.php?t=28167&p=336595&viewfull=1#post336595)
PRG#18. Как в CODESYS организовано выполнение задач из Конфигурации задач? (https://owen.ru/forum/showthread.php?t=28167&p=336597&viewfull=1#post336597)
PRG#19. Как в коде программы прочитать и изменить сетевые настройки ПЛК2xx? (https://owen.ru/forum/showthread.php?t=28167&p=336649&viewfull=1#post336649)
PRG#20. Как организовать архивацию в формате ПЛК1хх? (для 20 функции Modbus, OPC HDA) (https://owen.ru/forum/showthread.php?t=28167&p=336651&viewfull=1#post336651)
PRG#21. Как реализовать энергонезависимый счетчик наработки оборудования? (https://owen.ru/forum/showthread.php?t=28167&p=336945&viewfull=1#post336945)
PRG#22. Как считать серийный номер USB-накопителя, подключенного к контроллеру? (https://owen.ru/forum/showthread.php?t=28167&p=340323&viewfull=1#post340323)
PRG#23. Как использовать функции для работы со временем из библиотеки Util? (https://owen.ru/forum/showthread.php?t=28167&p=351122&viewfull=1#post351122)
PRG#24. CAA Memory и работа с памятью (https://owen.ru/forum/showthread.php?t=28167&p=357824&viewfull=1#post357824)
PRG#25. Привязка переменных к каналам компонентов дерева проекта (https://owen.ru/forum/showthread.php?t=28167&p=358731&viewfull=1#post358731)
PRG#26. Ограничение библиотеки CmpSysExec на длину команды и способ его обхода (https://owen.ru/forum/showthread.php?t=28167&p=361101&viewfull=1#post361101)
PRG#27. Файловые плейсхолдеры (https://owen.ru/forum/showthread.php?t=28167&p=361653&viewfull=1#post361653)
PRG#28. Как инициализировать структуру в коде программы? (https://owen.ru/forum/showthread.php?t=28167&p=366762&viewfull=1#post366762)
PRG#29. Локальные перечисления (https://owen.ru/forum/showthread.php?t=28167&p=369251&viewfull=1#post369251)
PRG#30. Как выполнить действие при активации тревоги? (https://owen.ru/forum/showthread.php?t=28167&p=372944&viewfull=1#post372944)
PRG#31. Как инициализировать массивы и структуры? (https://owen.ru/forum/showthread.php?t=28167&p=374578&viewfull=1#post374578)
PRG#32. Как сбросить счетчики ПЛК2хх из кода программы? (https://owen.ru/forum/showthread.php?t=28167&p=374785&viewfull=1#post374785)
PRG#33. Что такое методы, свойства, действия и переходы? (https://owen.ru/forum/showthread.php?t=28167&p=381195&viewfull=1#post381195)
PRG#34. Где прочитать об использовании объектно-ориентированного подхода в CODESYS? (https://owen.ru/forum/showthread.php?t=28167&p=381247&viewfull=1#post381247)
PRG#35. Как определить объем используемой/свободной RETAIN-памяти? (https://owen.ru/forum/showthread.php?t=28167&p=381975&viewfull=1#post381975)
PRG#36. Как перенести проект из старой версии CODESYS в V3.5 SP17 Patch 3? (https://owen.ru/forum/showthread.php?t=28167&p=384158&viewfull=1#post384158)
PRG#37. Как перенести установленные плагины с одного ПК на другой? (https://owen.ru/forum/showthread.php?t=28167&p=384246&viewfull=1#post384246)
PRG#38. Как использовать блок ПИД для управления охладителем? (https://owen.ru/forum/showthread.php?t=28167&p=389192&viewfull=1#post389192)
PRG#39. Как вызвать метод в языке CFC? (https://owen.ru/forum/showthread.php?t=28167&p=389349&viewfull=1#post389349)
PRG#40. Как считать имя экземпляра ФБ в его коде для использования в логе ПЛК? (https://owen.ru/forum/showthread.php?t=28167&p=397786&viewfull=1#post397786)


VISU#01. Как настроить воспроизведение звука в web-визуализации? (http://www.owen.ru/forum/showthread.php?t=28167&p=269327&viewfull=1#post269327)
VISU#02. Где хранятся изображения стандартных ламп и кнопок, используемые в визуализации? (http://www.owen.ru/forum/showthread.php?t=28167&p=270953&viewfull=1#post270953)
VISU#03. Можно ли изменить внешний вид диалогов ввода? (Numpad, Keypad) (http://www.owen.ru/forum/showthread.php?t=28167&p=270956&viewfull=1#post270956)
VISU#04. Как из программы изменить диапазон элемента Стрелочный индикатор? (http://www.owen.ru/forum/showthread.php?t=28167&p=271814&viewfull=1#post271814)
VISU#05. Почему вместо элемента Индикатор добавляется Стрелочный индикатор? (http://www.owen.ru/forum/showthread.php?t=28167&p=271818&viewfull=1#post271818)
VISU#06. Как создать в визуализации вертикальный текст? (http://www.owen.ru/forum/showthread.php?t=28167&p=277518&viewfull=1#post277518)
VISU#07. Как реализовать управление пользователями визуализации из кода? (http://www.owen.ru/forum/showthread.php?t=28167&p=295107&viewfull=1#post295107)
VISU#08. Как использовать кириллицу для логинов/паролей? (http://www.owen.ru/forum/showthread.php?t=28167&p=300498&viewfull=1#post300498)
VISU#09. Как обновить изображение в визуализации с USB- или SD-накопителя? (http://www.owen.ru/forum/showthread.php?t=28167&p=300747&viewfull=1#post300747)
VISU#10. Что делать, если в визуализации происходит "наложение" текстов? (https://www.owen.ru/forum/showthread.php?t=28167&p=304650&viewfull=1#post304650)
VISU#11. Можно ли изменить картинку "Отсутствует визуализация"? (https://www.owen.ru/forum/showthread.php?t=28167&p=305476&viewfull=1#post305476)
VISU#12. Как настроить favicon для страницы web-визуализации? (https://www.owen.ru/forum/showthread.php?t=28167&p=309157&viewfull=1#post309157)
VISU#13. Как переключить экран визуализации при входе пользователя в систему? (https://owen.ru/forum/showthread.php?t=28167&p=312297&viewfull=1#post312297)
VISU#14. При открытии диалога на экране наблюдаются артефакты или пропадание элементов... (https://owen.ru/forum/showthread.php?t=28167&page=6&p=323241&posted=1#post323241)
VISU#15. При использовании трендов возникает ошибка... (https://owen.ru/forum/showthread.php?t=28167&p=325383&viewfull=1#post325383)
VISU#16. Как включить/отключить поддержку multi-touch для различных клиентов визуализации? (https://owen.ru/forum/showthread.php?t=28167&p=331174&viewfull=1#post331174)
VISU#17. Как в визуализации посмотреть список файлов ПЛК или подключенного накопителя? (https://owen.ru/forum/showthread.php?t=28167&p=331389&viewfull=1#post331389)
VISU#18. Можно ли изменить логотип на экране загрузки СПК1хх [М01]? (https://owen.ru/forum/showthread.php?t=28167&p=336593&viewfull=1#post336593)
VISU#19. Как создавать и использовать стили визуализации? (https://owen.ru/forum/showthread.php?t=28167&p=336598&viewfull=1#post336598)
VISU#20. Как задать цвет выделения элемента при использовании аппаратной клавиатуры? (https://owen.ru/forum/showthread.php?t=28167&p=336843&viewfull=1#post336843)
VISU#21. Как выводить в таблицу тревог сообщения о входе/выходе пользователя визуализации? (https://owen.ru/forum/showthread.php?t=28167&p=336956&viewfull=1#post336956)
VISU#22. Как сделать так, чтобы диалог открывался рядом с кнопкой его вызова? (https://owen.ru/forum/showthread.php?t=28167&p=341941&viewfull=1#post341941)
VISU#23. Как изменить язык по умолчанию в клавиатурах библиотеки OwenVisuDialogs? (https://owen.ru/forum/showthread.php?t=28167&p=352283&viewfull=1#post352283)
VISU#24. Как сделать скриншот web-страницы и отобразить его в визуализации? (https://owen.ru/forum/showthread.php?t=28167&p=354287&viewfull=1#post354287)
VISU#25. Как программно обработать результат закрытия диалога ввода? (Numpad, Keypad) (https://owen.ru/forum/showthread.php?t=28167&p=357280&viewfull=1#post357280)
VISU#26. Как считать информацию о пользователях визуализации в переменные программы? (https://owen.ru/forum/showthread.php?t=28167&p=357746&viewfull=1#post357746)
VISU#27. Проблемы с отображением длинных строковых переменных в визуализации (https://owen.ru/forum/showthread.php?t=28167&p=357821&viewfull=1#post357821)
VISU#28. Как переключить экран в фрейме из кода программы? (https://owen.ru/forum/showthread.php?t=28167&p=362310&viewfull=1#post362310)
VISU#29. Работа с тревогами из кода программы (AlarmManager) (https://owen.ru/forum/showthread.php?t=28167&p=362311&viewfull=1#post362311)
VISU#30. Как сделать всплывающее окно при появлении тревог? (https://owen.ru/forum/showthread.php?t=28167&p=381743&viewfull=1#post381743)
VISU#31. Медленное применение настроек тренда в плагине визуализации 4.2.0.0 (https://owen.ru/forum/showthread.php?t=28167&p=387214&viewfull=1#post387214)
VISU#32. Не удается ввести пароль пользователя визуализации в CODESYS V3.5 SP17 (https://owen.ru/forum/showthread.php?t=28167&p=407788&viewfull=1#post407788)
VISU#33. Почему в web-визуализации не работает зум на смартфоне? (https://owen.ru/forum/showthread.php?t=28167&p=415362&viewfull=1#post415362)
VISU#34. Формат базы данных элемента Тренд (.sqlite) (https://owen.ru/forum/showthread.php?t=28167&p=415504&viewfull=1#post415504)
VISU#35. Как отключить необходимость ввода пароля ПЛК для web-визуализации? (https://owen.ru/forum/showthread.php?t=28167&p=429387&viewfull=1#post429387)


COM#01. Как настроить обмен по протоколу MQTT? (http://www.owen.ru/forum/showthread.php?t=28167&p=269327&viewfull=1#post269329)
COM#02. Как по RS-485 опросить устройство, работающее на скорости <4800 бод? (http://www.owen.ru/forum/showthread.php?t=28167&p=269327&viewfull=1#post269330)
COM#03. Контроллер - Modbus Slave. Можно ли изменить его адрес (slave ID) в процессе работы? (http://www.owen.ru/forum/showthread.php?t=28167&p=269342&viewfull=1#post269342)
COM#04. Как организовать обмен по протоколу Modbus ASCII? (http://www.owen.ru/forum/showthread.php?t=28167&p=270952&viewfull=1#post270952)
COM#05. Как подключить контроллер к SCADA-системе TraceMode? (http://www.owen.ru/forum/showthread.php?t=28167&p=271278&viewfull=1#post271278)
COM#06. Как переинициализировать компонент ModbusCom? (http://www.owen.ru/forum/showthread.php?t=28167&p=272286&viewfull=1#post272286)
COM#07. Modbus TCP - изменение сетевых настроек из кода программы (http://www.owen.ru/forum/showthread.php?t=28167&p=296714&viewfull=1#post296714)
COM#08. Как настроить обмен с электросчетчиками Меркурий? (http://www.owen.ru/forum/showthread.php?t=28167&p=298761&viewfull=1#post298761)
COM#09. Как отключить устройство из опроса при обмене через конфигурацию? (https://www.owen.ru/forum/showthread.php?t=28167&p=304649&viewfull=1#post304649)
COM#10. Можно ли подключить к контроллеру преобразователь АС4-М? (https://owen.ru/forum/showthread.php?t=28167&p=329252&viewfull=1#post329252)
COM#11. Можно ли к контроллерам ОВЕН подключать USB HID устройства? (https://owen.ru/forum/showthread.php?t=28167&p=336591&viewfull=1#post336591)
COM#12. Проблемы с опросом Modbus Serial Slave устройств через МКОН (https://owen.ru/forum/showthread.php?t=28167&p=338820&viewfull=1#post338820)
COM#13. Как интегрировать контроллер с Telegram-ботом? (https://owen.ru/forum/showthread.php?t=28167&p=339890&viewfull=1#post339890)
COM#14. Почему при работе с шаблонами Mx210 настройки модулей сбрасываются на заводские? (https://owen.ru/forum/showthread.php?t=28167&p=343043&viewfull=1#post343043)
COM#15. Почему значения в каналах Modbus отображаются серым? (https://owen.ru/forum/showthread.php?t=28167&p=343792&viewfull=1#post343792)
COM#16. Как работать с OwenCloud через API? (https://owen.ru/forum/showthread.php?t=28167&p=343924&viewfull=1#post343924)
COM#17. Как настроить контроллер в режиме Slave по нестандартному протоколу обмена? (https://owen.ru/forum/showthread.php?t=28167&p=351298&viewfull=1#post351298)
COM#18. Как получить информацию о погоде? (https://owen.ru/forum/showthread.php?t=28167&p=356369&viewfull=1#post356369)
COM#19. Как настроить проброс портов для ПЛК2хх? (https://owen.ru/forum/showthread.php?t=28167&p=360662&viewfull=1#post360662)
COM#20. Как отмасштабировать значение, считываемое по Modbus? (https://owen.ru/forum/showthread.php?t=28167&p=363210&viewfull=1#post363210)
COM#21. Как подключиться к SQL-серверу? (https://owen.ru/forum/showthread.php?t=28167&p=364886&viewfull=1#post364886)
COM#22. Как подключить контроллер к VPN? (https://owen.ru/forum/showthread.php?t=28167&p=364889&viewfull=1#post364889)
COM#23. Как работать с GSM/GPRS-модемами? (https://owen.ru/forum/showthread.php?t=28167&p=364890&viewfull=1#post364890)
COM#24. Как настроить обмен между ПЛК, программируемыми в CODESYS V3.5? (https://owen.ru/forum/showthread.php?t=28167&p=365393&viewfull=1#post365393)
COM#25. Как записать данные из ПЛК в таблицу Google Spreadsheet? (https://owen.ru/forum/showthread.php?t=28167&p=373433&viewfull=1#post373433)
COM#26. В версии SP16 Patch 3 не удается опросить Modbus TCP Slave Device - ошибка 10 (https://owen.ru/forum/showthread.php?t=28167&p=373724&viewfull=1#post373724)
COM#27. Как считать информацию диагностики компонентов Modbus в переменные программы? (https://owen.ru/forum/showthread.php?t=28167&p=403643&viewfull=1#post403643)
COM#28. ПЛК2xx - настройка статических маршрутов (https://owen.ru/forum/showthread.php?t=28167&p=408935&viewfull=1#post408935)
COM#29. Обеспечение безопасного соединения по OPC UA (https://owen.ru/forum/showthread.php?t=28167&p=410126&viewfull=1#post410126)
COM#30. Как считать информацию о тревогах ПЧВ AFD-E? (Modbus-функции 0x07 и 0x08) (https://owen.ru/forum/showthread.php?t=28167&p=414869&viewfull=1#post414869)


DEBUG#01. Как переключить режим отображения переменных? (DEC/HEX) (http://www.owen.ru/forum/showthread.php?t=28167&p=269744&viewfull=1#post269744)
DEBUG#02. Как проверить проект в эмуляции? (http://www.owen.ru/forum/showthread.php?t=28167&p=296706&viewfull=1#post296706)
DEBUG#03. Что делать, если появляется ошибка "Адрес уже используется" ? (https://www.owen.ru/forum/showthread.php?t=28167&p=305691&viewfull=1#post305691)
DEBUG#04. Что делать, если при загрузке проекта появляется ошибка "Download denied..." ? (https://www.owen.ru/forum/showthread.php?t=28167&p=308387&viewfull=1#post308387)
DEBUG#05. Что делать, если контроллер не обнаруживается при сканировании сети? (https://owen.ru/forum/showthread.php?t=28167&p=330018&viewfull=1#post330018)
DEBUG#06. Что делать при возникновении ошибки "Недостаточно памяти на устройстве"? (https://owen.ru/forum/showthread.php?t=28167&p=336589&viewfull=1#post336589)
DEBUG#07. В чем причина ошибки "Processor load watchdog of all IEC-tasks detected"? (https://owen.ru/forum/showthread.php?t=28167&p=338728&viewfull=1#post338728)
DEBUG#08. Что делать, если системное время периодически отображается без учета UTC? (https://owen.ru/forum/showthread.php?t=28167&p=352087&viewfull=1#post352087)
DEBUG#09. Как при отладке увидеть промежуточные значения переменных? (https://owen.ru/forum/showthread.php?t=28167&p=270119&viewfull=1#post270119)
DEBUG#10. В проекте для СПК возникает 40 ошибок типа Screen.VisuElems... (https://owen.ru/forum/showthread.php?t=28167&p=373718&viewfull=1#post373718)
DEBUG#11. При переносе проекта в SP17 возникает ошибка "Идентификатор LANG не задан" (https://owen.ru/forum/showthread.php?t=28167&p=400351&viewfull=1#post400351)
DEGUG#12. Вопросы о сертификатах безопасности (https://owen.ru/forum/showthread.php?t=28167&p=428396&viewfull=1#post428396)
DEBUG#13. Не работает синхронизация по NTP (https://owen.ru/forum/showthread.php?t=28167&p=429402&viewfull=1#post429402)
DEBUG#14. При установке пакета возникает ошибка подтверждения подписи (https://owen.ru/forum/showthread.php?t=28167&p=430550&viewfull=1#post430550)


OTHER#01. Какие сетевые порты контроллера использует среда исполнения? (http://www.owen.ru/forum/showthread.php?t=28167&p=269331&viewfull=1#post269331)
OTHER#02. Как синхронизировать системное время контроллера с NTP-сервером? (http://www.owen.ru/forum/showthread.php?t=28167&p=270061&viewfull=1#post270061)
OTHER#03. Как сделать резервную копию, если нет исходников проекта? (http://www.owen.ru/forum/showthread.php?t=28167&p=294787&viewfull=1#post294787)
OTHER#04. Как защитить загруженный в контроллер проект от копирования? (http://www.owen.ru/forum/showthread.php?t=28167&p=294788&viewfull=1#post294788)
OTHER#05. Как организовано сохранение retain-переменных? (https://www.owen.ru/forum/showthread.php?t=28167&p=308592&viewfull=1#post308592)
OTHER#06. Что делать, если не удается подключиться к контроллеру через кабель USB B? (https://www.owen.ru/forum/showthread.php?t=28167&p=309085&viewfull=1#post309085)
OTHER#07. Особенности выполнения команды "Создать загрузочное приложение" (https://owen.ru/forum/showthread.php?t=28167&p=312974&viewfull=1#post312974)
OTHER#08. Как перепрошить СПК1хх с прошивкой SP14 на прошивку с SP11? (https://owen.ru/forum/showthread.php?t=28167&p=334198&viewfull=1#post334198)
OTHER#09. Можно ли использовать для ПЛК ОВЕН платные компоненты из CODESYS Store? (https://owen.ru/forum/showthread.php?t=28167&p=343879&viewfull=1#post343879)
OTHER#10. Можно ли организовать удаленный доступ к контроллеру из CODESYS для загрузки проектов? (https://owen.ru/forum/showthread.php?t=28167&p=347242&viewfull=1#post347242)
OTHER#11. Как исполнить на ПЛК "имперский марш"? (https://owen.ru/forum/showthread.php?t=28167&p=367079&viewfull=1#post367079)
OTHER#12. Как отключить диагностику дискретных выходов в ПЛК210-03? (https://owen.ru/forum/showthread.php?t=28167&p=385072&viewfull=1#post385072)
OTHER#13. Как определить, можно ли перепрошить ПЛК2xx на прошивку 2.4.xxxx.xxxx? (https://owen.ru/forum/showthread.php?t=28167&p=387637&viewfull=1#post387637)
OTHER#14. Как удалить пользователя виртуального контроллера? (https://owen.ru/forum/showthread.php?t=28167&p=401060&viewfull=1#post401060)
OTHER#15. Как отключить возможность входа в экранный конфигуратор СПК? (https://owen.ru/forum/showthread.php?t=28167&p=425752&viewfull=1#post425752)
OTHER#16. Накопители для обновления прошивки/приложения - требования и рекомендации (https://owen.ru/forum/showthread.php?t=28167&p=429393&viewfull=1#post429393)

Евгений Кислов
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. Поддерживается подписка и публикация. Исходные коды библиотеки открыты.
Скачать библиотеку и посмотреть примеры ее использования можно на данной странице (https://github.com/rossmann-engineering/CoDeSys-MQTT-library).

См. пример (https://ftp.owen.ru/CoDeSys3/21_Examples/01_3.5.11.5/11_Other/Example_MqttClient_3517v2.zip) использования библиотеки.

Есть и альтернативная реализация - более функциональная, но сложная в использовании:
https://github.com/stefandreyer/CODESYS-MQTT

Евгений Кислов
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 (для подключения к контроллеру через промежуточный ПК, на котором запущен CODESYS Gateway)
1740-1743 - сервис обнаружения ПЛК через сканирование сети (UDP broadcast)
11740 - подключение к контроллеру (TCP)
8080 - сервер web-визуализации (HTTP)
8443 - сервер web-визуализации (HTTPS)
502 - протокол Modbus TCP
4840 - протокол OPC UA



Примечание: для контроллеров, программируемых в 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-конфигураторе.

Ответ: см. примеры для SP7 Patch 4 (https://ftp.owen.ru/CoDeSys3/99_ForumFiles/Example_SNTP.projectarchive) и SP16 Patch 3 (https://ftp.owen.ru/CoDeSys3/21_Examples/01_3.5.11.5/08_Sockets/Example_NtpClient_3516v1.projectarchive).

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

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

35622 35623

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

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

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

Ответ: да, это возможно. См. этот документ (https://oscat.ru/?p=345).

Евгений Кислов
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

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

См. также библиотеку OwenVisuDialogs (https://owen.ru/forum/showthread.php?t=34327&p=348262&viewfull=1#post348262) с кастомизированными диалогами ввода.

Евгений Кислов
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.

Пример использования функции StrConcatA:



PROGRAM PLC_PRG
VAR
sLongStr1: STRING(4096) := 'длинная строка 1';
sLongStr2: STRING(4096) := 'длинная строка 2';
sVeryLongStr: STRING(8192);
xConcat: BOOL;
END_VAR

IF xConcat THEN

// склеить sLongStr1 и sLongStr2 в sVeryLongStr
STU.StrConcatA(ADR(sLongStr1), ADR(sVeryLongStr), SIZEOF(sVeryLongStr) );
STU.StrConcatA(ADR(sLongStr2), ADR(sVeryLongStr), SIZEOF(sVeryLongStr) );
xConcat := FALSE;

END_IF

Евгений Кислов
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_3517v2.projectarchive).
Зная контекст, вы можете организовать логин или отключение данного клиента из кода программы:



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




VisuElems.Visu_FctLogoutUser(pstClientData);


Cм. также пример считывания информации о пользователях визуализации в переменные программы (https://owen.ru/forum/showthread.php?t=28167&p=357746&viewfull=1#post357746).

Евгений Кислов
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 (доступен только в контроллерах СПК1хх [М01]) или web-конфигуратор.

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)?

Ответ: компания ОВЕН разработала библиотеку OwenVendorProtocols для опроса тепло- и электросчетчиков:
https://owen.ru/forum/showthread.php?t=34449&p=350263&viewfull=1#post350263

См. пример (https://ftp.owen.ru/CoDeSys3/21_Examples/01_3.5.11.5/07_User_protocols/Example_Mercury236_3514v3.projectarchive) и видеопример (https://youtu.be/DFsaOMszc7Q) опроса электросчетчика Меркурий 236 с помощью библиотеки.

54129

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

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

Ответ: это можно сделать с помощью библиотеки OwenVisuDialogs (https://owen.ru/forum/showthread.php?t=34327&p=348262&viewfull=1#post348262).

Евгений Кислов
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

Комментарий: начиная с версии прошивки 1.2.0623.1009 это можно сделать в web-конфигураторе. См. информацию здесь. (https://owen.ru/forum/showthread.php?t=28167&p=336593&viewfull=1#post336593)

Комментарий: приведенная ниже информация актуальна только для контроллеров c версией прошивки 1.1.0611.1056.

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

Подключитесь к контроллеру по 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] и ПЛК2xx энергонезависимые переменные сохраняются в микросхеме 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.255.248
-


ПК (виртуальный адаптер)
Получить IP-адрес автоматически
-
-



63324

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

Ответ: для этого достаточно загрузить (о том, как это сделать - см. п. 13.5 в документе CODESYS V3.5. FAQ) файл favicon.ico в директорию /home/root/CODESYS_WRK/PlcLogic/visu (для СПК1хх [М01]) или в директорию /root/CODESYS/PlcLogic/visu (для ПЛК2хх). Для СПК1хх [М01] загрузить favicon также можно через web-конфигуратор (вкладка ПЛК/Заставка).

Чтобы увидеть изменения в браузере потребуется обновить страницу 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) в соответствующую директорию (см. пути выше) и добавить в файл 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-сервер в виде запароленных архивов. Каким образом это можно сделать?

Ответ: предположим, в контроллер есть файл 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), чтобы в программе снять флаг логина данного клиента


Если вы используете CODESYS V3.5 SP17 Patch 3 с плагином визуализации 4.3.0.0 (https://ftp.owen.ru/CoDeSys3/01_CODESYS/plugins/CODESYS%20Visualization%204.3.0.0.package) или выше - то см. этот пример (https://ftp.owen.ru/CoDeSys3/21_Examples/01_3.5.11.5/02_Visu/05_VisuIecCode/Example_VisuUtils_SwitchVisu2_cds3517_visu4300_v1. projectarchive) и информацию из п. 1.3 данного документа (https://ftp.owen.ru/CoDeSys3/98_Books/CodesysVisuIecCode.pdf).

Евгений Кислов
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]

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

Примечание: для концептуального решения этой проблемы мы разработали библиотеку OwenVisuTools (https://owen.ru/forum/showthread.php?t=38366) с собственной реализацией трендов.

Ответ: в большинстве случаев подобные проблемы возникают при перезагрузке контроллера по питанию в тот момент, когда происходит работа с файлом тренда - что приводит к повреждению этого файла.
С этим связаны ситуации из п. 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/) (начиная с версии V3.5 SP17 - он не работает).

Евгений Кислов
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-адреса контроллера (в рамках примера ниже - это 192.168.0.33; вместо него вам нужно ввести 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
Вопрос: требуется организовать в визуализации контроллера просмотр файлов, которые хранятся в его памяти (или на подключенном накопителе).
Каким образом это можно сделать?

Ответ: можно использовать диалог FileDirChoiceOwen из библиотеки OwenVisuDialogs (https://owen.ru/forum/showthread.php?t=34327&p=348262&viewfull=1#post348262).

Принципы работы c диалогом (на примере стандартного диалога FileOpenSave, на базе которого создан FileDirChoiceOwen) приведены в этом видео (https://youtu.be/d-gLwtmJnlk).

Евгений Кислов
05.06.2020, 10:15
Вопрос: как перепрошить СПК1хх [М01] с прошивкой с CODESYS V3.5 SP14 Patch 3 (например, 1.2.0131.1405) на прошивку с CODESYS V3.5 SP11 Patch 5 (например, 1.1.0611.1056)?
При попытке перепрошивки стандартным методом контроллер перестает загружаться.

Комментарии:

1. "Откатить" прошивку можно только до версии 1.1.0611.1056 - но не до более ранних версий.
2. Перед процедурой "отката" обязательно следует связаться с техподдержкой (support@owen.ru), чтобы подтвердить его возможность и целесообразность в конкретном случае.
3. Следует заранее подготовить нуль-модемный кабель и переходник RS-232/USB (с подтвержденной работоспособностью) - это позволит с определенной вероятностью восстановить работу прибора, если процедура перепрошивки будет проведена некорректно.


Ответ: начиная с прошивки 1.2.0131.1405 в операционной и файловой системе контроллера произошли серьезные изменения.
Поэтому для перепрошивки контроллера с версией прошивки >= 1.2.0131.1405 на более раннюю версию прошивки требуется сделать следующее:

1. Подключиться к терминалу Linux (через web-конфигуратор, вкладка Система/Терминал или утилиту типа putty).
2. Выполнить команды



echo 0 > /sys/class/block/mmcblk1boot1/force_ro
fw_setenv force_mmc_update yes
reboot


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

Евгений Кислов
21.07.2020, 12:50
Вопрос: при загрузке проекта из CODESYS возникает ошибка "Загрузка не завершена: недостаточно памяти на устройстве". Что делать?

50250

Ответ: обычно эта ошибка указывает на то, что перед последней перезагрузкой контроллера не было создано загрузочное приложение.
(см. более подробную информацию здесь (https://owen.ru/forum/showthread.php?t=28167&p=312974&viewfull=1#post312974)).

Самый простой вариант решения проблемы - перейти в web-конфигуратор и на вкладке ПЛК/Настройки нажать кнопку Очистить retain-память:

50251

После этого загрузка проекта пройдет без ошибок.

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

Евгений Кислов
21.07.2020, 13:03
Вопрос: можно ли к контроллерам ОВЕН, программируемым в среде CODESYS V3.5, подключать USB HID устройства?

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

Данный функционал поддерживается контроллерами СПК1хх [М01] и ПЛК210 начиная с версии прошивки 1.2.0623.1009.

Для получения информации от HID устройств (строк данных, координат нажатий и т.д.) используется библиотека CmpOwenUsbHid.
Библиотека и документация доступны по ссылке:
https://owen.ru/product/codesys_v3/libraries

См. видеопример (https://youtu.be/Tqze-vTl5ZI).

Для использования клавиатуры и мыши в таргет-визуализации контроллеров СПК1хх [М01] применение библиотеки не требуется - ввод данных и управление курсором будет работать автоматически.
Для ввода текста на кириллице потребуется зажать клавишу RigthAlt , а переменная, привязанная к элементу, должна иметь тип WSTRING.

Информация по использованию горячих клавиш доступна в документе CODESYS V3.5. Визуализация (https://ftp.owen.ru/CoDeSys3/11_Documentation/03_3.5.11.5/CDSv3.5_Visu_v2.1.pdf) (п. 3.1.3, 5.4.2 и табл. 9.1, параметр 10).

Контроллеры СПК1хх [М01] также поддерживают системные переменные, позволяющие определить координаты и число нажатий курсора:


Screen.cursorX (INT) – координата последнего нажатия курсора по оси X;
Screen.cursorY (INT) – координата последнего нажатия курсора по оси Y;
Screen.countTouch (UDINT) – число нажатий на экран с момента включения.

Евгений Кислов
21.07.2020, 13:19
Вопрос: можно ли изменить логотип на экране загрузки СПК1хх [М01]?

Ответ: это возможно начиная с версии прошивки 1.2.0623.1009, в которой в web-конфигураторе появилась вкладка ПЛК/Заставка.
Описание вкладки приведено в данном документе (https://ftp.owen.ru/CoDeSys3/11_Documentation/10_OpenWRT/Spk1xx_LogoManual.pdf).

50252

Евгений Кислов
21.07.2020, 13:40
Вопрос: требуется формировать и парсить файлы формата JSON (https://ru.wikipedia.org/wiki/JSON) в коде программы контроллера. Как это можно сделать?

Ответ: доступны следующие варианты:


платная библиотека от разработчиков CODESYS (в составе пакета IIoT Libraries (https://store.codesys.com/iiot-libraries-sl.html))
бесплатная библиотека с открытым исходным кодом (https://github.com/stefandreyer/JSON-Library);
для контроллеров ОВЕН начиная с версии прошивки 1.2.0623.1009 в состав прошивки входят консольные утилиты jq и jo, используемые для работы с JSON (см. пример (https://ftp.owen.ru/CoDeSys3/21_Examples/01_3.5.11.5/11_Other/Example_JsonFullExample_3514v1.projectarchive)).

Евгений Кислов
21.07.2020, 13:52
Вопрос: как в CODESYS организовано выполнение задач из Конфигурации задач?

Ответ: определенная информация по этому поводу приведена в данном документе (https://oscat.ru/?p=339) (не является официальной документацией ОВЕН).

Евгений Кислов
21.07.2020, 13:54
Вопрос: как создавать и использовать стили визуализации?

Ответ: см. данный документ (https://oscat.ru/?p=352).

Евгений Кислов
22.07.2020, 09:23
Вопрос: у контроллеров СПК в таргет-файле есть узел Network, позволяющий считать сетевые настройки в переменные программы и изменить их из кода.
Но у ПЛК2хх этого узла нет. Как прочитать и изменить сетевые настройки в программе в этом случае?

Ответ: см. пример (https://ftp.owen.ru/CoDeSys3/21_Examples/01_3.5.11.5/11_Other/Example_NetworkAdaptersInfo_3517v1.projectarchive) .

В примере демонстрируется:


получение информации о сетевых интерфейсах контроллера с помощью библиотеки SysSocket;
получение информации об адаптерах и привязанных к ним интерфейсах (пример: адаптер с именем lan может быть сконфигурирован как сетевой мост, в состав которого входят интерфейсы eth1, eth2 и eth3);
изменение сетевых настроек выбранного адаптера.


62943

Евгений Кислов
22.07.2020, 09:32
Вопрос: требуется считывать архив с контроллера с помощью OPC-сервера Insat MasterOPC Universal Modbus Server, чтобы потом передавать его в SCADA-систему по OPC HDA.
Блок MB_TcpSlave из библиотеки OwenCommunication (https://owen.ru/forum/showthread.php?t=31816) позволяет OPC-серверу считать архив 20-й функцией Modbus, но скрипт OPC-сервера, реализующий парсинг архива, работает только с файлами формата архива ПЛК1хх (https://ftp.owen.ru/CoDeSys23/06_Documentation/Plc1xx_ArchiverFormatDescription.pdf).
Как организовать архивацию данных в таком формате в CODESYS V3.5?

Ответ: см. пример (https://ftp.owen.ru/CoDeSys3/21_Examples/01_3.5.11.5/11_Other/Example_ArchiverPlc1xx_3514v1.zip).
В нем содержится блок архивации, программа с вызовами блока архивации и блока MB_TcpSlave, а также конфигурация OPC-сервера.
Пользователь должен доработать блок архивации в зависимости от числа и типа архивируемых переменных.

Евгений Кислов
24.07.2020, 14:17
Вопрос: в Менеджере визуализации установлена галочка Вкл. стандартное использование клавиатуры.

50309

Это позволяет работать с элементами визуализации с помощью аппаратной клавиатуры (выбор активного элемента осуществляется стрелками, нажатие на элемент - кнопкой Enter).
Выбранный в данный момент элемент выделяется рамкой. Как изменить цвет этой рамки?

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



PROGRAM PLC_PRG
VAR
xInit: BOOL;
stSelectionColor: VisuElems.VisuStructColors;
END_VAR


IF NOT(xInit) THEN

// цвет в формате RGBA (AARRGGBB), где AA - степень прозрачности
stSelectionColor.dwFrameColor := 16#FFFF0000;
VisuElems.g_SelectionManager.SelectionColors := stSelectionColor;
xInit := TRUE;

END_IF



50310

См. также информацию из п. 6 данного документа (https://ftp.owen.ru/CoDeSys3/98_Books/CodesysVisuIecCode.pdf).

Евгений Кислов
27.07.2020, 09:47
Вопрос: как реализовать энергонезависимый счетчик наработки оборудования?

Ответ: это можно сделать с помощью ФБ ONTIME из библиотеки OSCAT Basic. (https://ftp.owen.ru/CoDeSys3/04_Library/05_3.5.11.5/02_Libraries/OSCATBasic.package)
См. пример использования блока (https://ftp.owen.ru/CoDeSys3/99_ForumFiles/Example_Ontime_3514v1.projectarchive).

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

Ответ: см. пример (https://ftp.owen.ru/CoDeSys3/99_ForumFiles/Example_VisuUserActionsLog_3514v1.projectarchive).

Если вы используете CODESYS V3.5 SP17 Patch 3 с плагином визуализации 4.3.0.0 (https://ftp.owen.ru/CoDeSys3/01_CODESYS/plugins/CODESYS%20Visualization%204.3.0.0.package) или выше - то см. этот пример (https://ftp.owen.ru/CoDeSys3/21_Examples/01_3.5.11.5/02_Visu/05_VisuIecCode/Example_VisuUserManagement_cds3517_visu4300_v1.pro jectarchive) и информацию из п. 2.9 данного документа (https://ftp.owen.ru/CoDeSys3/98_Books/CodesysVisuIecCode.pdf).

Евгений Кислов
26.08.2020, 12:27
Вопрос: во время работы над проектом CODESYS пропало питание ПК.
После включения ПК и запуска CODESYS появилось следующее сообщение:

50791

Но после нажатия на кнопку Да появилось сообщение об ошибке:

50792

Можно ли восстановить проект?

Ответ: к сожалению, в данной ситуации восстановить проект уже нельзя.
Это связано с тем, что в свежих версиях CODESYS по умолчанию включен контроль целостности проекта, который не допускает возможности восстановления проекта в случае некорректного завершения работы среды.
Отключить контроль целостности можно в меню Проект - Установки проекта на вкладке Безопасность:

50793

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

Евгений Кислов
26.08.2020, 13:45
Вопрос: в процессе работы контроллера иногда возникает ошибка "Processor load watchdog of all IEC-tasks detected". В чем причина ее появления?

50794 50795

Ответ: данная ошибка означает, что сработал сторожевой таймер, который контролирует загрузку CPU и генерирует исключение, если она в течение нескольких секунд превышает 99%.
Этот механизм, в частности, используется для детектирования возникновения бесконечного цикла в программе пользователя.

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

Для отключения генерации исключения в подобных ситуациях - нужно подключиться к контроллеру через утилиту WinSCP и отредактировать файл CODESYSControl.cfg, который расположен в рабочей директории контроллера (пути к рабочей директории для разных контроллеров см. в документе CODESYS V3.5. FAQ). В файле в секции [CmpSchedule] следует присвоить параметру ProcessorLoad.Maximum значение 0 и перезапустить CODESYS (в web-конфигураторе: ПЛК - Настройки - Перезапустить CODESYS).

50796

Евгений Кислов
28.08.2020, 11:59
Вопрос: контроллер настроен в режиме Modbus TCP Master. Необходимо реализовать опрос устройств на шине RS-485, подключенных к контроллеру через конвертер протоколов МКОН (https://owen.ru/product/mkon). Для каждого slave-устройства в проект добавлен компонент Modbus TCP Slave. Во всех компонентах указан и один и тот же IP-адрес и порт, и разные Unit ID, соответствующие адресам слэйвов на шине RS-485. Проблема в том, что в CODESYS каждый компонент Modbus TCP Slave создает отдельное подключение, а МКОН поддерживает только два одновременных подключения, то есть опросить больше двух слэйвов таким образом невозможно. Как можно решить эту проблему?

50820

Ответ: при работе с преобразователями протоколов Modbus TCP/Modbus RTU необходимо добавлять в проект только один компонент Modbus TCP Slave, а уже в него - нужное количество компонентов Modbus Slave COM Port. В этом случае контроллер установит с конвертером протоколов только одно соединение.

50821

См. видеопример (https://youtu.be/Czcar_HOTxU).

Обратите внимание: в текущих версиях CODESYS присутствует баг, из-за которого при возникновении любой ошибки обмена с устройством Modbus Slave COM Port, добавленным в компонент Modbus TCP Slave, его опрос больше не производится.
Для решения проблемы необходимо реализовать сброс ошибок в коде:



PROGRAM PLC_PRG
VAR
fbConfirmError: R_TRIG;
fbConfirmError1: R_TRIG;
fbConfirmError2: R_TRIG;
END_VAR

// Modbus_Slave_COM_Port, Modbus_Slave_COM_Port_1, Modbus_Slave_COM_Port_2 - имена компонентов из дерева проекта (см. скриншот выше)
fbConfirmError(CLK := Modbus_Slave_COM_Port.xError, Q => Modbus_Slave_COM_Port.xConfirmError);

fbConfirmError1(CLK := Modbus_Slave_COM_Port_1.xError, Q => Modbus_Slave_COM_Port_1.xConfirmError);
fbConfirmError2(CLK := Modbus_Slave_COM_Port_2.xError, Q => Modbus_Slave_COM_Port_2.xConfirmError);


Ошибка исправлена в CODESYS V3.5 SP17.

56833

Евгений Кислов
17.09.2020, 14:03
Вопрос: как интегрировать контроллер с Telegram-ботом?

Ответ: см. пример (https://ftp.owen.ru/CoDeSys3/21_Examples/01_3.5.11.5/08_Sockets/Example_TelegramApi_3514v1.zip).

В нем демонстрируется:


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


Требуемая версия прошивки контроллера: 1.2.07xx.xxxx или выше

В примере демонстрируется использование утилит curl и jq, вызываемых через ФБ библиотеки CmpSysExec.
В примере используются библиотеки OwenStringUtils и VisuKeyboard_En-ru (библиотека русскоязычной клавиатуры).
https://owen.ru/product/codesys_v3/libraries

Пользователь может доработать пример под конкретную задачу, используя документацию о Telegram API (https://core.telegram.org/bots/api).

Евгений Кислов
25.09.2020, 11:22
Вопрос: как считать серийный номер USB-накопителя, подключенного к контроллеру?

Ответ: см. пример (https://ftp.owen.ru/CoDeSys3/21_Examples/01_3.5.11.5/11_Other/Example_GetUsbSerialNumber_3514v1.projectarchive).

51143

Если накопитель не подключен, то будет выведена информация о flash-памяти контроллера.

Евгений Кислов
27.10.2020, 13:57
Вопрос: при выборе диалога можно настроить его открытие либо по центру экрана, либо по заданным координатам.
Требуется настроить диалоги в проекте так, чтобы они открывались рядом с кнопками, нажатием на которые они вызываются.
Это можно сделать через вариант с заданными координатами, но потребуется вручную вычислять координаты для каждой кнопки.
Можно ли как-то избежать этого?

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

51532

Евгений Кислов
12.11.2020, 13:37
Вопрос: в проекте используются шаблоны модулей Mx210. Настройки модулей задаются через ОВЕН Конфигуратор.
Но при подключении модулей к контроллеру настройки их входов/выходов сбрасываются на заводские. В чем может быть проблема?

Ответ: при использовании шаблонов Mx210 не надо настраивать входы/выходы модулей через ОВЕН Конфигуратор - нужно делать это прямо в CODESYS в настройках шаблона на вкладке Конфигурация.

51937

Настройки будут записываться:

при загрузке проекта из CODESYS;
при запуске контроллера;
в случае потери и восстановления связи.


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

51938 51939

Евгений Кислов
24.11.2020, 09:01
Вопрос: при настройке обмена по Modbus в дереве проекта не отображается ошибок (горят зеленые кружочки), но сами значения в каналах являются нулевыми и отображаются серым.
В чем может быть проблема?

52146

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

52147

Евгений Кислов
25.11.2020, 09:37
Вопрос: можно ли при работе с контроллерами ОВЕН использовать дополнительные платные компоненты и библиотеки из CODESYS Store (https://store.codesys.com/), которые требуют программного (Soft Container) или аппаратного (WIBU key) лицензирования?

Ответ: в настоящий момент такая возможность отсутствует.
Поддержка Soft Container запланирована в одной из следующих прошивок.

Евгений Кислов
26.11.2020, 06:56
Вопрос: есть ПЛК, который подключен к сети с доступом в интернет, и другое устройство, которое находится на удаленном объекте.
У ПЛК нет доступа к сети этого объекта (или сеть там вообще отсутствует), но устройство подключено к облачному сервису OwenCloud.
Возможно ли как-то с ПЛК считывать/записывать параметры этого устройства?

Ответ: да, это возможно с помощью API OwenCloud. См. пример (https://ftp.owen.ru/CoDeSys3/21_Examples/01_3.5.11.5/08_Sockets/Example_OwenCloudApi_3514v1.projectarchive) и видео (https://youtu.be/T6XfuDQIOk4).

При переносе примера на ПЛК2xx в ФБ WRITE_PARAMATER потребуется изменить значение константы c_sPathToFile на:


c_sPathToFile: STRING := '/root/CODESYS/send_data.json';


Документация на API:
https://api.owencloud.ru/

Евгений Кислов
12.01.2021, 14:08
Вопрос: можно ли организовать удаленный доступ к ПЛК из CODESYS для загрузки проектов?

Ответ: да, это возможно. См. более подробную информацию и данные для доступа к демонстрационному ПЛК в этом посте (https://owen.ru/forum/showthread.php?t=34242).

Евгений Кислов
10.03.2021, 09:28
Вопрос: в библиотеке Util есть ряд функций для работы со временем (JoinDateTime, SplitDateTime и т.д.), в которых значение системного времени представляется переменной типа ULINT.
Как конвертировать это значение в переменную типа DT?

53881

Ответ: функции библиотеки представляют системное время в виде числа миллисекунд, прошедших с полуночи (00:00:00 UTC) 1 января 1970 года - то есть это вариация UnixTime (https://ru.wikipedia.org/wiki/Unix-%D0%B2%D1%80%D0%B5%D0%BC%D1%8F) с тем отличием, что UnixTime представляет время в виде числа секунд. Тип DT хранит время в формате UnixTime.

Поэтому при работе с функциями библиотеки надо делить (для выхода функции JoinDateTime) или умножать (для входа функции SplitDateTime) значение на 1000:

53882 53883

Евгений Кислов
12.03.2021, 09:41
Вопрос: требуется заменить специфический контроллер, который раньше работал в режиме Slave и управлялся утилитой на ПК, которая отправляла команды по нестандартному символьному протоколу.
Как настроить контроллер с CODESYS V3.5 для работы в таком режиме?

Ответ: см. пример (https://ftp.owen.ru/CoDeSys3/21_Examples/01_3.5.11.5/07_User_protocols/Example_UnmSerialSlave_3517v1.projectarchive) и видео (https://youtu.be/F_unaGOBC08).

Евгений Кислов
23.03.2021, 11:03
Вопрос: в алгоритме программы используется значение системного времени контроллера.
Периодически (с бессистемной периодичностью, но не менее одного раза за 10 минут работы) происходит кратковременный (продолжительностью не более нескольких сотен миллисекунд) "выброс" системного времени.
Во время "выброса" значение системного времени отображается (и обрабатывается в коде программы) без учета часового пояса (в узле OwenRTC в канале UTC Offset в этот момент отображается 0 - несмотря на то, что фактически в настройках контроллера часовой пояс задан отличным от нуля).
Как можно устранить эти "выбросы"?

54157

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

Ответ: в качестве варианта решения этой проблемы мы разработали ФБ RTC_FILTER, который позволяет отфильтровывать "выбросы" cистемного времени.
Ниже приведена ссылка на пример использования этого ФБ.
Общий принцип работы блока: пока вход xEnableFilter имеет значение TRUE, то блок находится в работе и на выходе dtFilteredDateAndTime отображается значение входа dtDateAndTime с отфильтрованными "выбросами".
Т.е. даже во время "выброса" на выходе ФБ будет корректное значение системного времени с учетом часового пояса.

Скачать пример: https://ftp.owen.ru/CoDeSys3/99_ForumFiles/Example_RtcFilter_3514v1.projectarchive

На скриншоте - синим выделено значение канала Hour узла OwenRTC с "выбросами" системного времени, зеленым - выход блока RTC_FILTER с отфильтрованнным значением системного времени.

54158

Евгений Кислов
25.03.2021, 07:22
Вопрос: диалоги KeypadOwen и KeypadOwenBig из библиотеки OwenVisuDialogs (https://owen.ru/forum/showthread.php?t=34327) по умолчанию открываются с англоязычной раскладкой и нижним регистром.
Как сделать так, чтобы диалог открывался с русскоязычной раскладкой и верхним регистром?

Ответ: откройте Менеджер библитек и задайте значения переменных в списке параметров KeypadDefaultLanguage:

54389


LANG.ENG_LC - англоязычная раскладка, нижний регистр
LANG.ENG_UC - англоязычная раскладка, верхний регистр
LANG.RUS_LC - русскоязычная раскладка, нижний регистр
LANG.RUS_UC - русскоязычная раскладка, верхний регистр

Евгений Кислов
21.04.2021, 07:53
Вопрос: как сделать скриншот web-страницы и отобразить его в визуализации?

Ответ: контроллер не имеет встроенных средств для снятия скриншотов web-страниц.
Но если он подключен к сети с доступом в Интернет - то можно воспользоваться одним из интернет-сервисов для снятия скриншотов.
См. пример (https://ftp.owen.ru/CoDeSys3/21_Examples/01_3.5.11.5/02_Visu/03_Additional/Example_TakeWebPageScreenshot_3514v1.projectarchiv e), основанный на использовании сервиса ScreenshotMachine (https://www.screenshotmachine.com/).
Для использования API сервиса требуется пройти регистрацию: https://www.screenshotmachine.com/register.php?button=api

54731

Примечание: сервис не может использоваться для снятия скриншотов web-визуализации самого контроллера.

Евгений Кислов
20.05.2021, 12:57
Вопрос: как получить в ПЛК информацию о текущей погоде?

Ответ: см. пример (https://ftp.owen.ru/CoDeSys3/21_Examples/01_3.5.11.5/08_Sockets/Example_OpenWeatherApi_3514v1.projectarchive). В примере демонстрируется получение информации о погоде с помощью сервиса https://openweathermap.org/
(соответственно, контроллер должен быть подключен к интернету).

55186

Евгений Кислов
02.06.2021, 13:39
Вопрос: необходимо в коде программы определить, по нажатию на какую кнопку (OK или CANCEL) был закрыт диалог Numpad или Keypad.
Это требуется, например, чтобы при вводе нового значения (с помощью нажатия на кнопку OK) однократно произвести его валидацию.
Каким образом это можно сделать?

Ответ: для диалогов библиотеки OwenVisuDialogs (https://owen.ru/forum/showthread.php?t=34327&p=348262&viewfull=1#post348262) (NumpadOwen, NumpadOwenBig, KeypadOwen, KeypadOwenBig) начиная с версии 3.5.14.3 добавлена возможность получения информации о результате закрытия диалогов.
Для этого используется переменная g_stClosedDialogInfo из списка глобальных переменных DialogsSettings.
Переменная является структурой типа OwenDialogClosingInfo и включает следующие поля, содержащие информацию о последнем закрытом диалоге:

55395


xIsDialogClosed (BOOL) - флаг закрытия диалога. Принимает значение TRUE при закрытии любого из упомянутых выше диалогов.
Сбрасывается в FALSE автоматически при открытии любого из упомянутых диалогов или вручную из программы пользователя.
wsDialogTitle (WSTRING) - заголовок закрытого диалога
eDialogType (перечисление OwenDialog_TYPE) - тип закрытого диалога (NUMPAD или KEYPAD)
eDialogClosingResult (перечисление OwenDialogClosed_RESULT) - результат закрытия диалога (т.е. кнопка диалога, по нажатию на которую он был закрыт - OK или CANCEL)


Библиотека и пример использования доступны по ссылке:
https://owen.ru/forum/showthread.php?t=34327&p=348262&viewfull=1#post348262

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

Евгений Кислов
10.06.2021, 08:09
Вопрос: в проекте используется управление пользователями визуализации (Менеджер визуализации - Управление пользователями).
Необходимо считать информацию о созданных пользователях в переменные программы (например, чтобы потом управлять ими из кода (http://www.owen.ru/forum/showthread.php?t=28167&p=295107&viewfull=1#post295107)).
Как это можно сделать?

Ответ: см. пример (https://ftp.owen.ru/CoDeSys3/21_Examples/01_3.5.11.5/02_Visu/03_Additional/Example_VumGetUsers_3514v1.projectarchive).

55502

Если вы используете CODESYS V3.5 SP17 Patch 3 с плагином визуализации 4.3.0.0 (https://ftp.owen.ru/CoDeSys3/01_CODESYS/plugins/CODESYS%20Visualization%204.3.0.0.package) или выше - то см. этот пример (https://ftp.owen.ru/CoDeSys3/21_Examples/01_3.5.11.5/02_Visu/05_VisuIecCode/Example_VisuUserManagement_cds3517_visu4300_v1.pro jectarchive) и информацию из п. 2.7 данного документа (https://ftp.owen.ru/CoDeSys3/98_Books/CodesysVisuIecCode.pdf).

Евгений Кислов
11.06.2021, 08:18
Вопрос: есть ли какие-нибудь ограничения по длине строковых переменных, отображаемых в визуализации?
В нашем проекте переменная типа WSTRING обрезается на 1249 символах. Можно ли как-то обойти это ограничение?

Ответ: для отображения строк в визуализации используется буфер для форматирования текста.
По умолчанию размер буфера составляет 2500 байт - этого хватает для вывода переменных типа STRING длиной до 2499 символов и переменных типа WSTRING длиной до 1249 символов.

Для увеличения размера буфера нужно создать программу со следующим кодом:



PROGRAM VisuSetStringBuffer
VAR
END_VAR

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

VisuElems.VisuFctConfigureTextBufferSize(10000);


55518

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

55519

Евгений Кислов
11.06.2021, 09:13
При обработке данных, реализации протоколов и в других задачах часто требуются манипуляции с памятью.
Базовые функции для работы с памятью доступны в библиотеке CAA Memory.

55522

В частности, в ней расположены две крайне часто используемые функции - MemMove (копирование данных, аналог memmove из С) и MemFill (заполнение области памяти, аналог memset из С).

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



TYPE SOME_DATA :
STRUCT
iVar: INT;
rVar: REAL;
byVar: BYTE;
lwVar: LWORD;
END_STRUCT
END_TYPE



PROGRAM PLC_PRG
VAR
stSomeData: SOME_DATA := (iVar := 11, rVar := 22.33, byVar := 42, lwVar := 16#DEADCAFEDEADCAFE);
abyBuffer: ARRAY [0..255] OF BYTE;

xCopy: BOOL;
xClear: BOOL;
END_VAR


Функция MemMove копирует uiNumberOfBytes байт из области памяти, размещенной по указателю pSource, в область памяти, размещенную по указателю pDestination.
Области памяти могут перекрываться.



IF xCopy THEN

MEM.MemMove(pSource := ADR(stSomeData), pDestination := ADR(abyBuffer), uiNumberOfBytes := SIZEOF(stSomeData) );
xCopy := FALSE;

END_IF


55520

Обратите внимание на "разрывы" в массиве. Они связаны с тем, что переменные в структурах располагаются с учетом выравнивания памяти (https://ru.wikipedia.org/wiki/%D0%92%D1%8B%D1%80%D0%B0%D0%B2%D0%BD%D0%B8%D0%B2%D 0%B0%D0%BD%D0%B8%D0%B5_%D0%B4%D0%B0%D0%BD%D0%BD%D1 %8B%D1%85).
Для контроля выравнивания можно использовать атрибут pack_mode:
https://help.codesys.com/webapp/_cds_pragma_attribute_pack_mode;product=codesys;ve rsion=3.5.17.0



Функция MemFill "заполняет" область памяти размером uiLength байт по указателю pMemoryBlock значением byFillValue.



IF xClear THEN

MEM.MemFill(pMemoryBlock := ADR(stSomeData), uiLength := SIZEOF(stSomeData), byFillValue := 0);
xClear := FALSE;

END_IF


55521

Евгений Кислов
24.06.2021, 09:56
Формально привязка переменных к каналам компонентов в дереве проекта может быть произведена двумя способами:

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

55721

2. Вводом имени еще несуществующей переменной - тогда в проекте будет автоматически объявлена неявная глобальная переменная с этим именем.

В зависимости от выбранного способа в столбце Соотнесение будет отображаться соответствующая иконка: для способа 1 - "стрелка", для способа 2 - "лампочка".

В подавляющем большинстве случаев рекомендуется использовать только способ 1.

Из-за автообъявления переменных в каналах компонентов при загрузке проекта могут периодически (без систематики) возникать ошибки - из-за того, что карта адресов таких переменных может быть сформирована некорректно.
Особенно часто это наблюдается при автообъявлении переменных типа BIT и ARRAY.

Примеры ошибок:

55719 55720

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

55722

Евгений Кислов
23.07.2021, 08:45
Вопрос: как настроить проброс портов для ПЛК2хх, чтобы использовать контроллер в качестве шлюза между сетями?

Ответ: см. статью. (https://ftp.owen.ru/CoDeSys3/99_ForumFiles/Plc210_PortForwarding.pdf)

Евгений Кислов
29.07.2021, 08:34
ФБ библиотеки CmpSysExec используются для вызова утилит Linux (например, curl).
Длина команды, подаваемой на вход блока, ограничена 255 символами.

Примечание: в версии библиотеки 3.5.17.31 добавлен блок SysExecute5, который позволяет работать с командами длиной до 2047 символов.

В некоторых случаях этого может оказаться недостаточно - например, когда в теле команды передается текст длинного сообщения или значения множества параметров REST API запроса.

В такой ситуации можно записать текст во временный файл (см. пример (https://ftp.owen.ru/CoDeSys3/21_Examples/01_3.5.11.5/05_Archives/Example_WriteToTempFile_3514v1.projectarchive)) и использовать этот файл как аргумент при вызове curl.



// текст сообщения передается как аргумент команды
curl -s -X POST https://api.telegram.org/bot1395641168:AAFMoUpthm5W_wnQEPR6-dNsP4Hah0S2-8c/sendMessage -d "chat_id=721952499" -d "text=123"

// текст сообщения сохраняется в файл, который передается как аргумент команды
curl -s -X POST https://api.telegram.org/bot1395641168:AAFMoUpthm5W_wnQEPR6-dNsP4Hah0S2-8c/sendMessage -d "chat_id=721952499" -d "text=$(cat /home/root/CODESYS_WRK/message.txt)"

Евгений Кислов
06.08.2021, 11:09
При работе с файлами с помощью библиотек CAA File и SysFile часто требуется указывать путь к конкретной директории - например, директории сервера web-визуализации, USB-накопителю и т.д.
Эти пути могут отличаться для разных моделей ПЛК и разных прошивок - поэтому запомнить все их вариации довольно сложно.
Вместо этого проще использовать плейсхолдеры (заместители).
В этом случае CODESYS сам заменит плейсхолдер на путь к нужной директории.
Следует учитывать, что плейсхолдеры обрабатываются только упомянутыми библиотеками (например, их нельзя использовать при работе с библиотекой CmpSysExec).

Плейсхолдеры CODESYS:


$$PlcLogic$$ - директория проекта CODESYS;
$$visu$$ - директория файлов визуализации (одновременно с этим - директория сервера web-визуализации);
$$trend$$ - директория файлов трендов;
$$alarms$$ - директория файлов тревог.


Специфичные плейсхолдеры для контроллеров ОВЕН:


$$USB$$ - корневая директория USB-накопителя;
$$SD$$ - корневая директория SD-накопителя;
$$FTP$$ - директория FTP-сервера.


Пример использования плейсхолдеров:



hFile := SysFile.SysFileOpen('$$visu$$/test.txt', SysFile.ACCESS_MODE.AM_APPEND_PLUS, ADR(dwRes) );
SysFile.SysFileWrite(hFile, ADR(sData), TO_UINT(LEN(sData)), ADR(dwRes) );
SysFile.SysFileClose(hFile);

Евгений Кислов
16.08.2021, 07:41
Вопрос: как переключить экран, отображаемый в элементе Фрейм, из кода программы?

Ответ: см. пример (https://ftp.owen.ru/CoDeSys3/21_Examples/01_3.5.11.5/02_Visu/03_Additional/Example_FrameManager_3514v1.projectarchive).

Если вы используете CODESYS V3.5 SP17 Patch 3 с плагином визуализации 4.3.0.0 (https://ftp.owen.ru/CoDeSys3/01_CODESYS/plugins/CODESYS%20Visualization%204.3.0.0.package) или выше - то см. этот пример (https://ftp.owen.ru/CoDeSys3/21_Examples/01_3.5.11.5/02_Visu/05_VisuIecCode/Example_VisuFrameManager_cds3517_visu4300_v1.proje ctarchive) и информацию из п. 5 данного документа (https://ftp.owen.ru/CoDeSys3/98_Books/CodesysVisuIecCode.pdf).

Евгений Кислов
16.08.2021, 07:53
Компания Пролог (http://www.prolog-plc.ru/) подготовила ряд видео о специфическом функционале компонента Конфигурация тревог, основанном на библиотеке AlarmManager.

1. Базовый функционал и действия уведомления (вызов ФБ с интерфейсом IAlarmNotifiable) (https://youtu.be/dXH3jG0i1Kg)
2. Тревоги со способом наблюдения Событие (https://youtu.be/--kQM8gmR_0)
3. Передача тревог между ПЛК (RemoteAlarms) (https://youtu.be/MqK_Q8adoXY)
4. Работа с тревогами из кода (https://youtu.be/R4mHOPzAkUA)

Евгений Кислов
30.08.2021, 13:21
Вопрос: в проекте настроен опрос других устройств по протоколу Modbus через стандартные компоненты. Считываются целочисленные значение, и согласно документации их нужно домножить на 0.01, чтобы получить "настоящее" значение в формате REAL. Можно ли это выполнить это масшабирование на уровне настройки компонентов Modbus?

Ответ:

1. Необходимо создать ФБ для конвертации данных. В рамках примера он будет называться CONVERT.
Перед объявлением ФБ необходимо указать атрибут io_function_block, а перед объявлением его переменной, которая будет привязываться к компоненту Modbus - io_function_block_mapping.



{attribute 'io_function_block'}
FUNCTION_BLOCK CONVERT
VAR_INPUT
{attribute 'io_function_block_mapping'}
wInput: WORD;
END_VAR
VAR_OUTPUT
rOutput: REAL;
END_VAR
VAR
END_VAR

rOutput := wInput * 0.01;


2. В компоненте Modbus на вкладке Соотнесение входов/выходов выберите нужный канал (нужно выделить конкретный регистр - тип WORD)
и нажмите кнопку Добавить ФБ для IO-канала.

56796

В выпадающем окне нужно выбрать ФБ CONVERT.

56797

В результате в столбце Соотнесение отобразится соответствующая пиктограмма, а в столбце Переменная будет автоматически сформирован путь к неявно объявленному экземпляру ФБ.

56798

3. С помощью этого пути можно обратиться к выходной переменной ФБ в коде программы (убрав из пути узел Application):



PROGRAM PLC_PRG
VAR
rValue1: REAL;
rValue2: REAL;
END_VAR

rValue1 := Modbus_Slave_COM_Port_CONVERT.rOutput;
rValue2 := Modbus_Slave_COM_Port_CONVERT_1.rOutput;


56799

Евгений Кислов
24.09.2021, 09:45
Вопрос: требуется записываться и считывать данные из СУБД с использованием SQL. Как это можно сделать?

Ответ:

Работа с MySQL поддерживается начиная с прошивки 1.3.0620.xxxx.
Работа с MsSQL поддерживается начиная с прошивки 1.3.0812.xxxx.
Работа с SQLite (встраиваемая СУБД, хостится на самом ПЛК) поддерживается во всех прошивках.

См. пример (https://ftp.owen.ru/CoDeSys3/21_Examples/01_3.5.11.5/11_Other/Example_SqlFeatures_3516v1.projectarchive) и видео: MySQL (https://youtu.be/L9e30ztABHQ) / MsSQL (https://youtu.be/W5I0wDYb4g0) / SQLite (https://youtu.be/4J6WXEwmeco)

Евгений Кислов
24.09.2021, 09:52
Вопрос: как подключить контроллер к VPN?

Ответ: контроллеры Овен поддерживают протоколы OpenVPN и WireGuard.

Настройка подключения производится через web-конфигуратор.

Документация (https://ftp.owen.ru/CoDeSys3/11_Documentation/10_OpenWRT/TN-UG-OWRT-LUCI-R2.pdf) (см. приложение Г) / Видеопример по OpenVPN (https://youtu.be/HFc6Md65ptc)

Евгений Кислов
24.09.2021, 09:54
Вопрос: как работать с GSM/GPRS-модемами (отправлять/получать cмc, устанавливать GPRS-подключение)?

Ответ: см. информацию по ссылке (https://owen.ru/forum/showthread.php?t=35372).

Евгений Кислов
01.10.2021, 08:56
Вопрос: как настроить обмен данными между несколькими ПЛК, программируемыми в CODESYS V3.5?
Очевидно, что это можно сделать с помощью протокола Modbus TCP, но этот вариант является довольно трудоемким (настройка мастера и слэйвов, размещение данных в регистрах и т.д.)
Нет ли более простых способов?

Ответ: такие способы есть.

1. Если один ПЛК должен передавать одни и те же данные на несколько других ПЛК, то можно использовать сетевые переменные (Network Variables).
См. документацию (https://ftp.owen.ru/CoDeSys3/11_Documentation/03_3.5.11.5/CDSv3.5_OPC_v2.3.pdf) (п. 3) и видеопример (https://youtu.be/46_XHKU9UoI).

2. Если один ПЛК должен считывать/записывать разные данные с одного или нескольких ПЛК, то можно использовать Менеджер источников данных (Data Source Manager).
См. видеопример (https://youtu.be/oJjL8IBM86E), доп. информацию для ПЛК2хх (https://owen.ru/forum/showthread.php?t=20069&p=368000&viewfull=1#post368000) и информацию в онлайн-справке CODESYS:
https://help.codesys.com/webapp/_cds_f_datasourcesmanager;product=codesys;version= 3.5.17.0
https://help.codesys.com/webapp/_cds_obj_data_sources_manager;product=codesys;vers ion=3.5.17.0
https://help.codesys.com/webapp/_cds_f_obj_data_source;product=codesys;version=3.5 .17.0

Вопрос: Как в коде контролировать наличие связи через Data Source Manager?

Ответ: это можно сделать с помощью глобальных переменных диагностики:


g_Datasources.<имя_источника_данных>Error (тип - Datasources.DataSourceError)
g_Datasources.<имя_источника_данных>State (тип - Datasources.DataSourceMonitoringState)


Имя источника данных можно увидеть в дереве проекта (по умолчанию для первого источника данных это имя - Datasource).

57244

Перечисления для этих переменных объявлены в библиотеке Datasources, которая автоматически добавляется в проект вместе с менеджером источников данных:

57245


Вопрос: Как в коде контролировать наличие связи при использовании сетевых переменных?

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

Для диагностики на стороне отправителя:

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

57246

В случае обрыва связи в структуре NetVarTxDiag_UDP поле sLastError примет значение NetVarUDPError_NOACKNOWLEDGEMENT, а поле nErrorCount будет постоянно увеличиваться.

57247

Для диагностики на стороне получателя:

В случае обрыва связи в структуре NetVarRxDiag_UDP значение полей nReceiveCount и tLastReceive "застынут" и перестанут изменяться.

57248

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

Предположим, что объявлена такая структура:



TYPE TEST_DATA :
STRUCT
iVar: INT;
rVar: REAL;
END_STRUCT
END_TYPE


Понятно, что в коде программы можно инициализировать ее таким образом:



PROGRAM PLC_PRG
VAR
stData: TEST_DATA;
xInit: BOOL;
END_VAR


IF xInit THEN

stData.iVar := 11;
stData.rVar := 22.33;
...

xInit := FALSE;

END_IF


Но нет ли более простого способа?

Ответ: можно инициализировать структуру с помощью специального оператора STRUCT (не описанного в данный момент в справке CODESYS).



PROGRAM PLC_PRG
VAR
stData: TEST_DATA;
xInit: BOOL;
END_VAR


IF xInit THEN

stData := STRUCT(iVar := 11, rVar := 22.33);

xInit := FALSE;

END_IF


Этот способ также позволяет инициализировать структуры, объявленные в области VAR_INPUT CONSTANT в редакторе языка CFC:

57586

Евгений Кислов
25.10.2021, 08:18
Вопрос: как исполнить на зуммере ПЛК "имперский марш (https://ru.wikipedia.org/wiki/%D0%98%D0%BC%D0%BF%D0%B5%D1%80%D1%81%D0%BA%D0%B8%D 0%B9_%D0%BC%D0%B0%D1%80%D1%88)"?

Комментарий: данный функционал поддерживается в прошивках с CODESYS V3.5 SP16 Patch 3 и выше - в них в узле Buzzer добавлена возможность управления частотой зуммера.

Ответ: см. пример (https://ftp.owen.ru/CoDeSys3/21_Examples/01_3.5.11.5/11_Other/Example_ImperialMarchOnBuzzer_3516v5.projectarchiv e) и видео (https://vk.com/po_owen?w=wall-68314714_10444).

Евгений Кислов
29.11.2021, 08:12
Вопрос: в наших проектах мы регулярно используем перечисления для повышения читабельности кода.
Некоторые перечисления используются только в конкретном функциональном блоке, и при переносе этого блока в другие проекты приходится не забывать о копировании таких перечислений, что составляет определенное неудобство.
Очевидным вариантом является выделение этого функционального блока и его перечислений в библиотеку, но это тоже является неудобным, так как в разных проектах часто приходится редактировать исходники этого ФБ, адаптируя его под конкретное применение.
Если ли какие-либо варианты для упрощения нашей ситуации?
Можно ли как-то "встроить" перечисление в ФБ?

Ответ: в CODESYS V3.5 (начиная с версии SP7) поддерживаются так называемые "локальные" перечисления. Эти перечисления создаются не при добавлении объекта типа DUT, а прямо в области объявления переменных.

Пример:



VAR
eState: (OPEN := 0, READ := 10, WRITE := 20, CLOSE := 30) INT;
END_VAR


Объявление локальных перечислений поддерживается в POU (функциях, ФБ и программах) и списках локальных переменных.
Объявление локальных перечислений не поддерживается в методах.

Источник информации:

1. https://alltwincat.com/2021/11/16/local-enumerations/
2. Баг-трекер CODESYS:

58125

Примечание: локальные перечисления также поддерживаются в CoDeSys V2.3

Евгений Кислов
19.01.2022, 12:20
Вопрос: в проекте настроена Конфигурация тревог. Требуется при активации (или деактивации, подтверждении и т.д.) тревог выполнять какие-то действия - например, отправлять cмс, e-mail, сообщение через telegram-бота и т.п. Как это сделать?

Ответ: см. пример (https://ftp.owen.ru/CoDeSys3/21_Examples/01_3.5.11.5/11_Other/Example_AlarmHandlerWithEmailNotification_3516v1.p rojectarchive).
В примере демонстрируется, как при изменении состояния тревоги отправить e-mail. По аналогии можно реализовать выполнение других операций.

58783

Евгений Кислов
25.01.2022, 06:39
Вопрос: как записать данные из ПЛК в таблицу Google Spreadsheet?

Ответ: см. пример (https://ftp.owen.ru/CoDeSys3/21_Examples/01_3.5.11.5/08_Sockets/Example_GoogleSpreadsheetsApi_3516v1.zip).

58906

Евгений Кислов
28.01.2022, 10:02
Вопрос: при создании проекта для СПК в среде CODESYS V3.5 SP16 Patch 3 и выше возникают такие ошибки:

58974

Как их исправить?

Ответ: нажмите ПКМ на узел Screen, выберите команду Обновить устройство и обновите компонент до последней доступной версии.

58975

Ошибки связаны с изменениями во внутренних библиотеках CODESYS, которые произошли в свежих версиях.
Рекомендуем создавать проект для СПК на основе шаблона - в этом случае ошибок не будет:

58976

Евгений Кислов
28.01.2022, 10:14
Вопрос: ПЛК настроен как Modbus TCP Slave Device через дерево проекта.
При его опросе возвращается ошибка 10 (0x0A): GATEWAY PATH UNAVAILABLE.

58977

Ошибка проявилась в версии CODESYS V3.5 SP16 Patch 3, в прошлых версиях CODESYS с тем же проектом все работало нормально.
В чем может быть проблема?

Ответ: начиная с версии CODESYS V3.5 SP16 контроллер, настроенный как Modbus TCP Slave Device, отвечает только на запросы с Unit ID = 0 и Unit ID = 255.

58978

Остальные адреса обрабатываются только в режиме SerialGateway (https://youtu.be/sybmGTwkjKY).

В версии V3.5 SP17 будет восстановлено старое поведение - ПЛК будет отвечать на запросы с любым Unit ID.

Евгений Кислов
08.02.2022, 11:29
Вопрос: как задать начальные значения для переменных типа массив (ARRAY) и структура (STRUCT)?

Ответ: см. видеопример (https://youtu.be/KjVlFH2lF4k) или текстовое описание ниже.

Начальные значения элементов массива задаются в квадратных скобках:

aiData: ARRAY [1..6] OF INT := [1, 2, 3, 4, 5, 6];

Если некоторым последовательно размещенным элементам надо задать одно и то же значение - то можно сделать так:

// aiData[3] и aiData[4] получат значение 0
aiData: ARRAY [1..6] OF INT := [1, 2, 2(0), 5, 6];

Для многомерных массивов синтаксис аналогичен:

aiData: ARRAY [1..2, 1..3] OF INT := [1, 2, 3, 11, 22, 33];

59180

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


TYPE TEST_DATA :
STRUCT
iVar: INT := 11;
rVar: REAL := 22.33;
END_STRUCT
END_TYPE


Если требуется при объявлении конкретного экземпляра структуры задать индивидуальные значения элементов - то это можно сделать в круглых скобках c указанием их имен:

stData: TEST_DATA := (iVar := 123, rVar := 11.22);

Пример инициализации массива структур:

astData: ARRAY [1..3] OF TEST_DATA := [ (iVar := 111, rVar := 11.22), (iVar := 222, rVar := 22.33), (iVar := 333, rVar := 33.44) ];

Кроме того, задать начальные значения можно в редакторе автообъявления:

59181

Евгений Кислов
10.02.2022, 13:13
Вопрос: используем ПЛК210. Требуется сбрасывать счетчики дискретных входов и энкодеров из кода программы.
В узле Leftside на вкладке Конфигурация есть параметр Сброс счетчиков входов и энкодеров, но он применяется только при загрузке программы.
Как можно сбросить счетчики прямо в процессе работы ПЛК при выполнии нужного условия?

Ответ: явного механизма сброса счетчиков и энкодеров нет.
Вместо этого следует копировать их значения в промежуточные переменные, которыми уже можно будет манипулировать в коде программы.
См. пример (https://ftp.owen.ru/CoDeSys3/99_ForumFiles/Example_Plc210ResetCounters_3514v1.projectarchive) .

Евгений Кислов
17.05.2022, 13:52
Вопрос: если нажать ПКМ на POU и выбрать команду Добавление объекта, то появляется возможность добавить в POU Действие, Метод, Переход и Свойство.
Что это и зачем это нужно? Это имеет отношение к объектно-ориентированному подходу (ООП)?

Ответ:

1.1 Действие позволяет выделить фрагмент POU в обособленный объект с собственным названием.
В других языках программирования аналогичные объекты называются процедурами (при этом действие является процедурой без параметров).
Преимущества использования процедур описаны в этой статье:
https://ru.wikipedia.org/wiki/%D0%9F%D0%BE%D0%B4%D0%BF%D1%80%D0%BE%D0%B3%D1%80%D 0%B0%D0%BC%D0%BC%D0%B0#%D0%9F%D1%80%D0%B5%D0%B8%D0 %BC%D1%83%D1%89%D0%B5%D1%81%D1%82%D0%B2%D0%B0

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

60714

Теперь во всех фрагментах POU вы можете заменить повторяющие строки кода вызовом действия:



// ...
SwitchToIdle();
// ...


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

Кроме того, действия являются неотъемлемой частью языка SFC - они используются для описания выполняемых на конкретном шаге команд:

60715

Действие не является элементом ООП.

За исключением языка SFC - всегда предпочтительнее использовать метод, а не действие (его функциональность перекрывает функциональность действия).

Статьи из справки CODESYS:
https://help.codesys.com/webapp/_cds_obj_action;product=codesys;version=3.5.17.0
https://help.codesys.com/webapp/_cds_sfc_element_action;product=codesys;version=3. 5.17.0

1.2. Переход является аналогом действия, используемым в языке SFC для описания условий переходов между шагами (см. скриншот выше).
Это удобно для описания сложных условий, состоящих из нескольких строк кода - они бы загромождали блок-схему.
На блок-схеме переход отмечается заливкой правого верхнего угла соответствующего ему прямоугольника.

Справедливый вопрос - почему переход можно добавить к POU, который реализован не на языке SFC?
Ответ есть в баг-трекере CODESYS - это необходимо в тех случаях, когда ФБ на языке SFC, наследуемый от ФБ на другом языке, должен иметь доступ к условиям перехода своего базового ФБ.

60716

Переход не является элементом ООП.

Статья из справки CODESYS: https://help.codesys.com/webapp/_cds_sfc_element_step_transition;product=codesys;v ersion=3.5.17.0

1.3. Метод представляет собой функцию, встраиваемую в ФБ и имеющую доступ к его переменным.
В отличие от действия - метод может иметь собственные входные, выходные и локальные переменные (а также константы).

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



// как и функция - метод может иметь аргументы и возвращать значения
xIsStateSwitched := SwitchToState(eNewState := STATE.READ);


Метод может входить в состав интерфейса.

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

Статья из справки CODESYS: https://help.codesys.com/webapp/_cds_obj_method;product=codesys;version=3.5.17.0

1.4. Свойство представляет собой переменную, для которой автоматически создаются методы чтения (Get) и записи (Set).
Это позволяет при чтении или записи переменной автоматически выполнить какой-либо фрагмент кода (например, провалидировать значение или отмасштабировать его).

Пример: пусть у нас есть ФБ TEST_FB с локальной переменной iSetpoint. В рамках нашей задачи представим, что ее значение должно принадлежать диапазону -10...10.

60711

Добавим свойство Setpoint и в методе записи обеспечим ограничение значений переменной с помощью оператора LIMIT.

60712

Таким образом, при записи значения в свойство из кода программы произойдет автоматический вызов метода Set и обработанное (ограниченное оператором LIMIT) значение свойства будет записано в переменную iSetpoint.

Доступ к свойству не требует вызова экземпляра ФБ:

60713

Cвойство является элементом ООП.

Статьи из справки CODESYS: https://help.codesys.com/webapp/_cds_obj_property;product=codesys;version=3.5.17.0

Евгений Кислов
18.05.2022, 09:37
Вопрос: где прочитать об использовании объектно-ориентированного подхода (ООП) в CODESYS V3.5?

Ответ: объектно-ориентированный подход (https://ru.wikipedia.org/wiki/%D0%9E%D0%B1%D1%8A%D0%B5%D0%BA%D1%82%D0%BD%D0%BE-%D0%BE%D1%80%D0%B8%D0%B5%D0%BD%D1%82%D0%B8%D1%80%D 0%BE%D0%B2%D0%B0%D0%BD%D0%BD%D0%BE%D0%B5_%D0%BF%D1 %80%D0%BE%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%B8%D1%8 0%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5) (ООП) - это устоявшаяся и хорошая известная методология программирования, которая не является какой-то уникальной чертой CODESYS V3.5.

Если вы ранее не использовали ООП - то изучать его на примере CODESYS будет не самой лучшей идеей из-за крайне ограниченного количества методических материалов (особенно для начинающих).
Желательно ознакомиться с концепцией ООП на примере какого-то enterprise-языка - например, Java (реализация ООП в CODESYS вдохновлена Java, используются те же самые ключевые слова - interface, extends, implements, super, this).
В интернете доступно множество книг, статей, обучающих курсов и учебных видео по этому вопросу.

Применение ООП неразрывно связано с системным подходом к проектированию ПО.
Чтобы научиться оценивать, продуктивно ли будет использовать ООП в рамках вашей конкретной задачи, и применять объектно-ориентированный дизайн при проектировании ПО - необходимо изучить соответствующую литературу (например - см. Грэди Буч. Объектно-ориентированный анализ и проектирование).

С терминологический точки зрения - говорить о примении ООП в CODESYS можно только при наличии осмысленного использования в вашем приложении наследования и полиморфизма
(абстракция и инкапсуляция и так являются неотъемлемой частью продуманного приложения для ПЛК - даже созданного в типичной для них парадигме структурного программирования (https://ru.wikipedia.org/wiki/%D0%A1%D1%82%D1%80%D1%83%D0%BA%D1%82%D1%83%D1%80%D 0%BD%D0%BE%D0%B5_%D0%BF%D1%80%D0%BE%D0%B3%D1%80%D0 %B0%D0%BC%D0%BC%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%B D%D0%B8%D0%B5)).

Список материалов по использованию ООП при программировании ПЛК на языках стандарта МЭК 61131-3:

1. Wolfgang Horn, Michael Braun. Object-oriented Programming in SIMOTION (https://new.siemens.com/global/en/products/automation/systems/motion-control/simotion-software/oop/oop-manual.html)

Это единственная известная мне книга, системно рассматривающая вопрос использования ООП для программирования ПЛК и рассчитанная в том числе на начинающих пользователей.

2. Обучающие материалы PLCopen. Руководство по применению объектно-ориентированного подхода (https://ftp.owen.ru/CoDeSys3/98_Books/plcopen_oop_guidelines_version_1.0_ru.pdf)

3. Швецов М. Л. CoDeSys V3 и объектно-ориентированные расширения языков МЭК 61131-3. Стратегическая идея или насущная необходимость? (https://www.lib.tpu.ru/fulltext/v/Conferences/2009/k01/11.pdf)

4. Петров И. В. Объектно-ориентированное программирование CDS V3 (http://prolog-plc.ru/art7)

5. Швецов М. Л. Эффективное применение ООП CODESYS на практике (http://prolog-plc.ru/docs/conf_pdf/UC2013_OOP.pdf)

6. Кузьмина Н. С. Объектно-ориентированное программирование в стандарте МЭК 61131-3 (https://www.fastwel.ru/upload/iblock/501/%D0%9E%D0%B1%D1%8A%D0%B5%D0%BA%D1%82%D0%BD%D0%BE-%D0%BE%D1%80%D0%B8%D0%B5%D0%BD%D1%82%D0%B8%D1%80%D 0%BE%D0%B2%D0%B0%D0%BD%D0%BD%D0%BE%D0%B5%20%D0%BF% D1%80%D0%BE%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%B8%D1 %80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5%20%D0%B2%2 0%D1%81%D1%82%D0%B0%D0%BD%D0%B4%D0%B0%D1%80%D1%82% D0%B5%20%D0%9C%D0%AD%D0%9A%2061131-3.pdf)

7. Хесс Д. Объектно-ориентированные расширения МЭК 61131-3 (https://www.cta.ru/cms/f/342848.pdf)

8. CoDeSys. Object-Oriented Controller Programming (https://ftp.owen.ru/CoDeSys3/98_Books/oop/CoDeSys_OOP_2009_e.pdf)

9. OOP in CODESYS (часть 1 (https://ftp.owen.ru/CoDeSys3/98_Books/oop/OOP_in_CODESYS_1_en.pdf), часть 2 (https://ftp.owen.ru/CoDeSys3/98_Books/oop/OOP_in_CODESYS_2_en.pdf), часть 3 (https://ftp.owen.ru/CoDeSys3/98_Books/oop/OOP_in_CODESYS_3_en.pdf))

10. Статьи из блога Стефана Хеннекена (https://stefanhenneken.wordpress.com/category/iec-61131-3-english/)

11. Информация из онлайн-справки CODESYS (https://help.codesys.com/webapp/_cds_f_object_oriented_programming;product=codesys ;version=3.5.17.0)

12. Информация из онлайн-справки Beckhoff (https://infosys.beckhoff.com/english.php?content=../content/1033/tc3_plc_intro/36028799546267787.html&id)

13. Вебинар по ООП от Beckhoff (https://www.beckhoff.com/en-en/support/webinars/webinar-detail_37039.html)

14. Примеры использования ООП в CODESYS:


от разработчиков CODESYS (базовые (https://forge.codesys.com/prj/codesys-example/object-oriented/home/Home/) и расширенные (https://forge.codesys.com/prj/codesys-example/oop-extended/home/Home/))
от Aliazzzz (https://github.com/Aliazzzz/OOP-Concept-Examples-in-CODESYS-V3)

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

Ответ: см. пример (https://ftp.owen.ru/CoDeSys3/21_Examples/01_3.5.11.5/02_Visu/03_Additional/Example_AlarmMessageBox_3514v1.projectarchive).

60856

Евгений Кислов
27.05.2022, 08:47
Вопрос: как определить объем используемой/свободной RETAIN-памяти?

Ответ: после выполнения команды Компиляция - Генерировать код на панели сообщений компиляции отображается информация об общей и свободной RETAIN-памяти
(параметр Наибольший непрерывный промежуток памяти). Соответственно, определить размер используемой в проекте RETAIN-памяти можно путем вычитания объема свободной RETAIN-памяти из общей.

60930

Евгений Кислов
30.06.2022, 07:28
Вопрос: наши проекты созданы в старых версиях CODESYS (V3.5 SP16 Patch 3, V3.5 SP14 Patch 3 и т.д.).
Как перенести их в версию V3.5 SP17 Patch 3?

Ответ: см. видео (https://youtu.be/RwREz7A4PHI?t=4469).

Евгений Кислов
01.07.2022, 07:15
Вопрос: я использую CODESYS V3.5 SP17 Patch 3. С помощью CODESYS Installer обновил версии некоторых плагинов.
Как теперь перенести их на другой ПК, на котором нет интернета/нет возможности использовать VPN и т.д.?

Ответ: при загрузке плагина через CODESYS Installer его пакет (.package) сохраняется в директории C:\Users\<ваш пользователь>\AppData\Local\Temp\APInstaller\<дата загрузки плагина>.
Вы можете перенести эти пакеты на другой ПК и установить их через CODESYS Installer.

61481

Евгений Кислов
14.07.2022, 06:43
Вопрос: в проекте используется контроллер ПЛК210-03. Дискретные выходы контроллера не будут использоваться. На контроллере они светятся красным.
С точки зрения заказчика красные светодиоды - это плохо (авария и т.д.). Как их отключить и убрать красное свечение? Питание на выходы подано согласно схеме подключения.

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

61647

Общий принцип диагностики выходов и изменения цвета индикаторов выходов следующий:

61657

Если в проекте выходы не будут использоваться (то есть к ним не будет подключена нагрузка), и при этом красное свечение индикаторов выходов нужно отключить, то:

1. Подайте питание на выходы согласно схеме подключения из РЭ.

61655 61656

2. Отключите диагностику быстрых дискретных выходов (FDO) в среде CODESYS:
в узле LeftSide на вкладке Конфигурация в параметре Режим включения дискретных выходов присвойте всем выходам значение TRUE.
Это переключит их в режим Верхний и нижний ключ, в котором диагностика выходов отключена.

61648

3. Отключите диагностику обычных дискретных выходов (DO) в среде CODESYS:
в узле RightSide на вкладке Конфигурация в параметре Диагностика работы выходов и обрыва нагрузки присвойте всем выходам значение FALSE.

61649

Евгений Кислов
24.08.2022, 13:10
Вопрос: используем CODESYS V3.5 SP17 Patch 3 с плагином визуализации 4.2.0.0.
Для элемента Тренд настроено управление видимостью перьев и диапазоном по оси Y - оператор в визуализации выбирает конкретное перо, после чего оно становится видимым, все остальные перья скрываются и устанавливается подходящий диапазон по оси Y. Но применение этих настроек происходит только спустя 10...30 секунд после выбора пера. С чем может быть связана эта проблема?

Ответ: в плагине визуализации 4.2.0.0 изменился механизм обновления трендов.
Теперь на него влияет переменная VisuElems.VisuElemBase.Visu_Globals.g_VisuTrendWit hTimeSelectorUpdateBehaviour; ее значение по умолчанию - 100.
(из-за особенностей нашего форума в имени переменной отображается лишний пробел)
Перерисовка тренда происходит с периодом = (время элемента выбора интервала дат) / VisuElems.VisuElemBase.Visu_Globals.g_VisuTrendWit hTimeSelectorUpdateBehaviour.

Вот так работает клиентский проект со значением этой переменной по умолчанию = 100:

https://ftp.owen.ru/CoDeSys3/95_Internal/VisuTrendWithTimeSelectorUpdateBehaviour_100.mp4

А вот что будет, если присвоить ей значение 0 (не обязательно делать это циклически - достаточно присвоить переменной 0 в первом цикле контроллера):

https://ftp.owen.ru/CoDeSys3/95_Internal/VisuTrendWithTimeSelectorUpdateBehaviour_0.mp4

При значении 0 обновление тренда происходит максимально быстро - как в прошлых версиях плагина визуализации.
Соответственно, такое поведение приводит к увеличению нагрузки на контроллер.

Евгений Кислов
01.09.2022, 08:28
Вопрос: В ReadMe для прошивки 2.4.xxxx.xxxx написано следующее:



Для ПЛК210:
Перепрошивка с версии 1.2.xxxx.xxxx / 1.3.xxxx.xxxx на версию 2.4.xxxx.xxxx поддерживается только для устройств, выпущенных начиная с июля 2020 года (с 512 Мб flash-памяти).

Для ПЛК200:
Перепрошивка с версии 1.2.xxxx.xxxx / 1.3.xxxx.xxxx на версию 2.4.xxxx.xxxx поддерживается только для устройств, выпущенных начиная с марта 2021 года (с 512 Мб flash-памяти).


Как определить дату производства ПЛК и объем его flash-памяти?

Ответ: дату производства ПЛК можно определить по заводскому номеру.
В его 7-8 разрядах указан год производства прибора, а в 9-10 - месяц.
Пример заводского номера: 103026210832371658
Этот ПЛК произведен в августе 2021 года (08.21).

Но лучше ориентироваться на объем flash-памяти.
Перезагрузите ПЛК, откройте web-конфигуратор, перейдите на вкладку Состояние/Журналы и выполните поиск по слову nand.
В выводе отобразятся сообщения, в которых указан объем flash-памяти контроллера.

62426

Евгений Кислов
20.09.2022, 14:16
Вопрос: есть проект, в котором используется ФБ PID из библиотеки Util.
Выход данного регулятора предназначен для управления нагревателем.
Подскажите, что нужно сделать, если требуется управлять охладителем?

Ответ: умножьте коэффициент пропорциональности (значение на входе KP регулятора) на -1.

62728

Евгений Кислов
22.09.2022, 09:51
Вопрос: как организовать вызов метода на языке CFC?

Ответ: см. скриншот.

CreateRecipe - метод ФБ RecipeManCommands.
При вызове метода в языке CFC ко всем его входам и выходам обязательно должны быть привязаны переменные.

62748

Евгений Кислов
29.12.2022, 13:59
Вопрос: мы разрабатываем ФБ и планируем выводить информацию об ошибках, возникших в процессе его работы, в лог контроллера.
Для этого нужно в коде ФБ считать имя конкретного экземпляра этого ФБ.
Как это сделать?

Ответ: см. видео (https://youtu.be/7FhWU1CsaFk).

Евгений Кислов
03.02.2023, 11:05
Вопрос: при переносе проекта в версию CODESYS V3.5 SP17 Patch 3 возникают следующие ошибки:

65697

Как их исправить?

Ответ: ошибки связаны с библиотекой OwenVisuDialogs (https://owen.ru/forum/showthread.php?t=34327).
Для начала обновите версию библиотеки до 3.5.17.2.
После этого откройте библиотеку в Менеджере библиотек и выделите в ней узел KeypadDefaultLanguage.
В столбце Значение (редактируется) введите KEYPAD_LANG.RUS_LC, чтобы указать, что по умолчанию диалог KeypadOwen будет открываться с русской раскладой в нижнем регистре.
Можно указать и одно из других значений - KEYPAD_LANG.RUS_UC (верхний регистр), KEYPAD_LANG.ENG_LC или KEYPAD_LANG.ENG_UC.
После этого ошибки исчезнут.

65698

Евгений Кислов
13.02.2023, 07:19
Вопрос: я создал пользователя виртуального контроллера, но забыл его логин и пароль, и теперь не могу к нему подключиться. Как удалить пользователя?

Ответ: перейдите в папку C:\ProgramData\CODESYS\CODESYSControlWinV3\<идентификатор виртуального контроллера>\
Если у вас установлены несколько виртуальных контроллеров - то при выборе последней директории (у которой имя - идентификатор) ориентируйтесь на дату изменения (выбирайте директорию с самой недавней датой изменения).
Удалите все файлы формата .csv.
После этого перезапустите виртуальный контроллер, и вы сможете подключиться к нему без необходимости вввода логина и пароля.

65863

Евгений Кислов
16.03.2023, 12:15
Вопрос: в компонентах Modbus (ModbusTCP_Slave_Device, Modbus_TCP_Slave и Modbus_Slave_COM_Port) на вкладке Состояние отображается диагностическая информация. Как считать ее в переменные программы?

66550

Ответ: см. пример (https://ftp.owen.ru/CoDeSys3/21_Examples/01_3.5.11.5/03_Modbus/Example_GetModbusDiagInfoInIecCode_3517v1.projecta rchive).
В примере контроллер опрашивает сам себя по протоколу Modbus TCP и одно slave-устройство по протоколу Modbus RTU.
В переменные программы считывается информация диагностики по всем трем упомянутым выше компонентам.

66551

В следующих версиях плагина CODESYS Modbus планируется реализовать более простой способ получения этой информации в программе пользователя:

66555

Евгений Кислов
02.05.2023, 12:48
Вопрос: используем CODESYS V3.5 SP17 Patch 3. В web-визуализации не получается ввести пароль пользователя в стандартном диалоге VUM_Login - после ввода пароля кнопки OK и Cancel становятся неактивными, а сам диалог частично заливается цветом фона экрана. Вот видео с демонстрацией проблемы (https://ftp.owen.ru/CoDeSys3/99_ForumFiles/UserManagementDialogBug_SP17.mp4). В таргет-визуализации и сервисной визуализации, отображаемой в редакторе CODESYS, проблема не повторяется.

Такая же проблема возникает при вводе пароля в диалогах VUM_ChangePassword и VUM_UserManagement.

Ответ: это баг плагина визуализации 4.1.1.0.
Есть несколько способов его решения:

1. Установить и добавить в менеджер библиотек библиотеку OwenVisuDialogs (https://owen.ru/forum/showthread.php?t=34327&p=348262&viewfull=1#post348262) версии 3.5.17.2 (https://owen.ru/forum/showthread.php?t=34327&p=381737&viewfull=1#post381737) и использовать диалоги этой библиотеки LoginOwen2, UserChangePasswordOwen2 и UserMgmtConfigOwen2.
Их потребуется выбрать в Менеджере визуализации на вкладке Установки диалога:

67670

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

2. Если вы используете ПЛК2хх - то для устранения бага достаточно установить в Менеджере визуализации галочку Поддержка клиентских анимаций и наложение исходных элементов.
У СПК эта галочка недоступна.

67671

3. Обновить плагин визуализации до версии 4.2.0.0 или выше. Актуальная версия плагина на май 2023 - это 4.3.0.0 (скачать (https://ftp.owen.ru/CoDeSys3/01_CODESYS/plugins/CODESYS%20Visualization%204.3.0.0.package)).
Установка пакета плагина выполняется через CODESYS Installer. Рекомендуется перед обновлением плагина создать новое окружение (с помощью кнопки Add Installation), чтобы не перезаписать плагин в текущем окружении (иначе потребуется обновлять его при открытии всех проектов, в которых использовалась предыдущая версия плагина).

Евгений Кислов
22.05.2023, 13:29
Вопрос:

В нашей системе используются два ПК и два ПЛК210.

ПК1 подключен к ПЛК1 через интерфейс Eth3 (подсеть 192.168.2.x).
ПК2 подключен к ПЛК2 через интерфейс Eth3 (подсеть 192.168.22.x).

При этом ПЛК связаны между собой через интерфейс Eth1-2, настроенный в режиме моста (подсеть 192.168.70.x).

67940

Соответственно, ПК1 может подключиться только к ПЛК1, а ПК2 - только к ПЛК2.

Как настроить систему таким образом, чтобы каждый ПК мог подключиться к обоим ПЛК?

Ответ:

1. В качестве шлюзов на ПК потребуется указать IP-адрес соответствующего ПЛК (см. рисунок выше). В ПЛК не следует указывать шлюзы.
2. В web-конфигураторе каждого ПЛК на вкладке Cеть/Статические маршруты нужно настроить статические маршруты:

67939

Скачать информацию в виде памятки:
https://ftp.owen.ru/CoDeSys3/99_ForumFiles/Plc2xx_StaticRoutes.pdf

Вопрос:

Мы используем ПЛК200. К одному из его портов подключен ПК, а к другому - модуль Mx210.
На каждом интерфейсе настроены разные подсети (на одном - 192.168.20.x, на втором - 10.2.25.x).
Как настроить систему таким образом, чтобы ПК мог подключиться к Mx210?

Ответ: в качестве шлюза на ПК потребуется указать IP-адрес сетевого интерфейса ПЛК, к которому подключен ПК. В ПЛК не следует указывать шлюзы.
В такой конфигурации запросы к подсети модуля будут обрабатываться центральным процессором ПЛК. Это приведет к увеличению времени цикла пользовательского приложения CODESYS.

67941

Евгений Кислов
08.06.2023, 09:48
Вопрос: как обеспечить защиту данных при их передаче по протоколу OPC UA?

Ответ: CODESYS обеспечивает два способа защиты данных, передаваемых по OPC UA:
1. Защита подключения с помощью сертификата безопасности.
2. Использование для подключения логина и пароля.

Подробнее см. в видео: https://youtu.be/ifXP_zV3Wv8

Обратите внимание на ряд нюансов:

1. Использование логина/пароля возможно только совместно с сертификатом безопасности.
2. После генерации или импорта сертификата требуется перезагрузить контроллер или перезапустить рантайм CODESYS через web-конфигуратор (вкладка ПЛК/Настройки - кнопка Перезапустить CODESYS).
3. Для отображения в CODESYS на вкладке Символьные права созданных в символьной конфигурации наборов символов - требуется предварительно загрузить проект в контроллер:

68219

4. После переноса сертификата клиента из папки Quarantined Certificates в Trusted Certificates - перезагрузка контроллера (и перезапуск рантайма) не требуется.
Подтверждение сертификата может занять до нескольких десятков секунд.

5. Если требуется при наличии логинов/паролей обеспечить и "анонимное" подключение по OPC UA - то необходимо в CODESYS в узле Device на вкладке Установки соединения выполнить следующую команду:
Устройство - Изменить политику соединения - установить галочку Анонимный логин

68221

6. Если при подключении по OPC UA возникает ошибка 0x800A0000 (BadTimeout) - то увеличьте таймаут соединения в настройках OPC UA-клиента:

68222

Евгений Кислов
23.08.2023, 13:03
Вопрос: для чтения информации о тревогах и диагностики ПЧВ AFD-E требуется использовать (https://owen.ru/uploads/330/rukovodstvo_po_rabote_cherez_rs-485.pdf) (см. п. 1.4 и 1.5) функции Modbus-функции 0x07 (Read Exception Status) и 0x08 (Diagnostics).
В стандартном компоненте Modbus эти функции не поддерживаются. Как можно считать с ПЧВ данную информацию?

Ответ: это можно сделать с помощью библиотеки OwenCommunication. См. пример реализации упомянутых функций Modbus с помощью этой библиотеки:
https://ftp.owen.ru/CoDeSys3/21_Examples/01_3.5.11.5/03_Modbus/Example_AFD_E_ModbusDiag_3517v1.projectarchive

69734

Евгений Кислов
30.08.2023, 09:07
Вопрос: почему в web-визуализации CODESYS, открываемой на смартфоне, не работает зуммирование с помощью жеста pinch (https://developer.apple.com/documentation/uikit/touches_presses_and_gestures/handling_uikit_gestures/handling_pinch_gestures)?

Ответ: для возможности зуммирования с помощью жестов нужно в менеджере визуализации на вкладке Установки снять галочку Multitouch handling, а в узле WebVisualization снять галочку Handle touch as mouse events.

69887 69888

См. также VISU#16. Как вкл./откл. поддержку multi-touch для различных клиентов визуализации? (https://owen.ru/forum/showthread.php?t=28167&p=331174&viewfull=1#post331174)

Евгений Кислов
31.08.2023, 12:49
Вопрос: в CODESYS элемент визуализации Тренд сохраняет историю в виде файла .sqlite.
Я выгрузил этот файл из контроллера и открыл в программе DB Browser for SQLite (https://sqlitebrowser.org/).
В моем проекте CODESYS к тренду привязана единственная переменная типа REAL.
В таблице TblTrendData отображаются сохраненные данные, но их значения мне непонятны.
В каком формате они сохраняются? Почему столбцов значений именно 10?

69935

Ответ:

1. Метка времени сохраняется формате Unix Timestamp (https://ru.wikipedia.org/wiki/Unix-%D0%B2%D1%80%D0%B5%D0%BC%D1%8F) в микросекундах.

https://www.epochconverter.com/

69936

2. В DB Browser for SQLite при открытии файла тренда значения перьев всегда интерпретируются как целочисленные (INTEGER).
Фактически вы сейчас видите "сырые" данные с неверной интерпретацией.
Поменяйте формат отображения на HEX и скопируйте их в любой HEX-to-FLOAT конвертер - и вы увидите корректные значения.

https://www.h-schmidt.net/FloatConverter/IEEE754.html

69938 69939 69940

К сожалению, мы не можем предоставить инструкцию или скрипт для DB Browser for SQLite для автоматической конвертации.

3. В таблице 10 столбцов, потому что в настройках тренда по умолчанию задано именно такое ограничение на максимальное число перьев.

69937


Примечание: в истории тревог (которая тоже сохраняется в виде .sqlite) метка времени хранится уже в другом формате - LDAP timestamp.

https://www.epochconverter.com/ldap

69943 69944

Евгений Кислов
27.12.2023, 12:02
Вопрос: нужно отключить для оператора возможность входа в экранный конфигуратор СПК.
Также хотелось бы скрыть прогресс-бар (и надписи над ним), отображаемый в процессе загрузки контроллера.
Как это можно сделать?

Ответ: подключитесь к контроллеру по SSH (с помощью утилиты типа Putty (https://www.putty.org/) или через web-конфигуратор: вкладка Система - Терминал) и выполните команды:



uci set psplash.config.nomenu='1'
uci set psplash.config.enable_bar='0'
uci set psplash.config.enable_msg='0'
uci commit

Евгений Кислов
05.02.2024, 12:18
Вопрос: при подключении к контроллеру появляется следующее сообщение:

73301

При нажатии на кнопку Да открывается вкладка Безопасность, где несколько сертификатов выделено желтым цветом.

73303

Что это означает и что делать?

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

Вопрос: в журнале контроллера отображаются следующие ошибки:

73304

Что они означают?

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

В следующих версиях CODESYS эти сообщения перенесли из группы "ошибки" в группу "сообщения отладки":

73433

Евгений Кислов
15.02.2024, 10:58
Вопрос: в контроллере был создан пользователь CODESYS, чтобы устранить возможность неавторизованного подключения из среды разработки.
После этого при попытке подключения к web-визуализации появляется окно с запросом на ввод логина и пароля этого пользователя:

73585

Это неудобно - нужно, чтобы авторизация требовалась только при подключении из CODESYS.
Как отключить необходимость авторизации в web-визуализации?

Примечание: описанный ниже способ поддерживается только для ПЛК210-1x и СПК210.

Ответ:

1. Подключитесь к контроллеру с помощью WinSCP (https://winscp.net/eng/download.php) (или другим аналогичным SCP-клиентом).
2. Перейдите в рабочую директорию CODESYS (ПЛК210 - /root/CODESYS, СПК210 - /home/root/CODESYS_WRK).
3. Откройте файл CODESYSControl_User.cfg.
4. В секции [CmpWebServerHandlerV3] присвойте параметру AllowFileTransferServices значение 0.

73586

5. Сохраните файл.
6. Перезапустите CODESYS (в веб-конфигураторе: ПЛК - Настройки - кнопка Перезапустить CODESYS) или перезагрузите контроллер.

Примечение: после этого перестанет работать функции передачи файлов через визуализацию (Visu Transfer File).

Евгений Кислов
15.02.2024, 11:43
Вопрос: периодически требуется обновить прошивку (или приложение CODESYS) контроллера с USB или SD накопителя.
С некоторыми накопителями получается, с некоторыми - нет.
В чём может быть дело?

Ответ: накопители, используемые для обновления прошивки/приложения CODESYS, должны соответствовать следующим требованиям:

1. Файловая система FAT32.
2. Один раздел на накопителе.
3. Стиль таблицы разделов (https://remontka.pro/gpt-or-mbr-disk/) - MBR.
4. Для USB-накопителей потребление тока должно соответствовать возможностям порта контроллера (см. информацию в руководстве по эксплуатации).

Если не получилось, то можно:

1. Отформатировать накопитель.
2. Попробовать другой накопитель.

https://owen.ru/forum/showthread.php?t=36852&p=429318&viewfull=1#post429318

73587

Тот факт, что накопитель определяется в Linux (например, вы видите это в CODESYS в узле Drives или web-конфигураторе) - не означает, что он подойдет для обновления прошивки/приложения с накопителя.
Основная причина, по которой подходят не все накопители - процесс обновления прошивки/приложения начинается в начальном загрузчике, у которого достаточно жесткие требования к таймингам накопителя.
Особенно часто возникают проблемы с USB flash от noname-вендоров.

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

USB: Transcend JetFlash (серии 600, 590), Adata C008, Kingston DT R3.0 G2, Smartbuy (серия Quartz)
SD: Transcend, Kingston, Adata, Samsung (серия Evo Plus)

Евгений Кислов
15.02.2024, 12:45
Вопрос: не получается настроить синхронизацию времени с NTP-сервером.
В чем может быть проблема?

Ответ:

1. Проверьте работу вашего сервера с каким-нибудь NTP-клиентом, запущенным на ПК.
2. Убедитесь, что в вашей сети не блокируются UDP-пакеты.
3. Если в качестве NTP-сервера используется cлужба W32tm (ОС Windows) - то NTP-клиент ПЛК, настраиваемый через web-конфигуратор (вкладка Система - Время), не сможет синхронизировать время,
так как использует версию протокола NTPv4, а W32tm поддерживает только NTPv3 (https://learn.microsoft.com/en-us/windows-server/networking/windows-time-service/how-the-windows-time-service-works#windows-time-service-time-protocols).

Возможные варианты решения для п. 3:

1. Запустить на ПК NTP-сервер, который поддерживает версию протокола NTPv4.
2. Организовать синхронизацию времени по NTP средствами CODESYS (см. пример (https://ftp.owen.ru/CoDeSys3/21_Examples/01_3.5.11.5/08_Sockets/Example_NtpClient_3517v1.projectarchive)).

Евгений Кислов
27.02.2024, 07:47
Вопрос: при попытке установки пакета с помощью CODESYS Installer появляется сообщение "Не удалось подтвердить подпись для следующего пакета. <путь к файла пакета>. Для следующего пакета подпись не соответствует подписи для принятого контекста установки. <путь к файла пакета>.". Как решить эту проблему?

73918

Ответ: используйте для установки пакетов CODESYS Installer версии 2.2.2:
https://ftp.owen.ru/CoDeSys3/01_CODESYS/CODESYS%20Installer%202.2.2.exe


Данная ошибка проявляется при определенных (не при всех) сочетаниях среды версий CODESYS и CODESYS Installer.

73919

Евгений Кислов
15.03.2024, 10:20
Вопрос: при установке CODESYS возникает ошибка "gateway.exe is not marked for installation".
В чем причина?

74374

Ответ: такая ошибка может возникнуть, если на ПК установлена OEM-версия CODESYS (например, SoMachine от Schneider Electric).
Для ее устранения нужно удалить это ПО и запустить установку CODESYS заново.