我不明白为什么UDS长度对我来说是错误的

2024-04-25 17:02:38 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在学习UDS,在这个过程中,我遇到了一个从汽车上记录的数据帧

Tester,02 10 01 
Car.  ,10 18 50 01 AA AA AA AA  
Tester,30 00 00 .. FLOW CONTROL  
Car.  ,21 AA AA AA AA AA AA AA  
Car.  ,22 AA AA AA AA AA AA AA  
Car.  ,23 AA AA AA AA 00 00 00  

我不明白的是: 测试仪帧中的长度为2,后跟两个字节,这是正确的。请注意,函数和子函数都计算在长度中。 但在测试仪中,长度是18,但当我计算字节数(在我的示例中是AA)时,它们是22字节,不包括肯定响应和子功能,如果我们包括它们,它将变为24。 那么ISO-TP中的长度是否仅指以下帧而不是第一帧?因为如果我们不连接第一个有位置信息的帧,那么AA字节的长度是18

另外,有人能给我介绍一个好的实现UDS的库(最好是Python库,因为我还在学习过程中),因为我只是在做所有硬编码的事情,我不喜欢最后的混乱局面


Tags: 数据函数示例字节过程记录flowcar
1条回答
网友
1楼 · 发布于 2024-04-25 17:02:38

消息中的长度正确-它是在整个有效负载上计算的:包括SID、子功能等,但不包括:

  • 长度本身
  • 控制信息(即连续帧计数器)
  • 末端的填充(即0x00)

在单个帧中,长度仅占用1字节,而在第一帧中,长度本身占用12位(因此占用2字节,包括控制信息0x1,以将帧类型表示为第一帧)

Car.  ,10 18 50 01 AA AA AA AA  
Tester,30 00 00 .. FLOW CONTROL  
Car.  ,21 AA AA AA AA AA AA AA  
Car.  ,22 AA AA AA AA AA AA AA  
Car.  ,23 AA AA AA AA 00 00 00  

在您的示例中,第一帧的长度为0x18-第一帧的前2个字节(0x10,0x18)不计入长度。因此,如果从0x50开始计算字节数,但不包括连续帧计数器(0x21、0x22、0x23,…):

      0x50, 0x01, 0xAA, 0xAA, 0xAA, 0xAA,
0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA 
0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA 
0xAA, 0xAA, 0xAA, 0xAA

正好有24个字节(十六进制为0x18字节)

在Python中,您可以使用udsoncan库获取基于UDS服务的抽象,或者使用python-can-isotp为您处理传输层

相关问题 更多 >