Ejemplo n.º 1
0
        protected static DataPointValue ParseDataPoint(Stream inputStream, MetaFrame meta, ushort index)
        {
            if (index > meta.FieldMetaDataList.Count - 1)
            {
                throw new Exception("Decode DeltaFrame: Could not parse field as corresponding meta data is not present");
            }

            // Value
            FieldMetaData metaData = meta.FieldMetaDataList[index];

            if (metaData.Index != index)
            {
                Logger.Error($"Index does not match: FieldMetaData.Index {metaData.Index} != {index} read from Stream.");
            }
            if (Logger.IsDebugEnabled)
            {
                Logger.Debug($"Decoding item at position {index} in Meta Frame. Using FieldMetaData:");
                Logger.Debug(metaData);
            }
            DataPointValue item = null;

            if (metaData.DataType == File.PreDefinedNodeID)
            {
                item = new File();
                item.Decode(inputStream);
            }
            else
            {
                item            = ProcessValueFactory.CreateValue(metaData.DataType);
                item.Properties = metaData.Properties;
                if (meta.StructureDataTypes.TryGetValue(metaData.DataType, out StructureDescription desc))
                {
                    if (meta.EnumDataTypes != null &&
                        desc.Name.Name.ToString()
                        .Contains("EnumValue", StringComparison.InvariantCultureIgnoreCase))
                    {
                        string enumName = desc.Name.Name.Value
                                          .Substring(10);
                        item.EnumDescription = meta.EnumDataTypes.First(s => s.Value.Name.Name.Value == enumName)
                                               .Value;
                    }
                    item.Decode(inputStream);
                }
            }

            // ReSharper disable once ConditionIsAlwaysTrueOrFalse
            if (item == null)
            {
                Logger.Error($"Unable to decode value {metaData.DataType} at position {index} in message.");
                return(null);
            }
            item.Name       = metaData.Name.Value;
            item.Properties = metaData.Properties;
            item.Index      = index;
            return(item);
        }
Ejemplo n.º 2
0
        internal static DataPointValue GetDataPointValue(DeltaEntry keyEntry, DataSetType dataSetType)
        {
            ProcessDataPointValue dpv = ProcessValueFactory.CreateValue(keyEntry.DataType);

            if (dpv == null)
            {
                Logger.Error($"Unable to create DataPoint for entry: {keyEntry}");
                return(null);
            }
            dpv.Orcat     = keyEntry.Orcat;
            dpv.Quality   = keyEntry.Quality;
            dpv.Timestamp = keyEntry.TimeStamp;
            dpv.Value     = keyEntry.Value;
            if (keyEntry is KeyEntry key)
            {
                dpv.Prefix  = key.Prefix;
                dpv.Unit    = key.Unit;
                dpv.FieldID = key.FieldID;
            }
            if (dpv is CounterValue)
            {
                dpv.SetAttributeValue(CounterValue.QuantityAttributeName, keyEntry.Value2);
            }
            if (dpv is StepPosValue || dpv is StepPosEvent)
            {
                dpv.SetAttributeValue(StepPosValue.TransientAttributeName, keyEntry.Value2);
            }
            if (dpv is ComplexMeasuredValue)
            {
                dpv.SetAttributeValue(ComplexMeasuredValue.AngleAttributeName, keyEntry.Value2);
            }
            if (dpv.Timestamp == 0)
            {
                dpv.Timestamp = DateTime.Now.ToFileTimeUtc();
            }
            return(dpv);
        }
Ejemplo n.º 3
0
        private void InitDetailsFromMeta(MetaFrame metaMessage)
        {
            if (m_VisualizerForm.InvokeRequired)
            {
                m_VisualizerForm.Invoke(new Action <MetaFrame>(InitDetailsFromMeta), metaMessage);
            }
            else
            {
                try
                {
                    string publisherID = metaMessage.NetworkMessageHeader.PublisherID.Value;
                    ushort writerID    = metaMessage.DataSetWriterID;
                    ConcurrentDictionary <ushort, BindingSource> writerDictionary =
                        m_Bindings.GetOrAdd(publisherID, pubID => new ConcurrentDictionary <ushort, BindingSource>());
                    BindingSource bs = writerDictionary.GetOrAdd(writerID, s => new BindingSource());
                    bs.Clear();
                    m_VisualizerForm.ResetGroupedTypeIndex(publisherID, writerID);

                    if (metaMessage.FieldMetaDataList != null)
                    {
                        for (int i = 0; i < metaMessage.FieldMetaDataList.Count; i++)
                        {
                            FieldMetaData fieldMetaData     = metaMessage.FieldMetaDataList[i];
                            bool          isOldEnum         = false,
                                          isGroupedDataType = false;
                            if (metaMessage.StructureDataTypes.TryGetValue(fieldMetaData.DataType, out StructureDescription structDesc))
                            {
                                if (metaMessage.EnumDataTypes != null &&
                                    structDesc.Name.Name.ToString()
                                    .Contains("EnumValue"))
                                {
                                    isOldEnum = true;
                                }
                            }
                            if (!isOldEnum)
                            {
                                isGroupedDataType = ProcessValueFactory.GetNodeIDType(fieldMetaData.DataType) == NodeIDType.GroupDataTypeTimeSeries;
                            }
                            DataPointBase dp = null;
                            if (fieldMetaData.DataType == File.PreDefinedNodeID)
                            {
                                dp = new FileDataPoint();
                            }
                            else
                            {
                                dp = new ProcessDataPoint();
                            }
                            dp.Index = fieldMetaData.Index;
                            dp.Name  = dp.GetType()
                                       .Name
                                       == "FileDataPoint"
                                              ? Path.GetFileName(fieldMetaData.Name.Value)
                                              : fieldMetaData.Name.Value;
                            bs.Add(dp);
                            if (isGroupedDataType)
                            {
                                m_VisualizerForm.AddGroupDataTypeIndex(publisherID, writerID, bs.Count - 1);
                                List <StructureField> fields = metaMessage.StructureDataTypes[fieldMetaData.DataType]
                                                               .Fields;
                                int count = fields.Count;
                                for (int k = 0; k < count; k++)
                                {
                                    string name = fields[k]
                                                  .Name.Value;
                                    if (name != "_time" && name.Contains("_qc") == false)
                                    {
                                        ProcessDataPoint dp1 = new ProcessDataPoint();
                                        dp1.Index = fieldMetaData.Index;
                                        dp1.Name  = fields[k]
                                                    .Name.Value;
                                        bs.Add(dp1);
                                    }
                                }
                            }
                        }
                    }
                }
                catch (Exception e)
                {
                    Console.WriteLine(e);
                    if (Debugger.IsAttached)
                    {
                        Debugger.Break();
                    }
                    else
                    {
                        throw;
                    }
                }
            }
        }
Ejemplo n.º 4
0
        internal bool TryParse(IXLCell cell, IXLCell cell2, ref IEntry entry)
        {
            string stringValue  = cell.GetString();
            string stringValue2 = cell2.GetString();

            if (string.IsNullOrWhiteSpace(stringValue))
            {
                return(false);
            }
            if (entry.DataType == SPSValue.PreDefinedNodeID || entry.DataType == SPSEvent.PreDefinedNodeID)
            {
                bool value;
                try
                {
                    value = cell.GetValue <bool>();
                }
                catch (FormatException exception)
                {
                    Logger.Error($"Unable to parse '{stringValue}' in row {cell.WorksheetRow().RowNumber()} as bool.", exception);
                    return(false);
                }
                entry.Value = value;
                return(true);
            }
            if (entry.DataType == DPSValue.PreDefinedNodeID || entry.DataType == DPSEvent.PreDefinedNodeID)
            {
                byte value;
                try
                {
                    value = cell.GetValue <byte>();
                }
                catch (FormatException exception)
                {
                    Logger.Error($"Unable to parse '{stringValue}' in row {cell.WorksheetRow().RowNumber()} as byte.", exception);
                    return(false);
                }
                entry.Value = value;
                return(true);
            }
            if (entry.DataType == MeasuredValue.PreDefinedNodeID || entry.DataType == MeasuredValueEvent.PreDefinedNodeID)
            {
                float value;
                try
                {
                    value = cell.GetValue <float>();
                }
                catch (FormatException exception)
                {
                    Logger.Error($"Unable to parse '{stringValue}' in row {cell.WorksheetRow().RowNumber()} as float.", exception);
                    return(false);
                }
                entry.Value = value;
                return(true);
            }
            if (entry.DataType == StepPosValue.PreDefinedNodeID || entry.DataType == StepPosEvent.PreDefinedNodeID)
            {
                int  value;
                bool value2;
                try
                {
                    value  = cell.GetValue <int>();
                    value2 = cell2.GetValue <bool>();
                }
                catch (FormatException exception)
                {
                    Logger.Error($"Unable to parse '{stringValue}' and '{stringValue2}' in row {cell.WorksheetRow().RowNumber()} as float and bool.", exception);
                    return(false);
                }
                entry.Value  = value;
                entry.Value2 = value2;
                return(true);
            }
            if (entry.DataType == CounterValue.PreDefinedNodeID)
            {
                long  value;
                float value2;
                try
                {
                    value  = cell.GetValue <int>();
                    value2 = cell2.GetValue <float>();
                }
                catch (FormatException exception)
                {
                    Logger.Error($"Unable to parse '{stringValue}' and '{stringValue2}' in row {cell.WorksheetRow().RowNumber()} as int and float.", exception);
                    return(false);
                }
                entry.Value  = value;
                entry.Value2 = value2;
                return(true);
            }
            if (entry.DataType == ComplexMeasuredValue.PreDefinedNodeID)
            {
                float value;
                float value2;
                try
                {
                    value  = cell.GetValue <float>();
                    value2 = cell2.GetValue <float>();
                }
                catch (FormatException exception)
                {
                    Logger.Error($"Unable to parse '{stringValue}' and '{stringValue2}' in row {cell.WorksheetRow().RowNumber()} as float and float.", exception);
                    return(false);
                }
                entry.Value  = value;
                entry.Value2 = value2;
                return(true);
            }
            if (entry.DataType == StringEvent.PreDefinedNodeID)
            {
                string value;
                try
                {
                    value = cell.GetValue <string>();
                }
                catch (FormatException exception)
                {
                    Logger.Error($"Unable to parse '{stringValue}' in row {cell.WorksheetRow().RowNumber()} as string.", exception);
                    return(false);
                }
                entry.Value = value;
                return(true);
            }
            if (ProcessValueFactory.GetNodeIDType(entry.DataType) == NodeIDType.GroupDataTypeTimeSeries)
            {
                float value;
                try
                {
                    value = cell.GetValue <float>();
                }
                catch (FormatException exception)
                {
                    Logger.Error($"Unable to parse '{stringValue}' in row {cell.WorksheetRow().RowNumber()} as string.", exception);
                    return(false);
                }
                entry.Value = value;
                return(true);
            }

            // For everything else we assume it's an Integer or an Enum
            int enumValue;

            try
            {
                enumValue = cell.GetValue <int>();
            }
            catch (FormatException exception)
            {
                Logger.Error($"Unable to parse '{stringValue}' in row {cell.WorksheetRow().RowNumber()} as int.", exception);
                return(false);
            }
            entry.Value = enumValue;
            return(true);
        }