30,461
社区成员




当DBC中少数报文对于ECU来说在特定场景下属于发送报文,而特定其他场景属于接收报文
针对这少部分报文差异(特定场景下的收发属性不同),从OEM角度来说,
这部分差异不足以大到通过创建不同的车型来区分。
所以适配这一个车型的差异,可以有两个方案
方案1:
做成两版本DBC(细微差异),通过创建两个CFG工程,生成两套可执行文件,管理两套软件版本
方案2:兼容两版本DBC,通过一个工程集成两版本DBC,只管理一个软件版本。
而对于少部分DBC的差异,管理两版软件将会增加很多开发和维护工作,显然如果能做成兼容,是最好的。
所以我们当前选用方案2.
> 2.1 选择Project --》Project Settings ,点击下图Edit Vatiant
> 2.2 添加对应的DBC Variant, 可以按照车型名称定义
> 2.3 给PostBuild Variant对应命名
> 2.4 给PostBuild Variant对应命名 !
> 2.5 确认当前配置,点击finish 完成 !
> 2.6 查看工程,已可以自主选择切换DBC Variant选项(实际对应DBC尚未切换,因为DBC还未导入!)
>
> 2.7 依次导入对应的DBC文件。 !
> 新建Variant后主线在COM\PDUR\CANIF模块出现CFG工程的check和生成错误 COM Stack各模块主要错误及解决方法
>
>
>
> 3.1- 错误类型:CAN if层报文range和指定ID配置冲突
>
>
>
> 原因和对策: CANIF层存在报文即设定的CANID(固定),又设定了范围,所以产生了冲突
> 对于NM报文可以设定接收范围,所以删除CANID(固定),保留范围项即可。
>
> 删除此项配置,即可解决报错
> 3.2 错误类型: 相同报文在不同DBC Varaint下的信号访问属性配置差异导致的错误
>
>
> 解决方式:把信号ACCESS_UNLCEAR属性统一变成ACCESS_NEEDED_BY_SWC_OR_COM
> 3.3 错误类型: 接收报文DataProvision 属性被误填充
> 解决方法: 由属性解释可以看出这是针对发送报文的,删除属性即可
>
> 3.4 错误类型:PDUR使用的长度策略错误
>
>
> 错误原因 可以看出DBC导入后部分报文PDUR长度属性策略默认了UNUSED,(TP长度策略,理解应该是诊断报文属性)
> 解决方法:针对非诊断报文,PDUR长度策略配置成IGNORE,发送属性选择Transmission Confirmation
>
>
> 3.5 错误类型:CANif层Buffer中的PDU数量设置为空
>
原因及解决方法 设置成1即可。表示CAN报文canif buffer中开辟一个PDU。
3.6 错误类型:COM层最大Notification次数缓存被清
解决方法:根据需要可以配置成1,表示缓存1个notification。
代码修改: 查看对应ECUC中的3项Variant参数(图中仅列举了Veh_type3),切换DBC Variant后如下
红框出参数名称也会对应变更,标志着成功完成了对应多个DBC Variant的添加
在启动时候对应函数初始化中(参考附图)Com_init,PduR_init等函数中添加新的参数Veh_type3对应handle的初始化即可。
----> 兼容方案的实施,主要有较多注意地方,主要是DBC文件的格式,如果不遵循一定规则,那么会导致集成,编译出错,多次的DBC返工和重新制作,影响DBC的开发效率。
----> 注意相同信号如果分布在多个variant中,受第三方工具制约,在制作DBC那么他们的的Data Type、Compute Method、Value Table、Unit等信号属性务必定义完全相同,否则CFG工程check和生成阶段会报错.