#opc #opc-ua
#opc #opc-ua
Вопрос:
Я прочитал значение nodeid с сервера opcua. При первом запуске сервера NodeID равен «ns = 2; i = 10934», и я хорошо его прочитал, но после перезапуска сервера NodeID меняется на «ns = 4; i = 10934». Мое приложение не может прочитать значение, потому что оно запоминает NodeID «ns = 2; i = 10934». Какую процедуру я могу сделать, чтобы решить эту проблему?
Комментарии:
1. Добро пожаловать в Stack Overflow. Пожалуйста, добавьте краткое описание, код, ошибки ваших поисковых / исследовательских работ, как предлагается
Ответ №1:
Это очень хороший вопрос, и его часто упускают из виду. Я предполагаю, что вы разрабатываете свое клиентское приложение, поэтому для этого вы используете какой-то SDK.
В качестве основного принципа на стороне клиента вы должны хранить свои идентификаторы узлов со ссылками на NamespaceUris вместо NamespaceIndexes . OPC UA имеет тип ExpandedNodeId, который может предоставлять namespaceURI вместо NamespaceIndex, и поэтому он предоставляет лучшую альтернативу для хранения идентификаторов. Только вам нужно будет выполнить преобразование между NodeID и ExpandedNodeId, чтобы иметь возможность их сохранять, а затем выполнить то же самое в обратном направлении, чтобы использовать службы, такие как read, на сервере. Некоторые SDK делают это проще, чем другие, и вам нужно будет обратиться к документации того, который вы используете.
Другой альтернативой является сохранение NamespaceArray сервера (доступного из объекта Server) в вашем клиенте, и всякий раз, когда вы повторно используете идентификаторы узлов, вы будете сравнивать предыдущий NamespaceArray с текущим, а затем преобразовывать NamespaceIndexes во всех сохраненных идентификаторах узлов соответственно.