示例#1
0
        /// <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));
            }
        }
示例#2
0
        /// <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));
            }
        }
示例#3
0
 /// <summary>
 /// Sets the tag format.
 /// </summary>
 public DeviceTag SetFormat(TagFormat format)
 {
     Format = format;
     return(this);
 }