OPC Unified Architecture (англ. Унифицированная архитектура OPC) — спецификация, определяющая передачу данных в промышленных сетях и взаимодействие устройств в них. Разработана промышленным консорциумом OPC Foundation и значительно отличается от его предшествующих спецификаций. Первая версия Унифицированной архитектуры OPC была выпущена после 3 лет работ над спецификацией и еще 1 года прототипирования.
 Предыдущие спецификации OPC Foundation опирались на механизмы COM/DCOM, но несмотря на то, что привязка к COM/DCOM помогает OPC хорошо работать в распределённых системах, имеются также и отрицательные стороны:
 Эти и другие причины породили решение о разработке нового независимого коммуникационного стека для OPC UA, который заменит COM/DCOM. Основные характеристиками этого стека:
 Этот коммуникационный стек отражает только начало различных инноваций. Унифицированная архитектура OPC является сервисно-ориентированной архитектурой (SOA) и основана на различных логических уровнях.
 Базовые сервисы OPC — это описания абстрактных методов, независящие от протокола и обеспечивающий основу всей функциональности OPC UA. Транспортный уровень помещает эти методы в протокол, что означает что он отвечает за сериализацию/десериализацию данных и передачу их по сети. Для этих целей определены два протокола. Один двоичный TCP протокол, оптимизированный для высокой производительности, и второй на основе веб-сервисов.
 Информационная модель OPC больше не основывается только на иерархических папках, элементах и свойствах, вместо этого используется, так называемая, полная ячеистая сеть, основанная на узлах. Кроме того, эти узлы могут передавать всё многообразие метаинформации. В простейшем случае узел можно сравнить с объектом, известным из объектно-ориентированного программирования. Он имеет атрибуты доступные для чтения (DA, HDA), методы, которые могут быть вызваны (Commands), и инициирующие события (triggering events), которые могут быть переданы (AE, DA DataChange). Узлы используются для обработки данных наравне со всеми другими типами метаданных. Используемое пространство имён OPC теперь также включает модель типов, используемую для описания всех возможных типов данных. Основываясь на вышеизложенном, другие организации, например, EDDL, определяют свой собственный источник информации. Клиентское программное обеспечение может иметь возможность проверки того, какой из так называемых Профилей поддерживает сервер. Дополнительно, может быть получена информация о том, поддерживает ли сервер, например, профиль EDDL и, следовательно, клиент может узнать, что здесь также доступно описание определённого EDDL устройства. Добавленными новыми и важными возможностями OPC UA являются:
 Как описано выше есть два протокола. Прикладной программист будет распознавать это только через различие в URL передаваемые им для двоичного протокола opc.tcp://server и http://server/ для веб-служб. Иначе говоря, OPC UA работает полностью прозрачно для API.
 1. Двоичный протокол
 2. Веб-службы (SOAP)
 Так как имеющийся стек ANSI C поддерживает оба протокола, то ожидается, что большинство конечных продуктов смогут обмениваться информацией по более эффективному двоичному протоколу.
 Спецификация OPC UA является многоэлементной и состоит из следующих частей:
 В противоположность спецификациям, основывающихся на COM, спецификации Унифицированной архитектуры не являются чисто прикладными. Они описывают существенно внутренние механизмы UA, функционирующие на базе коммуникационного стека, и обычно представляют интерес только для тех, кто портирует UA стек на некоторое устройство либо хочет реализовать свой собственный.
 Прикладные программисты пишут код на OPC UA API и поэтому, в основном, пользуются документацией по API. Тем не менее, части 3, 4 и 5 спецификаций могут быть интересны и для прикладных программистов.
 В архитектуре приложения OPC UA, независимо от того, клиентская это часть или серверная, можно выделить следующие уровни.
 Зелёные части соответствуют COM прокси/заглушкам и предоставляются OPC Foundation. Новым является уровень портирования, который позволяет легко переносить стек UA ANSI C на другие платформы. Портированная версия для Windows и Linux также предоставляется OPC Foundation. Как описывалось ранее, могут быть разработаны приложения основанные на API, подобно тому как они программировались в прошлом для COM. На конференции OPC UA DevCon в октябре 2006 в Мюнхене в живую были представлены первые прототипы. Компания ascolab GmbH, которая также разработала стек ANSI C для OPC Foundation, представила разнообразные прототипы и продемонстрировала впечатляющее взаимодействие UA клиента под Windows/.NET и UA сервера под Linux. К тому же различные UA серверы были показаны на Beckhoff PLC и встраиваемых тестовых платах европейских производителей. Из-за того, что Beckhoff PLC основаны на Windows XP Embedded и встроенный контроллер основан на ОСРВ европейских производителей.
 Безопасность UA состоит из аутентификации и авторизации, шифрования и обеспечения целостности данных при помощи сигнатур. Для этого OPC Foundation не стала заново изобретать колесо, а ориентировалась на спецификации Web Service Security. Для веб-служб используются WS Secure Conversation и следовательно они совместимы с .NET и другими реализациями SOAP. Для двоичного протокола соблюдаются алгоритмы WS Secure Conversation и также конвертируются в двоичный эквивалент. Это теперь называется UA Secure Conversation.
Как видно из рисунка выше, также присутствует смешанная версия, где код двоичен, но транспортным уровнем является SOAP. Это компрометирует эффективность двоичного кодирования и удобной для межсетевых экранов передачи. Двоичное кодирование всегда требует UA Secure Conversation. При аутентификации используются исключительно сертификаты x509. Выбор схемы сертификации, используемой приложением, возлагается на разработчиков приложений. Например, можно использовать Public Key Infrastructure (PKI) из Active Directory.
 Разработчикам UA предоставлена возможность программировать используя C API, комфортный C++ API или напрямую .NET API. Все программные интерфейсы предоставляют одинаковую функциональность. Коммуникационный стек и API предоставляются OPC Foundation.
 Реализация на .NET использует только низшую часть стека ANSI C и реализует остальную часть стека непосредственно в .NET. Это значит что только обработчики сокетов и формирование сообщений интегрированы из стека ANSI C. Десериализация имеет место непосредственно в .NET и следовательно конвертируется напрямую в структуры и объекты .NET. Это даёт лучшую производительность, чем сперва десериализация в структуру C и потом копирование данных в структуру .NET.
 Различные стеки для Java уже разрабатываются. Но приблизились к .NET в основном 3 варианта. На сегодняшний день трудно определить какой является быстрейшим.
 1. Наиболее вероятно, что быстрейшим вариантом (в терминах времени разработки) на данный момент является использование полного стека ANSI C и его инкапсуляция посредством JNI.
 2. Код основывается напрямую на сетевом уровне (подобно реализации на .NET) и десереализуется в Java.
 3. Реализация полностью на Java
 В качестве альтернативы есть простой вариант, поддерживающий только протокол веб-службы. Для этого необходим инструментарий SOAP, поддерживающий WS Security.