Вложений: 4
PRG#25. Привязка переменных к каналам компонентов дерева проекта
Формально привязка переменных к каналам компонентов в дереве проекта может быть произведена двумя способами:
1. Привязкой к каналу уже существующей переменной (маппированием) - с помощью ввода имени этой переменной или ее выбором через ассистент ввода (для этого надо нажать на кнопку "...").
Вложение 55721
2. Вводом имени еще несуществующей переменной - тогда в проекте будет автоматически объявлена неявная глобальная переменная с этим именем.
В зависимости от выбранного способа в столбце Соотнесение будет отображаться соответствующая иконка: для способа 1 - "стрелка", для способа 2 - "лампочка".
В подавляющем большинстве случаев рекомендуется использовать только способ 1.
Из-за автообъявления переменных в каналах компонентов при загрузке проекта могут периодически (без систематики) возникать ошибки - из-за того, что карта адресов таких переменных может быть сформирована некорректно.
Особенно часто это наблюдается при автообъявлении переменных типа BIT и ARRAY.
Примеры ошибок:
Вложение 55719 Вложение 55720
Поэтому настоятельно рекомендуется использовать только способ 1 - то есть привязывать к каналам уже заранее объявленные переменные.
Вложение 55722
COM#19. Как настроить проброс портов для ПЛК2хх?
Вопрос: как настроить проброс портов для ПЛК2хх, чтобы использовать контроллер в качестве шлюза между сетями?
Ответ: см. статью.
PRG#26. Ограничение библиотеки CmpSysExec на длину команды и способ его обхода
ФБ библиотеки CmpSysExec используются для вызова утилит Linux (например, curl).
Длина команды, подаваемой на вход блока, ограничена 255 символами.
Примечание: в версии библиотеки 3.5.17.31 добавлен блок SysExecute5, который позволяет работать с командами длиной до 2047 символов.
В некоторых случаях этого может оказаться недостаточно - например, когда в теле команды передается текст длинного сообщения или значения множества параметров REST API запроса.
В такой ситуации можно записать текст во временный файл (см. пример) и использовать этот файл как аргумент при вызове 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)"
PRG#27. Файловые плейсхолдеры
При работе с файлами с помощью библиотек 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);
VISU#28. Как переключить экран в фрейме из кода программы?
Вопрос: как переключить экран, отображаемый в элементе Фрейм, из кода программы?
Ответ: см. пример.
Если вы используете CODESYS V3.5 SP17 Patch 3 с плагином визуализации 4.3.0.0 или выше - то см. этот пример и информацию из п. 5 данного документа.
VISU#29. Работа с тревогами из кода программы (AlarmManager)
Вложений: 4
COM#20. Как отмасштабировать значение, считываемое по Modbus?
Вопрос: в проекте настроен опрос других устройств по протоколу 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
COM#21. Как подключиться к SQL-серверу?
Вопрос: требуется записываться и считывать данные из СУБД с использованием SQL. Как это можно сделать?
Ответ:
Работа с MySQL поддерживается начиная с прошивки 1.3.0620.xxxx.
Работа с MsSQL поддерживается начиная с прошивки 1.3.0812.xxxx.
Работа с SQLite (встраиваемая СУБД, хостится на самом ПЛК) поддерживается во всех прошивках.
См. пример и видео: MySQL / MsSQL / SQLite
COM#22. Как подключить контроллер к VPN?
Вопрос: как подключить контроллер к VPN?
Ответ: контроллеры Овен поддерживают протоколы OpenVPN и WireGuard.
Настройка подключения производится через web-конфигуратор.
Документация (см. приложение Г) / Видеопример по OpenVPN
COM#23. Как работать с GSM/GPRS-модемами?
Вопрос: как работать с GSM/GPRS-модемами (отправлять/получать cмc, устанавливать GPRS-подключение)?
Ответ: см. информацию по ссылке.