OPC UA - opcua milo eclipse - переподключение, создание соединения вручную, подписка на структуру (объект)

Я студент, работаю над диссертацией, где мне нужно соединение OPC UA. Я потратил почти неделю, пытаясь решить эту проблему самостоятельно, но безуспешно, поэтому я хотел бы задать несколько вопросов и был бы очень рад, если бы кто-нибудь мог мне помочь.

1) Подписка на структуру (объект с полями) Мне нужно подписаться на объект, который включает в себя два массива (представляющих кривую), поэтому есть массив с координатами x и массив с координатами y, но я понятия не имею, как сделай это. Я могу подписаться на них отдельно, а не на всю структуру.

2) Есть ли возможность, как подписаться, не используя обнаружение конечных точек? Я спрашиваю, что я хотел бы создать соединение самостоятельно, чтобы даже подумать, что сервер OPC UA не работает в данный момент приложение будет подключаться к нему, когда оно станет доступным. Это невозможно, когда я использую обнаружение конечных точек, потому что оно не работает. Но я думаю, что milo должен обрабатывать переподключение, если я создаю конечную точку вручную, или я ошибаюсь?

Якуб Знаменачек


person Jakub Znamenáček    schedule 03.11.2020    source источник


Ответы (1)


  1. Вы просто подписываетесь на NodeId переменной со структурированным значением. Вам нужно будет убедиться, что DataTypeDictionary читается клиентом при запуске. См. этот пример. Если сервер правильно отображает определение структуры в словаре типов данных, больше ничего не требуется.

  2. Вы несете ответственность за повторные попытки, пока не получите EndpointDescription. Если у вас есть конечная точка и вы создали экземпляр OpcUaClient, он будет подключаться и продолжать повторное подключение после первого вызова connect(), но вам нужно получить конечную точку и настроить клиента самостоятельно.

person Kevin Herron    schedule 03.11.2020
comment
1) Спасибо за ответ. Я рассмотрю этот пример. 2) Я знаю об этом, но когда я знаю IP-адрес сервера и т. Д., Я не могу создать конечную точку вручную? Потому что не хотел бы писать какие-то циклические проверки для EndpointDescription. - person Jakub Znamenáček; 03.11.2020
comment
1) Хорошо, я просмотрел код, и если я прав, ExtensionObject хранит данные, и мне нужно их декодировать. Думаю, это метод .decode (). Тогда я немного запутался. Я думаю, что в client.getSerializationContext () включен DataTypeManager, но я понятия не имею, где. Было бы возможно, если бы кто-нибудь дал мне пошаговое руководство (не необходимый код, но я был бы признателен), как это сделать. Я имею в виду что-то вроде - ›создайте то и это, потому что вы будете использовать это для этого - person Jakub Znamenáček; 03.11.2020
comment
Пока вы не подключитесь к серверу хотя бы один раз, у вас не будет всей информации, которая может вам понадобиться для создания EndpointDescription, например у вас нет сертификата сервера. - person Kevin Herron; 03.11.2020
comment
Большое спасибо за быстрый ответ, верно ли это, когда я пытаюсь подключиться небезопасно? - person Jakub Znamenáček; 03.11.2020
comment
У вас также нет ApplicationDescription, содержащего URI сервера и другую информацию. Прекратите плавать вверх по течению, напишите цикл, который пытается подключиться, пока вы не сможете выбрать конечную точку для настройки клиента. - person Kevin Herron; 03.11.2020
comment
Хорошо, спасибо, я просто хотел быть уверен на 100%, что делаю все правильно. Есть ли у вас какие-нибудь предложения, как часто мне следует проверять соединение? Я не знаю, насколько большая проблема, если я буду проверять, например, каждые 5 секунд, потому что может случиться так, что сервер не будет подключен в течение одного месяца или более. - person Jakub Znamenáček; 03.11.2020
comment
Что касается автоматического переподключения, я получаю этот журнал после переподключения. Вы знаете, что это значит Notifying 1 java.io.IOException: Operation timed out, Unable to transfer subscription, resubscribing to NodeId{ns=3, id="PrServo_EdgeExchange"."runtimeData"."trends"."updateHmiTrend"} , Notifying 1 ServiceFaultListeners. Я знаю, что со мной тяжело ... - person Jakub Znamenáček; 03.11.2020
comment
Сообщение журнала - это то, что вы, должно быть, написали, это не часть Майло. Похоже, что при повторном подключении передача подписки по какой-то причине не выполняется, но из сообщения здесь не ясно, почему. Это может помочь запечатлеть это в Wireshark. Вам также следует подумать о переносе этого разговора в список рассылки milo-dev вместо комментариев здесь. - person Kevin Herron; 03.11.2020
comment
Спасибо, сделаю, на всякий случай, вы имеете в виду [email protected]? - person Jakub Znamenáček; 04.11.2020