我從 OPCFoundation 示例構建了一個 OPC UA 服務器 - https://github.com/OPCFoundation/UA-.NETStandard還編譯了我自己的模型 - https://github.com/Pro/UA-ModelCompiler/tree/eebf9988940a789a4f36cbef8c5bd6340f1b2f42在示例中,他們將生成的文件放在文件夾中,然后為 NodeManger、State 等定制類。我已成功加載生成的 .uanodes 文件,其中包含一些示例節點。但是我無法通過服務器端的代碼創建這些節點。測試時,我在函數中進行 - LoadPredefinedNodes(ISystemContext context)。我的結構應該是對象下面的一個節點,稱為“標簽”,在該節點中,我想在服務器運行時動態添加節點并設置它們的屬性。我在測試時使用 Integration Object 的 OPC UA 客戶端。結構看起來正確,例如:Objects => Tags => MyTestTag (Properties: Name, Description, Value)前兩個屬性是從模型文件定義中正確添加的 <!-- ### Object Types ###--> <!-- BaseType --> <ObjectType SymbolicName="TAG:TagType" BaseType="ua:BaseObjectType" IsAbstract="true" SupportsEvents="true" AccessLevel="ReadWrite"> <Description>Base type for all tags</Description> <Children> <Property SymbolicName="TAG:Name" DataType="ua:String" ValueRank="Scalar" ModellingRule="Mandatory" AccessLevel="ReadWrite"> <Description>Name of the tag</Description> </Property> <Property SymbolicName="TAG:Description" DataType="ua:String" ValueRank="Scalar" ModellingRule="Optional" AccessLevel="ReadWrite"> <Description>Description of the tag</Description> </Property> </Children> </ObjectType> <!-- ### Objects ###--> <Object SymbolicName="TAG:Tags" TypeDefinition="ua:BaseObjectType"> <Description>Contains all instances of tags</Description> <References> <Reference IsInverse="true"> <ReferenceType>ua:Organizes</ReferenceType> <TargetId>ua:ObjectsFolder</TargetId> </Reference> </References> </Object>第三個是我嘗試從服務器端代碼定義的屬性。我添加了 Value 屬性,但我不知道如何寫它的值。從這段代碼中,一個名為 MyTestTag 的節點被添加到 Tags 節點中。從模型中添加屬性“名稱”和“描述”。并且“Value”屬性是通過代碼添加的。但是,我無法為這些屬性中的任何一個設置值。在客戶端中單擊屬性 MyTestTag.Value 時,會打印錯誤“可為空的對象必須有一個值”。請告訴我我做錯了什么。
2 回答

慕少森
TA貢獻2019條經驗 獲得超9個贊
在我的例子中,問題是 nodeId。我變了
ps.NodeId = new NodeId();
// to
ps.NodeId = new NodeId(Guid.NewGuid(), NamespaceIndex);
然后它確實出現在節點樹中。

鳳凰求蠱
TA貢獻1825條經驗 獲得超4個贊
OPC-UA 的例子有更新變量的代碼位,所以我不確定它有什么問題。假設我設置了良好的價值,代碼可能如下所示:
variable.Value = value;
variable.Timestamp = DateTime.UtcNow;
variable.StatusCode = StatusCodes.Good;
variable.ClearChangeMasks(SystemContext, false);
- 2 回答
- 0 關注
- 163 瀏覽
添加回答
舉報
0/150
提交
取消