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); }
/// <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); }