CAN-Bus eines KFZ auswerten MCP2515

  • Hallo Allerseits,

    ich habe erfolgreich das MCP2515 Interface ans laufen bekommen. Ich kann Daten senden und empfangen.

    Ich habe can-utils installiert und möchte auch auf dieser Library, in der Programmiersprache C/C++ arbeiten. Ich möchte kein Python verwenden.


    Ich habe folgendes vor.

    Ich möchte lediglich im Terminal eine Ausgabe des "Ladedrucks" meines Fahrzeugs.

    Ich brauche eine komplette c-Datei inkl. makefile, die ich eventuell nur etwas bearbeiten muss.

    Vielleicht hat der ein oder andere das selbe schonmal gemacht und kann mir helfen.

    Ich habe meine 2 Drähtchen, der Raspberry empfängt Daten.
    Ich möchte eine ID filtern und das 5te Byte auswerten.

    Quelle Wireshark:

    ID= "0x00000210"
    Data (8Byte) = "64 00 00 00 00 00 00 00"


    Byte Nr.5 (rot markiert), ergibt den Ladedruck nach folgendem Maßstab:
    -100 -> (0 = -1bar 255 = 1,5 bar)


    Der nachfolgende Code ist nur ein Bespiel wie man Daten sendet, nicht wie man mit einem Filter empfängt.
    Zum Senden, habe ich unzählige Infos bekommen, aber was das Empfangen und Auswerten angeht, naja ... nichts was den Raspberry angeht.

    Die Quelle ist mir leider nicht bekannt, aber so in etwa soll der Code später aussehen, mit dem Unterscheid, dass ich eine ID empfange und mit dem 5ten Byte des Frames, den Ladedruck ausgebe.

    Ich muss um Entschuldigung bitten, ich bin was Netzwerke angeht einfach total überfordert.


    Dazu die makefile

    :X
    Ich möchte kein Befehl wie candump can0 blablabla, sondern ein eigenes C-Progrämmchen, welches einfach nur in Echtzeit oder paar ms Latenz, den Ladedruck ausgibt.
    Bitte seid so nett und verlinkt mir keine Doku von canutils o.ä.. Damit kann ich nicht arbeiten bzw. fällt es mir schwer es zu veretehen und umzusetzen.

    ACHTUNG MIMIMI:
    Ich möchte auch keine Tipps bzgl. der Hardware (Bsp. "Kauf dir einen Arduino, der Raspi ist zu oversized..., Kauf dir nen ELM327, kauf dir USB wasweißich").

    Ich habe mich so geärgert, dass viele Leute in anderen Foren vom Thema extremst abweichen und/oder ihren unbrauchbaren Senf dazugeben. :@
    Ich denke ihr wisst was ich meine, also bitte ich um euer Verständnis. Bitte bleibt beim Thema. :heart:
    2 Tage habe ich das Internet durchsucht und nichts brauchbares gefunden. :denker:
    Und wenn ich was gefunden habe, sind da Leute, die nicht nachvollziehbare Source-Code-Schnipsel posten, wo man einfach nicht mehr weiß, "wie oder was passiert jetzt da und wo ist die library dazu". :huh:
    MIMIMI Ende

    Vielen Dank im Vorraus für eure Hilfe :danke_ATDE:

    Einmal editiert, zuletzt von Metaln00b (16. August 2017 um 17:37)

  • Ich habe zwar selbst noch nicht mit CAN sockets gearbeitet, aber da das Konzept der INET-Sockets angestrebt wird, sollte Lesen symmetrisch per read(...) funktionieren. Also etwa so: nbytes = read(s, &frame, sizeof(struct can_frame)); In frame.data[4] würde ich dann Dein gesuchtes Byte erwarten.

    Schau mal >>> hier <<<, da findest Du ein einfaches Beispiel zum Lesen und Schreiben.

  • Zitat von &quot;schnasseldag&quot; pid='295558' dateline='1502900206'


    Ich habe zwar selbst noch nicht mit CAN sockets gearbeitet, aber da das Konzept der INET-Sockets angestrebt wird, sollte Lesen symmetrisch per read(...) funktionieren. Also etwa so: nbytes = read(s, &frame, sizeof(struct can_frame)); In frame.data[4] würde ich dann Dein gesuchtes Byte erwarten.

    Schau mal >>> hier <<<, da findest Du ein einfaches Beispiel zum Lesen und Schreiben.


    Okay, hat etwas weiter geholfen. Vielen Dank :danke_ATDE: .

    Jetzt liest er allerdings von jeder PID das 5te Byte, noch ein kleiner Tipp wie ich das hin bekomme?

    Für die Mitleser:

  • Habs geschafft:

    Die auskommentierten Zeilen sind teilweise für den Display HDXXXX mit I2C

    Makefile:


    Vielen Dank nochmal

    Einmal editiert, zuletzt von Metaln00b (18. August 2017 um 01:07)

Jetzt mitmachen!

Du hast noch kein Benutzerkonto auf unserer Seite? Registriere dich kostenlos und nimm an unserer Community teil!