2016-09-21 5 views
0

У меня есть новый вопрос: как обновлять узлы на сервере OPC UA - C#?Как обновить узлы на сервере OPC UA

Я создал узлы в CreateAddressSpace из EmptyNodeManager.cs. Все работает нормально, но когда значение изменяется на реальном узле, клиент не замечает изменения.

вниз есть код:

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 вы используете - я предполагаю, что стек OPC Foundation имеет пустую папку с пустымNodeManager.

В том, что обновления стека не отправляются, пока вы не вызовете 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); 
     } 
    } 

Обратите внимание, что клиент не будет видеть обновление, если он не подписан к изменениям для этой переменной.

Смежные вопросы