Ankündigung

Einklappen
Keine Ankündigung bisher.

Daten aus CAN-Bus selbst auslesen

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

    #91
    AW: Daten aus CAN-Bus selbst auslesen

    Dankeschön für das Bild.
    Nun geht es weiter.

    Nach dem ich meinen Prof mit sehr vielen Fragen zu den PIDs generft habe und der jetzt auch noch bei der Fehlersuche wegen eines Problems in der Kommunikation Board / OBD helfen durfte,
    hat der sich bereit erklärt das Projekt als Studienarbeit zu aktzeptieren.

    Nun wird alles fein säuberlich aufgeschrieben und es wird dann ein Handbuch mit allen Daten zum CAN Bus sowie zum LandTiger Board (hier nur der CAN Bus) geben.
    Auch wird die Software dokumentiert um die Portierung auf andere Systeme zu erleichtern.

    Jetzt stellen sich mir folgende Fragen:
    - Soll auch eine Art Betriebsanleitung zur Interpretation der Werte entstehen?
    - Soll eine Anleitung entstehen wie die Software auf die Platform kommt ?
    - Soll eine Anleitung zur Portierung auf andere Systeme entstehen. Hier der Focus auf wie muss welcher Teil übernommen bzw geändert werden?

    Wenn jemand noch Wünsche hat oder Vorschläge für Verbesserungen/Erweiterungen dann bitte her damit.
    Geht nicht gib's nicht, Geht nur schwerer

    Kommentar


      #92
      AW: Daten aus CAN-Bus selbst auslesen

      Hi , ich wollte mal Nachfragen ob es schon Neuigkeiten zum Projekt gibt ?
      Vielen Dank im Voraus.
      https://www.dfndr.de/

      Kommentar


        #93
        AW: Daten aus CAN-Bus selbst auslesen

        Zitat von dahardy Beitrag anzeigen
        Hi , ich wollte mal Nachfragen ob es schon Neuigkeiten zum Projekt gibt ?
        Vielen Dank im Voraus.
        Moin,
        ich bin im Grunde in der Testphase - längere Strecken bin ich mangels Zeit noch nicht wieder gefahren. Gerade mache ich die Belüftungssteuerung fertig. (Parallelthread) Ich sollte nicht so viele Sachen gleichzeitig anfangen. Aber keine Angst, es wird ganz sicher weiter gehen!

        Okay, ein kleines update kann ich geben: Die Platinen sind nun schön fest verschraubt:
        schraub.jpg

        Gruß
        Martin
        Zuletzt geändert von khamuul; 24.06.2019, 12:35. Grund: Bild

        Kommentar


          #94
          AW: Daten aus CAN-Bus selbst auslesen

          So, ich habe mittlerweile auch ein CAN-shield fuer den arduino besorgt und mal ein wenig damit herumgespielt. Da das Can-Bus Shield v1.2 von seeed mittlerweile durch v2.0 ersetzt wurde (und die v1.2 auch kaum noch im Handel zu bekommen ist), habe ich mal die aktuelle Version erworben.

          Hierzu einige Bemerkungen bzw Fragen an khamuul, die wahrscheinlich nur fuer wenige Mitleser in diesem Thread interessant sein werden - wenn es die Allgemeinheit zu sehr nervt, kann ich das gerne mit khamuul auch per PN klaeren.

          Der Code von khamuul aus github laesst sich natuerlich kompilieren und hochladen, es findet jedoch keine Kommunikation mit dem CAN-Bus statt: es kommen einfach keine Mitteilungen an. Anhand der mitgelieferten Beispiele der aktuellen library habe ich dann festgestell, dass es hier offenbar zwingend ist, jeden Wert durch ein aktives Nachfragen zu bekommen, sprich: man muss eine query mit der gewuenschten PID auf den CAN-Bus schicken und bekommt dann den entsprechenden Wert zurueck. Dafuer lassen sich dann aber auch alle Standard-PIDs verwenden, die zB auf der entsprechenden wikipedia-Seite (OBD-II PIDs, den link hatte ich in einem meiner ersten Beitraege in diesem thread gepostet) definiert sind.
          Auf diese Weise erhalte ich bisher folgende (Standard-)Werte:
          Motor RPM, Fhzg Geschwindigkeit, Motor Auslastung, Temperaturen (ambient air, intake, coolant, motor oil), Fuellgrad des Tanks
          Was ich nicht bekomme sind die Werte, die khamuul unter den canIDs 297 (0x129) und 246 (0xf6) bekommt: Verbrauch und gefahrene Strecke.
          Alle Werte, die ich bekomme, bekomme ich von der canID 0x7e8, was wohl auch dem Standard entspricht.

          Das ungefilterte Mitlesen auf dem CAN-Bus (sowie in der Loesung von khamuul implementiert) liefert KEINE Ergebnisse mehr, weil eben keine der gewuenschten Werte mehr ankommen. Stellt sich also die Frage, was ich denn nun anfordern muss, um auch diese Werte geschickt zu bekommen?

          @kahmuul: Woher stammen die "magischen Zahlen" in Deinen Formeln zur Umrechnung der zurueckgelieferten Bytes in aussagekraeftige Wert? Ich meine zB die 5.12 in der Zeile:
          ful = float(canBuf[3]) / 5.12;
          oder die 96 in der Zeile:
          rpm = (canBuf[4] - 96) * 256 + canBuf[5];
          Hast Du diese Werte selber "geschaetzt" oder hast Du die irgendwo gefunden? Die Standard-PIDs haben ja andere Umrechnungsfaktoren (wie zB auf der wiki-Seite angegeben).

          Ich wuerde gerne eine Version programmieren, die auch auf der aktuellen CAN-Hardware laeuft, denn das scheint fuer diejenigen, die evtl zukuenftig in dieses Thema einspringen, die einzige Moeglichkeit zu sein, wenn es das v1.2 Shield nicht mehr gibt.

          Kommentar


            #95
            AW: Daten aus CAN-Bus selbst auslesen

            Bin grad dabei, ob ich meinen Arduino mit den Shields in ein Gehäuse gequetscht bekomme... :D Draußen überlebt man eh keine 5 Minuten am Stück...

            Dann wollen wir mal:
            • Grundsätzlich alles soweit korrekt bechrieben: Mein code sendet zu keinem Zeitpunkt auf den CAN-Bus, sondern liest nur die vorbeirauschenden Nachrichten mit. Allesamt undokumentierte, herstellerspezifische Kommunikation mit unbekannten canIDs. Merkwürdig, dass die neuere library requests voraussetzt... Muss ich mich jetzt freuen, dass ich noch die ältere Shield-Version erwischt habe?
            • Was Du anfordern musst, um Verbrauch heraus zu bekommen: Die von meinem Steuergerät unterstützten requests hatte ich in Post #64 beschrieben. (Der Verbrauch sowie gefahrene Strecke sind da nicht dabei. Das sieht nicht gut aus für Deinen Ansatz, sorry!) Herausgefunden übrigens mit zwei Diagnosegeräten, die den passenden request für mich gesendet haben und meinem "Snüffelstück". Diesen request müsste Dein Shield auch senden können - Dein Steuergerät wird Dir dann schon mitteilen, was es kann. Gegenfrage: Du erhältst tatsächlich den "Füllgrad des Tanks"?
            • Die "Magischen Zahlen" habe ich nicht erraten, sondern berechnet - Stichwort: "reverse engineering". Massenhaft Daten mitlesen, Diagramme erstellen, Zahlen und Diagramme anstarren, mit GPS-Track vergleichen, interpretieren, nachdenken. Das war der größte Teil meiner Arbeit an der Sache. :sh Beispielsweise stecken in der 5.12 die schöne Computerzahl 512 und der Faktor 100. Ja, die Werte der Standard-PIDs haben unerfreulicherweise andere Faktoren bei der Umrechnung.
            • Mit der Codeversion für das aktuellere shield bin ich ganz bei Dir. Primär müsstest Du herausfinden, ob das Teil nicht doch "mitlesen" kann, wie das 1.2-Shield. Vielleicht wurden die Funktionen hierfür umbenannt/stark abgeändert o.ä.? Wenn es sie wirklich nicht mehr gibt: Die Hardware muss das ja eigentlich trotzdem können - dann liegts an der library. Vielleicht kann man dessen Entwickler mal anpieksen? :W

            Kommentar


              #96
              AW: Daten aus CAN-Bus selbst auslesen

              Zitat von khamuul Beitrag anzeigen
              • Mein code sendet zu keinem Zeitpunkt auf den CAN-Bus, sondern liest nur die vorbeirauschenden Nachrichten mit.
              Das ist schon mal ein grosser Unterschied: bei mir rauscht gar nix vorbei, das ich mitlesen koennte. Nur wenn ich etwas anfrage, bekomme ich die zugehoerige Antwort.


              • Muss ich mich jetzt freuen, dass ich noch die ältere Shield-Version erwischt habe?
              Oder koennte es daran liegen, dass Du einen aelteren TD4 (mit 2.4l) hast und ich einen neueren (mit 2.2l)? Ob sich da auch was an der ECU geaendert hat? Keine Ahnung...


              • Die von meinem Steuergerät unterstützten requests hatte ich in Post #64 beschrieben.
              Das genau sind ja die Werte, die ich auch bekomme. Seltsamerweise klappt bei mir auch der Fuel Tank level, der bei Dir nicht geht?


              • Die "Magischen Zahlen" habe ich nicht erraten, sondern berechnet - Stichwort: "reverse engineering".
              OK, das war schon meine Vermutung, aber ich wollte das nicht unterstellen ;-)


              • Mit der Codeversion für das aktuellere shield bin ich ganz bei Dir. Primär müsstest Du herausfinden, ob das Teil nicht doch "mitlesen" kann, wie das 1.2-Shield. Vielleicht wurden die Funktionen hierfür umbenannt/stark abgeändert o.ä.? Wenn es sie wirklich nicht mehr gibt: Die Hardware muss das ja eigentlich trotzdem können - dann liegts an der library.
              Doch, klar gibt's die Funktionen alle noch. Nur es kommt eben nix an bei mir, wenn ich es nicht explizit vorher angefordert habe. Der Code von Dir springt bei mir eben nie in die
              if (CAN_MSGAVAIL == CAN.checkReceive()) {
              Abfrage rein. Nur wenn ich vorher gesagt habe, dass ich bitte einen bestimmten Wert haben will, dann bekomme ich genau diesen zurueck.

              Und nun weiss ich eben nicht, wie ich die nicht-Standard-Werte fuer Verbrauch und Fahrstrecke anfordern kann, da sie ja von einer anderen canID geschickt werden als alle anderen Standard-Werte.

              Ich bleib am Ball...

              Kommentar


                #97
                AW: Daten aus CAN-Bus selbst auslesen

                Zitat von DefNder Beitrag anzeigen
                Oder koennte es daran liegen, dass Du einen aelteren TD4 (mit 2.4l) hast und ich einen neueren (mit 2.2l)? Ob sich da auch was an der ECU geaendert hat? Keine Ahnung...
                Eigentlich glaube ich das nicht. Der CAN-Bus ist doch eben ein BUS-System und das Steuergerät muss dem Anzeigemodul ja andauernd mitteilen, was es anzeigen soll. Das ist dann auch im TD4 2.2l so.

                Zitat von DefNder Beitrag anzeigen
                Seltsamerweise klappt bei mir auch der Fuel Tank level, der bei Dir nicht geht?
                Ob dieser request eine Antwort bei mir bekommt oder nicht, das habe ich gar nicht getestet, weil ich mit Arduino bislang eben noch gar keine requests gesendet habe. Ich hatte mich nur gewundert, weil das Steuergerät mit seiner Selbstauskunft über die unterstützten PIDs den Fuel Tank level (PID 2F) nicht nennt. Das "Electric Wiring Diagram" verstehe ich außerdem so, dass der Tankgeber "Unit-Fuel Tank (D179)" direkt mit dem Anzeigemodul "Instrument Cluster (J100)" verbunden ist. Daher dachte ich, pech, die Anzeige wird halt analog angesteuert, wie "damals". ... Vielleicht gibt es hier ja eine Änderung zum 2,2l TD4? Immerhin hat der auch die geänderte Tankbelüftung - vielleicht gabs dann noch mehr Änderungen im Bereich Tank... Ruf doch mal bitte den request zu allen "PIDs supported" (müssten 3 requests sein, um alles zu bekommen) auf und poste hier die Ergebnisse!

                Zitat von DefNder Beitrag anzeigen
                Und nun weiss ich eben nicht, wie ich die nicht-Standard-Werte fuer Verbrauch und Fahrstrecke anfordern kann,...
                Versuchs doch mal mit diem request der PID 5E (Engine fuel rate).

                Kommentar


                  #98
                  AW: Daten aus CAN-Bus selbst auslesen

                  Zitat von khamuul Beitrag anzeigen
                  Eigentlich glaube ich das nicht. Der CAN-Bus ist doch eben ein BUS-System und das Steuergerät muss dem Anzeigemodul ja andauernd mitteilen, was es anzeigen soll. Das ist dann auch im TD4 2.2l so.
                  Ich befuerchte fast, dass es eben doch einen Unterschied macht... dazu mehr weiter unten...


                  Ruf doch mal bitte den request zu allen "PIDs supported" (müssten 3 requests sein, um alles zu bekommen) auf und poste hier die Ergebnisse!
                  Hatte ich gestern bereits probiert, die Ergebnisse sind aber daheim auf dem Rechner, kann ich erst Abends posten. Laut dieser Selbstauskunft wird bei mir "tank fuel level" unterstuetzt, waehrend "engine fuel rate" nicht unterstuetzt wird. Letzteres habe ich gestern auch getestet: wenn ich einen request fuer "engine fuel rate" absetze, bekomme ich keine Antwort.


                  So, jetzt zu den neuen Erkenntnissen: ich habe herausgefunden, dass ich sehr wohl auch Informationen geschickt bekomme, die ich NICHT angefordert habe - jedoch ist da KEINE dabei, die mit den IDs aus Deinem Code uebereinstimmt. Du hattest in Post #18 mal geschrieben:
                  0x38B erzeugt 44% der Daten, 0x129 30% der Daten. Alle anderen senden i.d.R deutlich seltener.
                  Ich habe mal die mir (ohne Request) geschickten Can-IDs nach Haeufigkeit sortiert:
                  399: 20.7 %
                  E1: 19.1 %
                  394: 10.7 %
                  4C0: 9 %
                  DD: 8.3 %
                  9A: 6.8 %
                  DF: 5.8 %
                  DC: 2.7 %
                  E0: 1.9 %
                  2DD: 1.9 %
                  16E: 1.8 %
                  326: 1.7 %
                  5C0: 1.7 %
                  193: 1.3 %
                  398: 1.3 %
                  34B: 1.1 %
                  1B8: 1 %
                  405: 1 %

                  Alle anderen unter 1%. Wie Du siehst: keine 0x38B, keine 0x129. Da scheint es also sehr wohl einen Unterschied zwischen unseren TD4s zu geben.
                  Kannst Du bitte mal folgendes machen: Deinen Wagen 1min im Stand laufen lassen, waehrenddessen nichts ein- oder ausschalten, alle 10 Sec mal ein kleiner Gasstoss - und das ganze mitschneiden und mir schicken bzw hier verlinken. Ich werde das gleiche bei mir machen und dann mal die Prozentwerte der auftretenden IDs vergleichen. Mit dem Mitschnitt, den ich fuer die Haeufigkeitsliste oben benutzt habe, ergeben sich ja auch keine (ca.) 44% und 30% fuer die obersten beiden IDs.

                  Und wie gesagt: von der Can-ID 0x7E8 (die in obiger Liste nicht drin ist) bekomme ich immer dann eine Antwort, wenn ich eine PID explizit angefordert hab - das hab ich bei der oben ausgewerteten Liste allerdings nicht gemacht.

                  Kommentar


                    #99
                    AW: Daten aus CAN-Bus selbst auslesen

                    Ich habe gerade mal die Schaltpläne des MY12 und der Jahre davor angesehen.
                    Ja die haben verschiedene Sensoren für den Füllstand des Tanks.
                    Bis incl MY11 wurde der Widerstand direkt von der Anzeige ausgewertet.
                    Seit MY12 ist da ein A/D Wandler im Anzeigecluster und gibt die Information auch an die ECU weiter.
                    Es gibt doch deutliche Unterschiede in der Software vom 2,4 und 2,2 TD4.

                    Es sieht auch danach aus als wären Herstellerspezifische PIDs verändert worden bzw neue sind hinzugekommen.
                    Ich frage mal einen Mtstudenten der bei Ford in der Entwicklung arbeitet ob und wenn ja was verändert wurde.
                    KAnn allerdings etwas dauern da wir jetzt Klausuren haben und dafür lernen müssen.
                    Geht nicht gib's nicht, Geht nur schwerer

                    Kommentar


                      AW: Daten aus CAN-Bus selbst auslesen

                      Zitat von Dragon Beitrag anzeigen
                      Ich frage mal einen Mtstudenten der bei Ford in der Entwicklung arbeitet ob und wenn ja was verändert wurde.
                      KAnn allerdings etwas dauern da wir jetzt Klausuren haben und dafür lernen müssen.
                      Vielen Dank! Jede fundierte Auskunft hilft weiter! Das waere dann also eine Erklaerung fuer das unterschiedliche Verhalten bei khamuul (2.4) und mir (2.2).

                      Kommentar


                        AW: Daten aus CAN-Bus selbst auslesen

                        So, hier die von meinem CAN-Bus (TD4 2.2l, 2016) unterstuetzten PIDs (bei Abfrage mittels request an Can-ID 0x7E8):

                        PIDs supported [0x01 - 0x20]:
                        0x98=10011000 0x3B=00111011 0xA0=10100000 0x17=00010111

                        PIDs supported [0x21 - 0x40]:
                        0xB0=10110000 0x1B=00011011 0xA0=10100000 0x15=00010101

                        PIDs supported [0x41 - 0x60]:
                        0xC4=11000100 0xDE=11011110 0x00=00000000 0x19=00011001

                        PIDs supported [0x61 - 0x80]:
                        0x00=00000000 0x80=10000000 0x00=00000000 0x01=00000001

                        PIDs supported [0x81 - 0xA0]:
                        0x08=00001000 0x00=00000000 0x00=00000000 0x00=00000000


                        Jedes Bit steht fuer eine der PIDs im angegebenen Bereich, also zB die 1001 ganz oben am Anfang beim Bereich [0x01 - 0x20] fuer die PIDs 1, 2, 3, 4. Die zugehoerige Bedeutung der PIDs findet sich auf der bereits mehrmals zitierten wikipedia-Seite "OBD-II PIDs". So steht zB PID 4 fuer "calculated engine load" und wird bei meinem CAN-Bus unterstuetzt (weil das zugehoerige Bit gesetzt ist).

                        Zu der Frage bzgl "Fuel Tank Level" (PID 0x2F):
                        Hier muss im Bereich [0x21 - 0x40] nachgesehen werden, dort ist es das 15. Bit von links (1. Bit = 0x21, 2. Bit = 0x22, ..., 15. Bit = 0x2F), und das ist ebenfalls gesetzt:

                        0xB0=10110000 0x1B=00011011
                        .........................^

                        @khamuul: Ich weiss, dass Du das alles kennst, wollte es aber fuer die Allgemeinheit verstaendlich schreiben ;-)

                        Kommentar


                          AW: Daten aus CAN-Bus selbst auslesen

                          Vielen Dank @Dragon, sehr aufschlussreiche Information! Das erklärt alles.

                          @DefNder Das ist natürlich schade, dass die Herstellerspezifischen PIDs allesamt andere sind beim 2,2l. Damit kann mein DeCANder auch nur auf der 2,4l Maschine funktionieren. Mit etwas Pech sind auch noch die Umrechnungen/Faktoren der einzelnen Werte in den neuen PIDs andere als in den alten; evtl. auch jeweils die BIT-Breite.

                          Weil ich solche Übersichten mag, habe ich mal eine Gegenüberstellung (2,4l / 2,2l) der genormten PIDs nach OBD-II-Standard mit deren Bedeutung gemacht:
                          24l-22l-vergleich.jpg
                          Danke @DefNder fürs Teilen! Beim 2,2l ist offensichtlich nur eine PID weggefallen, dafür eine ganze Reihe PIDs hinzu gekommen. Beim 2,2l gibt es dann auch PIDs jenseits von der 96, beim 2,4l nicht.

                          Kommentar


                            AW: Daten aus CAN-Bus selbst auslesen

                            Zitat von khamuul Beitrag anzeigen
                            Das ist natürlich schade, dass die Herstellerspezifischen PIDs allesamt andere sind beim 2,2l. Damit kann mein DeCANder auch nur auf der 2,4l Maschine funktionieren.
                            Ja, wobei ich ja doch noch hoffe, dass ich durch einen Vergleich der Haeufigkeiten und der Datenwerte der auftretenden Can-IDs bei vergleichbaren Rahmenbedingungen herausfinden koennte, welche von Deinen haeufig vorkommenden Can-IDs nun welcher von meinen Can-IDs entspricht. Dazu braeuchte ich aber so einen 60-Sekunden Mitschnitt der Daten von Dir, wie ich ihn oben in Post #98 beschrieben habe. Vielleicht laesst sich dann ja herausfinden, welche Can-IDs beim 2.2l TD4 den von Dir benutzten 0x38B, 0x129, usw entsprechen. Sind ja nicht so viele IDs, die wirklich wichtig sind.
                            Falls Du dazu Zeit und Lust haben solltest, waere ich Dir sehr dankbar!

                            Kommentar


                              AW: Daten aus CAN-Bus selbst auslesen

                              Man muss bedenken das der 2,2l einen KAT und ein DPF System mit automatischer Reinigung hat.
                              Hierfür müssen mehrere neue PIDs hinzu kommen.
                              Allein für das DPF System werden mindestens 5 eher sogar 10 PIDs benötigt.
                              Es müssen ja 2x Temperatur ( Eingang und Ausgang) sowie 2 Kombisensoren Sauerstoff/Lamdawerte ausgewertet werden.
                              Dann muss noch irgendwie festgestellt werden wann die Regeneration angestoßen werden muss und ob diese erfolgreich war oder nicht.

                              Interessant ist allein schon mal der Vergleich von khamuul. Hier sind schon mal die ersten neuen Standdart PIDs zu finden.
                              Geht nicht gib's nicht, Geht nur schwerer

                              Kommentar


                                AW: Daten aus CAN-Bus selbst auslesen

                                @Dragon:
                                Ja, aber die meisten dieser Cat- und DPF-PIDs sind ja im Standard drin - an die komme ich ja alle ran.
                                Ich wuerde nur gerne wissen, welche (nicht-standard) Can-IDs bei mir den 0x38B, 0x192 und 0xF6 entsprechen, die bei khamuul die wichtigsten Daten liefern, denn diese Can-IDs tauchen ja bei mir nicht mehr auf. Und ich hab leider kein Nanocom o.ae., um mittels Schnueffelstueck den gleichen Weg zur Analyse zu gehen, den khamuul beschritten hat. Da bei ihm die 0x38B und 0x192 so haeufig auftreten, war eben meine Hoffnung, dass es auch bei mir aehnlich haeufige IDs gibt, die ich dann gezielt naeher angucken kann.

                                Kannst Du mir anschaulich erklaeren, was bei mir die PIDs 60 und 62 (dezimal), Catalyst Temp Bank 1 Sensor 1 bzw 2 sind? Temperatur am Ein- und Ausgang vom Kat? Oder wo sitzen die beiden Sensoren? Und was sagt PID 44 (Commanded EGR) aus? Ist ja ein Prozentwert 0-100%. Ist das der Oeffnungsgrad vom AGR-Ventil? Oder was wird im Zshg mit EGR in Prozent gemessen?

                                Ich geb die Hoffnung nicht auf, dass auch fuer den 2.2l die wichtigsten Werte vom CAN-Bus gelesen und interpretiert werden koennen, so dass die tolle Arbeit von khamuul auch fuer neuere TD4 verwertbar ist.

                                Kommentar

                                Lädt...
                                X