是否可以通过 .dbc 文件请求所有所需的 ODB II PID?

问题描述 投票:0回答:2

我想要做的是通过 Vector db Editor++ 中创建的 .dbc 文件请求所有所需的 PID。

我对 CAN 通信有足够的了解,能够使用 1 或 2 个 PID 来完成此操作,因为 DLC 允许每个 CAN 消息最多 8 个字节的数据。我也熟悉有关 PID 查询和响应的资源https://en.wikipedia.org/wiki/OBD-II_PIDs#CAN_.2811-bit.29_bus_format

我无法理解的是诊断工具如何能够查询特定车辆制造商决定提供的每个 PID,所以我觉得这是可能的。然而,如果我使用 $7DF 的请求 ID,我只能单独使用这个消息 ID 进行查询,这就是为什么我目前只能在该 CAN 消息中容纳两个 PID(信号)的原因。

can-bus obd-ii elm327 canoe
2个回答
1
投票

诊断工具如何能够查询特定车辆制造商决定提供的每个 PID?

你不能向 ECU 请求任何你想要的东西(至少以正常的方式!)。仅您可以请求的 OBD 相关 PID。所有 OBD II PID 及其定义、缩放比例等均可在 ISO 15031 第 5 部分中找到。这意味着所有 PID 都是预定义的。因此,任何记录器都会首先请求

mode 01 pid 00
获取该车辆的所有可用 PID,然后开始扫描它。

如果我使用$7DF的请求ID,我只能单独使用这个消息ID进行查询。

这是错误的原因

0x7DF
与DLC和消息内容无关。它只是消息的标头,用于告诉 ECU 您从谁那里收到此请求。
0x7DF
是OBD请求,甚至您可以直接请求不同控制器的可用数据。

每个 CAN 消息都是 8 字节长。第一个字节是请求的模式。第二个字节告诉 ECU 传入的字节数,然后您有 6 个字节要发送。因此,他们说您最多可以同时请求 6 个 PID。您的问题可能是从 OBD 接收多个数据,使用流量控制和第一帧消息可能会有点棘手。 在这里您可以找到一些有关如何接收长度超过 8 个字节的消息的信息。

问候,


0
投票

如果我正确理解你的问题,有两部分适用:

第 1 步:您首先必须确定支持哪些 PID。

这家名为 CanEdge 的公司提供了一个 DBC 文件,支持所有服务 1“支持 PIDS”查询:https://www.css electronics.com/pages/can-dbc-file-database-intro

https://en.wikipedia.org/wiki/OBD-II_PIDs#Service_01_-_Show_current_data

同时使用常规版本和扩展版本。

通过一些修改,我可以获得这样的输出(显然这是特定于我的车辆的)

Supported pids
--------------
PID num (hex) | PID num (int) | PID Name
0x01 | 1d | Monitor status since DTCs cleared. (Includes malfunction indicator lamp (MIL), status and number of DTCs, components tests, DTC readiness checks)
0x03 | 3d | Fuel system status
0x04 | 4d | Calculated engine load
0x05 | 5d | Engine coolant temperature
0x06 | 6d | Short term fuel trim—Bank 1
0x07 | 7d | Long term fuel trim—Bank 1
0x0c | 12d | Engine speed
0x0d | 13d | Vehicle speed
0x0e | 14d | Timing advance
0x0f | 15d | Intake air temperature
0x10 | 16d | Mass air flow sensor (MAF) air flow rate
0x11 | 17d | Throttle position
0x13 | 19d | Oxygen sensors present (in 2 banks)
0x15 | 21d | Oxygen Sensor 2 A: Voltage B: Short term fuel trim
0x1c | 28d | OBD standards this vehicle conforms to
0x1f | 31d | Run time since engine start
0x20 | 32d | PIDs supported [$21 - $40]
0x21 | 33d | Distance traveled with malfunction indicator lamp (MIL) on
0x24 | 36d | Oxygen Sensor 1 AB: Air-Fuel Equivalence Ratio (lambda,λ) CD: Voltage
0x2e | 46d | Commanded evaporative purge
0x2f | 47d | Fuel Tank Level Input
0x30 | 48d | Warm-ups since codes cleared
0x31 | 49d | Distance traveled since codes cleared
0x32 | 50d | Evap. System Vapor Pressure
0x33 | 51d | Absolute Barometric Pressure
0x3c | 60d | Catalyst Temperature: Bank 1, Sensor 1
0x40 | 64d | PIDs supported [$41 - $60]
0x41 | 65d | Monitor status this drive cycle
0x42 | 66d | Control module voltage
0x43 | 67d | Absolute load value
0x44 | 68d | Commanded Air-Fuel Equivalence Ratio (lambda,λ)
0x45 | 69d | Relative throttle position
0x46 | 70d | Ambient air temperature
0x47 | 71d | Absolute throttle position B
0x49 | 73d | Accelerator pedal position D
0x4a | 74d | Accelerator pedal position E
0x4c | 76d | Commanded throttle actuator
0x4d | 77d | Time run with MIL on
0x51 | 81d | Fuel Type

现在您知道支持哪些 PID(这也仅适用于服务 1,因此您必须对服务 5 和服务 9 执行此操作),您可以创建一个解码这些信号的 DBC 文件。 CanEdge DBC 文件实际上已经附带了所有已启用的 Service 01 PID。


如果您的问题是关于尝试仅发送 1 条消息并接收包含

n
PID 响应的响应,据我所知,这是不可能的,您一次只能获得一个响应。

© www.soinside.com 2019 - 2024. All rights reserved.