加载DBC文件上位机程序内

由于程序中需要根据DBC文件来解析通讯数据,一个一个将DBC里的信号输入程序太麻烦了,且不同的设备DBC文件格式相同,但内容不同,为了程序方便解析同的设备的数据,下面以解析文本的形式将DBC文件自动加载至程序中;

    public class TestDeviceVModel
    {
        string NS_;
        string Memo_;
        bool IsNs = false;
        object CM_ = null;
        private DeviceModel ImpDBCFile()
        {
            List<string> _dbc = new List<string>();
            using (StreamReader _sr = new StreamReader(YiouConvert.GetOpenFilePath(), Encoding.Default))
            {
                string line;
                while ((line = _sr.ReadLine()) != null)
                {
                    line = line.TrimStart().Replace("  ", " "); ;

                    if (!string.IsNullOrWhiteSpace(line) && !line.StartsWith("//"))// 去掉空行和注释行
                    {
                        _dbc.Add(line);
                    }
                }
                _sr.Close();
            }
            //DeviceModel DevInfoCache = DeviceList.ToList().Find(n=>n.Name=="")??new DeviceModel();
            DeviceModel DevInfoCache = new DeviceModel();
            DevInfoCache.MessageList = new ObservableCollection<DevMessage>();
            _dbc.ForEach(item =>
            {
                string[] info = item.Split(' ');
                if (info.Length <= 0) { return; }
                DevMessage _dev;
                DevChannel _chan;
                switch (info[0])
                {
                    case "VERSION":
                        //GetDBCVersion(info);
                        break;
                    case "NS_":
                        CM_ = null;
                        IsNs = true;
                        NS_ = string.Empty;
                        break;
                    case "BS_:":
                        //GetNetWorkBAUD(info);
                        break;
                    case "BU_:":
                        //GetNetWorkNode(info);
                        break;
                    case "BO_":
                        _dev = GetMegInfoCache(info);
                        if (_dev != null)
                            DevInfoCache.MessageList.Add(_dev);
                        break;
                    case "SG_":
                        if (DevInfoCache.MessageList != null && DevInfoCache.MessageList.Count > 0)
                        {
                            _chan = GetDevChannel(info);
                            if (_chan != null)
                            {
                                _chan.CANID = DevInfoCache.MessageList[DevInfoCache.MessageList.Count - 1].CANID;
                                DevInfoCache.MessageList[DevInfoCache.MessageList.Count - 1].ChannelList.Add(_chan);
                            }
                        }
                        break;
                    case "CM_":
                        GetMemoContent(info, DevInfoCache);
                        break;
                    case "BA_DEF_":
                        break;
                    case "BA_DEF_DEF_":
                        break;
                    case "BA_":
                        break;
                    case "VAL_":
                        GetOption(info, DevInfoCache);
                        //_id = info.Length < 2 || string.IsNullOrWhiteSpace(info[1]) ? 0 : int.Parse((Convert.ToUInt32(info[1]) & 0x7FFFFFFF).ToString());
                        //_chan = DevInfoCache.MessageList.ToList().Find(n => n.MessageID == _id).ChannelList.ToList().Find(n => n.ChannelName == info[2]);
                        //for (int i = 3; i < info.Length; i++)
                        //{
                        //    Memo_ += info[i];
                        //}
                        break;
                    default:
                        GetEnterContent(info, item);
                        break;
                }
            });
            //NS_.Substring(0, NS_.Length - 1);
            return DevInfoCache;
        }
        /// <summary>
        /// 获取DBC文件版本号
        /// </summary>
        /// <param name="info"></param>
        /// <returns></returns>
        private string GetDBCVersion(string[] info)
        {
            string _str = string.Empty;
            if (info.Lengt
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值