- Saved searches
- Use saved searches to filter your results more quickly
- Naplesoul/Opcua-Modbus-Server
- Name already in use
- Sign In Required
- Launching GitHub Desktop
- Launching GitHub Desktop
- Launching Xcode
- Launching Visual Studio Code
- Latest commit
- Git stats
- Files
- README.md
- 3.3. Установка и настройка сервера OPC UA на ОС Linux
- Modbus opc ua server linux
- OPC UA в ModBus
- Преобразователь OPC UA в протокол ModBus (Slave) для Linux
Saved searches
Use saved searches to filter your results more quickly
You signed in with another tab or window. Reload to refresh your session. You signed out in another tab or window. Reload to refresh your session. You switched accounts on another tab or window. Reload to refresh your session.
A server converting OPC-UA to ModBus
Naplesoul/Opcua-Modbus-Server
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Name already in use
A tag already exists with the provided branch name. Many Git commands accept both tag and branch names, so creating this branch may cause unexpected behavior. Are you sure you want to create this branch?
Sign In Required
Please sign in to use Codespaces.
Launching GitHub Desktop
If nothing happens, download GitHub Desktop and try again.
Launching GitHub Desktop
If nothing happens, download GitHub Desktop and try again.
Launching Xcode
If nothing happens, download Xcode and try again.
Launching Visual Studio Code
Your codespace will open once ready.
There was a problem preparing your codespace, please try again.
Latest commit
Git stats
Files
Failed to load latest commit information.
README.md
sudo apt-get install gcc cmake automake autoconf libtool
⚠️ Note: step 1 to 3 should be excuted elsewhere, not in this project
1. Build dependency for open62541
you shall clone my revised open62541 library because I added a new API (UA_Server_writeWithoutCallback) in open62541
git clone --branch ModbusNewAPI https://github.com/Naplesoul/open62541.git cd ./open62541 git submodule update --init --recursive mkdir build && cd build cmake -DBUILD_SHARED_LIBS=ON -DCMAKE_BUILD_TYPE=RelWithDebInfo -DUA_NAMESPACE_ZERO=FULL .. make sudo make install
now you can include headers for open62541, for example: #include
2. Build dependency for cJSON
git clone --branch v1.7.15 https://github.com/DaveGamble/cJSON.git cd ./cJSON mkdir build && cd build cmake .. make sudo make install
now you can include headers for cJSON in the project: #include
3. Build dependency for libmodbus
git clone --branch v3.1.7 https://github.com/stephane/libmodbus.git cd ./libmodbus autoreconf --install --symlink --force ./configure
then you should move source files in ./src and ./config.h to the project directory
the project directory of this project would be
. ├── CMakeLists.txt ├── libmodbus │ ├── config.h │ └── src │ ├── modbus.h │ . ├── main.c .
then you can include headers for libmodbus in the project: #include «libmodbus/src/modbus.h»
4. Build opcua_modbus_server
cmake -B build cd build make
5. Write json configuration
the example below shows how the config json file is written
< "Port": 4840, // tcp port where the server runs at, if not assigned, default port will be 4840 "ModbusRTUs": // json array contains modbus slaves running at serial mode [ < "NodeID_NamespaceIndex": 1, "NodeID_ID": "KFR-35GW", "DisplayName": "Air Conditioner KFR-35GW", "Description": "a smart air conditioner with a temperature sensor and a humidity sensor", "QualifiedName": "Air Conditioner", "SerialMode": "RS485", // serial connection mode, "RS485" or "RS232" "DeviceLocation": "/dev/ttyUSB0", // serial device file on linux "MB_MachineAddress": 1, // modbus machines address "Baud": 9600, // serial connection baud rate, 9600, 19200 etc. "Parity": "N", // verification, "N" for none, "E" for even parity, "O" for odd parity "DataBits": 8, // data bits defined by modbus device "StopBits": 1, // data bits defined by modbus device "Variables": // definitions of the variables of the modbus device [ < "NodeID_NamespaceIndex": 1, "NodeID_ID": "Switch-1", "DisplayName": "Air Conditioner Switch-1", "Description": "a coil value controlling the air conditioner to turn on and off", "QualifiedName": "Air Conditioner Switch", "VariableType": "CoilStatus", // a bit var type which can support read and write "VariableAddress": 0, // the address of the variable "BitOffset": 1, // define which bit of the coil register is the value "InitialValue": 0 // define the initial value of the OPCUA data node >, < "NodeID_NamespaceIndex": 1, "NodeID_ID": "WIFI-Connected-1", "DisplayName": "Air Conditioner WIFI-Connected-1", "Description": "a coil value indicating whether the air conditioner is connected to WIFI", "QualifiedName": "Air Conditioner WIFI Connected", "VariableType": "InputStatus", // a bit var type which is READ-ONLY "VariableAddress": 1, "BitOffset": 2 >, < "NodeID_NamespaceIndex": 1, "NodeID_ID": "Temp-1", "DisplayName": "Setted Temperature Temp-1", "Description": "setted temperature of the air conditioner", "QualifiedName": "Setted Temperature", "VariableType": "HoldingRegister", // a register value type which can support read and write "DataType": "UINT16", // unsigned int 16, length is 2 Bytes "VariableAddress": 2, "InitialValue": 25 >, < "NodeID_NamespaceIndex": 1, "NodeID_ID": "Temp-2", "DisplayName": "Indoor Temperature Temp-2", "Description": "temperature sensor on the air conditioner", "QualifiedName": "Indoor Temperature", "VariableType": "InputRegister", // a register value type which is READ-ONLY "DataType": "FLOAT", // float, length is 4 Bytes "ByteOrder": "abcd", // byte ordering of the float, be "abcd", "badc", "cdab" or "dcba" "VariableAddress": 4 >, < "NodeID_NamespaceIndex": 1, "NodeID_ID": "Humid-1", "DisplayName": "Indoor Humidity Humid-1", "Description": "humidity sensor on the air conditioner", "QualifiedName": "Indoor Humidity", "VariableType": "InputRegister", "DataType": "UINT32", // unsigned int 32, length is 4 Bytes, Big-endian "VariableAddress": 8 > ] > ], "ModbusTCPs": // json array contains modbus slaves running at TCP mode [ < "NamespaceIndex": 1, "NodeID": "KFR-35GW-2", "DisplayName": "Air Conditioner KFR-35GW-2", "Description": "a smart air conditioner with a temperature sensor and a humidity sensor", "QualifiedName": "Air Conditioner", "MB_MachineAddress": 1, "IP": "127.0.0.1", "Port": 5502, "Variables": [ // same as ModbusRTUs ] > ] >
3.3. Установка и настройка сервера OPC UA на ОС Linux
Для работы задачи, необходимо установить компонент .NET версии 5.0. Пример описания процесса установки для Astra Linux .
Скачать и распаковать архив с задачей. Скопировать каталог OpcUaServer в корневой каталог сервера InterfaceSSH. По умолчанию это: /opt/oikserver/server64
Если на компьютере уже установлено ПО сервера ОИК Диспетчер НТ v. 3.0 — удалить из папки с задачей библиотеки ibif_cfs.dll и libif_cfs.so
В ПО сервера «ОИК Диспетчер НТ» описать внешнюю задачу. Для внешней задачи в строке «Программа» указать путь к исполняемому файлу. Подробнее процедура добавления внешней задачи описана в руководстве пользователя сервера п.10.4 «Настройка внешних задач» . Пример настройки приведен на рисунке:
В журнале регистрации событий будет запись с реквизитами, по которым можно удаленно подключиться к службе OPC:
Используя OPC клиент (умеющий производить подключение по заданным логину и паролю) произвести подключение к базе по данным реквизитам (используя логин и пароль доступа к серверу ОИК).
В качестве примера OPC клиента использована утилита Prosys OPC UA browser, скачать его можно по ссылке:
Modbus opc ua server linux
«МПС софт» представляет OPC-сервер MasterOPC с поддержкой операционной системы Linux.
Multi-Protocol MasterOPC и Modbus Universal MasterOPC Server в новом релизе получили возможность запуска на ОС Linux, что позволяет использовать данные программы для реализации программно-аппаратных шлюзов конвертирующих промышленные протоколы.
MasterOPC – это единая платформа для сбора, обработки и предоставления доступа к промышленным данным. Архитектура MasterOPC позволяет пользователям подключать, управлять, осуществлять мониторинг и контролировать данные от различного оборудования и ПО промышленной автоматизации – от полевых устройств до корпоративных информационных систем.
Использование MasterOPC дает возможность разработчикам аппаратных решений IIoT существенно сократить расходы на разработке встроенного программного обеспечения и ускорить выпуск устройств.
Пользователям доступны возможности сбора данных по протоколам:
— Profinet.
— OPC UA.
— BACnet.
— IEC 60870-5-104.
— SNMP.
— MQTT.
А также опрос ряда счетчиков, таких как:
— Меркурий 230, 233, 234,236.
— Счетчики-регистраторы «Пульсар».
— СЭТ-4ТМ, ПСЧ-4ТМ, ПСЧ-3ТМ.
Данные, полученные при использовании перечисленных протоколов и счетчиков, можно конвертировать в OPC UA, MQTT, IEC60870-5-104.
Демо-версию обновленного ОРС-сервера (64 битная редакция) можно скачать здесь.
Инструкция по установке содержится в дистрибутивах Trial-версий ОРС-серверов, а также в web-справке:
Modbus Universal MasterOPC Server, Multi-Protocol MasterOPC Server.
Обновленный официальный прайс-лист доступен в соответствующем разделе.
OPC UA в ModBus
Преобразователь OPC UA в протокол ModBus (Slave) для Linux
Может запускаться на PC-совместимых компьютерах x64, а так же ARMv7, ARM64 (aarch64) (платы Raspberry pi, Banana pi, Orange pi, Nanopi и другие)
- Программа может получать данные по протоколам ModBus RTU, ModBus TCP и ModBus RTU поверх TCP, OPC UA.
- Передача данных по протоколу ModBus RTU через 2 СОМ-порта.
- Передача данных по протоколу ModBus TCP нескольким клиентам через 2 TCP-порта или…
- Передача данных по протоколу ModBus RTU поверх TCP нескольким клиентам через 2 TCP-порта.
- Режим обратного соединения ModBus RTU поверх TCP. Инициатива TCP-соединения исходит от ModBus-slave (Преобразователя). Запросы протокола ModBus посылает ModBus-master ModBus-слэйву. Используется, когда у ModBus-master статический IP-адрес, а у ModBus-slave динамический.
- Передача данных по протоколу МЭК-60870-5-104 8-ми клиентам через один TCP-порт.
- Можно использовать как преобразователь ModBus в МЭК 60870-5-104.
- Настройка передачи данных только определенным IP-адресам.
- ПО рассчитано на работу с 10000 тэгов.
- Есть возможность быстрого импорта тэгов из csv-файла.
- Есть возможность быстрого импорта тэгов из драйвера и генерации ModBus адресов.
- Есть возможность отображения данных через Web-браузеры.
- С помощью графического редактора можно нарисовать мнемосхему из графических примитивов, создавать свою библиотеку изображений, вставлять на мнемосхему различные SVG-изображения, созданные в других более продвинутых редакторах. Можно создавать кнопки перехода на другие мнемосхемы.
Пробный ознакомительный период составляет 5 дней.