[英]Create OBD2 MUT scanner by using Java FTDI lib - jd2xx - openport1.3 usb cable
我正在嘗試為三菱藍瑟MX 1997創建一個Java obd2掃描儀應用程序,該應用程序在OBD2上使用MUTII協議。 誰能幫助我使用jd2xx庫讀取MUT請求代碼 。 我嘗試了以下程序,但未讀取引擎RPM。
package lancerscan;
import jd2xx.JD2XX;
public class Test2 {
public static void main(String[] args) throws Exception {
JD2XX jd = new JD2XX();
jd.open(0);
jd.setBaudRate(38400);
jd.setDataCharacteristics(
8, JD2XX.STOP_BITS_1, JD2XX.PARITY_NONE);
jd.setFlowControl(
JD2XX.FLOW_NONE, 0, 0);
jd.setTimeouts(1000, 1000);
String msg = "21";
int ret = jd.write(msg.getBytes());
System.out.println(ret + " bytes sent.");
int rd = jd.read();
System.out.println(">>>" + rd);
int status = jd.getQueueStatus();
byte[] data = new byte[(int) status];
long lngBytesReturned = jd.read(data, 0, data.length);
System.out.println("======= " + lngBytesReturned);
}
}
引擎RPM的MUT請求代碼為0x21,更多MUT請求代碼可在此處找到
其工作正常類似C語言程序是在這里 ; 主要的prjct文件在這里
謝謝,莎莎
首先,您使用與示例中不同的波特率。 該示例使用15625 baud
但您使用的是38400 baud
。
其次,您缺少一些設置命令。 我不確定這是否會有所作為,但是在您的代碼和示例之間有所不同。
三菱要求您通過在其中一個引腳上以5 baud
的速率發送0x00
,將汽車ECU設置為診斷模式。 在OpenPort 1.3D電纜上,這表示將中斷設置為打開1800 ms
,然后將其關閉。 您可以從libftdimut.c文件中的ftdimut_init()
命令完成此操作。
printf("Sending 0x00 at 5 baud\n");
printf("Break on......\n");
ftStatus = FT_SetBreakOn(ftdimut_ftHandle);
if(ftStatus != FT_OK) return ftStatus;
ftdimut_msleep(1800);
printf("Break off......\n");
ftStatus = FT_SetBreakOff(ftdimut_ftHandle);
if(ftStatus != FT_OK) return ftStatus;
然后,汽車ECU將向您發送包含ECU ID的4個字節。 然后可以將其用於檢查ECU是否正確進入診斷模式。 您可以在libftdimut.c中看到它。
ftStatus = FT_Read(ftdimut_ftHandle, buf, 4, &bytesRead);
if(ftStatus != FT_OK) return ftStatus;
if(bytesRead == 4) {
return FT_OK;
}
現在,假設您退回了4個字節,則可以開始發送診斷代碼,例如0x17
或0x21
。
我剛剛在您的博客上看到您的帖子,niallm答案是正確的,您需要先進行5波特初始化,這涉及驅動KLine,您可以使用該答案中發布的5波特初始化之類的內容,以及有關協議的更多信息:
http://evoecu.logic.net/wiki/MUT_Protocol
得到4個字節的響應后,您可以以15625波特的速度開始發送請求(我正在與94 3000GT通信,因此CEL指示燈停止閃爍),在本例中,我也將轉換后的值(0x21 = 33十進制)作為字節數組發送。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.