PDA

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



Евгений Кислов
09.02.2018, 09:36
CODESYS V3.5 – достаточно сложный программный продукт, и довольно часто у пользователей возникают вопросы по работе с ним. Эти вопросы публикуются на форуме, поступают в техподдержку и т.д. Ответы на наиболее часто задаваемые вопросы собраны в документе CODESYS V3.5. FAQ (https://ftp.owen.ru/CoDeSys3/11_Documentation/03_3.5.11.5/CDSv3.5_Faq_v.2.5.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)



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. Как в коде программы узнать сетевые настройки ПЛК210? (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)



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)



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)



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)




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)



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)


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. Как в коде программы узнать сетевые настройки ПЛК210? (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)


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)


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)


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)


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)

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

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

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

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

См. пример (https://ftp.owen.ru/CoDeSys3/21_Examples/01_3.5.11.5/11_Other/Example_MqttClient_3514v1.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_3511v1.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_3514v2.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] и ПЛК210 энергонезависимые переменные сохраняются в микросхеме MRAM (https://ru.wikipedia.org/wiki/%D0%9C%D0%B0%D0%B3%D0%BD%D0%B8%D1%82%D0%BE%D1%80%D 0%B5%D0%B7%D0%B8%D1%81%D1%82%D0%B8%D0%B2%D0%BD%D0% B0%D1%8F_%D0%BE%D0%BF%D0%B5%D1%80%D0%B0%D1%82%D0%B 8%D0%B2%D0%BD%D0%B0%D1%8F_%D0%BF%D0%B0%D0%BC%D1%8F %D1%82%D1%8C). Сохранение энергонезависимых переменных выполняется по изменению любой из переменных, но не чаще раза в секунду - при этом вся область RETAIN-памяти перезаписывается целиком. Число циклов перезаписи MRAM практически бесконечно. MRAM включает в себя две дублирующие друг друга области памяти. При старте контроллер проверяет CRC этих областей - если для одной области рассчитанный CRC не соответствует сохраненному (такое может быть, например, при пропадании питания в момент сохранения), то значения RETAIN переменных восстанавливаются из другой.

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

Ответ:

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

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



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


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


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


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




43456

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

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

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

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

44125

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



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

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



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


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


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

44126

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

44127

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

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

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

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

44158

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



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

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

END_FOR


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


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

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

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

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

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

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

44326

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

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

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

46659

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

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

47153

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


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

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


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

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

47154 47155

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

47156 47157

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

48179

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

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

47160

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

47161

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


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

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

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

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

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

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

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

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

48141

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


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

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

48346

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

48345

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

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

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

48643

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

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

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

Ответ: можно использовать диалог 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хх этого узла нет. Как определить сетевые настройки в программе в этом случае?

Ответ: требуется использовать библиотеку SysSocket (функции SysSockGetFirstAdapterInfo и SysSockGetNextAdapterInfo).
См. пример (https://ftp.owen.ru/CoDeSys3/21_Examples/01_3.5.11.5/11_Other/Example_NetworkAdaptersInfo_3514v1.projectarchive) .

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

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

Евгений Кислов
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_3514v1.projectarchive) с использованием библиотеки OwenCommunication (https://owen.ru/forum/showthread.php?t=31816).
В примере контроллер ожидает команды TEST (именно в верхнем регистре) и отвечает на нее сообщением ОК.
При получении любой другой команды контроллер ничего не отвечает (если переменная xUseExceptionCode имеет значение FALSE) или отправляет в ответ сообщение ILLEGAL_COMMAND (если переменная xUseExceptionCode имеет значение TRUE). На базе примера можно реализовать свой протокол обмена, используя контроллер в режиме Slave.

53938

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

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

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

Евгений Кислов
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) и информацию в онлайн-справке 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