여러 ECU 칩이 장착 된 차량에서 수신 한 프레임


10

나는 일반적으로 '자동차 사람'이 아니기 때문에 여기에 도움을 줄만큼 충분히 설명 할 수 있기를 바랍니다.

OBD-II 장치로 메시지를 보낼 때 테스트 한 대부분의 차량에서 하나의 응답을받습니다. 그러나 분명히 하나 이상의 ECU 칩이 장착 된 자동차의 경우 각 차량에서 응답을받습니다. 예를 들어, ECU 칩이 3 개인 차량에 01 0C PID 명령 을 보내면 일반적으로 매우 유사하지만 여전히 다른 3 개의 응답을받습니다.

01 00명령은 차량의 지원의 PID를 상태 4 바이트를 반환하도록되어 있지만,이 또한 4 각 ECU 바이트 반환 - 다른 사람은 갖고있는 것 같다 동안 완벽하게 몇 가지에 플래그 오프로 4 바이트 구체화되고 하나 소수의 플래그가 켜져 있습니다 (지금까지 이러한 플래그는 항상 '기본'응답에 포함 된 플래그 인 것처럼 보이지만 이것이 항상 해당되는지 확실하지 않습니다).

예:

SENT: 01 00

RECEIVED:

00 BF BF AC D3 - This response has the most binary flags turned on
00 98 18 80 11 - 8 flags on here
00 98 18 80 13 - 9 flags on here

마지막 두 줄은 첫 번째 줄에도 플래그가 지정된 플래그로 구성되지만 3 줄에는 2 줄에없는 추가 플래그가 하나 있습니다.

명령을 보낼 때 들어야하는 '기본'칩으로 자격을 갖춘 단일 ECU가있을 수 있으며 CAN ID 마스크 / 필터를 사용할 수 있음을 이해합니다. 내가 필요한 것들에만주의를 기울이십시오.

문제는 : '주의 ECU'에주의를 기울여야합니까, 아니면이 모든 반응이 똑같이 중요합니까? 타겟팅해야 할 기본 항목이있는 경우 '가장 중요한'항목을 결정하기 위해 보낼 수있는 명령이 있습니까?

차량 테스트 :

2011 Chevy Cruze               [2 ECUs]
2015 BMW M5                    [3 ECUs]
2015 Range Rover Autobiography [3 ECUs]

1
어떤 제조사와 모델을 사용해 보았는지 알려주는 것이 좋습니다. 내가 아는 것은 3 개의 ECU가있는 자동차는 2 개의 일반 ECU (각 엔진 뱅크마다 하나씩)와 2 개의 정규 ECU와의 신호를 관리하는 하나의 "마스터"ECU로 설정되는 경향이 있다는 것입니다. "마스터"ECU는 실제로 그 이상을 수행하지 않으므로 진단 문제 코드가 설정되면 해당 소스는 "마스터"가 아닌 일반 ECU가됩니다. 그러나 DTC를 얻으려면 OBD-II 인터페이스를 통해 마스터를 폴링해야 할 수도 있습니다. 나는 이것보다 더 당신을 도울 수 있기를 바랍니다. 그러나 그것은 내가 지금 가진 전부입니다.
Zaid

1
저는 소프트웨어 엔지니어이지만 OBD 또는 CAN을 사용하지 않았지만 이 페이지 가 전혀 도움 됩니까? 메시지를 필터링하는 방법이 있어야합니다.
JPhi1618

@Zaid 추가 정보에 감사드립니다. 테스트 한 자동차로 내 질문을 업데이트했지만, 이는 주어진 차량의 수를 결정해야하는 것입니다. 이 지원되지 않는 PID를 보낼 때 내가 기대한다 정확한 응답에 따라 mattering을 종료하지 않을 수 있습니다,하지만 난 그냥 내 기지를 모두 커버하는 원
고삐 S

@ JPhi1618 이것은 실제로 내가 필요로하는 것과 거의 같은 맥락이다. 이것은 내가 따라야 할 길일 것이다. 링크에 대해 감사합니다. 조금 더 깊이 들어가겠습니다.
Rein S

1
당신이 "답변"으로 살을 낼 수 있다고 생각되는 것을 발견하면 다시 와서 자신의 질문에 대답하십시오. 그것은 완전히 허용됩니다.
JPhi1618

답변:


5

차량이 2008 이상인 경우 캔 프로토콜을 사용하는 경우 AT CR 명령을 사용하여 듣고 싶은 ECU를 선택할 수 있습니다.
방법은 다음과 같습니다.
보내기

AT H1

그러면 ECU의 주소를보기 위해 헤더가 켜집니다.
보내다

0100

이것은 1-20의 pid 중 어느 것이 지원되는지를 보여주는 OBD 명령입니다.
응답은 다음과 같아야합니다.

7E8064100BE3EA813
7E906410098188013
>

이것은 당신이 2 개의 ECU 7E8 (엔진) 7E9 (전송)을
가지고 있음을 보여줍니다 .5 개의 ECU가 반환 된 것을 보았습니다 : 7E8,7E9,7EA, 7EB, 7EC.
하나의 ECU로부터 만 들으려면 xxx는 ECU 주소 인 AT CRA xxx를 발행하십시오.
다음을 보내십시오

AT CRA 7E8

그때

0100

돌아올 것이다 :

7E8064100BE3EA813

보내다

AT H0

헤더를 끄고 다음을 보내십시오.

0100

그리고 당신은 그냥 돌아올 것입니다

4100BE3EA813

차량이 29 비트 인 경우 0100 공명은 다음과 같습니다.

18DAF11806410088180013
18DAF110064100BE5FA813
>

이것은 2 개의 ECU 18DAF118 (전송) 및 18DAF110 (엔진)을 보여줍니다.
보내다

AT CRA 18DAF110

엔진에서 바로들을 수 있습니다.


안녕 !! 차량 진단 시스템의 프로토 타입을 작업 중입니다. 나는 당신의 대답을 겪었지만 쿼리가 거의 없습니다 ... 1) 사용 가능한 ECU 수를 확인하는 AT 명령이 있습니까? 2) 헤더가 꺼져있을 때 하나의 문자열 "4100BE3EA813"만 표시되는 이유보다 "410098188013"
Dev

4

생각한대로 작동하지 않습니다.

CAN은 모듈 기반이 아니라 메시지 기반입니다. 다른 모듈과 직접 통신하는 모듈이 없습니다. CAN에서 모듈은 주소가있는 메시지를 생성하며,이 주소는 메시지에 포함될 데이터를 식별합니다. 또한 주소는 메시지의 중요성을 나타냅니다. 주소가 낮을수록 우선 순위가 높습니다.

예를 들어 ABS는 차량 속도를 전송합니다. 데이터가 필요한 다른 모든 모듈은 읽습니다.

다른 어떤 모듈보다 중요한 모듈은 없습니다. 중요한 메시지 우선 순위입니다.


이에 대한 후속 조치 : 다른 모듈보다 더 중요한 모듈이없는 경우 여러 ECU의 응답을 걸러 낼 이유가 있습니까? 예를 들어, BMW M5에 RPM을 요청하면 3 개의 응답을받습니다 (일반적으로 비슷하지만 정확히 같은 것은 아닙니다). 첫 번째 응답을 정확한 판독 값으로 '신뢰'해야합니까? 각 요청에 대해 첫 번째 응답을하지 않는 이유는 무엇입니까?
Rein S

모든 응답의 주소가 동일하면 첫 번째 응답을 신뢰하십시오. 주소가 같지 않은 경우 우선 순위가 가장 높은 주소를 신뢰하십시오. 우선 순위가 가장 높은 주소가 가장 낮습니다.
vini_i
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.