目录
一、 传输效率可能会降低——具体的取决于将此DID应用在哪个诊断服务中
问题背景
交流群的小伙伴有人问“UDS里定义DID长度为2个Byte,客户来问我DID能不能做成3个Byte,拿不出资料跟他解释"。
这时候,只是单纯的觉得,协议这种规定死的东西,当然不能想变就变,不然当初给它设置固定长度,就没有意义了。
后来另外一个小伙伴回复说”改协议栈,客户上帝,上帝说了算“。
才想到协议栈是可以改的~ 哈哈哈 对呀,协议也是人定义的,当然也可以被改。
这时候发现自己对于协议中为什么要把DID设置为2个Byte,并不明白。能想到的理由只有一个2个Byte的长度已经足够用了。但这只是够用,如果增加长度会怎么样呢?
其实要考虑的是,如果改了会有什么影响?这些影响是否可控?我要从哪些方面分析优劣势呢?
结论及分析
先上结论:以小白的视角,查了一堆资料后,得出的结论是不建议修改。
有以下3点理由。
一、 传输效率可能会降低——具体的取决于将此DID应用在哪个诊断服务中
因为CAN标准帧总共8Byte, 网络层占1Byte,还剩余7 Byte 可用。
根据不同诊断服务的要求不同,传输效率是否会受影响也需要具体情况具体讨论:
比如说,如果是诊断服务,request/response下面这种格式的,3Byte DID就不影响:
<SID> + <Sub-Funtion> + <DID>
其中SID 需要1Byte,Sub-Func需要1Byte,剩余5Byte可用,有足够的空间给DID。
但如果是数据读写服务,request/response是下面这种格式, 3Byte DID将可能降低传输效率:
<SID>+<DID>+<DATA>
这时:DID如果是2Byte,Data可以传输4Byte;DID如果是3Byte,Data只有3Byte的位置。
- 如果data长度3Byte内能够传输完成就不影响,
- 如果Data超过3Byte,那么原本单帧可完成传输的内容,需要多一个帧才能完成,不仅是传输效率打折扣,拆包、组包操作也需要额外开销。
【参考文章:毕乾坤,徐旭.UDS协议栈中的时间参数解析[J].汽车实用技术,2019(13):43-44+57.DOI:10.16638/j.cnki.1671-7988.2019.13.016.】
二、相关的工具是否支持——需要一一确认
【参考链接:CDD数据库文件制作(三)——DIDCDD数据库文件制作(三)——DID_涓涓悦然的博客-优快云博客 】
DID 长度为2Byte是通用规则,改成3Byte,需要确认相关的工具是否是固化配置的,是否会有应用上的限制。
比如目前了解到的和DID相关的一个软件CANdelaStudio,需要用它制作CDD文件,在CDD文件中创建DID时,DID的DataType是下拉框选择的,里面的选项是否支持3Byte的长度?
这个软件可能支持(我没有实际操作过这个软件,无法确认),其他的软硬件设备呢?
三、替代方案——现有的“动态定义DID”是否能满足需求?
【参考文章:汽车UDS诊断详解及Vector相关工具链使用说明——2.2.7 动态定义DID(0x2C)汽车UDS诊断详解及Vector相关工具链使用说明——2.2.7 动态定义DID(0x2C)_老孟_的博客-优快云博客_动态did】
动态定义DID服务允许诊断仪在ECU内部动态定义一个临时的DID,可以通过该DID读取一段内存的数据,也可以通过改DID一次性读取多个原有DID的数据。动态定义DID既可以是支持22服务的DID,也可以是支持2A服务的周期性读取DID。
该服务可以更加灵活地读取一些临时数据,也可以降低因频繁发送诊断请求和响应而导致的总线负载过高。
以上只是简单的分析记录,里面涉及到的内容点也并不太理解。欢迎小伙伴们一起讨论指正呀~
END