Архитектура OPC UA: информационная модель, безопасность, сеансы и транспорт
OPC UA (IEC 62541) — это 13-частный стандарт, определяющий платформонезависимую сервис-ориентированную архитектуру для промышленной и строительной автоматизации связи. В отличие от своего предшественника OPC Classic (который был только для Windows COM/DCOM), OPC UA работает на любой ОС, включает полную модель безопасности и предоставляет унифицированную информационную модель, делающую каждый сервер самодокументируемым — устраняя необходимость во внешних словарях данных при интеграции BMS, SCADA и IoT-платформ.
Структура стандарта IEC 62541
IEC 62541 состоит из 13 пронумерованных частей. Части 1–7 определяют базовую архитектуру; части 8–14 охватывают отображения, безопасность и профили. Для интеграторов автоматизации зданий наиболее важными являются части 1 (Концепции), 3 (Модель адресного пространства), 4 (Сервисы), 6 (Отображения — кодирование и транспорт), 7 (Профили) и сопутствующая спецификация IEC 62541-100 (OPC UA для зданий).
| Часть | Название | Актуальность |
|---|---|---|
| IEC 62541-1 | Концепции и обзор | Базовая архитектура, модель сервисов, концепция информационной модели |
| IEC 62541-3 | Модель адресного пространства | Типы NodeClass, ссылки, атрибуты — основа модели данных |
| IEC 62541-4 | Сервисы | Наборы сервисов Read, Write, Browse, Subscribe, Call — все API сервера |
| IEC 62541-6 | Сопоставления | Двоичное кодирование (UA Binary), XML-кодирование, транспорт opc.tcp, HTTPS, WebSockets |
| IEC 62541-7 | Профили | Профили сервера, клиента, транспорта для проверки соответствия |
| IEC 62541-12 | Обнаружение и глобальные службы | Локальный сервер обнаружения (LDS), Глобальный сервер обнаружения (GDS) для управления сертификатами |
| IEC 62541-100 | OPC UA для зданий | Информационная модель на основе IFC для пространств, зон, ОВиК, учета энергии |
Информационная модель: типы NodeClass и ссылки
Каждый фрагмент данных на сервере OPC UA представлен как Узел в адресном пространстве. Узлы имеют атрибут NodeClass, определяющий их роль. Узлы связаны друг с другом типизированными Ссылками — например, HasComponent, HasProperty, Organizes, HasSubtype. Это создает направленный граф, который клиенты могут просматривать для обнаружения содержимого сервера без предварительного знания структуры данных.
| NodeClass | Назначение | Пример в BMS |
|---|---|---|
| Объект | Контейнер, группирующий связанные узлы; не имеет собственного значения | AHU_01 — объект, группирующий все переменные AHU |
| Переменная | Содержит типизированное значение; доступна для чтения и, опционально, для записи | SupplyAirTemp (Float, °C), FanSpeed (UInt16, об/мин) |
| Метод | Вызываемая функция; входные и выходные аргументы | ResetAlarm(), SetOperatingMode(режим: Int32) |
| Представление | Именованное подмножество адресного пространства для фильтрованного просмотра | EnergyMeteringView, показывающая только узлы с кВт·ч |
| Тип данных | Определяет скалярный или структурированный тип, используемый переменными | EnumHvacMode {Auto=0, Heating=1, Cooling=2} |
| Тип объекта | Шаблон для узлов Object (как определение класса) | HVACUnitType со стандартными компонентами |
| Тип переменной | Шаблон для узлов Variable с атрибутами по умолчанию | AnalogItemType со свойством EngineeringUnits |
| Тип ссылки | Определяет семантику ссылки между узлами | HasComponent, HasProperty, Organizes |
Адресное пространство: пространства имен и обозреваемое дерево
Адресное пространство структурировано как обозреваемое дерево. Каждый узел идентифицируется NodeId, состоящим из индекса пространства имен и идентификатора (числовой, строковый или GUID). Пространство имен 0 (ns=0) всегда является стандартным пространством имен OPC UA, содержащим встроенные типы и стандартные узлы. Пространства имен 1+ назначаются сервером для содержимого, специфичного для поставщика или приложения. Клиенты обнаруживают таблицу пространств имен через вызов сервиса GetNamespaceArray.
Адресное пространство OPC UA — пример BMS
Objects (ns=0;i=85) ← OPC UA standard root
├── Server (ns=0;i=2253) ← always present, server diagnostics
└── Building_01 (ns=1;s=Building_01) ← application namespace
├── Floor_02 (ns=1;s=Building_01/Floor_02)
│ ├── AHU_01 (ns=1;s=AHU_01) [Object]
│ │ ├── SupplyAirTemperature (ns=1;s=AHU_01.SAT) [Variable, Float]
│ │ │ ├── EngineeringUnits [Property: "°C"]
│ │ │ ├── EURange [Property: Low=0, High=60]
│ │ │ └── StatusCode [Property: Good/Bad/Uncertain]
│ │ ├── FanSpeed (ns=1;s=AHU_01.FanRPM) [Variable, UInt16]
│ │ ├── DamperPosition (ns=1;s=AHU_01.Damper) [Variable, Byte, 0–100%]
│ │ └── ResetAlarm (ns=1;s=AHU_01.ResetAlarm) [Method]
│ └── VAV_Zone_2A (ns=1;s=VAV_2A) [Object]
│ ├── RoomTemperature (ns=1;s=VAV_2A.RoomTemp) [Variable, Float]
│ └── Setpoint (ns=1;s=VAV_2A.SP) [Variable, Float, writable]
└── Meters (ns=1;s=Meters)
└── Main_kWh (ns=1;s=Meter.kWh) [Variable, Double]Клиенты перемещаются от корня Objects с помощью сервиса Browse, следуя по HierarchicalReferences (HasComponent, Organizes, HasProperty) для обнаружения узлов. Сервис TranslateBrowsePathsToNodeIds позволяет клиентам перейти непосредственно к известному пути, не обходя все дерево — полезно для производительного опроса известных переменных.
Варианты транспорта
OPC UA определяет три транспортных привязки. Выбор влияет на задержку, прохождение через межсетевые экраны и накладные расходы протокола. OPC UA Binary по TCP является стандартом для интеграции BMS на уровне завода; HTTPS и WebSockets используются для облачных или доступных через браузер интерфейсов.
| Транспорт | Префикс URI | Порт по умолчанию | Накладные расходы | Примечания |
|---|---|---|---|---|
| OPC UA TCP | opc.tcp:// | 4840 | Наименьшие — двоичная кадровая структура | Лучший для заводского уровня; постоянное TCP-соединение; не дружественен к межсетевым экранам |
| OPC UA HTTPS | opc.https:// | 443 | Средние — HTTP/1.1 + TLS | Дружественен к межсетевым экранам; может проходить через прокси; более высокая задержка на запрос |
| OPC UA WebSockets | opc.wss:// | 443 | Низкие — кадровая структура WebSocket | Совместим с браузером; постоянное соединение; используется для веб-SCADA и облачных шлюзов |
Рекомендация для производственного уровня: Всегда используйте opc.tcp:// в локальной сети здания или OT VLAN. Постоянное TCP-соединение устраняет накладные расходы на TLS-рукопожатие для каждого запроса и обеспечивает минимальную задержку подписки на уведомления. HTTPS оставляйте для межсайтовых или облачных интеграций, где порт брандмауэра 4840 не может быть открыт.
Режимы безопасности и политики безопасности
Безопасность OPC UA согласовывается на уровне Secure Channel до обмена любыми прикладными сообщениями. Сервер публикует поддерживаемые EndpointDescriptions (комбинации MessageSecurityMode и SecurityPolicyUri). Клиент выбирает одну из них при открытии соединения. Никогда не используйте None в производственной среде — все данные передаются в открытом виде без защиты целостности.
| MessageSecurityMode | Защита | Вариант использования |
|---|---|---|
| None | Без подписи, без шифрования | Только лаборатория / разработка — никогда в производстве |
| Sign | Целостность HMAC сообщений; без шифрования полезной нагрузки | Критичная к производительности SCADA в доверенной закрытой LAN |
| SignAndEncrypt | HMAC + AES шифрование всех полезных нагрузок сообщений | Стандарт для всех BMS и облачных интеграций |
SecurityPolicyUri выбирает криптографические алгоритмы. Текущие рекомендуемые политики (по состоянию на IEC 62541-7:2022):
| SecurityPolicyUri | Асимметричный (обмен ключами) | Симметричный (данные) | Статус |
|---|---|---|---|
| Basic128Rsa15 | RSA-PKCS1-v1.5 / 1024-бит | AES-128-CBC | Устарело — не использовать |
| Basic256 | RSA-OAEP / 1024-бит | AES-256-CBC | Устарело — не использовать |
| Basic256Sha256 | RSA-OAEP / 2048-бит + SHA-256 | AES-256-CBC + SHA-256 HMAC | Актуально — широко поддерживается |
| Aes128Sha256RsaOaep | RSA-OAEP / 2048-бит + SHA-256 | AES-128-CBC + SHA-256 HMAC | Актуально — меньшая нагрузка на ЦП |
| Aes256Sha256RsaPss | RSA-PSS / 2048-бит + SHA-256 | AES-256-CBC + SHA-256 HMAC | Рекомендуется — самый надежный, используйте где поддерживается |
Уведомление об устаревании: Basic128Rsa15 и Basic256 используют 1024-битные ключи RSA и SHA-1, которые считаются криптографически слабыми. IEC 62541-7:2022 помечает их как устаревшие. Kepware KEPServerEX 6.x и Siemens DESIGO CC поддерживают Basic256Sha256 и Aes256Sha256RsaPss. Отключите устаревшие политики в конфигурации рабочего сервера для предотвращения атак понижения уровня безопасности.
Методы аутентификации
Аутентификация выполняется на уровне сеанса (выше защищенного канала). OPC UA определяет три типа токенов идентификации ActivateSession. Аутентификация на основе сертификатов является наиболее безопасной и требуется для промышленных стандартов безопасности, таких как IEC 62443-3-3 Уровень безопасности 2.
| Тип токена | Описание | Рекомендация |
|---|---|---|
| AnonymousIdentityToken | Нет учетных данных — любой клиент может создать сессию | Отключить в продакшене; допустимо только для публичных панелей мониторинга только для чтения |
| UserNameIdentityToken | Имя пользователя и пароль; пароль шифруется с использованием открытого ключа сервера | Допустимо для доступа оператора; использовать с транспортом Sign+Encrypt |
| X509IdentityToken | Клиент предъявляет действительный сертификат X.509; сервер проверяет по списку доверенных | Требуется для интеграции «машина-машина» и соответствия IEC 62443 SL-2 |
Сессии и подписки
Сессия устанавливается поверх защищенного канала после аутентификации. Сессии имеют RequestedSessionTimeout (обычно 60–3600 секунд); если клиент не отправляет keep-alive до истечения тайм-аута, сервер удаляет сессию и все ее подписки. Клиенты должны обрабатывать переподключение с восстановлением сессии или передачей.
Подписки — основной механизм эффективного мониторинга данных. Вместо многократного опроса переменных (что генерирует излишний трафик) клиенты создают подписку с PublishingInterval и добавляют в нее MonitoredItems. Сервер опрашивает каждый MonitoredItem с интервалом SamplingInterval и помещает изменения значений в очередь; при срабатывании PublishingInterval все накопленные уведомления отправляются в одном сообщении PublishResponse.
Параметры подписки — ключевые поля
CreateSubscription request:
RequestedPublishingInterval: 1000 // ms — how often server sends Publish
RequestedMaxKeepAliveCount: 10 // Publish cycles before keep-alive sent
RequestedLifetimeCount: 30 // LifetimeCount × PublishingInterval = session timeout
MaxNotificationsPerPublish: 1000 // cap notifications per PublishResponse
PublishingEnabled: true
MonitoredItem parameters:
SamplingInterval: 500 // ms — server samples item at this rate
// must be ≥ server MinSupportedSampleRate
QueueSize: 10 // buffer for overrun; 1 = last value only
DiscardOldest: true // discard oldest on queue overflow
DeadbandType: None / Absolute / Percent
DeadbandValue: 0.5 // Absolute: only report if change > 0.5 units
// Percent: only report if change > 0.5% of EURangeФильтрация по зоне нечувствительности для датчиков HVAC: Установка абсолютной зоны нечувствительности 0,2–0,5°C для переменных температуры предотвращает перегрузку подписки тривиальными обновлениями, вызванными шумом. Для счетчиков энергии типична процентная зона нечувствительности 1% на счетчиках кВт·ч. Фильтрация по зоне нечувствительности выполняется на стороне сервера, снижая загрузку ЦП и сетевой трафик.
Спецификации-компаньоны OPC UA
Спецификации-компаньоны расширяют базовый стандарт OPC UA доменно-специфичными информационными моделями. Они определяют стандартные ObjectTypes, VariableTypes и URI пространств имен, чтобы устройства разных производителей предоставляли данные в согласованной, интероперабельной структуре. Инженеры по автоматизации зданий должны знать следующие спецификации-компаньоны:
| Спецификация | Область применения | Ключевые ObjectTypes |
|---|---|---|
| IEC 62541-100 (OPC UA для зданий) | Автоматизация зданий: пространства, зоны, оборудование, учет энергии | BuildingType, SpaceType, HVACSystemType, EnergyMeterType |
| OPC UA для FDI (Интеграция полевых устройств) | Полевые устройства: датчики, исполнительные механизмы, приборы | DeviceType, FunctionBlockType, ParameterType |
| OPC UA для PLCopen | Элементы программ ПЛК: функциональные блоки, аварийные сигналы, задачи | FunctionBlockType, AlarmType, TaskType |
| OPC UA для I4.0 Asset Administration Shell | Цифровой двойник: метаданные актива, подмодели, свойства | AssetAdministrationShellType, SubmodelType |
| OPC UA для устройств (DI) | Базовая информация об аппаратном устройстве | DeviceType, ComponentType, SoftwareType |
Нужна настройка сервера OPC UA для вашего проекта BMS?
Мы настраиваем и защищаем серверы OPC UA на Siemens DESIGO CC, Beckhoff TwinCAT и Kepware KEPServerEX — включая управление сертификатами, усиление политики безопасности и настройку подписки для плотных развертываний датчиков.
Запросить расчёт →