我從 OPCFoundation 示例構(gòu)建了一個(gè) OPC UA 服務(wù)器 - https://github.com/OPCFoundation/UA-.NETStandard還編譯了我自己的模型 - https://github.com/Pro/UA-ModelCompiler/tree/eebf9988940a789a4f36cbef8c5bd6340f1b2f42在示例中,他們將生成的文件放在文件夾中,然后為 NodeManger、State 等定制類。我已成功加載生成的 .uanodes 文件,其中包含一些示例節(jié)點(diǎn)。但是我無法通過服務(wù)器端的代碼創(chuàng)建這些節(jié)點(diǎn)。測試時(shí),我在函數(shù)中進(jìn)行 - LoadPredefinedNodes(ISystemContext context)。我的結(jié)構(gòu)應(yīng)該是對象下面的一個(gè)節(jié)點(diǎn),稱為“標(biāo)簽”,在該節(jié)點(diǎn)中,我想在服務(wù)器運(yùn)行時(shí)動態(tài)添加節(jié)點(diǎn)并設(shè)置它們的屬性。我在測試時(shí)使用 Integration Object 的 OPC UA 客戶端。結(jié)構(gòu)看起來正確,例如:Objects => Tags => MyTestTag (Properties: Name, Description, Value)前兩個(gè)屬性是從模型文件定義中正確添加的 <!-- ### 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>第三個(gè)是我嘗試從服務(wù)器端代碼定義的屬性。我添加了 Value 屬性,但我不知道如何寫它的值。從這段代碼中,一個(gè)名為 MyTestTag 的節(jié)點(diǎn)被添加到 Tags 節(jié)點(diǎn)中。從模型中添加屬性“名稱”和“描述”。并且“Value”屬性是通過代碼添加的。但是,我無法為這些屬性中的任何一個(gè)設(shè)置值。在客戶端中單擊屬性 MyTestTag.Value 時(shí),會打印錯(cuò)誤“可為空的對象必須有一個(gè)值”。請告訴我我做錯(cuò)了什么。
2 回答

慕少森
TA貢獻(xiàn)2019條經(jīng)驗(yàn) 獲得超9個(gè)贊
在我的例子中,問題是 nodeId。我變了
ps.NodeId = new NodeId();
// to
ps.NodeId = new NodeId(Guid.NewGuid(), NamespaceIndex);
然后它確實(shí)出現(xiàn)在節(jié)點(diǎn)樹中。

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