NodeId как строка в ModelCompiler OPC UA - PullRequest
0 голосов
/ 31 августа 2018

Я пытаюсь разработать сервер OPC UA самостоятельно, но, поскольку я новичок в кодировании, это довольно сложно для меня. Я начал с приложения Quickstart, найденного здесь: https://github.com/OPCFoundation/UA-.NET-Legacy

в частности, я редактирую файл ModelDesign.xml, чтобы настроить его по своему желанию https://github.com/OPCFoundation/UA-.NET-Legacy/blob/master/ComIOP/Common/Common/ModelDesign.xml

Я хотел бы определить некоторые узлы с NodeId в качестве строки (все NodeId в ModelDesign.xml в примере являются числовыми) После этого xsd я нашел "StringId" и "NumericId", которые выглядят так, как искали
https://github.com/OPCFoundation/UA-ModelCompiler/blob/master/ModelCompiler/UA%20Model%20Design.xsd
но изменение их значения в ModelDesign.xml ничего не делает с NodeId. Ошибок нет, просто компилятор назначает новые NodeIds (все числовые), как если бы он не учитывал сделанные мной изменения.

В качестве компилятора я использую ModelCompiler, найденный на GitHub https://github.com/OPCFoundation/UA-ModelCompiler

Может кто-нибудь помочь мне, пожалуйста? Как я могу настроить NodeId узлов?

Спасибо Edo

1 Ответ

0 голосов
/ 10 октября 2018

лучшее предложение, которое я могу предложить на этом этапе, - это клонировать UA-.NETStandard и запустить NetCoreConsoleServer в

UA-.NETStandard/SampleApplications/Samples/NetCoreConsoleServer

через отладчик. Менеджер узлов котла, если мне не изменяет память, использует stringID. Интерфейс INodeIdFactory в ISystemContext.cs предлагает некоторое представление о том, как генерируются идентификаторы.

ИМХО, у разработчика модели нет переключателя для принудительного использования идентификатора строки , как вы знаете . Поэтому вам нужно программно распределять stringID, а не числовые идентификаторы для узлов при загрузке сервера. Я еще не разобрался в этом.

Итак, вы можете установить точки останова в BoilerNodeManager.cs и посмотреть, как на самом деле создается идентификатор узла.

...