Quadros recebidos de veículos com vários chips ECU

10

Geralmente, eu não sou uma 'pessoa do carro', então espero que eu possa explicar isso o suficiente para obter ajuda aqui:

Ao enviar mensagens para um dispositivo OBD-II, recebo uma resposta na maioria dos carros que testei. No entanto, com carros que aparentemente possuem mais de um chip de ECU, recebo uma resposta de cada um deles. Por exemplo, se eu enviar um 01 0C comando PID para um veículo com 3 chips de ECU, recebo 3 respostas que geralmente são muito semelhantes, mas ainda diferentes.

Um 01 00comando deve retornar 4 bytes que indiquem os PIDs suportados do veículo, mas isso também retorna 4 bytes para cada ECU - um sendo um 4 bytes totalmente desenvolvido com vários sinalizadores ativados e desativados, enquanto os outros parecem ter apenas um punhado de sinalizadores ativados (esses sinalizadores até agora parecem sempre estar incluídos na resposta 'principal', mas não tenho certeza se esse é sempre o caso).

Exemplo:

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

As duas últimas linhas consistem em sinalizadores que também são sinalizados na primeira linha, mas a linha 3 possui um sinalizador adicional que a linha 2 não possui.

Parece-me que talvez exista uma única ECU qualificada como o chip 'primário' que eu deveria estar ouvindo quando estou enviando comandos e (acho) eu entendo que posso usar uma máscara / filtro CAN ID para Preste atenção apenas nos que eu preciso.

A pergunta é: Existe realmente um 'ECU primário' no qual devo prestar atenção ou todas essas respostas são igualmente importantes? Se houver um principal que eu precise direcionar, existe um comando que eu possa enviar para determinar qual é o 'mais significativo'?

Veículos testados em:

2011 Chevy Cruze               [2 ECUs]
2015 BMW M5                    [3 ECUs]
2015 Range Rover Autobiography [3 ECUs]
Rein S
fonte
1
Pode ser útil nos dizer em qual marca e modelo você tentou isso. O que eu sei é que os carros com 3 ECUs tendem a ser configurados com dois ECUs regulares (um para cada banco de motores) e um ECU "mestre" que gerencia sinais de / para (e possivelmente entre?) Os dois ECUs regulares. A ECU "mestre" realmente não faz muito mais do que isso; portanto, se um código de problema de diagnóstico for definido, a fonte disso será a ECU regular, não o "mestre". No entanto, talvez você precise pesquisar o mestre através da interface OBD-II para obter os DTCs. Eu gostaria de poder ajudá-lo mais do que isso, mas é tudo o que tenho por enquanto.
Zaid
1
Sou engenheiro de software, mas não usei OBD ou CAN, mas esta página ajuda em tudo? Parece que deve haver uma maneira de filtrar mensagens.
precisa saber é o seguinte
@Zaid Obrigado pela informação extra. Atualizei minha pergunta com os carros em que a testei, mas é algo que precisarei decidir em qualquer número de veículos; ele não pode acabar importando, dependendo da resposta exata eu deveria esperar ao enviar PIDs não suportados, mas eu só queria cobrir todas as minhas bases
Rein S
@ JPhi1618 Na verdade, é praticamente o mesmo contexto em que eu precisava disso. Esse pode muito bem ser o caminho que preciso seguir! Muito obrigado pelo link, vou aprofundar um pouco mais.
Rein S
1
Se você encontrar algo de interesse que acha que pode se transformar em uma "resposta", volte e responda sua própria pergunta. Isso é totalmente permitido.
precisa saber é o seguinte

Respostas:

5

Se o seu veículo for 2008 ou mais recente, ele está usando o protocolo can, você pode usar o comando AT CR para selecionar de qual ECU deseja ouvir.
Veja como:
enviar

AT H1

isso ativará os cabeçalhos para ver os endereços das ECUs.
enviar

0100

este é um comando OBD para mostrar quais dos pids de 1 a 20 são suportados.
sua resposta deve ser como:

7E8064100BE3EA813
7E906410098188013
>

isso mostra que você tem 2 ECUs 7E8 (motor) 7E9 (transmissão);
eu vi 5 ECUs retornados: 7E8,7E9,7EA, 7EB, 7EC.
Para ouvir apenas uma ECU, emita AT CRA xxx onde xxx é o endereço da ECU.
envie o seguinte

AT CRA 7E8

então

0100

retornará:

7E8064100BE3EA813

enviar

AT H0

para desativar os cabeçalhos e enviar:

0100

e você vai voltar apenas

4100BE3EA813

Se o seu veículo for de 29 bits, a ressonância 0100 será semelhante a:

18DAF11806410088180013
18DAF110064100BE5FA813
>

isto mostra 2 ECUs 18DAF118 (transmissão) e 18DAF110 (motor).
enviar

AT CRA 18DAF110

ouvir apenas do motor.

Godzilla
fonte
Oi !! Eu estou trabalhando em um protótipo para o sistema de diagnóstico do veículo. Eu passei pela sua resposta, mas tenho poucas consultas ... 1) existe algum comando AT para verificar quantas ECUs estão disponíveis. 2) quando cabeçalho é do que por apenas uma string "4100BE3EA813" não é exibido tanto "410.098.188.013"
Dev
4

CAN não funciona como você pensa.

CAN não é baseado em módulo, é baseado em mensagem. Nenhum módulo fala diretamente com qualquer outro módulo. No CAN, um módulo gera uma mensagem com um endereço, que identifica os dados que estarão contidos na mensagem. Além disso, o endereço dá a importância da mensagem. Quanto menor o endereço, maior a prioridade.

Por exemplo, o ABS transmitirá a velocidade do veículo. Todos os outros módulos que precisam dos dados irão lê-los.

Não existe um módulo que seja mais importante que qualquer outro, é a prioridade da mensagem que é importante.

vini_i
fonte
Apenas para acompanhar: Se não houver um módulo mais importante que o outro, existe algum motivo para filtrar as respostas de várias ECUs? Por exemplo, se eu solicitar RPM para o BMW M5, recebo 3 respostas (geralmente são semelhantes, mas nunca exatamente iguais). Devo apenas 'confiar' na primeira resposta como uma leitura precisa? Alguma razão para não apenas ir com a primeira resposta para cada solicitação?
perfil
Se todas as respostas tiverem o mesmo endereço, confie na primeira. Se eles não tiverem o mesmo endereço, confie no que tiver a maior prioridade. A prioridade mais alta tem o endereço mais baixo.
Vini_i