/// <summary> /// Converts the current tag data with a numeric data type to a string value. /// </summary> private string FormatNumericData(DeviceTag deviceTag, CnlData cnlData) { if (cnlData.IsUndefined) { return(CommonPhrases.UndefinedSign); } const string DefaultFormat = "N3"; try { TagFormat tagFormat = deviceTag.Format; if (tagFormat == null) { return(deviceTag.DataType == TagDataType.Int64 ? BitConverter.DoubleToInt64Bits(cnlData.Val).ToString() : cnlData.Val.ToString(DefaultFormat)); } else { string FormatEnum(int val) { return(tagFormat.EnumValues != null && 0 <= val && val < tagFormat.EnumValues.Length ? tagFormat.EnumValues[val] : val.ToString()); } bool FormatIsHex(string format) { return(format[0] == 'x' || format[0] == 'X'); } if (deviceTag.DataType == TagDataType.Int64) { long longVal = BitConverter.DoubleToInt64Bits(cnlData.Val); switch (tagFormat.FormatType) { case TagFormatType.Enum: return(FormatEnum((int)longVal)); case TagFormatType.Date: DateTime dt = new DateTime(longVal, DateTimeKind.Utc).ToLocalTime(); return(string.IsNullOrEmpty(tagFormat.Format) ? dt.ToLocalizedString() : dt.ToString(tagFormat.Format)); default: if (string.IsNullOrEmpty(tagFormat.Format)) { return(longVal.ToString()); } else { string s = longVal.ToString(tagFormat.Format); return(FormatIsHex(tagFormat.Format) ? s + 'h' : s); } } } else { double doubleVal = cnlData.Val; switch (tagFormat.FormatType) { case TagFormatType.Enum: return(FormatEnum((int)doubleVal)); case TagFormatType.Date: DateTime dt = DateTime.FromOADate(doubleVal).ToLocalTime(); return(string.IsNullOrEmpty(tagFormat.Format) ? dt.ToLocalizedString() : dt.ToString(tagFormat.Format)); default: return(string.IsNullOrEmpty(tagFormat.Format) ? doubleVal.ToString(DefaultFormat) : FormatIsHex(tagFormat.Format) ? ((int)doubleVal).ToString(tagFormat.Format) + 'h' : doubleVal.ToString(tagFormat.Format)); } } } } catch { return(cnlData.Val.ToString(DefaultFormat)); } }
/// <summary> /// Converts the current tag data with a numeric data type to a string value. /// </summary> private string FormatNumericData(DeviceTag deviceTag, CnlData cnlData) { if (cnlData.IsUndefined) { return(CommonPhrases.UndefinedSign); } const string DefaultFormat = "N3"; try { TagFormat tagFormat = deviceTag.Format; if (tagFormat == null) { return(deviceTag.DataType == TagDataType.Int64 ? BitConverter.DoubleToInt64Bits(cnlData.Val).ToString() : cnlData.Val.ToString(DefaultFormat)); } else { string FormatEnum(int val) { string[] enumValues = tagFormat.EnumValues; if (enumValues == null) { return(val.ToString()); } else if (val < 0) { return(enumValues[0]); } else if (val >= enumValues.Length) { return(enumValues[enumValues.Length - 1]); } else { return(enumValues[val]); } } if (deviceTag.DataType == TagDataType.Int64) { long longVal = BitConverter.DoubleToInt64Bits(cnlData.Val); switch (tagFormat.FormatType) { case TagFormatType.Enum: return(FormatEnum((int)longVal)); case TagFormatType.Date: DateTime dt = new DateTime(longVal, DateTimeKind.Utc).ToLocalTime(); return(string.IsNullOrEmpty(tagFormat.Format) ? dt.ToLocalizedString() : dt.ToString(tagFormat.Format)); default: return(string.IsNullOrEmpty(tagFormat.Format) ? longVal.ToString() : longVal.ToString(tagFormat.Format)); } } else { double doubleVal = cnlData.Val; switch (tagFormat.FormatType) { case TagFormatType.Enum: return(FormatEnum((int)doubleVal)); case TagFormatType.Date: DateTime dt = DateTime.FromOADate(doubleVal); return(string.IsNullOrEmpty(tagFormat.Format) ? dt.ToLocalizedString() : dt.ToString(tagFormat.Format)); default: return(string.IsNullOrEmpty(tagFormat.Format) ? doubleVal.ToString() : doubleVal.ToString(tagFormat.Format)); } } } } catch { return(cnlData.Val.ToString(DefaultFormat)); } }
/// <summary> /// Sets the tag format. /// </summary> public DeviceTag SetFormat(TagFormat format) { Format = format; return(this); }