Как настроить другой вид объекта "авторизованным" пользователем?
Допустим, у меня есть два пользователя - UserA и UserB. Когда пользователь A подключается к моему серверу OPC-UA на основе open62541, я хочу, чтобы он увидел:
Data
- MyData1
- MyData2
- MyData3
Когда пользователь B подключается, я хочу, чтобы он увидел:
Data
- MyData1
Является ли это возможным? и если да, то где я могу использовать его, когда я устанавливаю объектный узел
UA_Server_addObjectNode(UA_Server *server,
const UA_NodeId requestedNewNodeId,
const UA_NodeId parentNodeId,
const UA_NodeId referenceTypeId,
const UA_QualifiedName browseName,
const UA_NodeId typeDefinition,
const UA_ObjectAttributes attr,
void *nodeContext,
UA_NodeId *outNewNodeId)
1 ответ
Вы не можете сделать это напрямую через UA_Server_addObjectNode
,
Концепция, которую вы ищете в OPC UA, называется Views.
Из спецификации OPC UA, часть 3:
Посмотреть NodeClass
Базовые системы часто бывают большими, и клиенты часто интересуются только определенным подмножеством данных. Им не нужно или не нужно обременять просмотр узлов в адресном пространстве, к которым они не интересуются.
Чтобы решить эту проблему, этот стандарт определяет концепцию представления. Каждое представление определяет подмножество узлов в адресном пространстве. Весь AddressSpace является представлением по умолчанию. Каждый узел в представлении может содержать только подмножество своих ссылок, как определено создателем представления. Узел просмотра действует как корень для узлов в представлении. Представления определяются с использованием View NodeClass, который указан в таблице 5.
Все узлы, содержащиеся в представлении, должны быть доступны, начиная с узла представления, при просмотре в контексте представления. Не ожидается, что все содержащие узлы могут просматриваться непосредственно с узла просмотра, а скорее с других узлов, содержащихся в представлении.
Узел просмотра может использоваться не только в качестве дополнительной точки входа в AddressSpace, но и в качестве конструкции для организации AddressSpace и, следовательно, в качестве единственной точки входа в подмножество AddressSpace. Поэтому клиенты не должны игнорировать узлы просмотра при представлении AddressSpace. Простые клиенты, которые не работают с представлениями для целей фильтрации, могут, например, обрабатывать узел представления как объект типа FolderType (см. 5.5.3).
Итак, вам нужно создать узел просмотра и прикрепить соответствующие узлы к этому узлу просмотра. Затем пользователь может начать просмотр с этого конкретного представления.
Соответствующий метод называется UA_Server_addViewNode
, Затем используйте UA_Server_addReference
метод для ссылки на другие узлы в вашем созданном узле просмотра. Тип ссылки должен быть Organizes
,