Архитектура 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 | Модель адресного пространства | Типы узлов, ссылки, атрибуты — основа модели данных |
| 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, объединяющий все переменные приточной установки |
| Переменная | Содержит типизированное значение; доступно для чтения и, опционально, для записи | SupplyAirTemp (Float, °C), FanSpeed (UInt16, об/мин) |
| Метод | Вызываемая функция с входными и выходными аргументами | ResetAlarm(), SetOperatingMode(режим: Int32) |
| Представление | Именованная часть адресного пространства для фильтрованного просмотра | Представление EnergyMeteringView, показывающее только узлы с кВт·ч |
| Тип данных | Определяет скалярный или структурированный тип, используемый переменными | EnumHvacMode {Auto=0, Heating=1, Cooling=2} |
| Тип объекта | Шаблон для узлов-объектов (аналог определения класса) | HVACUnitType со стандартными компонентами |
| Тип переменной | Шаблон для узлов-переменных с атрибутами по умолчанию | 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, следуя по иерархическим ссылкам (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 до обмена любыми прикладными сообщениями. Сервер публикует поддерживаемые EndpointDescription (комбинации 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% от показаний kWh. Фильтрация выполняется на стороне сервера, снижая нагрузку на процессор и сетевой трафик.
Спецификации-компаньоны OPC UA
Спецификации-компаньоны расширяют базовый стандарт OPC UA отраслевыми информационными моделями. Они определяют стандартные типы объектов, типы переменных и URI пространств имён, чтобы устройства разных производителей представляли данные в единой совместимой структуре. Инженерам по автоматизации зданий стоит знать следующие спецификации-компаньоны:
| Спецификация | Область применения | Ключевые типы объектов |
|---|---|---|
| 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 | Цифровой двойник: метаданные актива, подмодели, свойства | AssetAdministrationShellType, SubmodelType |
| OPC UA для устройств (DI) | Базовая информация об аппаратных устройствах | DeviceType, ComponentType, SoftwareType |
Нужна настройка сервера OPC UA для вашего проекта BMS?
Мы настраиваем и защищаем серверы OPC UA на Siemens DESIGO CC, Beckhoff TwinCAT и Kepware KEPServerEX — включая управление сертификатами, усиление политики безопасности и настройку подписки для развертывания с большим количеством датчиков.
Запросить предложение →