Вопрос: как настроить проброс портов для ПЛК2хх, чтобы использовать контроллер в качестве шлюза между сетями?
Ответ: см. статью.
Вид для печати
Вопрос: как настроить проброс портов для ПЛК2хх, чтобы использовать контроллер в качестве шлюза между сетями?
Ответ: см. статью.
ФБ библиотеки 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)"
При работе с файлами с помощью библиотек 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);
Вопрос: как переключить экран, отображаемый в элементе Фрейм, из кода программы?
Ответ: см. пример.
Если вы используете CODESYS V3.5 SP17 Patch 3 с плагином визуализации 4.3.0.0 или выше - то см. этот пример и информацию из п. 5 данного документа.
Компания Пролог подготовила ряд видео о специфическом функционале компонента Конфигурация тревог, основанном на библиотеке AlarmManager.
1. Базовый функционал и действия уведомления (вызов ФБ с интерфейсом IAlarmNotifiable)
2. Тревоги со способом наблюдения Событие
3. Передача тревог между ПЛК (RemoteAlarms)
4. Работа с тревогами из кода
Вопрос: в проекте настроен опрос других устройств по протоколу Modbus через стандартные компоненты. Считываются целочисленные значение, и согласно документации их нужно домножить на 0.01, чтобы получить "настоящее" значение в формате REAL. Можно ли это выполнить это масшабирование на уровне настройки компонентов Modbus?
Ответ:
1. Необходимо создать ФБ для конвертации данных. В рамках примера он будет называться CONVERT.
Перед объявлением ФБ необходимо указать атрибут io_function_block, а перед объявлением его переменной, которая будет привязываться к компоненту Modbus - io_function_block_mapping.
2. В компоненте Modbus на вкладке Соотнесение входов/выходов выберите нужный канал (нужно выделить конкретный регистр - тип WORD)Код:{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;
и нажмите кнопку Добавить ФБ для IO-канала.
Вложение 56796
В выпадающем окне нужно выбрать ФБ CONVERT.
Вложение 56797
В результате в столбце Соотнесение отобразится соответствующая пиктограмма, а в столбце Переменная будет автоматически сформирован путь к неявно объявленному экземпляру ФБ.
Вложение 56798
3. С помощью этого пути можно обратиться к выходной переменной ФБ в коде программы (убрав из пути узел Application):
Вложение 56799Код: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;
Вопрос: требуется записываться и считывать данные из СУБД с использованием SQL. Как это можно сделать?
Ответ:
Работа с MySQL поддерживается начиная с прошивки 1.3.0620.xxxx.
Работа с MsSQL поддерживается начиная с прошивки 1.3.0812.xxxx.
Работа с PostgreSQL поддерживается начиная с прошивки 2.4.xxxx.xxxx.
Работа с SQLite (встраиваемая СУБД, хостится на самом ПЛК) поддерживается во всех прошивках.
См. пример и видео: MySQL / MsSQL / PostgreSQL / SQLite
Вопрос: как подключить контроллер к VPN?
Ответ: контроллеры Овен поддерживают протоколы OpenVPN и WireGuard.
Настройка подключения производится через web-конфигуратор.
Документация (см. приложение Г) / Видеопример по OpenVPN
Вопрос: как работать с GSM/GPRS-модемами (отправлять/получать cмc, устанавливать GPRS-подключение)?
Ответ: см. информацию по ссылке.
Вопрос: как настроить обмен данными между несколькими ПЛК, программируемыми в CODESYS V3.5?
Очевидно, что это можно сделать с помощью протокола Modbus TCP, но этот вариант является довольно трудоемким (настройка мастера и слэйвов, размещение данных в регистрах и т.д.)
Нет ли более простых способов?
Ответ: такие способы есть.
1. Если один ПЛК должен передавать одни и те же данные на несколько других ПЛК, то можно использовать сетевые переменные (Network Variables).
См. документацию (п. 3) и видеопример.
2. Если один ПЛК должен считывать/записывать разные данные с одного или нескольких ПЛК, то можно использовать Менеджер источников данных (Data Source Manager).
См. видеопример, доп. информацию для ПЛК2хх и информацию в онлайн-справке CODESYS.
Вопрос: Как в коде контролировать наличие связи через 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