Frame yang diterima dari kendaraan dengan banyak chip ECU

10

Saya biasanya bukan 'orang mobil', jadi semoga saya bisa menjelaskan ini dengan cukup baik untuk mendapatkan bantuan di sini:

Saat mengirim pesan ke perangkat OBD-II, saya menerima satu respons di sebagian besar mobil yang telah saya uji. Namun, dengan mobil yang ternyata memiliki lebih dari satu chip ECU, saya mendapat respons dari masing-masing. Misalnya, jika saya mengirim 01 0C perintah PID ke kendaraan dengan 3 chip ECU, saya menerima 3 respons yang umumnya sangat mirip tetapi masih berbeda.

Sebuah 01 00perintah seharusnya mengembalikan 4 byte yang menyatakan PID didukung kendaraan, tapi ini juga kembali 4 byte untuk setiap ECU - salah satu yang sepenuhnya fleshed 4 bytes dengan beberapa bendera dan mematikan, sementara yang lain tampaknya hanya memiliki beberapa bendera dihidupkan (bendera-bendera ini sejauh ini tampaknya selalu menjadi bendera yang termasuk dalam respons 'utama', tapi saya tidak yakin apakah ini selalu terjadi).

Contoh:

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

Dua baris terakhir terdiri dari flag yang juga ditandai di dalam baris pertama, tetapi baris 3 memiliki satu flag tambahan yang baris 2 tidak.

Sepertinya saya bahwa mungkin ada ECU tunggal yang memenuhi syarat sebagai chip 'primer' yang harus saya dengarkan ketika saya mengirim perintah, dan (saya pikir) saya mengerti bahwa saya bisa menggunakan masker / filter CAN ID untuk hanya memperhatikan yang saya butuhkan.

Pertanyaannya adalah: Apakah benar-benar ada 'ECU primer' yang harus saya perhatikan, atau apakah semua tanggapan ini sama pentingnya? Jika ada yang utama yang perlu saya targetkan, apakah ada perintah yang dapat saya kirim untuk menentukan mana yang 'paling signifikan'?

Kendaraan diuji pada:

2011 Chevy Cruze               [2 ECUs]
2015 BMW M5                    [3 ECUs]
2015 Range Rover Autobiography [3 ECUs]
Rein S
sumber
1
Mungkin bermanfaat untuk memberi tahu kami model dan model mana yang Anda coba ini. Yang saya tahu adalah bahwa mobil-mobil dengan 3 ECU cenderung diatur dengan dua ECU biasa (satu untuk setiap bank mesin) dan satu "master" ECU yang mengelola sinyal ke / dari (dan mungkin antara?) Dua ECU biasa itu. ECU "master" tidak benar-benar melakukan lebih dari itu, jadi jika kode gangguan diagnostik diatur, sumbernya adalah ECU biasa, bukan "master". Namun, Anda mungkin harus polling master melalui antarmuka OBD-II untuk mendapatkan DTC. Saya berharap saya bisa membantu Anda lebih dari ini, tetapi hanya itu yang saya miliki untuk saat ini.
Zaid
1
Saya seorang insinyur perangkat lunak, tetapi belum pernah menggunakan OBD atau CAN, tetapi apakah halaman ini membantu sama sekali? Sepertinya harus ada cara untuk memfilter pesan.
JPhi1618
@Zaid Terima kasih atas informasi tambahannya. Saya memperbarui pertanyaan saya dengan mobil-mobil tempat saya mengujinya, tetapi ini adalah sesuatu yang harus saya putuskan untuk sejumlah kendaraan yang diberikan; itu mungkin tidak menjadi masalah, tergantung pada respon yang tepat yang saya harapkan ketika mengirim PID yang tidak didukung, tetapi saya hanya ingin menutup semua pangkalan saya
Rein S
@ JPhi1618 Ini sebenarnya cukup banyak konteks yang sama saya membutuhkan ini masuk Ini mungkin jalan yang harus saya ikuti! Terima kasih banyak untuk tautannya, saya akan menyelami sedikit lebih dalam.
Rein S
1
Jika Anda menemukan sesuatu yang menarik yang menurut Anda bisa menjadi "jawaban", kembalilah dan jawab pertanyaan Anda sendiri. Benar-benar diizinkan.
JPhi1618

Jawaban:

5

Jika kendaraan Anda 2008 atau lebih baru menggunakan protokol kaleng, Anda dapat menggunakan perintah AT CR untuk memilih ECU mana yang ingin Anda dengar.
Begini caranya:
kirim

AT H1

ini akan mengaktifkan header untuk melihat alamat ECU.
Kirim

0100

ini adalah perintah OBD untuk menunjukkan pid dari 1-20 yang didukung.
respons Anda harus seperti:

7E8064100BE3EA813
7E906410098188013
>

ini menunjukkan bahwa Anda memiliki 2 ECU 7E8 (mesin) 7E9 (transmisi),
saya telah melihat 5 ECU dikembalikan: 7E8,7E9,7EA, 7EB, 7EC.
Untuk mendengar hanya dari satu ECU Anda mengeluarkan AT CRA xxx di mana xxx adalah alamat ECU.
kirim yang berikut ini

AT CRA 7E8

kemudian

0100

akan kembali:

7E8064100BE3EA813

Kirim

AT H0

untuk mematikan tajuk lalu kirim:

0100

dan Anda akan kembali dengan adil

4100BE3EA813

Jika kendaraan Anda 29 bit, maka respons 0100 akan terlihat seperti:

18DAF11806410088180013
18DAF110064100BE5FA813
>

ini menunjukkan 2 ECU 18DAF118 (transmisi) dan 18DAF110 (mesin).
Kirim

AT CRA 18DAF110

untuk mendengar hanya dari mesin.

Godzilla
sumber
hai !! Saya sedang mengerjakan prototipe untuk sistem diagnostik kendaraan. Saya telah memeriksa jawaban Anda tetapi saya punya beberapa pertanyaan ... 1) apakah ada perintah AT untuk memeriksa berapa banyak ECU yang tersedia. 2) ketika tajuk mati dari mengapa hanya satu string "4100BE3EA813" yang ditampilkan tidak keduanya "410098188013"
Dev
4

BISA tidak bekerja seperti yang Anda pikirkan.

BISA bukan berbasis modul, itu berbasis pesan. Tidak ada modul yang berbicara langsung dengan modul lainnya. Dalam CAN modul menghasilkan pesan dengan alamat, alamat itu mengidentifikasi data yang akan terkandung dalam pesan. Alamat itu juga memberi arti penting pesan. Semakin rendah alamat semakin tinggi prioritas.

Misalnya ABS akan mengirimkan kecepatan kendaraan. Setiap modul lain yang membutuhkan data akan membacanya.

Tidak ada modul yang lebih penting dari yang lain, itu prioritas pesan yang penting.

vini_i
sumber
Hanya untuk menindaklanjuti ini: Jika tidak ada modul yang lebih penting daripada yang lain, apakah ada alasan untuk menyaring tanggapan dari beberapa ECU? Misalnya, jika saya meminta RPM untuk BMW M5, saya mendapatkan 3 tanggapan (umumnya sama, tetapi tidak pernah persis sama). Haruskah saya 'mempercayai' jawaban pertama sebagai bacaan yang akurat? Adakah alasan untuk tidak langsung menanggapi pertama untuk setiap permintaan?
Rein S
Jika semua respons memiliki alamat yang sama maka percayakan yang pertama. Jika mereka tidak memiliki alamat yang sama maka percayakan pada alamat dengan prioritas tertinggi. Prioritas tertinggi memiliki alamat terendah.
vini_i