2014-12-16 2 views
1

OBD 장치 (ELM 327 Mini 사용)에 연결하여 데이터를 읽는 Android 용 응용 프로그램을 현재 개발 중입니다.OBDII 프로토콜의 데이터 이해

나는 OBDII 프로토콜에 비교적 익숙하다. 한 달 전에 같이 작업하기 시작했다. 공식 문서를 사용하여 인터넷을 둘러 보았고 pires api를 사용하여 무엇인가의 개발을위한 좋은 기반을 만들었다. 내가 필요 (당신은 herehere를 찾을 수있다) 나는 그 어플리케이션을 끝내고 몇 대의 자동차에서 그것을 테스트 할 수 있었다. 결과는 대부분 Mercedes-Benz Class C w204에서 테스트 할 때까지 훌륭했습니다.

내 차에서 내 응용 프로그램이 OBD에서 읽는 데이터는 내가 이해할 수없는 것입니다. 비슷한 예제를 찾아 보려고했지만 성공하지 못했고이 문제에 대한 해결책을 찾지 못해서 완전히 빠져있었습니다.

이 데이터의 몇 가지 예를 쓰겠습니다.하지만 먼저 응용 프로그램이 연결될 때마다 OBD를 초기화하는 방법을 알려 드리고자합니다. 왜냐하면 올바른 명령을 사용하지 않았거나 나는 실종되었다. 그러나 말했듯이, 내 응용 프로그램은 다른 자동차와 완벽하게 작동합니다.

상기 명령 : 모든

AT Z 
AT L0 
AT SP 6 or AT SP 0 

첫째, 초기화 내가 PID 00 (01 00) 01에서 20의 PID 자동차가 지원하는 알 보내기 후. 여기에 가끔

[Req] 01 00 
[Ans] 01 00 41 00 98 18 00 01 
[Ans] 1: 06 41 00 BF FF E8 93 

때로는

[Req] 01 00 
[Ans] 01 00 41 00 95 00 20 13 

주를 받게 내 첫 번째 문제

이다 : 나는 [필수]를 추가하고 [Ans By의] 수동으로 유일한 목적은 그것을 확인하기 더 이해할 수있는.

무엇이 실제로 저를 귀찮게합니까? 답은 다르다는 것입니다. 때로는 41 00 95 00 20 13 및 기타 41 00 98 18 00 01로 대답합니다. 어떻게 그럴 수 있습니까? 그 PID 응답은 항상 같은 차를 위해 동일해야한다, 나는 차가 PID가 지원하는 dynamicaly를 바꿀 수 있다고 생각하지 않는다.

또 다른 이유는 때때로 PID 00이 1 또는 2 라인으로 응답되는 이유입니다. 첫 번째 예에서는 첫 번째 줄은 pid 00에 대한 일반적인 대답이지만 다음은 1 : 06 41 00 BF FF E8 93 인 두 번째 대답을 가지고 있으며 그 의미가 무엇인지 전혀 알지 못합니다.

가 나는 동시에 서로 다른 프로토콜에 응답하기 때문에 01

[Req] 01 01 
[Ans] 01 01 41 01 00 07 E9 00 
[Ans] 1: 06 41 01 00 04 00 00 

[Req] 01 01 
[Ans] 01 01 41 01 00 04 00 00 

그것을있는 PID와 함께 또 다른 예를? 06이 의미하는 것입니까?

또한 차량의 속도를 묻는 경우 NO DATA를 반환하고 다음 2 초 이내에 41 0D 00 (예 :)에 올바른 값을 반환하고 다음 2 초 후에 다시 NO DATA를 다시 반환합니다. 의미, 그것은 완전히 무작위로 NO DATA 오류가 발생했을 때입니다. 문제는 차가 정확한 데이터를 반환 할 수있는 시간이 있기 때문에 실제로 PID가 지원된다는 것입니다.

나는 그것이 OBD의 초기화에 관한 것이라고 확신한다. 아마도 더 높은 타임 아웃을 설정하거나 더 많은 명령을 포함해야하지만, OBD 프로토콜의 전문가가 아니기 때문에, 나는 정말로 모른다. 나는 어떻게해야해야 했는가. 나는 공식적인 문서에서 빠뜨린 뭔가를 지적하거나 어리석은 실수를 저질렀을 지 모릅니다. 대부분 나는 무슨 일이 일어나고 있는지 이해하고 싶습니다. 데이터를 제대로 처리 할 수 ​​있습니다.

고맙습니다.

답변

2

그래서 마침내 자동차가 내 requets에 응답하는 두 개의 ECU를 가지고 있기 때문에 이것이 일어나는 이유를 발견했습니다.

헤더가 ON (AT H1) 인 몇 가지 PID를 요청하여 찾았습니다. 이 명령으로 응답 데이터가 ID 7E8 (엔진) 및 7E9 (전송)에서 왔음을 알 수있었습니다. 여기에 예제가 있습니다

[Req] 01 01 
[Ans] 7E8 06 41 01 00 07 E9 00 
[Ans] 7E9 06 41 01 00 04 00 00 

이 문제를 해결하려면 AT SH 7E0 명령을 실행할 수 있습니다. 이 명령은 OBD에게 7E8 만 듣도록 지시하는 것입니다.

출처 : This page where I asked this question too