2016-09-21 141 views
0

我有一個新的問題:如何更新OPC UA服務器中的節點 - C#?如何更新OPC UA服務器中的節點

我已經在EmptyNodeManager.cs的CreateAddressSpace中創建了節點。所有工作都很好,但是當真實節點上的值發生變化時,客戶端不會觀察到變化。

下有代碼:

PropertyState variableA = new PropertyState(i); 

variableA.NodeId = new NodeId("/System_Memory/I/A", NamespaceIndex); 
variableA.Description = "Sensore che individua la posizione iniziale del trapano"; 
variableA.TypeDefinitionId = VariableTypeIds.PropertyType; 
variableA.ReferenceTypeId = ReferenceTypeIds.HasProperty; 
variableA.BrowseName = new QualifiedName("A", NamespaceIndex); 
variableA.DisplayName = variableA.BrowseName.Name; 
variableA.DataType = (uint)BuiltInType.Boolean; 
variableA.Value = plc.readFileI(0); // Chiamata al metodo per la lettura 

i.AddChild(variableA); 

回答

0

對不起,我不能評論,所以我不能要求澄清,所以...

你不告訴你使用更新代碼該變量並且您沒有明確地說出您正在使用的是哪個C#OPC-UA堆棧 - 由於它具有EmptyNodeManager,因此我假定OPC Foundation堆棧。

在該棧更新不發送,直到您叫ClearChangeMasks(),所以要改變一個變量我使用以下命令:

void Update(BaseVariableState variable, object value) 
    { 
     if (variable == null) throw new ArgumentNullException("variable"); 
     if (!object.Equals(variable.Value, value)) 
     { 
      variable.Value = value; 
      variable.Timestamp = m_timestamp; 
      // SystemContext is a property in EmptyNodeManager 
      variable.ClearChangeMasks(SystemContext, false); 
     } 
    } 

注意,客戶端將無法看到更新,除非它已預訂以更改該變量。