А между прочим, при выборе open-source движка для реализации OPC UA сервера на промышленном контроллере сейчас доступно несколько вполне зрелых вариантов, вот наиболее выгодные (не все, конечно):
open62541 (C, MPL 2.0)
Зрелая и широко применяемая реализация для встраиваемых и промышленных систем. Ключевые преимущества:
- Чистый C (C99) — минимальные зависимости, лёгкая кросс-компиляция под ARM, MIPS и другие архитектуры контроллеров.
- Малый footprint — ядро занимает десятки килобайт RAM, что критично для ресурсоограниченных платформ.
- Полнота стека — поддержка серверной и клиентской части, PubSub, Discovery, Security (Basic256Sha256, Aes128Sha256RsaOaep), исторических данных.
- Сертифицируемость — проект ориентирован на прохождение OPC Foundation Compliance Test, ряд коммерческих продуктов на его базе уже сертифицирован.
- Активное сообщество — регулярные релизы, подробная документация, широкая база примеров.
- Работает bare-metal, под RTOS (FreeRTOS, Zephyr, VxWorks, QNX), Linux, Windows.
OPC Foundation UA-.NETStandard (C#, GPL 2.0 / коммерческая)
Эталонная реализация от OPC Foundation на платформе .NET, ВАЖНО: с недавних пор лицензия не GPL 2.0 / коммерческая, а MIT.
И не стоит сразу возмущаться по поводу .NET/Java runtime, они уже пригодны для embedded, с известными ограничениями
- Максимальная полнота спецификации «из коробки», эталон совместимости.
- Плохо подходит для промышленных контроллеров с ограниченными ресурсами: типичные целевые платформы — серверы, шлюзы, десктопы.
Eclipse Milo (Java, EPL 2.0)
Качественная реализация на Java, поддерживаемая Eclipse Foundation:
- Хорошо подходит для edge (промПК), но Java можно окультурить для работы и на малоресурсных контроллерах.
- Latency и предсказуемость работы GC делают его рискованным выбором для жёстких требований реального времени.
Отдельно: клиентская часть
Если задача ограничивается реализацией OPC UA клиента на встроенной платформе, стоит обратить внимание на Systerel S2OPC (C, Apache 2.0):
- Проект изначально разрабатывался с упором на формальную верификацию и безопасность — критично для safety-/security-ориентированных систем (ядерная энергетика, железнодорожный транспорт).
- Компактная кодовая база, детерминированное поведение, отсутствие динамической аллокации в критических путях.
- Минимальный набор зависимостей, портируемость на RTOS.
- Лицензия Apache 2.0 — максимально дружественна к коммерческому использованию.
S2OPC может уступать open62541 по полноте серверных функций и размеру сообщества, но для встроенного клиента он весьма привлекательный.
Рекомендация
Для реализации OPC UA сервера на промышленном контроллере рекомендуется open62541. Это единственный из рассмотренных вариантов, который сочетает малый ресурсный footprint, написан на чистом C, активно развивается и имеет подтверждённый опыт промышленного применения.
ЦПР РТСофт имеет хороший опыт использования расширенной функциональности этой платформы для создания OPC UA серверов высокой производительности edge уровня (с поддержкой хранилища исторических данных и горячего резервирования).
Ну а если цель - программный ПЛК, то стоит сразу иметь в виду, что OPC UA сервер и клиент уже поставляется в открытом (opensource!) ForgeLogic Runtime от компании Северсталь как референс-реализация ОАСУТП, а также OPC UA сервер (python 3 реализация) встроен в наш продукт с открытым исходным кодом - OpenFB.
