Moin, ich habe gestern in ersten Gehversuchen probiert, ein paar OBD-Daten aus einem Peugeot 207 über CAN auszulesen. Am Simulator habe ich Drehzahl, Geschwindigkeit, Motortemperatur und Rahmennummer fehlerfrei lesen können. Allerdings sendete der Simulator manche Frames wohl doppelt, es gab aber zumindest auf meiner Empfängerseite keinen Eintrag im RX/TX Fehlerregister. Als ich die gleichen Allerwelts-Daten im Auto abfragen wollte, bekam ich über das Display des Bordrechners die Meldung: "System ESP/ASR defekt". - Muß sich ein Teilnehmer am Bus in irgendeiner Form anmelden, damit die Hersteller-Software überhaupt mit ihm spricht? - Ist meine Software fehlerhaft/nicht vollständig?
Moin, Joachim ... schrieb: > Als ich die gleichen Allerwelts-Daten im Auto abfragen > wollte, bekam ich über das Display des Bordrechners die Meldung: "System > ESP/ASR defekt". Das sollte dir zu denken geben. > - Muß sich ein Teilnehmer am Bus in irgendeiner Form anmelden, damit die > Hersteller-Software überhaupt mit ihm spricht? Nein, du bist nur der Lauscher an der Wand. Alles andere ist gefährlich. > - Ist meine Software fehlerhaft/nicht vollständig? Fehlerhaft. Offensichtlich sendest du auf dem Bus. Das kann tolle Effekte als Folge haben.
Georg G. schrieb: >> - Ist meine Software fehlerhaft/nicht vollständig? > Fehlerhaft. Offensichtlich sendest du auf dem Bus. Das kann tolle > Effekte als Folge haben. Wie soll man OBD-Daten anfordern ohne zu senden?? Er sendet vielleicht auf den falschen Identifiern, das trifft's wohl eher. Oder zu oft und die zusätzliche Buslast bringt das Timing durcheinander. Manche Steuergeräte werden ziemlich böse wenn sie nicht ziemlich genau zum gleichen Zeitpunkt senden dürfen.
>Offensichtlich sendest du auf dem Bus.
Naja, was heißt senden? Senden tust du immer, du mußt ja eine Anfrage
wegschicken.
Hier mal das Wesentliche:
1 | void sendDataToECU(uint32_t ul_can_datal, uint32_t ul_can_datah){ |
2 | can_reset_all_mailbox(CAN0); |
3 | can_reset_all_mailbox(CAN1); |
4 | |
5 | /* Init CAN1 Mailbox 0 to Reception Mailbox. */
|
6 | reset_mailbox_conf(&can1_mailbox); |
7 | can1_mailbox.ul_mb_idx = TEST1_CAN_COMM_MB_IDX; //mailbox 0 |
8 | can1_mailbox.uc_obj_type = CAN_MB_RX_MODE; |
9 | can1_mailbox.ul_id_msk = CAN_MAM_MIDvA_Msk | CAN_MAM_MIDvB_Msk; //CAN 2.0A + B |
10 | can1_mailbox.ul_id = CAN_MID_MIDvA(0x7E8); //get 7E8 from engine control module |
11 | can_mailbox_init(CAN1, &can1_mailbox); |
12 | |
13 | /* Init CAN0 Mailbox 0 to Transmit Mailbox. */
|
14 | reset_mailbox_conf(&can0_mailbox); |
15 | can0_mailbox.ul_mb_idx = TEST1_CAN_COMM_MB_IDX; //mailbox 0 |
16 | can0_mailbox.uc_obj_type = CAN_MB_TX_MODE; |
17 | can0_mailbox.uc_tx_prio = TEST1_CAN0_TX_PRIO; |
18 | can0_mailbox.uc_id_ver = 0; // 0 stands for standard frame |
19 | //can0_mailbox.ul_id_msk = 0;
|
20 | can0_mailbox.ul_id_msk = CAN_MAM_MIDvA_Msk | CAN_MAM_MIDvB_Msk; //CAN 2.0A + B |
21 | can_mailbox_init(CAN0, &can0_mailbox); |
22 | |
23 | /* Write transmit information into mailbox. */
|
24 | can0_mailbox.ul_id = CAN_MID_MIDvA(0x7DF); // engine control module |
25 | |
26 | can0_mailbox.uc_length = MAX_CAN_FRAME_DATA_LEN; // 8bytes |
27 | can0_mailbox.ul_datal = ul_can_datal; |
28 | can0_mailbox.ul_datah = ul_can_datah; |
29 | can_mailbox_write(CAN0, &can0_mailbox); |
30 | |
31 | /* Enable CAN1 mailbox 0 interrupt. */
|
32 | can_enable_interrupt(CAN1, CAN_IER_MB0); |
33 | |
34 | /* Send out the information in the mailbox. */
|
35 | can_global_send_transfer_cmd(CAN0, CAN_TCR_MB0); |
36 | g_uc_waitForCanInterrupt = 1; |
37 | |
38 | //Let's wait for the response
|
39 | while (!g_ul_recv_status); |
40 | g_ul_recv_status = 0; |
41 | g_uc_waitForCanInterrupt = 0; |
42 | }
|
Und die Transportdaten:
1 | // Byte 7..4: 0
|
2 | // Byte 3: 0
|
3 | // Byte 2: 0x0C = rpm, 0x05 = coolant temp, ...
|
4 | // Byte 1: 01 ISO TP PCI Byte
|
5 | // Byte 0: 02 OBD SID
|
6 | //
|
7 | // let's send some data:
|
8 | // ID: 7DF DLC: 08 Bytes: 02 01 00 FF FF FF FF FF
|
9 | |
10 | // rpm
|
11 | ul_datal = 0x000C0102; // |
12 | ul_datah = 0x00000000; |
13 | sendDataToECU(ul_datal, ul_datah); |
14 | // Now let's read some data from the ecu
|
15 | // decode rpm:
|
16 | messageLo = can1_mailbox.ul_datal; |
17 | ...
|
18 | ...
|
19 | |
20 | //coolant temp
|
21 | ul_datal = 0x00050102; // ect |
22 | ul_datah = 0x00000000; |
23 | sendDataToECU(ul_datal, ul_datah); |
24 | //decode response
|
25 | messageLo = can1_mailbox.ul_datal; |
26 | ...
|
27 | ...
|
28 | //vehicle speed
|
29 | ul_datal = 0x000D0102; // 0x0D = vehicle speed |
30 | ul_datah = 0x00000000; |
31 | sendDataToECU(ul_datal, ul_datah); |
32 | //decode response
|
33 | messageLo = can1_mailbox.ul_datal; |
34 | ...
|
35 | ...
|
36 | |
37 | //vehicle information number:
|
38 | //1st frame
|
39 | ul_datal = 0x00020902; // |
40 | ul_datah = 0x00000000; |
41 | sendDataToECU(ul_datal, ul_datah); |
42 | //decode response
|
43 | messageHi = can1_mailbox.ul_datah; |
44 | ...
|
45 | ...
|
46 | //2nd frame
|
47 | //Flow Control Frame. The message format is:
|
48 | //ID B1 B2 B3 B4 B5 B6 B7 B8
|
49 | //??? 30 00 00 na na na na na
|
50 | ul_datal = 0x00000030; // |
51 | ul_datah = 0x00000000; |
52 | sendDataToECU(ul_datal, ul_datah); |
53 | messageLo = can1_mailbox.ul_datal; |
54 | ...
|
55 | ...
|
56 | |
57 | |
58 | |
59 | //3rd frame
|
60 | //Flow Control Frame. The message format is:
|
61 | //ID B1 B2 B3 B4 B5 B6 B7 B8
|
62 | //??? 30 00 00 na na na na na
|
63 | ul_datal = 0x00000030; // |
64 | ul_datah = 0x00000000; |
65 | sendDataToECU(ul_datal, ul_datah); |
66 | messageLo = can1_mailbox.ul_datal; |
67 | ...
|
68 | ...
|
69 | }
|
Hm... jetzt, wo ich die Zeilen poste komt mir gerade ein Verdacht... irgendwo las ich mal, daß ein Teilnehmer in der Lage sein muß selbstständig die 11-bit Standard ID von der 29-bit Extended ID zu unterscheiden... grummel...
>Oder zu oft und die zusätzliche Buslast bringt das Timing >durcheinander. Manche Steuergeräte werden ziemlich böse wenn sie nicht >ziemlich genau zum gleichen Zeitpunkt senden dürfen. Ich glaube, das ist es... Ich hatte anfangs nämlich zyklisch alle 100ms in einer Schleife angefragt... und das aus Bequemlichkeit im Code gelassen...
Joachim ... schrieb: > Als ich die gleichen Allerwelts-Daten im Auto abfragen > wollte, bekam ich über das Display des Bordrechners die Meldung: "System > ESP/ASR defekt". Das ist wohl normal. Ist bei meinem Audi mit VCDS auch so. Es erscheint die Fehlermeldung im FIS wenn das Steuergerät gescant wird. Warum das so ist weiß ich auch nicht. Aber ich hab mir sagen lassen, dass dies sogar im Handbuch beschrieben ist.
Joachim ... schrieb: > Am Simulator habe ich Drehzahl, > Geschwindigkeit, Motortemperatur und Rahmennummer fehlerfrei lesen > können. Allerdings sendete der Simulator manche Frames wohl doppelt, es > gab aber zumindest auf meiner Empfängerseite keinen Eintrag im RX/TX > Fehlerregister. Darf ich fragen, um welchen Simultor es sich handelt? Ich frage das, weil ich selber OBD2-Simulatoren entwickelt habe und es ziemlichen Müll auf dem Markt gibt. Bitte unbedingt vorsichtig sein, wenn man eine Befehl auf den CAN-Bus des Fahrzeugs schickt. Dies bitte niemals während der Fahrt tun, ich habe mehrfach erlebt, dass Steuergeräte abgestürzt sind und eine Weiterfahrt nur möglich war, nachdem der Diagnoseadapter entfernt und Zündung aus- und wieder eingeschaltet wurde. Erwin
Bad Urban schrieb: > Das ist wohl normal. Ist bei meinem Audi mit VCDS auch so. Es erscheint > die Fehlermeldung im FIS wenn das Steuergerät gescant wird. mit nem OBD Scanner kommt man nicht ins ESP, OBD ist rein für abgasrelevante Bauteile. Tester und Fahrzeugdiagnose ist nochmal eine andere Baustelle.
...aber ansonsten stimmts. Wenn ein Diagnosejob aktiv ist, wird die ESP-Lampe eingeschaltet.
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.