private int PrepareBrowseElementReadRequest(
NodeId nodeId,
Dictionary<string, ReferenceDescription> childrenByName,
ReadValueIdCollection nodesToRead,
NodeClass nodeClass,
bool onlyEssentialProperties)
{
int index = nodesToRead.Count;
ReadValueId nodeToRead = new ReadValueId();
if (nodeClass == NodeClass.Unspecified)
{
nodeToRead.NodeId = nodeId;
nodeToRead.AttributeId = Attributes.NodeClass;
nodesToRead.Add(nodeToRead);
nodeToRead = new ReadValueId();
nodeToRead.NodeId = nodeId;
nodeToRead.AttributeId = Attributes.BrowseName;
nodesToRead.Add(nodeToRead);
nodeToRead = new ReadValueId();
nodeToRead.NodeId = nodeId;
nodeToRead.AttributeId = Attributes.DisplayName;
nodesToRead.Add(nodeToRead);
}
if (!onlyEssentialProperties)
{
nodeToRead = new ReadValueId();
nodeToRead.NodeId = nodeId;
nodeToRead.AttributeId = Attributes.Description;
nodesToRead.Add(nodeToRead);
}
// nothing more to fetch for objects.
if (nodeClass == NodeClass.Object)
{
return index;
}
nodeToRead = new ReadValueId();
nodeToRead.NodeId = nodeId;
nodeToRead.AttributeId = Attributes.DataType;
nodesToRead.Add(nodeToRead);
nodeToRead = new ReadValueId();
nodeToRead.NodeId = nodeId;
nodeToRead.AttributeId = Attributes.ValueRank;
nodesToRead.Add(nodeToRead);
if (!onlyEssentialProperties)
{
nodeToRead = new ReadValueId();
nodeToRead.NodeId = nodeId;
nodeToRead.AttributeId = Attributes.MinimumSamplingInterval;
nodesToRead.Add(nodeToRead);
nodeToRead = new ReadValueId();
nodeToRead.NodeId = nodeId;
nodeToRead.AttributeId = Attributes.UserAccessLevel;
nodesToRead.Add(nodeToRead);
nodeToRead = new ReadValueId();
nodeToRead.NodeId = nodeId;
nodeToRead.AttributeId = Attributes.Value;
nodesToRead.Add(nodeToRead);
ReferenceDescription property = null;
if (childrenByName.TryGetValue(Opc.Ua.BrowseNames.EURange, out property))
{
nodeToRead = new ReadValueId();
nodeToRead.NodeId = (NodeId)property.NodeId;
nodeToRead.AttributeId = Attributes.Value;
nodeToRead.Handle = Opc.Ua.BrowseNames.EURange;
nodesToRead.Add(nodeToRead);
}
if (childrenByName.TryGetValue(Opc.Ua.BrowseNames.InstrumentRange, out property))
{
nodeToRead = new ReadValueId();
nodeToRead.NodeId = (NodeId)property.NodeId;
nodeToRead.AttributeId = Attributes.Value;
nodeToRead.Handle = Opc.Ua.BrowseNames.InstrumentRange;
nodesToRead.Add(nodeToRead);
}
if (childrenByName.TryGetValue(Opc.Ua.BrowseNames.EngineeringUnits, out property))
{
nodeToRead = new ReadValueId();
nodeToRead.NodeId = (NodeId)property.NodeId;
nodeToRead.AttributeId = Attributes.Value;
nodeToRead.Handle = Opc.Ua.BrowseNames.EngineeringUnits;
nodesToRead.Add(nodeToRead);
}
if (childrenByName.TryGetValue(Opc.Ua.BrowseNames.EnumStrings, out property))
{
nodeToRead = new ReadValueId();
nodeToRead.NodeId = (NodeId)property.NodeId;
nodeToRead.AttributeId = Attributes.Value;
nodeToRead.Handle = Opc.Ua.BrowseNames.EnumStrings;
nodesToRead.Add(nodeToRead);
}
if (childrenByName.TryGetValue(Opc.Ua.BrowseNames.TrueState, out property))
{
nodeToRead = new ReadValueId();
nodeToRead.NodeId = (NodeId)property.NodeId;
nodeToRead.AttributeId = Attributes.Value;
nodeToRead.Handle = Opc.Ua.BrowseNames.TrueState;
nodesToRead.Add(nodeToRead);
}
if (childrenByName.TryGetValue(Opc.Ua.BrowseNames.FalseState, out property))
{
nodeToRead = new ReadValueId();
nodeToRead.NodeId = (NodeId)property.NodeId;
nodeToRead.AttributeId = Attributes.Value;
nodeToRead.Handle = Opc.Ua.BrowseNames.FalseState;
nodesToRead.Add(nodeToRead);
}
if (childrenByName.TryGetValue(Opc.Ua.BrowseNames.LocalTime, out property))
{
nodeToRead = new ReadValueId();
nodeToRead.NodeId = (NodeId)property.NodeId;
nodeToRead.AttributeId = Attributes.Value;
nodeToRead.Handle = Opc.Ua.BrowseNames.LocalTime;
nodesToRead.Add(nodeToRead);
}
}
return index;
}