private DaValue GetPropertyValue(BrowseElement element, int propertyId)
{
DaValue value = new DaValue();
value.Quality = OpcRcw.Da.Qualities.OPC_QUALITY_GOOD;
value.Timestamp = element.CacheTimestamp;
// check for objects - they only support the description property.
if (element.NodeClass == NodeClass.Object)
{
switch (propertyId)
{
case PropertyIds.Description: { value.Value = element.BrowseName; break; }
case PropertyIds.UaBrowseName: { value.Value = element.UaBrowseName; break; }
case PropertyIds.UaDescription: { value.Value = element.UaDescription; break; }
default:
{
value.Error = ResultIds.E_INVALID_PID;
return value;
}
}
return value;
}
// handle variable properties.
switch (propertyId)
{
case PropertyIds.Description: { value.Value = element.BrowseName; break; }
case PropertyIds.DataType: { value.Value = element.CanonicalDataType; break; }
case PropertyIds.ScanRate: { value.Value = element.ScanRate; break; }
case PropertyIds.AccessRights: { value.Value = element.AccessRights; break; }
case PropertyIds.EuType: { value.Value = element.EuType; break; }
case PropertyIds.EuInfo: { value.Value = element.EuInfo; break; }
case PropertyIds.UaBuiltInType: { value.Value = (int)element.BuiltInType; break; }
case PropertyIds.UaDataTypeId: { value.Value = element.DataTypeId; break; }
case PropertyIds.UaValueRank: { value.Value = element.ValueRank; break; }
case PropertyIds.UaBrowseName: { value.Value = element.UaBrowseName; break; }
case PropertyIds.UaDescription: { value.Value = element.UaDescription; break; }
case PropertyIds.EngineeringUnits:
{
if (element.EngineeringUnits == null)
{
value.Error = ResultIds.E_INVALID_PID;
break;
}
value.Value = element.EngineeringUnits;
value.Value = element.EngineeringUnits;
break;
}
case PropertyIds.HighEU:
{
if (element.HighEU == Double.MaxValue)
{
value.Error = ResultIds.E_INVALID_PID;
break;
}
value.Value = element.HighEU;
break;
}
case PropertyIds.LowEU:
{
if (element.LowEU == Double.MaxValue)
{
value.Error = ResultIds.E_INVALID_PID;
break;
}
value.Value = element.LowEU;
break;
}
case PropertyIds.HighIR:
{
if (element.HighIR == Double.MaxValue)
{
value.Error = ResultIds.E_INVALID_PID;
break;
}
value.Value = element.HighIR;
break;
}
case PropertyIds.LowIR:
{
if (element.LowIR == Double.MaxValue)
{
value.Error = ResultIds.E_INVALID_PID;
break;
}
value.Value = element.LowIR;
break;
}
case PropertyIds.CloseLabel:
{
if (element.CloseLabel == null)
{
value.Error = ResultIds.E_INVALID_PID;
break;
}
value.Value = element.CloseLabel;
break;
}
case PropertyIds.OpenLabel:
{
if (element.OpenLabel == null)
{
value.Error = ResultIds.E_INVALID_PID;
break;
}
value.Value = element.OpenLabel;
break;
}
case PropertyIds.TimeZone:
{
if (element.TimeZone == Int32.MaxValue)
{
value.Error = ResultIds.E_INVALID_PID;
break;
}
value.Value = element.TimeZone;
break;
}
case PropertyIds.Value:
{
if (element.LastValue == null)
{
value.Error = ResultIds.E_INVALID_PID;
break;
}
value.Value = element.LastValue.Value;
break;
}
case PropertyIds.Quality:
{
if (element.LastValue == null)
{
value.Error = ResultIds.E_INVALID_PID;
break;
}
value.Value = element.LastValue.Quality;
break;
}
case PropertyIds.Timestamp:
{
if (element.LastValue == null)
{
value.Error = ResultIds.E_INVALID_PID;
break;
}
value.Value = element.LastValue.Timestamp;
break;
}
default:
{
value.Error = ResultIds.E_INVALID_PID;
break;
}
}
return value;
}