PRG#43. Примеры команд Linux
Библиотека CmpSysExec позволяет выполнять команды Linux.
В этом проекте собраны примеры команд для решения задачи, о которых спрашивали наши пользователи:
https://ftp.owen.ru/CoDeSys3/21_Exam...projectarchive
Примечание: некоторые команды будут работать только в актуальных прошивках ПЛК210-1x и СПК210.
| ФБ |
Пример команды |
Описание |
| GetEthLinkStatus |
ethtool eth0 | grep "Link detected" |
Определение физического подключения кабеля к сетевому интерфейсу |
| GetConnectionsCount |
ss -tnHo state established src :4840 | tr -s " " | cut -d" " -f5 | cut -d: -f1 | wc -l |
Определение кол-ва клиентских подключений к сетевому порту |
PRG#44. Как отправить сообщение в мессенджер Макс (MAX)?
Вопрос: как отправить сообщение в мессенджер Макс (MAX)?
Ответ: см. пример, созданный пользователем Mihail_K.
Вложений: 1
DEBUG#16. Виртуальный контроллер - при загрузке проекта ошибка "Неразрешенная ссылка"
Вопрос: при загрузке проекта в виртуальный контроллер CODESYS Control Win V3 возникает окно с сообщением "Ошибка при загрузке: найдено 3 неразрешенных ссылки".
На панели сообщений при этом отображаются следующие сообщения:
Код:
[FATAL ERROR] Неразрешённая ссылка: 'TARGETVISUFINDBYID'
[FATAL ERROR] Неразрешённая ссылка: 'TARGETVISUNOTIFY'
[FATAL ERROR] Неразрешённая ссылка: 'TARGETVISUCYCLIC'
Вложение 89456
С чем связана эта ошибка и как ее устранить?
Ответ: ошибка связана с отсутствием конфигурационных файлов виртуального контроллера - например, они могли быть не созданы при некорректно прошедшей установке среды.
Для ее устранения следует:
1. Перейти в директорию виртуального контроллера: C:\ProgramData\CODESYS\CODESYSControlWinV3\<иденти фикатор>\
2. Распаковать в нее содержимое этого архива: https://ftp.owen.ru/TechSupportShare...ultConfigs.zip
3. Перезапустить виртуальный контроллер
Примечание: конфигурационные файлы соответствуют версии CODESYS V3.5 SP17 Patch 3.
Вложений: 6
VISU#37. LATCH-переменные в конфигурации тревог
Вопрос: в проекте используется компонент Alarm Configuration. При возникновении тревоги требуется отображать в сообщении значение связанной с ней переменной (или переменных).
Как это сделать?
Ответ: для этого следует использовать LATCH-переменные (триггерные переменные).
См. в группе тревог столбцы Триггерная переменная 1 и Триггерная переменная 2. При необходимости количество триггерных переменных можно увеличить - для этого нажмите ПКМ на любую область группы тревог и используйте команду
Добавить столбец триггерной переменной.
Вложение 89471
К ячейке столбца можно привязать переменную элементарного типа - BOOL, UINT, REAL, TIME, STRING и т. д.
Для LATCH-переменных типа STRING максимальная длина по умолчанию - 39 символов, для WSTRING - 59 символов.
Увеличить максимальную длину можно путем изменения параметра PLACEHOLDER_VALUE_LENGTH - см. список параметров AlarmParams в библиотеке AlarmManager.
Его значение по умолчанию: (ANY_TO_INT(60) * ANY_TO_INT(2)), и оно доступно для редактирования.
Вложение 89472
Для WSTRING влияние параметра почти прозрачно - если заменить 60 на 99, то длина строки LATCH-переменной сможет достигать 98 символов.
Для STRING параметр влияет неочевидным образом - например, LATCH-переменная длиной 64 символа не отображается при значении (ANY_TO_INT(90) * ANY_TO_INT(2)),
но отображается при (ANY_TO_INT(99) * ANY_TO_INT(2)).
В столбце Сообщение для вставки значения LATCH-переменных в сообщение тревоги следует использовать плейсхолдеры <LATCH1>, <LATCH2> и т. д.
В состав плейсхолдеров могут входить спецификаторы форматирования, например: <LATCH1 %3.1f>
В состав сообщения тревоги может входить несколько LATCH-переменных.
При активации условия тревоги значения всех ее LATCH-переменных фиксируются.
Вложение 89473
Вложение 89474
В таблице тревог в столбце с типом Сообщение будет отображаться текст сообщения, включающий в себя подставленные значения LATCH-переменных.
Кроме того, значения LATCH-переменных можно отображать в отдельных столбцах таблицы тревог с соответствующим типом данных.
Вложение 89476
Можно осуществлять фильтрацию записей в таблице тревог по значению LATCH1.
Тип фильтра - переменная типа AlarmManager.EFilterLatchContent
Тип переменной фильтра зависит от типа фильтра.
Вложение 89475
Значение параметра
"Тип фильтра" |
Описание |
Тип LATCH-переменной |
Тип переменной фильтра |
Пример значения переменной фильтра |
| -1 (NOT_SET) |
Фильтр еще не выбран |
- |
- |
- |
| 0 (DISABLED) |
Фильтрация отключена |
- |
- |
- |
| 1 (STR) |
Фильтрация по строковому
литералу |
STRING или WSTRING |
STRING или WSTRING |
'Ошибка 1' |
| 2 (IEC) |
Фильтрация по строке с
МЭК-нотацией |
любой из поддерживаемых |
STRING или WSTRING |
'UINT#1234', 'REAL#1.23', 'T#2h' |
| 3 (NUMBER) |
Фильтрация по числовому
значению |
числовой |
числовой |
1234, 1.23 |
Вложений: 5
VISU#38. Как квитировать тревоги из кода программы?
Вопрос: как осуществить квитирование тревог в таблице тревог из кода программы?
Ответ: для этого можно использовать методы глобального обработчика тревог:
Код:
// Квитирование конкретной тревоги
AlarmManager.AlarmGlobals.g_AlarmHandler.AcknowledgeOneOfGroup
(
usiAlarmGroupID := <ID группы тревог>,
uiAlarmID := <ID тревоги>
);
Код:
// Квитирование всех тревог группы
AlarmManager.AlarmGlobals.g_AlarmHandler.AcknowledgeAllOfGroup
(
usiAlarmGroupID := <ID группы тревог>
);
Код:
// Квитирование всех тревог всех групп
AlarmManager.AlarmGlobals.g_AlarmHandler.AcknowledgeAll();
ID группы тревог и конкретных тревог размещаются в списках констант Alm_AlarmConfiguration_Alarmgroup_IDs и Alm_AlarmGroup_Alarm_IDs соответственно.
Увидеть их можно в ассистенте ввода (нажмите F2 для его открытия).
- Пример ID группы: Alm_AlarmConfiguration_Alarmgroup_IDs.ID_AlarmGroup (где AlarmGroup - имя группы тревог в дереве проекта)
- Пример ID тревоги: Alm_AlarmGroup_Alarm_IDs.ID_FirstAlarm (где FirstAlarm - ID тревоги в таблице группы тревог; по умолчанию ID формируются в виде чисел, но фактически представляют собой строки и могут быть изменены пользователем)
Вложение 89490 Вложение 89491
Методы должны вызываться событийно при нужных обстоятельствах, а не циклически.
Методы AcknowledgeAllOfGroup и AcknowledgeAll применимы только для групп, в классах тревог которых снята галочка Подтверждать по отдельности.
Вложение 89492
Вызов методов соответствуют переходу Confirm или ACK в машине состояний, соответствующей "способу подтверждения" класса тревог, и влияет только на тревоги, находящиеся в соответствующих состояниях.
Вложение 89493 Вложение 89494
Вложений: 5
VISU#39. Тренды - экспорт истории в .csv
Стандартный элемент визуализации Тренд сохраняет историю в виде файла формата .sqlite.
Зачастую этот формат не удобен для конечного пользователя, и возникает потребность в конвертации файла в формат .csv, который может быть открыт в Microsoft Excel или любом другом аналогичном ПО.
Для решения этой задачи можно воспользоваться open source утилитой-конвертером: https://github.com/Pineko-SkvortsovA/cds_trend_csv
Ccылки для загрузки размещены на странице Releases: https://github.com/Pineko-SkvortsovA...d_csv/releases
Доступны сборки для Windows (GUI) и для Linux (CLI); Linux-версия тестировалась только на наших контроллерах (платформа ARM64, glibc 2.31).
По умолчанию файл истории тренда сохраняется в директории:
- /root/CODESYS/PlcLogic/trend (ПЛК2xx)
- /home/root/CODESYS_WRK/PlcLogic/trend (СПК)
В веб-конфигураторе на вкладке ПЛК - Настройки можно изменить директорию сохранения трендов, разместив ее на USB- или SD-накопителе.
Вложение 89595
Выгрузку файла истории из контроллера можно организовать разными способами:
- подключившись через утилиту WinSCP (логин - root, пароль совпадает с паролем веб-конфигуратора; по умолчанию - owen);
- подключившись из среды CODESYS и перейдя в узле Device на вкладку Файлы;
- нажав кнопку в веб-визуализации (см. в настройках кнопки: Конфигурация ввода - OnMouseClick - Передача файла; см. пример);
- подключившись к контроллеру FTP-клиентом (для этого требуется скопировать файл в рабочую директорию FTP-сервера контроллера или сделать рабочей директорий ту, в которой сохраняется файл тренда);
- или каким-то другим удобным способом.
(получить консультации по любому из способов можно, написав в техническую поддержку: support@owen.ru)
На этапе отладки удобно использовать WinSCP.
Windows-версия утилиты выглядит следующим образом:
Вложение 89596
Выбор файла заголовка является опциональным; в случае его отсутствия в качестве названий столбцов перьев будут использованы имена переменных (например, PLC_PRG.iVar).
Файл заголовков должен иметь кодировку UTF-8 и расширение .txt.
Каждая его строка выглядеть следующим образом:
Код:
<имя переменной, привязанной к тренду (так, как оно отображается в компоненте Trend Recording Manager)>=<требуемое название столбца в .csv-файле>
Вложение 89597
.csv-файл формируется в кодировке UTF-8-BOM. Разделитель полей - точка с запятой, десятичный разделитель - запятая; поддерживается не более 6 знаков после запятой.
Пример сформированного .csv-файла:
Вложение 89598
Для использования CLI-версии утилиты в контроллере требуется:
1. Скачать и распаковать архив CodesysTrendConverter-Linux-ARM64.zip
2. Скопировать файл CodesysTrendConverter в директорию контроллера /usr/bin (удобно это сделать через WinSCP)
3. Можно переименовать его, дав более краткое имя - например, ctc
4. В свойствах файла дать разрешение на исполнение
Пример вызова утилиты:
Код:
ctc -f /home/root/CODESYS_WRK/PlcLogic/trend/kis_Application.Visualization_Trend1.1.sqlite -vn /home/root/CODESYS_WRK/PlcLogic/trend/headers.txt -o /home/root/CODESYS_WRK/PlcLogic/trend/trend.csv -s desc
Поддержанные ключи:
- -f, --file (путь к файлу .sqlite)
- -vn, --varnames (путь к файлу заголовков столбцов, опционально)
- -o, --output (путь к формируемому файлу .csv, опционально - при его отсутствии файл .csv будет сохранен в той же директории, в которой размещен .sqlite)
- -s, --sort (desc или asc, порядок сортировки по меткам времени)
- -v, --version (отображение версии утилиты)
Вывод утилиты:
Вложение 89599
Примечание: время, требуемое на выполнение конвертации CLI-утилитой, зависит от количества записей в файле; оно точно будет больше секунды.
Вложений: 3
COM#37. Как изменить имя OPC UA сервера контроллера?
Вопрос: как изменить имя OPC UA сервера контроллера (и другие настройки)?
Ответ:
Для ПЛК210-1x и СПК210:
1. Подключитесь к контроллеру с помощью утилиты WinSCP (протокол – SCP, пароль – совпадает с паролем web-конфигуратора).
2. Перейдите в рабочую директорию (ПЛК210: /root/CODESYS, СПК210: /home/root/CODESYS_WRK).
3. Откройте файл CODESYSControl_User.cfg.
4. Найдите в файле секции CmpOPCUA и CmpOPCUAProviderIecVarAccess, и добавьте нужные параметры/отредактируйте значения существующих:
- NetworkPort – номер сетевого порта, используемого OPC UA сервером;
- MaxNodesPerRead – максимальное количество объектов в одном запросе чтения;
- SessionsMax – максимальное количество одновременных подключений к серверу;
- ItemMinSamplingRate – минимальный период обновления для запрашиваемых клиентом данных;
- CustomNodeName – имя контроллера, которое будет отображаться в OPC UA клиенте. Для изменения имени следует удалить в начале строки символ комментария ( ; );
- остальные доступные для добавления параметры описаны в онлайн-справке CODESYS и по ссылке.
5. Сохраните файл.
6. Перезапустите CODESYS (в веб-конфигураторе: ПЛК - Настройки - кнопка Перезапустить CODESYS) или перезагрузите контроллер, чтобы внесенные изменения вступили в силу.
Для СПК1хх [М01], ПЛК210-0x и ПЛК200:
1. Подключитесь к терминалу Linux контроллера (например, через утилиту Putty или через web-конфигуратор: Система - Терминал).
2. Введите команду
Для СПК1хх [М01]:
Код:
chattr -i /home/root/CODESYS_WRK/CODESYSControl.cfg
Для ПЛК210-0x и ПЛК200:
Код:
chattr -i /root/CODESYS/CODESYSControl.cfg
3. Отредактируйте файл CODESYSControl.cfg (с помощью утилиты nano или другим удобным вам способом - через WinSCP и т. п.):
в параметре FileReference.0 добавьте секции CmpOPCUA и CmpOPCUAProviderIecVarAccess (см. скриншот ниже).
4. Откройте файл CODESYSControl_User.cfg.
5. Создайте в нем секцию CmpOPCUA и добавьте нужные параметры:
- NetworkPort – номер сетевого порта, используемого OPC UA сервером;
- MaxNodesPerRead – максимальное количество объектов в одном запросе чтения;
- SessionsMax – максимальное количество одновременных подключений к серверу;
- ItemMinSamplingRate – минимальный период обновления для запрашиваемых клиентом данных;
- остальные доступные для добавления параметры описаны в онлайн-справке CODESYS и по ссылке.
6. Создайте в нем секцию CmpOPCUAProviderIecVarAccess и добавьте нужный параметр:
- CustomNodeName – имя контроллера, которое будет отображаться в OPC UA клиенте.
7. Сохраните файл.
8. Перезапустите CODESYS (в веб-конфигураторе: ПЛК - Настройки - кнопка Перезапустить CODESYS) или перезагрузите контроллер, чтобы внесенные изменения вступили в силу.
Вложение 89681 Вложение 89682 Вложение 89683
Вложений: 4
VISU#40. Как в столбце элемента Таблица отображать чекбоксы? ("кнопки-флажки")
Вопрос: как в столбце элемента Таблица отображать чекбоксы? ("кнопки-флажки")
Ответ: см. пример.
Вложение 89725
Изображения чекбокса добавлены в пул изображений ImagePool.
Вложение 89726
В настройках таблицы для второго столбца ("Cтатус") установлены галочки Столбец изображения и Использовать шаблон.
Для изображения выбран Режим заливки = По центру.
К параметру Шаблон - Конфигурация ввода - Переключение - Переменная привязан массив переменных, определяющих состояние чекбоксов.
INDEX - это системная переменная таблицы, вместо которой при обработке строки подставляется номер этой строки.
Вложение 89727
См. также переменные и код программы PLC_PRG.
Вложение 89728
Вложений: 3
VISU#41. Настройки текста в таблице тревог и баннере тревог
Вопрос: мы используем элементы Таблица тревог и Баннер тревог.
Оба этих элемента имеют вкладку параметров Свойства текста, в которой можно настроить шрифт текста и его цвет.
Но фактически эти настройки не влияют на внешний вид сообщений, отображаемых в таблице.
Почему так происходит и как это исправить?
Ответ: указанные настройки влияют только на сообщения тех классов тревог, для которых не заданы настройки отображения
(кроме того, для таблицы тревог эти настройки влияют на шрифт заголовков столбцов и номеров строк).
Если в рамках класса тревог задана хотя бы одна настройка - то внешний вид сообщений данного класса полностью определяется этими настройками.
Соответственно, шрифт и цвет текста в этом случае задаются так:
Вложение 89790
Кроме того, цвет текста может быть переопределен настройками столбцов таблицы (см. ниже).
Привязанная переменная должна иметь тип DWORD и содержать значение цвета в формате ARGB.
Она имеет приоритет над цветом, заданным в классе тревог.
Вопрос: в настройках столбцов таблицы тревог для столбца Сообщение по умолчанию настроено выравнивание текста по левому краю.
Но фактически текст выравнивается по центру.
Почему так происходит и как это исправить?
Вложение 89791
Ответ: это баг (VIS-2477), который был исправлен в версии 4.4.0.0 плагина визуализации.
Но обойти его можно и в более ранних версиях - для этого требуется:
- установить Выравнивание текста - По центру;
- выполнить команду Компиляция - Очистить все;
- загрузить проект в контроллер;
- установить Выравнивание текста - Лево;
- выполнить команду Компиляция - Очистить все;
- загрузить проект в контроллер;
После этого текст сообщений тревог будет выравниваться по левому краю.
Вложение 89793