can-bus - 使用 ELM327 接收 CAN 报文时的流量控制报文

标签 can-bus obd-ii elm327

我正在尝试制作一个在 Windows 下运行并与 ELM327 设备通信的软件。我创建了第一个版本,然后我进入了我的 SMART ForTwo (SMART 451) 车辆,我设法连接了仪表盘(发送 CAN ID 为 782,接收 CAN ID 为 783)。但是我对流量控制有很大的问题。这是日志:

TX:ATI 接收端:ELM327 v1.5a

TX:ATE0 接收:ATE0 正常

TX:ATSP6 接收:好的

TX:ATH1 接收:好的

TX:ATL1 接收:好的

TX:ATCFC1 接收:好的

TX:ATFCSM0 接收:好的

TX:阿塔尔 接收:好的

TX:ATSH782 接收:好的

TX:ATCRA783 接收:?

TX:ATST64 接收:好的

TX:1092 接收:783 02 1A 87

TX: 1A87 接收:783 10 16 5A 87 05 6E 00 08

我使用了另一个工具,我看到 ELM327 设备立即发送流量控制帧。是这样的:

891.438 782 02 1A 87

891.444 783 10 16 5A 87 05 6E 00 08

891.444 782 30 00 00 00 00 00 00 00

如您所见 - 流量控制帧与从其他设备发送的第一帧同时发送。我确定其他设备在接收“流量控制”帧时遇到问题。 我研究了 ELM327 文档,但没有找到有关如何延迟流控制帧的任何信息。 我应该如何正确发送请求“1A 87”并收到响应?

最佳答案

这是一个旧帖子,但可能对其他人有帮助!

这是我在与 SPI 连接的 MCP2515 上使用第一帧 (FF) 和流量控制 (FC) 的经验。

首先,您应该始终在 FF 消息之后发送 FC 消息,而不是同时发送。

其次,诊断读取器可以使用 ECU 响应帧中的 ID 继续与特定 ECU 通信。特别是,多帧通信需要响应特定的 ECU ID 而不是 ID 7DF。用通俗易懂的语言,您不应该发送 ID 为 7DF 的 FF 消息,您应该对您希望接收连续帧的确切 ECU 进行寻址。例如请求汽车 VIN(基于 Golf VII 的真实信息):

7DF 02 09 00 00 00 00 00 00//发送请求

7E8 10 14 49 02 01 57 56 57//从主ECU接收

7E0 30 00 00 00 00 00 00 00//寻址主 ECU 而不是 7DF !!

7E8 21 5A 5A 5A 41 55 5A 45//连续消息由7E0发送!

7E8 22 50 35 33 30 36 38 35

希望对您有所帮助!

关于can-bus - 使用 ELM327 接收 CAN 报文时的流量控制报文,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29213988/

相关文章:

can-bus - 虚拟 CAN 总线模拟器

android - CAN总线与Android通讯咨询

android - 如何与 OBD II ELM327 适配器​​进行连续通信?

Java Get/Set 方法返回 null

java - ELM327 在尝试将其与 ODB Java API 一起使用时返回 `?`

can-bus - 单节点 CAN 网络(CAN 协议(protocol))

python - 如何通过 xl-driver 库实现 UDS 协议(protocol)来发送诊断?

java.io.IOException : bt socket closed, 读取返回:-1

ios - OBD 2 iOS wifi 快速通讯

network-protocols - 设置 ELM327 监听