如何使用ELM327发送自定义CAN消息?

5

我正在使用ELM327,希望能够设置要发送的CAN消息的标头和数据部分。我发现有一种代码可用于设置消息的标头。

SH xxyyzz

但是我在寻找如何设置数据部分和控制消息发送的方法方面遇到了困难。当我发送一个带有额外字符的ASCII请求以获取PID时,这两者是否都会发生?这会使用由SH命令设置的标题吗?有更好的方法吗?
数据表:http://elmelectronics.com/DSheets/ELM327DS.pdf
3个回答

2
如果您正在使用ELM327,并且您使用的协议是J1850 vpw或J1850 pwm(早于2003年的CAN车辆)...那么您将使用此设置标题。
标头将包含xx yy zz xx =消息优先级(例如68) yy =您要与之交谈的模块的目标地址(例如5A) zz =发送者地址,通常可以是F1
因此,您的命令看起来像这样ATSH 68 5A F1
这设置了标题。现在您想发送数据。从现在开始发送的任何数据都将使用该标题,并将数据发送到该模块。
因此,如果您想获取RPM,只需发送01 0C 您将获得类似41 0C 23的东西。最后一个数据字节是RPM的值。但是,您将不得不找出将其转换为人类可读格式的公式..可以在此处找到很多信息..
https://en.wikipedia.org/wiki/OBD-II_PIDs

顺便说一下,如果您正在使用CAN网络进行通信,您只需使用模块ID作为标题。ATSH 7E0,然后发送数据。所有2008年及以后的车辆都是CAN。有些2003-2007年的车也是。

你需要调用ATSH吗?还是可以直接将仲裁ID和CAN数据负载写成一行? - Brandon Ros
一些车辆在OBD方面使用K-LINE(即使在2008年之后),因此不要假设您可以通过CAN获取OBD。 - TSG

2
这可能是一个老问题,但我刚刚发现了一个在线链接,其中详细描述了如何使用ELM327发送任意CAN消息。因此,任何人(像我一样)经过那个问题仍然可以找到有效的答案。
请查看此处以获取有关使用ELM327发送任意CAN消息的详细信息: https://www.elmelectronics.com/wp-content/uploads/2017/11/AppNote07.pdf 最好的祝愿

0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接