-
Вложений: 1
OTHER#04. Как защитить загруженный в контроллер проект от копирования?
Вопрос: в контроллер загружен проект и создано загрузочное приложение. Как защитить его от копирования? (при условии, что исходники проекты никому не передаются)
Комментарий: приведенная ниже информация актуальна для контроллеров, программируемых в CODESYS V3.5 SP11 Patch 5 или выше.
Обратите внимание, что проект загружается в контроллер в скомпилированном виде - таким образом, "вытащить" из него исходные коды невозможно.
Исходники проекта могут находиться в контроллере исключительно в том случае, если они были загружены владельцем исходников в CODESYS с помощью команды Файл - Загрузка исходного кода.
Ответ: для гарантированной защиты проекта от копирования рекомендуется выполнить все перечисленные ниже пункты:
1. В конфигураторе установить пароль на вход в конфигуратор, отличающийся от стандартного (owen).
2. Установить пароль на доступ к контроллеру из среды CODESYS (см. видео) - чтобы нельзя было воспользоваться функцией Backup&Restore или скачать файлы проекта через Device - Файлы.
Альтернативный вариант - использовать ФБ PlcOperationControl из библиотеки Component Manager: он позволяет из кода программы запретить выполнение заданных действий (например, выгрузку файлов).
См. видео и описание:
https://help.codesys.com/webapp/_cds...rsion=3.5.10.0
Вложение 40306
3. Использовать в программе привязку к серийному номеру конкретного контроллера (в дереве проекта узел Info - папка Информация об устройстве - канал SERIAL) - и, например, при несовпадении заданного и считанного номеров не выполнять никаких действий. Привязка к серийному номеру делает бессмысленным копирование файлов проекта, даже если пароли, установленные в п. 1 и 2, были скомпрометированы.
-
VISU#07. Как реализовать управление пользователями визуализации из кода?
Вопрос: в проекте используется управление пользователями визуализации (User Managment). Для логина/выхода используются кнопки (InputConfiguration - OnMouseClick - Управление пользователями).
А как сделать тоже самое из кода программы?
Комментарий: приведенная ниже информация актуальна только для контроллеров, программируемых в CODESYS V3.5 SP11 Patch 5 или выше.
Ответ: в первую очередь необходимо получить контекст клиента (pstClientData) - см. соответствующий пример.
Зная контекст, вы можете организовать логин или отключение данного клиента из кода программы:
Код:
// dwGroupId - ID группы пользователей (DWORD)
// wstUserName, wstFullName - короткое и полное имя пользователя (WSTRING)
// подразумевается, что эта информация задана в Менеджере визуализации на вкладке Управление пользователями
// но фактически - вы можете залогиниться даже под несуществующим пользователем
VisuUserManagement.g_VisuUserMgmt2.LoginToUserGroup(pstClientData, dwGroupId, wstUserName, wstFullName);
Код:
VisuElems.Visu_FctLogoutUser(pstClientData);
Cм. также пример считывания информации о пользователях визуализации в переменные программы.
-
Вложений: 2
DEBUG#02. Как проверить проект в эмуляции?
Вопрос: как проверить проект в эмуляции, без подключения к контроллеру?
Ответ: для запуска проекта в режиме эмуляции следует выполнить команду Онлайн - Эмуляция и Онлайн - Логин.
Следует отметить, что режим эмуляции имеет множество ограничений:
- не поддерживается обмен (по любым интерфейсам);
- не поддерживается работа с файлами (из-за этого в частности не будут работать тренды и таблица тревог);
- не поддерживается веб-визуализация.
Альтернативным и более функциональным вариантом, лишенным всех описанных недостатков, является использование виртуального контроллера.
Запустить виртуальный контроллер можно с помощью иконки на панели задач 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)
-
Вложений: 2
COM#07. Modbus TCP - изменение сетевых настроек из кода программы
Вопрос: в приложении настроен обмен по протоколу 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(ipAddress := abyNewSlaveIp, uiPort := 502);
// включаем слэйв в работу
Modbus_TCP_Slave.xConfirmError := TRUE;
Modbus_TCP_Slave.Enable := TRUE;
xUpdate := FALSE;
END_IF
END_IF
Обратите внимание, что при перезагрузке контроллера слэйв инициализируется с настройками, заданными в компоненте, поэтому следует повторять процедуру при старте программы.
-
Вложений: 1
COM#08. Как настроить обмен с электросчетчиками Меркурий?
Вопрос: как настроить обмен с электросчетчиками Меркурий?
Ответ: компания ОВЕН разработала библиотеку OwenVendorProtocols для опроса тепло- и электросчетчиков:
https://owen.ru/forum/showthread.php...l=1#post350263
См. пример и видеопример опроса электросчетчика Меркурий 236 с помощью библиотеки.
Вложение 54129
-
VISU#08. Как использовать кириллицу для логинов/паролей?
Вопрос: хотелось бы в настройках Управления пользователями задавать русскоязычные логины и пароли. Но как их потом вводить в визуализации?
Комментарий: приведенная ниже информация актуальна только для контроллеров, программируемых в CODESYS V3.5 SP14 Patch 3 или выше.
Ответ: это можно сделать с помощью библиотеки OwenVisuDialogs.
-
Вложений: 3
VISU#09. Как обновить изображение в визуализации с USB- или SD-накопителя?
Вопрос: в проекте используются рецепты. Периодически они меняются, и хотелось бы вместе с этим изменять их пиктограммы без перезаливки программы. В связи с этим вопрос - можно ли обновить в проекте графические файлы с 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
-
PRG#14. Как выполнить фрагмент кода однократно при старте приложения?
Вопрос: как выполнить фрагмент кода однократно при старте приложения?
Ответ: пример кода:
Код:
PROGRAM PLC_PRG
VAR
xIsPlcStarted: BOOL;
END_VAR
IF NOT(xIsPlcStarted) THEN
// нужные операции
// ...
xIsPlcStarted := TRUE;
END_IF
-
Вложений: 3
COM#09. Как отключить устройство из опроса при обмене через конфигурацию?
Вопрос: как отключить устройство из опроса при обмене через конфигурацию?
Ответ:
1. В компоненте Device на вкладке Установки ПЛК поставьте галочку Включить диагностику для устройств.
Вложение 42500
2. Для отключения устройства из опроса в программе присвойте переменной <имя_устройства_из_дерева_проекта>.Enable значение FALSE.
Вложение 42515
3. Для возобновления опроса присвойте переменной <имя_устройства_из_дерева_проекта>.Enable значение TRUE.
4. При использовании шаблонов соответствующий канал доступен на вкладке Соотнесение входов-выходов:
Вложение 42498
-
Вложений: 2
VISU#10. Что делать, если в визуализации происходит "наложение" текстов?
Вопрос: что делать, если в визуализации происходит "наложение" текстов?
Вложение 42501
Ответ: у элементов, в которых наблюдается наложение, параметру Цвета/Нормальное состояние/Цвет заливки/Прозрачность следует присвоить значение 255 (полностью непрозрачный).
Вложение 42502
При использовании аварийного состояния следует выполнить аналогичную процедуру для параметра Цвета/Аварийное состояние/Цвет заливки/Прозрачность.
-
Вложений: 1
VISU#11. Можно ли изменить картинку "Отсутствует визуализация"?
Вопрос: можно ли изменить картинки "Отсутствует визуализация" и "Отсутствует загрузочное приложение"?
Вложение 42694
Комментарий: начиная с версии прошивки 1.2.0623.1009 это можно сделать в web-конфигураторе. См. информацию здесь.
Комментарий: приведенная ниже информация актуальна только для контроллеров c версией прошивки 1.1.0611.1056.
Ответ: это возможно.
Подключитесь к контроллеру по SSH (см. CODESYS V3.5. FAQ, п. 13.4) и выполните команду mount -o remount,rw / /
После этого подключитесь к контроллеру с помощью WinSCP (см. CODESYS V3.5. FAQ, п. 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.
-
Вложений: 2
DEBUG#03. Что делать, если появляется ошибка "Адрес уже используется" ?
Вопрос: при компиляции проекта появляется ошибка "Адрес %<...> уже используется". Как ее убрать?
Ответ: вероятно, некоторые адреса в каналах компонентов, размещенных в дереве проекта, случайно были назначены вручную, и совпали с уже используемыми.
В этом случае рядом с ними появляется синяя буква М (Вложение 42756):
Вложение 42754
Следует проверить все узлы таргет-файла с каналами (системные узлы типа Drives и другие, компоненты Modbus, OwenArhiver и т. д.) и отменить ручное распределение адресов.
Для этого следует нажать на ячейку, в которой расположена синяя буква М (Вложение 42756) и удалить в ней все символы, после чего нажать Enter. В результате адрес канала будет рассчитан автоматически.
-
Вложений: 1
DEBUG#04. Что делать,если при загрузке проекта появилась ошибка "Download denied..."?
Вопрос: что делать, если при загрузке проекта появляется подобная ошибка?
Вложение 43309
Ответ: вероятно, ранее контроллер был переведен в режим Заблокировано или Рабочий с помощью команды Онлайн - Режим работы.
Требуется установить соединение с контроллером (Device - Сканировать сеть - подключиться к контроллеру без загрузки проекта) и использовать команду Онлайн - Режим работы - Отладка.
После этого можно будет загрузить проект.
Также такое сообщение может появиться, если загрузка проекта запрещена из кода программы через ФБ PlcOperationControl.
В этом случае требуется удалить текущий проект из контроллера через конфигуратор, после чего загрузить новый.
-
OTHER#05. Как организовано сохранение retain-переменных?
Вопрос: как организовано сохранение энергонезависимых переменных (RETAIN и PERSISTENT) в контроллерах ОВЕН?
Ответ: в контроллерах СПК1хх [М01] и ПЛК2xx энергонезависимые переменные сохраняются в микросхеме MRAM. Сохранение энергонезависимых переменных выполняется по изменению любой из переменных, но не чаще раза в секунду - при этом вся область RETAIN-памяти перезаписывается целиком. Число циклов перезаписи MRAM практически бесконечно. MRAM включает в себя две дублирующие друг друга области памяти. При старте контроллер проверяет CRC этих областей - если для одной области рассчитанный CRC не соответствует сохраненному (такое может быть, например, при пропадании питания в момент сохранения), то значения RETAIN переменных восстанавливаются из другой.
-
Вложений: 1
OTHER#06. Что делать, если не удается подключиться к контроллеру через кабель USB B?
Вопрос: что делать, если не удается подключиться к контроллеру через кабель USB B?
Ответ:
1. Убедитесь в исправности кабеля.
2. Убедитесь, что на ПК установлен драйвер.
3. Убедитесь, что в сетевых настройках ПК для виртуального адаптера задан корректный адрес и маска (см. пример ниже).
4. Убедитесь, что в конфигураторе для интерфейсов Ethernet и USB настроены разные подсети.
Пример корректных настроек:
| Устройство/Параметр |
IP |
Маска |
Шлюз |
| Контроллер (Ethernet) |
192.168.0.10 |
255.255.0.0 |
192.168.0.1 |
| Контроллер (USB) |
10.0.6.10 |
255.255.255.248 |
- |
| ПК (виртуальный адаптер) |
Получить IP-адрес автоматически |
- |
- |
Вложение 63324
-
Вложений: 2
VISU#12. Как настроить favicon для страницы web-визуализации?
Вопрос: как настроить 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
Также можно настроить мобильный значок страницы. Для этого потребуется загрузить файл значка (например, owen.png) в соответствующую директорию (см. пути выше) и добавить в файл webvisu.htm (расположенный в той же директории) строку типа
Код:
<link rel="apple-touch-icon" sizes="196x196" href="owen.png" />
Вложение 43469
Более подробная информация по синтаксису приведена по ссылке.
Обратите внимание, что при перезагрузке по питанию файл webvisu.htm будет создан заново, поэтому удобнее всего записывать в него эту строку из кода программы при запуске приложения.
Источник информации: https://www.codesys-blog.com/visuali...visu-app-icon/
-
Вложений: 3
PRG#15. Как запаковать файл в архив с установкой пароля?
Вопрос: на контроллере сохраняются файлы отчетов, которые требуется передавать на web-сервер в виде запароленных архивов. Каким образом это можно сделать?
Ответ: предположим, в контроллер есть файл Arc1.log, размещенный в директории /mnt/ufs/home/root:
Вложение 44125
В проект нужно добавить библиотеку CmpSysExeс.
Для добавления файла в архив с установкой пароля требуется выполнить следующий код:
Код:
VAR
xCreateArchiveWithPassword: BOOL;
fbSysExec3: CmpSysExec.sysExecute3;
END_VAR
fbSysExec3(xExecute := xCreateArchiveWithPassword, sCommand := '/usr/bin/7za a -p123 /mnt/ufs/home/root/Arc1.7z /mnt/ufs/home/root/Arc1.log');
В приведенном выше примере кода:
- 123 - пароль на архив
- /mnt/ufs/home/root/Arc1.7z - путь к создаваемому файлу архива
- /mnt/ufs/home/root/Arc1.log - путь к файлу, добавляемого в архив
Файл архива будет создан по переднему фронту переменной xCreateArchiveWithPassword:
Вложение 44126
Для распаковки архива потребуется ввести пароль:
Вложение 44127
-
Вложений: 1
VISU#13. Как переключить экран визуализации при входе пользователя в систему?
Вопрос: в проекте есть несколько пользователей web-визуализации.
Требуется при авторизации конкретного пользователя переключить экран визуализации (только для данного пользователя).
Как это можно сделать?
Примечание: приведенный ниже пример подходит для контроллеров, программируемых в CODESYS V3.5 SP11 Patch 5 или выше.
Ответ: см. данный пример, который сделан на базе примера получения информации о пользователях визуализации.
В примере создано два пользователя: 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(astVisuClientData[i].pstClientData, 'Vis2');
ELSIF astVisuClientData[i].wsCurrentUserName = "User2" AND NOT(axIsLogged[i]) THEN
axIsLogged[i] := TRUE;
VisuElems.g_VisuManager.SetMainVisu(astVisuClientData[i].pstClientData, 'Vis3');
ELSIF astVisuClientData[i].wsCurrentUserName = "" THEN
axIsLogged[i] := FALSE;
END_IF
END_FOR
Если пользователь нажимает кнопку Назад, то выполняются три действия:
- переключение на экран Vis1
- "разлогинивание" пользователя
- обновление информации о пользователях (xLogin := TRUE), чтобы в программе снять флаг логина данного клиента
Если вы используете CODESYS V3.5 SP17 Patch 3 с плагином визуализации 4.3.0.0 или выше - то см. этот пример и информацию из п. 1.3 данного документа.
-
Вложений: 1
OTHER#07. Особенности выполнения команды "Создать загрузочное приложение"
Приведенная информация актуальна для контроллеров СПК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
-
Вложений: 1
VISU#14. При открытии диалога на экране артефакты или пропадают элементов...
Вопрос: после открытия диалога на экране визуализации, поверх которого он открывается, наблюдаются визуальные артефакты (полосы, "лишние" прямоугольники, пропадание элементов). Как можно решить эту проблему?
Примечание: данная проблема связана с багом в версии CODESYS V3.5 SP11 (присутствует во всех патчах).
Ответ: нажмите ПКМ на экран диалога и выберите команду Фон. В открывшемся окне снимите обе галочки. В качестве фона диалога используйте элемент Прямоугольник нужного цвета или элемент Изображение, размещенные в нижнем слое экрана диалога.
Вложение 46659
-
Вложений: 8
VISU#15. При использовании трендов возникает ошибка...
Вопрос: при использовании трендов возникает одна из следующих проблем:
1. На тренде вместо данных отображается сообщение "Error 30405 occurred" (число может быть другим)
2. На тренде вместо данных отображется сообщение "Some kind of disk I/O error occurred. Check disk space"
3. В визуализации контроллера отображается следующее сообщение:
Вложение 47153
4. В проекте возникает исключение с приблизительно следующим содержанием (его можно увидеть на вкладке Device - Журнал при подключении к контроллеру):
Код:
Due to the exception the visualization goes into a safe mode until restart
Exception happened while evaluating main visu 'Trend2', exception code: 0
*SOURCEPOSITION* App=[<app>Application</app>] area=<area>0</area>, offset=<off>4131956</off>
*EXCEPTION* App=[<app>Application</app>], Exception=[<excpt>FPU DivisionByZero]
Чем они вызваны и что можно сделать?
Примечание: для концептуального решения этой проблемы мы разработали библиотеку OwenVisuTools с собственной реализацией трендов.
Ответ: в большинстве случаев подобные проблемы возникают при перезагрузке контроллера по питанию в тот момент, когда происходит работа с файлом тренда - что приводит к повреждению этого файла.
С этим связаны ситуации из п. 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). Такая ситуация может возникнуть, если, например, в значении аналогового канала также кодируется его статус.
-
IDE#10. Можно ли установить среду программирования CODESYS на ПК с ОС Linux?
Вопрос: можно ли установить среду программирования CODESYS на ПК с ОС Linux?
Ответ: да, такая возможность поддерживается начиная с версии V3.5 SP13. Инструкция по установке приведена в этой статье.
Для упрощения установки доступен docker-контейнер (начиная с версии V3.5 SP17 - он не работает).
-
PRG#16. Как считать данные мониторинга задач в переменные программы?
Вопрос: как считать данные мониторинга задач (отображаемые в компоненте Конфигурация задач при онлайн-подключении к ПЛК) в переменные программы?
Ответ: это можно сделать с помощью библиотеки CmpIecTask. См. видео.
Дополнение:
В настоящий момент для решения той же задачи проще воспользоваться компонентом OwenTaskInfo из пакета OwenAppTools:
https://owen.ru/forum/showthread.php?t=38944
-
Вложений: 1
COM#10. Можно ли подключить к контроллеру преобразователь АС4-М?
Вопрос: можно ли подключить к контроллеру преобразователь АС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], СПК210 - ID COM-порта в CODESYS = 6
-
Вложений: 2
DEBUG#05. Что делать, если контроллер не обнаруживается при сканировании сети?
Вопрос: при выполнении команды Сканировать сеть (вкладка Device - Установки соединения) контроллер не обнаруживается. Что делать?
Вложение 48346
Ответ: сканирование сети производится путем рассылки широковещательных UDP-пакетов. Они могут быть заблокированы в рамках конкретной сети.
Например, это характерно при подключении через VPN.
В этом случае необходимо ввести IP-адреса контроллера (в рамках примера ниже - это 192.168.0.33; вместо него вам нужно ввести IP-адрес вашего контроллера) и нажать Enter:
Вложение 48345
Если это не решит проблему - то следует проверить, не заблокированы ли на сетевом оборудовании порты, используемые CODESYS или не запрещен доступ из CODESYS в web-конфигураторе контроллера (вкладка Сеть - Межсетевой экран - Правила для трафика - проверить, что включены правила Allow-CODESYS-GATEWAY-TCP и Allow-CODESYS-GATEWAY-UDP).
-
Вложений: 1
VISU#16. Как вкл./откл. поддержку multi-touch для различных клиентов визуализации?
Вопрос: как включить/отключить поддержку multi-touch для различных клиентов визуализации?
Ответ: в установках Менеджера визуализации есть галочка Обработка мультикасания, которая активирует multi-touch для всех клиентов визуализации.
Галочка влияет на поддержку жестов и взаимодействие с некоторыми элементами, поддерживающими прокрутку (Таблица, Combobox и др.).
Вложение 48643
В некоторых случаях требуется, чтобы для одних клиентов multi-touch был активирован (например, он необходим для корректной работы с web-визуализацией на панели ВП110), а на других - отключен (например, на ПК).
В таких ситуациях можно в URL web-визуализации использовать специальный флаг ?CFG_TouchHandlingActive=True или ?CFG_TouchHandlingActive=False.
Пример полного URL:
Код:
http://192.168.0.33:8080/webvisu.htm?CFG_TouchHandlingActive=False
-
VISU#17. Как в визуализации посмотреть список файлов ПЛК и подключенного накопителя?
Вопрос: требуется организовать в визуализации контроллера просмотр файлов, которые хранятся в его памяти (или на подключенном накопителе).
Каким образом это можно сделать?
Ответ: можно использовать диалог FileDirChoiceOwen из библиотеки OwenVisuDialogs.
Принципы работы c диалогом (на примере стандартного диалога FileOpenSave, на базе которого создан FileDirChoiceOwen) приведены в этом видео.
-
OTHER#08. Как перепрошить СПК1хх с прошивкой SP14 на прошивку с SP11?
Вопрос: как перепрошить СПК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. Перед процедурой "отката" обязательно следует связаться с техподдержкой, чтобы подтвердить его возможность и целесообразность в конкретном случае.
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-накопителя.
-
Вложений: 2
DEBUG#06. Что делать при возникновении ошибки "Недостаточно памяти на устройстве"?
Вопрос: при загрузке проекта из CODESYS возникает ошибка "Загрузка не завершена: недостаточно памяти на устройстве". Что делать?
Вложение 50250
Ответ: обычно эта ошибка указывает на то, что перед последней перезагрузкой контроллера не было создано загрузочное приложение.
(см. более подробную информацию здесь).
Самый простой вариант решения проблемы - перейти в web-конфигуратор и на вкладке ПЛК/Настройки нажать кнопку Очистить retain-память:
Вложение 50251
После этого загрузка проекта пройдет без ошибок.
Также можно перезагрузить контроллер - это приведет к такому же результату.
-
COM11. Можно ли к контроллерам ОВЕН подключать USB HID устройства?
Вопрос: можно ли к контроллерам ОВЕН, программируемым в среде CODESYS V3.5, подключать USB HID устройства?
Ответ: да, это возможно. Допускается подключение символьных устройств (клавиатуры, сканера штрихкодов и т.д.) и манипуляторов (мышь, графический планшет и т.д.).
Данный функционал поддерживается контроллерами СПК1хх [М01] и ПЛК210 начиная с версии прошивки 1.2.0623.1009.
Для получения информации от HID устройств (строк данных, координат нажатий и т.д.) используется библиотека CmpOwenUsbHid.
Библиотека и документация доступны по ссылке:
https://owen.ru/product/codesys_v3/libraries
См. видеопример.
Для использования клавиатуры и мыши в таргет-визуализации контроллеров СПК1хх [М01] применение библиотеки не требуется - ввод данных и управление курсором будет работать автоматически.
Для ввода текста на кириллице потребуется зажать клавишу RigthAlt , а переменная, привязанная к элементу, должна иметь тип WSTRING.
Информация по использованию горячих клавиш доступна в документе CODESYS V3.5. Визуализация (п. 3.1.3, 5.4.2 и табл. 9.1, параметр 10).
Контроллеры СПК1хх [М01] также поддерживают системные переменные, позволяющие определить координаты и число нажатий курсора:
- Screen.cursorX (INT) – координата последнего нажатия курсора по оси X;
- Screen.cursorY (INT) – координата последнего нажатия курсора по оси Y;
- Screen.countTouch (UDINT) – число нажатий на экран с момента включения.
-
Вложений: 1
VISU#18. Можно ли изменить логотип на экране загрузки СПК1хх [М01]?
Вопрос: можно ли изменить логотип на экране загрузки СПК1хх [М01]?
Ответ: это возможно начиная с версии прошивки 1.2.0623.1009, в которой в web-конфигураторе появилась вкладка ПЛК/Заставка.
Описание вкладки приведено в данном документе.
Вложение 50252
-
PRG#17. Как работать с JSON в проекте CODESYS?
Вопрос: требуется формировать и парсить файлы формата JSON в коде программы контроллера. Как это можно сделать?
Ответ: доступны следующие варианты:
- платная библиотека от разработчиков CODESYS (в составе пакета IIoT Libraries)
- бесплатная библиотека с открытым исходным кодом (https://github.com/stefandreyer/JSON-Library);
- для контроллеров ОВЕН начиная с версии прошивки 1.2.0623.1009 в состав прошивки входят консольные утилиты jq и jo, используемые для работы с JSON (см. пример).
-
PRG#18. Как в CODESYS организовано выполнение задач из Конфигурации задач?
Вопрос: как в CODESYS организовано выполнение задач из Конфигурации задач?
Ответ: определенная информация по этому поводу приведена в данном документе (не является официальной документацией ОВЕН).
-
VISU#19. Как создавать и использовать стили визуализации?
Вопрос: как создавать и использовать стили визуализации?
Ответ: см. данный документ.
-
Вложений: 1
PRG#19. Как в коде программы прочитать и изменить сетевые настройки ПЛК2xx?
Вопрос: у контроллеров СПК в таргет-файле есть узел Network, позволяющий считать сетевые настройки в переменные программы и изменить их из кода.
Но у ПЛК2хх этого узла нет. Как прочитать и изменить сетевые настройки в программе в этом случае?
Ответ: см. пример.
В примере демонстрируется:
- получение информации о сетевых интерфейсах контроллера с помощью библиотеки SysSocket;
- получение информации об адаптерах и привязанных к ним интерфейсах (пример: адаптер с именем lan может быть сконфигурирован как сетевой мост, в состав которого входят интерфейсы eth1, eth2 и eth3);
- изменение сетевых настроек выбранного адаптера.
Вложение 62943
-
PRG#20. Как организовать архивацию в формате ПЛК1хх? (для 20 функции Modbus, OPC HDA)
Вопрос: требуется считывать архив с контроллера с помощью OPC-сервера Insat MasterOPC Universal Modbus Server, чтобы потом передавать его в SCADA-систему по OPC HDA.
Блок MB_TcpSlave из библиотеки OwenCommunication позволяет OPC-серверу считать архив 20-й функцией Modbus, но скрипт OPC-сервера, реализующий парсинг архива, работает только с файлами формата архива ПЛК1хх.
Как организовать архивацию данных в таком формате в CODESYS V3.5?
Ответ: см. пример.
В нем содержится блок архивации, программа с вызовами блока архивации и блока MB_TcpSlave, а также конфигурация OPC-сервера.
Пользователь должен доработать блок архивации в зависимости от числа и типа архивируемых переменных.
-
Вложений: 2
VISU#20. Как задать цвет выделения элемента при использовании аппаратной клавиатуры?
Вопрос: в Менеджере визуализации установлена галочка Вкл. стандартное использование клавиатуры.
Вложение 50309
Это позволяет работать с элементами визуализации с помощью аппаратной клавиатуры (выбор активного элемента осуществляется стрелками, нажатие на элемент - кнопкой Enter).
Выбранный в данный момент элемент выделяется рамкой. Как изменить цвет этой рамки?
Ответ: см. пример кода:
Код:
PROGRAM PLC_PRG
VAR
xInit: BOOL;
stSelectionColor: VisuElems.VisuStructColors;
END_VAR
IF NOT(xInit) THEN
// цвет в формате RGBA (AARRGGBB), где AA - степень прозрачности
stSelectionColor.dwFrameColor := 16#FFFF0000;
VisuElems.g_SelectionManager.SelectionColors := stSelectionColor;
xInit := TRUE;
END_IF
Вложение 50310
См. также информацию из п. 6 данного документа.
-
PRG#21. Как реализовать энергонезависимый счетчик наработки оборудования?
Вопрос: как реализовать энергонезависимый счетчик наработки оборудования?
Ответ: это можно сделать с помощью ФБ ONTIME из библиотеки OSCAT Basic.
См. пример использования блока.
-
VISU#21. Как вывести в таблицу тревог сообщения о входе/выходе пользователя?
Вопрос: в проекте создано и настроено Управление пользователями. Требуется выводить информацию о событиях, связанных с управлением пользователями (вход в систему, выход из системы и т.д.) в таблицу тревог.
Каким образом это можно сделать?
Ответ: см. пример.
Если вы используете CODESYS V3.5 SP17 Patch 3 с плагином визуализации 4.3.0.0 или выше - то см. этот пример и информацию из п. 2.9 данного документа.
-
Вложений: 3
IDE#11. Как восстановить проект после некорректного завершения работы CODESYS?
Вопрос: во время работы над проектом CODESYS пропало питание ПК.
После включения ПК и запуска CODESYS появилось следующее сообщение:
Вложение 50791
Но после нажатия на кнопку Да появилось сообщение об ошибке:
Вложение 50792
Можно ли восстановить проект?
Ответ: к сожалению, в данной ситуации восстановить проект уже нельзя.
Это связано с тем, что в свежих версиях CODESYS по умолчанию включен контроль целостности проекта, который не допускает возможности восстановления проекта в случае некорректного завершения работы среды.
Отключить контроль целостности можно в меню Проект - Установки проекта на вкладке Безопасность:
Вложение 50793
Универсальная рекомендация - в процессе разработки проекта регулярно пересохранять его под разными названиями (тогда даже в случае повреждения файла проекта можно будет вернуться к предыдущей версии).