GSF.Historian.Files.MetadataRecordComposedFields.ParseBinaryImage C# (CSharp) Method

ParseBinaryImage() public method

Initializes MetadataRecordComposedFields from the specified buffer.
public ParseBinaryImage ( byte buffer, int startIndex, int length ) : int
buffer byte Binary image to be used for initializing .
startIndex int 0-based starting index of initialization data in the .
length int Valid number of bytes in from .
return int
        public int ParseBinaryImage(byte[] buffer, int startIndex, int length)
        {
            if (length >= FixedLength)
            {
                // Binary image has sufficient data.
                HighAlarm = LittleEndian.ToSingle(buffer, startIndex);
                LowAlarm = LittleEndian.ToSingle(buffer, startIndex + 4);
                HighRange = LittleEndian.ToSingle(buffer, startIndex + 8);
                LowRange = LittleEndian.ToSingle(buffer, startIndex + 12);
                LowWarning = LittleEndian.ToSingle(buffer, startIndex + 16);
                HighWarning = LittleEndian.ToSingle(buffer, startIndex + 20);
                DisplayDigits = LittleEndian.ToInt32(buffer, startIndex + 24);

                for (int i = 0; i < m_inputPointers.Count; i++)
                {
                    m_inputPointers[i] = LittleEndian.ToInt32(buffer, startIndex + 28 + (i * 4));
                }

                EngineeringUnits = Encoding.ASCII.GetString(buffer, startIndex + 76, 24).Trim();
                Equation = Encoding.ASCII.GetString(buffer, startIndex + 100, 256).Trim();
                CompressionLimit = LittleEndian.ToSingle(buffer, startIndex + 356);

                return FixedLength;
            }

            // Binary image does not have sufficient data.
            return 0;
        }

Usage Example

Beispiel #1
0
        /// <summary>
        /// Initializes <see cref="MetadataRecord"/> from the specified <paramref name="buffer"/>.
        /// </summary>
        /// <param name="buffer">Binary image to be used for initializing <see cref="MetadataRecord"/>.</param>
        /// <param name="startIndex">0-based starting index of initialization data in the <paramref name="buffer"/>.</param>
        /// <param name="length">Valid number of bytes in <paramref name="buffer"/> from <paramref name="startIndex"/>.</param>
        /// <returns>Number of bytes used from the <paramref name="buffer"/> for initializing <see cref="MetadataRecord"/>.</returns>
        public int ParseBinaryImage(byte[] buffer, int startIndex, int length)
        {
            if (length >= FixedLength)
            {
                // Binary image has sufficient data.
                Remarks             = Encoding.ASCII.GetString(buffer, startIndex, 512).Trim();
                HardwareInfo        = Encoding.ASCII.GetString(buffer, startIndex + 512, 512).Trim();
                AlarmEmails         = Encoding.ASCII.GetString(buffer, startIndex + 1024, 512).Trim();
                Description         = Encoding.ASCII.GetString(buffer, startIndex + 1536, 80).Trim();
                CurrentData         = Encoding.ASCII.GetString(buffer, startIndex + 1616, 80).Trim();
                Name                = Encoding.ASCII.GetString(buffer, startIndex + 1696, 40).Trim();
                Synonym1            = Encoding.ASCII.GetString(buffer, startIndex + 1736, 40).Trim();
                Synonym2            = Encoding.ASCII.GetString(buffer, startIndex + 1776, 40).Trim();
                Synonym3            = Encoding.ASCII.GetString(buffer, startIndex + 1816, 40).Trim();
                AlarmPagers         = Encoding.ASCII.GetString(buffer, startIndex + 1856, 40).Trim();
                AlarmPhones         = Encoding.ASCII.GetString(buffer, startIndex + 1896, 40).Trim();
                PlantCode           = Encoding.ASCII.GetString(buffer, startIndex + 1936, 24).Trim();
                SystemName          = Encoding.ASCII.GetString(buffer, startIndex + 1960, 24).Trim();
                EmailTime           = Encoding.ASCII.GetString(buffer, startIndex + 1984, 40).Trim();
                ScanRate            = LittleEndian.ToSingle(buffer, startIndex + 2104);
                UnitNumber          = LittleEndian.ToInt32(buffer, startIndex + 2108);
                SecurityFlags.Value = LittleEndian.ToInt32(buffer, startIndex + 2112);
                GeneralFlags.Value  = LittleEndian.ToInt32(buffer, startIndex + 2116);
                AlarmFlags.Value    = LittleEndian.ToInt32(buffer, startIndex + 2120);
                CompressionMinTime  = LittleEndian.ToInt32(buffer, startIndex + 2124);
                CompressionMaxTime  = LittleEndian.ToInt32(buffer, startIndex + 2128);
                SourceID            = LittleEndian.ToInt32(buffer, startIndex + 2132);

                switch (GeneralFlags.DataType)
                {
                case DataType.Analog:
                    m_analogFields.ParseBinaryImage(buffer, startIndex + 2152, length - 2152);
                    break;

                case DataType.Digital:
                    m_digitalFields.ParseBinaryImage(buffer, startIndex + 2152, length - 2152);
                    break;

                case DataType.Composed:
                    m_composedFields.ParseBinaryImage(buffer, startIndex + 2152, length - 2152);
                    break;

                case DataType.Constant:
                    m_constantFields.ParseBinaryImage(buffer, startIndex + 2152, length - 2152);
                    break;
                }

                return(FixedLength);
            }

            // Binary image does not have sufficient data.
            return(0);
        }