public static StatusCode ValidateQuality(object formattedValue)
{
string value = formattedValue as string;
if (String.IsNullOrEmpty(value))
{
return StatusCodes.Good;
}
string[] parts = value.Split(",".ToCharArray(), StringSplitOptions.RemoveEmptyEntries);
StatusCode statusCode = StatusCodes.Good;
if (parts.Length > 0)
{
switch (parts[0].Trim())
{
case "G":
case "Good": { statusCode = StatusCodes.Good; break; }
case "B":
case "Bad": { statusCode = StatusCodes.Bad; break; }
case "U":
case "Uncertain": { statusCode = StatusCodes.Uncertain; break; }
case "USN":
case "UncertainDataSubNormal": { statusCode = StatusCodes.UncertainDataSubNormal; break; }
case "BND":
case "BadNoData": { statusCode = StatusCodes.BadNoData; break; }
default:
{
throw new FormatException("Quality must be a valid UA quality.");
}
}
}
for (int ii = 1; ii < parts.Length; ii++)
{
switch (parts[ii].Trim())
{
case "I":
case "Interpolated": { statusCode = statusCode.SetAggregateBits(statusCode.AggregateBits | AggregateBits.Interpolated); break; }
case "C": { statusCode = statusCode.SetAggregateBits(statusCode.AggregateBits | AggregateBits.Calculated); break; }
case "Calculated": { statusCode = statusCode.SetAggregateBits(statusCode.AggregateBits | AggregateBits.Calculated); break; }
case "P": { statusCode = statusCode.SetAggregateBits(statusCode.AggregateBits | AggregateBits.Partial); break; }
case "Partial": { statusCode = statusCode.SetAggregateBits(statusCode.AggregateBits | AggregateBits.Partial); break; }
case "M": { statusCode = statusCode.SetAggregateBits(statusCode.AggregateBits | AggregateBits.MultipleValues); break; }
case "MultipleValues": { statusCode = statusCode.SetAggregateBits(statusCode.AggregateBits | AggregateBits.MultipleValues); break; }
default:
{
throw new FormatException("Aggregate bits are not valid.");
}
}
}
return statusCode;
}
#endregion