Vector软件CANdb++的信号起始位Bug

问题现象

前几天导入DBC文件发现不对劲,怎么生成代码的起始地址都怪怪的,检查下工程里面的配置,还真的是这样,一路查到输入文件------DBC文件,发现是DBC文件就有错误:一些CAN报文之后8字节长度,也就是64位,有些信号起始位都跑到70+甚至100+去了,能正常就怪了。

于是找来提供DBC文件的同事确认原因,同事重新在通讯工具当中下载下来,发现并没有这个问题,我也重新下载一份,也没有这个问题。这就让我很疑惑了,我并没有修改过DBC文件,只是使用软件CANdb++打开查看过,这不应该会导致如此大的差异。

问题分析

我用重新下载"没有信号起始位问题的DBC文件"和之前下载"有信号起始位问题的DBC文件"进行记事本格式对比,居然没有一丁点差异!

原来我没有对"有信号起始位问题的DBC文件"进行保存,点击保存之后就有差异了,差异也跟CANdb++显示的一致------这么说是我打开之后不小心改到的了?

我又重新下载一份DBC文件进行试验,详细回忆着自己在这期间对DBC文件干了什么,看看我做了什么样的操作会导致不小心修改掉。

发现在进入信号定义之后,跳转Signal选项卡时偶尔会弹出这个对话框,意思就是有信号在报文里面的位置重叠了。我打开报文layout查看,发现还真是这么回事。用记事本格式打开,发现CANdb++的layout的显示跟记事本格式打开居然不一致!

在尝试几次之后我确定,就是在"进入信号定义之后,跳转Signal选项卡"这个操作,会导致信号在报文的起始位被CANdb++修改掉------这是个Bug!!

譬如我这个信号原来在layout里面是这样出现的。

做过"进入信号定义之后,跳转Signal选项卡"这个操作之后,回去layout里面变成了这样。

起始位从7变成了8。

解决办法

我逐渐摸出问题出现的规律,它的出现要同时符合3个条件:

1、数据分布要跨字节,这意味着它不一定需要大于8字节,只需要跨字节就能满足。

2、信号需要为Motorola字节序。

3、使用CANdb++软件打开之后,刚好做过"进入信号定义之后,跳转其他选项卡"操作,不一定要跳转Signal选项卡。

针对问题的出现方式,制定出2种对策:

1、设计时规避跨字节信号或者Motorola字节序,这种会限制设计的发挥,不太推荐。

2、使用CANdb++软件打开DBC文件之后,无论做过任何操作,都不要保存,保证输入文件维持在输入时的状态。

相关推荐
0白露1 小时前
关闭搜狗输入法右下角广告,可以适用于大多数应用系统通知的广告
windows·bug
一只自律的鸡14 小时前
【Linux驱动】bug处理 ens33找不到IP
linux·运维·bug
Lichenpar2 天前
Springboot采用FastJson2作为MessageConverter时,配置的全局日期类型序列化转换BUG
java·开发语言·bug
Irene19913 天前
AI 找 bug 的局限性 和 Deepseek 优势明显
bug
癫狂的兔子3 天前
【bug】【Python】pandas中的DataFrame.to_excel()和ExcelWriter的区别
python·bug
癫狂的兔子4 天前
【BUG】【Python】【Spider】Compound class names are not allowed.
开发语言·python·bug
netkiller-BG7NYT4 天前
阿里云语音合成CosyVoice重大BUG被我发现了
bug
马猴烧酒.5 天前
【Mybatis出现bug】应为 <statement> 或 DELIMITER,得到 ‘id‘
java·bug·mybatis
请叫我大虾5 天前
发现一个jdk中ArrayList的小BUG
android·java·bug
离离茶5 天前
【笔记1-10】Qt bug记录:dockwidget通过raise在最前面显示,toolbar的拓展菜单失效
笔记·qt·bug