Пример #1
0
        private void AnalysisSignal(string cacheResult, string signString)
        {
            dbcSignal = new DBCSignal();
            // SG_ C_ADC_IN : 23|16@0+ (1,0) [0|0] "DegreeC" Vector__XXX
            cacheResult             = cacheResult.Substring(cacheResult.IndexOf('_') + 1).TrimStart();
            dbcSignal.FrameID       = dbcMessage.FrameID;
            dbcSignal.SignalName    = cacheResult.Substring(0, cacheResult.IndexOf(':')).TrimEnd();
            cacheResult             = cacheResult.Substring(cacheResult.IndexOf(':') + 1).TrimStart();
            dbcSignal.StartBitIndex = int.Parse(cacheResult.Substring(0, cacheResult.IndexOf('|')));
            cacheResult             = cacheResult.Substring(cacheResult.IndexOf('|') + 1);
            dbcSignal.BitLength     = int.Parse(cacheResult.Substring(0, cacheResult.IndexOf('@')));
            cacheResult             = cacheResult.Substring(cacheResult.IndexOf('@') + 1);
            int byteOrder = int.Parse(cacheResult.Substring(0, 1));

            if (byteOrder == 0)
            {
                dbcSignal.ByteOrder = ByteOrder.BYTE_ORDER_MSB_LAST;
            }
            else if (byteOrder == 1)
            {
                dbcSignal.ByteOrder = ByteOrder.BYTE_ORDER_MSB_FIRST;
            }
            dbcSignal.SymbolType = cacheResult.Substring(1, 1);
            cacheResult          = cacheResult.Substring(cacheResult.IndexOf('(') + 1);
            dbcSignal.Factor     = float.Parse(cacheResult.Substring(0, cacheResult.IndexOf(',')));
            cacheResult          = cacheResult.Substring(cacheResult.IndexOf(',') + 1);
            dbcSignal.Offset     = float.Parse(cacheResult.Substring(0, cacheResult.IndexOf(')')));
            cacheResult          = cacheResult.Substring(cacheResult.IndexOf(')') + 1).TrimStart();
            dbcSignal.Minimum    = float.Parse(cacheResult.Substring(cacheResult.IndexOf('[') + 1, cacheResult.IndexOf('|') - 1));
            dbcSignal.Maximun    = float.Parse(cacheResult.Substring(cacheResult.IndexOf('|') + 1, cacheResult.IndexOf(']') - cacheResult.IndexOf('|') - 1));
            cacheResult          = cacheResult.Substring(cacheResult.IndexOf(']') + 1).TrimStart();

            cacheResult        = cacheResult.Substring(cacheResult.IndexOf('"') + 1);
            dbcSignal.Unit     = cacheResult.Substring(0, cacheResult.IndexOf('"'));
            cacheResult        = cacheResult.Substring(cacheResult.IndexOf('"') + 1).TrimStart();
            dbcSignal.Receiver = cacheResult.Substring(0);
            dbcSignalList.Add(dbcSignal);
        }
Пример #2
0
        /// <summary>
        /// 加载DBC Signal
        /// </summary>
        /// <param name="content">当前行内容</param>
        /// <param name="message">当前消息</param>
        private void LoadSignal(String content, ref DBCMessage message)
        {
            var match = Regex.Match(content.Trim(), ConstDefine.SignalRegexPattern);

            if (!match.Success)
            {
                //TODO 应该添加Log
                return;
            }
            UInt16    tempUInt16;
            Double    tempDouble;
            DBCSignal signal = new DBCSignal();
            ByteOrder byteOrder;

            if (!Enum.TryParse <ByteOrder>(match.Groups[9].Value, out byteOrder))
            {
                byteOrder = ByteOrder.None;
            }
            signal.ByteOrder = byteOrder;
            if (!Double.TryParse(match.Groups[11].Value, out tempDouble))
            {
                tempDouble = 0D;
            }
            signal.Factor = tempDouble;
            if (!Double.TryParse(match.Groups[17].Value, out tempDouble))
            {
                tempDouble = 0D;
            }
            signal.Maximum     = tempDouble;
            signal.Message     = message;
            signal.MessageID   = message.MessageID;
            signal.MessageName = message.MessageName;
            if (!Double.TryParse(match.Groups[15].Value, out tempDouble))
            {
                tempDouble = 0D;
            }
            signal.Minimum = tempDouble;
            if (String.IsNullOrEmpty(match.Groups[2].Value))
            {
                signal.MultiplexerIndicator = MultiplexerIndicator.NormalSignal;
            }
            else if (match.Groups[6].Value == "M ")
            {
                signal.MultiplexerIndicator = MultiplexerIndicator.MultiplexedSignal;
            }
            else if (match.Groups[4].Value == "m")
            {
                signal.MultiplexerIndicator = MultiplexerIndicator.MultiplexedSignals;
                if (!UInt16.TryParse(match.Groups[5].Value, out tempUInt16))
                {
                    tempUInt16 = 0;
                }
                signal.MultiplexerSwitchValue = tempUInt16;
            }
            else
            {
                signal.MultiplexerIndicator = MultiplexerIndicator.NormalSignal;
            }
            if (!Double.TryParse(match.Groups[13].Value, out tempDouble))
            {
                tempDouble = 0D;
            }
            signal.Offset     = tempDouble;
            signal.SignalName = match.Groups[1].Value;
            if (!UInt16.TryParse(match.Groups[8].Value, out tempUInt16))
            {
                tempUInt16 = 0;
            }
            signal.SignalSize = tempUInt16;
            if (!UInt16.TryParse(match.Groups[7].Value, out tempUInt16))
            {
                tempUInt16 = 0;
            }
            signal.StartPosition = tempUInt16;
            signal.Unit          = match.Groups[19].Value;
            if (match.Groups[10].Value == "+")
            {
                signal.ValueType = Infrastructure.ValueType.Unsigned;
            }
            else if (match.Groups[10].Value == "-")
            {
                signal.ValueType = Infrastructure.ValueType.Signed;
            }
            else
            {
                signal.ValueType = Infrastructure.ValueType.Unsigned;
            }
            message.Signals.Add(signal);
        }