Использование Azure IoT Edge и OPC UA без ускорителя решений Connected Factory
Прежде всего, я хочу задать свой вопрос и уточнить в этом посте:
Можно ли использовать пограничный шлюз Azure IoT для серверов OPC UA без ускорителя решений Connected Factory и как это делается?
Я знаю, это может звучать странно, но решение Connected Factory не отвечает моим потребностям в большинстве аспектов моего проекта, за исключением возможности подключения серверов OPC UA.
Теперь, чтобы развить это дальше, мне нужно описать мой проект. В моей локальной сети установлено несколько серверов OPC UA и компьютер под управлением Windows 10, работающий в качестве шлюза Azure. В Azure есть активированные ресурсы IoT-Hub и Time Series Insights. Кроме того, есть веб-приложение, которое извлекает данные из TSI и визуализирует их. При использовании OPC издателя на шлюзе это работает просто отлично. И OPC-издатель, и прокси-сервер работают в Windows, а не в контейнере Docker.
Если я использую ускоритель решений Connected Factory, я могу добавить и просмотреть издателя. Однако я не могу подключиться к любому другому серверу OPC UA в сети, но это не проблема, так как я все равно не буду использовать Connected Factory. Настоящая проблема здесь заключается в том, как подключиться к прокси-серверу OPC без ускорителя решений Connected Factory.
В доступном учебном пособии используется ускоритель решений Connected Factory, а в докер-контейнере работает издатель и прокси-сервер. ( https://docs.microsoft.com/de-de/azure/iot-accelerators/iot-accelerators-connected-factory-gateway-deployment и последующие)
И в репозитории OPC github proxy это вообще не обсуждается. ( https://github.com/Azure/iot-edge-opc-proxy)
Даже вопросы по всем соответствующим проектам не обсуждают это. ( https://github.com/Azure/iotedge, https://github.com/Azure/iot-edge-opc-proxy)
Я понятия не имею, как реализовать эту функциональность. В обзоре архитектуры ускорителя решений ( https://docs.microsoft.com/de-de/azure/iot-accelerators/iot-accelerators-connected-factory-sample-walkthrough) кратко упоминается, как это работает в ускорителе решений, но не объясняется, как реализовать OPC Proxy и OPC UA Stack в пользовательском WebApp.
Я отчаянно нуждаюсь в помощи и буду признателен, если кто-нибудь подскажет, как решить эту проблему. Я с удовольствием предоставлю больше информации, если это необходимо. И, конечно, я опубликую решение, если я заставлю это работать.
Спасибо заранее и хорошего дня
Даниил
2 ответа
Чтобы ответить на ваш первый вопрос: Да, вы можете использовать OPC UA Publisher в Azure IoT Edge без использования решения Connected Factory!
Смотрите здесь, как настроить издателя: https://github.com/Azure/iot-edge-opc-publisher
Модуль отправит ваши данные в формате OPC UA-JSON в IoT Hub. Оттуда вы можете делать с ней все что угодно. Отобразите его в Azure Time Series Insights, выполните через некоторую потоковую обработку (например, Azure Stream Analytics), обработайте ее с помощью функций Azure и т. Д. Стр.
Обратите внимание на следующие строки в файле OpcSessionHelper.cs, это перетаскивает прокси-транспорт в стек OPC UA, используемый в WebApp:
#if !DIRECT_TCP_CONNECT
// initialize our custom transport via the proxy
Socket.Provider = new DefaultProvider(ConfigurationProvider.GetConfigurationSettingValue("IotHubOwnerConnectionString"));
WcfChannelBase.g_CustomTransportChannel = new ProxyTransportChannelFactory();
#endif
После этого поверхность API OPC использует транспорт прокси, реализованный в пакетах nuget Microsoft.Azure.Devices.Proxy и Microsoft.Azure.Devices.Proxy.Opc.Ua
BrwoserController.cs является основным местом, где в WebApp используется API OPC UA.
Вы также можете посмотреть на это, которое заменит функциональность OPC Proxy.