OPC UA
OPC UA драйвер
Зависимости проекта
Предварительные условия
Логирование
Логирование по умолчанию выполняется в файл
/var/log/opc_driver/opc_driver.log
Пользователь, запускающий программу, должен обладать правами на запись в этот файл.
Параметром запуска -l
можно изменить имя файла. Каталог записи логов изменить нельзя.
Файл конфигурации
Драйвер читает конфигурацию из файла по умолчанию
/etc/driver.json
либо из файла, указанного параметром запуска -c
.
Описание конфигурации см. ниже.
Пример конфигурационного файла расположен в каталоге config
./config/driver.json
Простейший эмулятор OPC UA сервера
При разработке использовался эмулятор OPC UA сервера в докере, который устанавливается и
запускается командами
docker pull iotechsys/opc-ua-sim:1.2
docker run --rm --name opc-ua-sim -p 49947:49947 iotechsys/opc-ua-sim:1.2 -l /example-scripts/simulation.lua
Параметры запуска
- -c - используется указанный файл конфигурации (полный путь) вместо файла по умолчанию
- -d - выводить в журнал отладочную информацию
- -l - выводить логи в указанный файл вместо файла по умолчанию
- -v - выводить логирование в указанный файл вместо файла по умолчанию
Пример запуска с параметрами
./_bin/opc_driver -d -v -c /etc/opc_driver/config/opc_driver.json
Описание конфигурации
Файл driver.json соответствует требованиям к файлам конфигурации драйверов нового поколения. Ниже приведены требования к
каждой из секций со стороны драйвера.
mqtt
Обязательна. Авторизация пока не реализована.
Пример:
"mqtt": {
"port": 1883,
"url": "localhost"
}
port.connection
Обязательна.
type: "opc.ua". Другие типы игнорируются.
tcp: обязательна. Авторизация пока не реализована
enabled: по умолчанию true. Если false, порт игнорируется.
poll_interval: по умолчанию 60. Интервал опроса в секундах.
Пример:
"connection": {
"enabled": true,
"poll_interval": 60,
"rto": 2000,
"sto": 2000,
"type": "opc.ua",
"tcp": {
"url": "opc.tcp://10.4.2.115",
"port": 54000
}
}
port.devices
Обязательна. Содержит описания устройств ОРС сервера.
name: обязательна. Используется в топике сообщений.
cname: обязательна. По ней ищется набор параметров.
sid: обязательна. Идентификатор пространства имен параметров ОРС сервера.
enabled: по умолчанию true. Если false, игнорируется.
Пример:
{
"name": "PD_SIMULATOR",
"sid": 1,
"cname": "simulator"
}
port.parameters.config
Обязательна. Содержит описания параметров ОРС сервера и связь с устройствами.
cname: обязательна. По ней ищется связь с устройствами.
channels: обязательна. Содержит описания параметров.
port.parameters.channels
Массив параметров. Каждый параметр описывается следующими атрибутами.
name: обязательно. Используется в топике сообщений.
node_id: обязательно. Имя узла на ОРС сервере.
enabled: по умолчанию true. Если false, игнорируется.
value_type: не обязательно, если не планируется писать данные в параметр OPC-сервера. При чтении используются метаданные с сервера. В дальнейшем,
при смене типа опроса на бинарный, может быть востребовано.
В настоящее время используются типы: bit, i8, u8, i16, u16, i32, u32, i64, u64, str, float32, float64, date_time
Использование других стандартных атрибутов пока не реализовано.
Пример:
{
"name": "Saw",
"node_id": "PN_SIMULATOR.PD_SIMULATOR.Saw",
"value_type": "float32"
}
Пример конфигурационного файла
{
"log": {
"is_debug": true,
"max_size": 2
},
"mqtt": {
"port": 1883,
"url": "localhost"
},
"ports": [
{
"connection": {
"enabled": true,
"poll_interval": 10,
"rto": 2000,
"sto": 2000,
"type": "opc.ua",
"tcp": {
"url": "opc.tcp://10.51.4.59",
"port": 4840
}
},
"devices": [
{
"name": "oven_11asud1",
"sid": 4,
"cname": "oven_11asud1"
}
],
"parameters": [
{
"cname": "oven_11asud1",
"config": {
"channels": [
{
"name": "Leakage_sensor_1",
"node_id": "|var|PLC210 (Arm32bit + Linux ).Application.PLC_PRG.sl_prot[1]",
"value_type": "INT16"
},
{
"name": "Leakage_sensor_2",
"node_id": "|var|PLC210 (Arm32bit + Linux ).Application.PLC_PRG.sl_prot[2]",
"value_type": "INT16"
},
{
"name": "Leakage_sensor_3",
"node_id": "|var|PLC210 (Arm32bit + Linux ).Application.PLC_PRG.sl_prot[3]",
"value_type": "INT16"
},
{
"name": "Leakage_sensor_4",
"node_id": "|var|PLC210 (Arm32bit + Linux ).Application.PLC_PRG.sl_prot[4]",
"value_type": "INT16"
},
{
"name": "Leakage_sensor_5",
"node_id": "|var|PLC210 (Arm32bit + Linux ).Application.PLC_PRG.sl_prot[5]",
"value_type": "INT16"
},
{
"name": "Leakage_sensor_6",
"node_id": "|var|PLC210 (Arm32bit + Linux ).Application.PLC_PRG.sl_prot[6]",
"value_type": "INT16"
}
]
}
}
]
},
{
"connection": {
"enabled": true,
"poll_interval": 10,
"rto": 2000,
"sto": 2000,
"type": "opc.ua",
"tcp": {
"url": "opc.tcp://10.51.4.57",
"port": 4840
}
},
"devices": [
{
"name": "oven_11asud2",
"sid": 4,
"cname": "oven_11asud2"
}
],
"parameters": [
{
"cname": "oven_11asud2",
"config": {
"channels": [
{
"name": "Position thermalhead_1",
"node_id": "|var|PLC210 OPC-UA.Application.PLC_PRG.head_pos[1]",
"value_type": "BOOL"
},
{
"name": "Position thermalhead_2",
"node_id": "|var|PLC210 OPC-UA.Application.PLC_PRG.head_pos[2]",
"value_type": "BOOL"
},
{
"name": "Position thermalhead_3",
"node_id": "|var|PLC210 OPC-UA.Application.PLC_PRG.head_pos[3]",
"value_type": "BOOL"
},
{
"name": "Position thermalhead_4",
"node_id": "|var|PLC210 OPC-UA.Application.PLC_PRG.head_pos[4]",
"value_type": "BOOL"
},
{
"name": "Position thermalhead_5",
"node_id": "|var|PLC210 OPC-UA.Application.PLC_PRG.head_pos[5]",
"value_type": "BOOL"
}
]
}
}
]
}
]
}