Dieses Programm verwandelt eine DBC -Datei in eine Reihe verschiedener Formate.
CAN-FD wird derzeit nicht unterstützt .
Bitte erwägen Sie, an das Projekt zu spenden, wenn Sie es nützlich finden. Dieses Projekt erfordert, dass Ihre Unterstützung fortgesetzt wird. Wenn Sie einen bezahlten Support benötigen, wenden Sie sich bitte an mailto: [email protected].
Wie Sie mit der großen Note oben sehen können, wird CAN-FD derzeit nicht unterstützt und wird wahrscheinlich nicht (für eine Weile). Das Problem ist, dass CAN-FD Nachrichten über 64-Bit-Länge ermöglicht, und dieses Projekt und der daraus generierte Code gehen davon aus, dass 8-Bit alles beabsichtigt ist.
DBCC ist ein Programm zum Konvertieren einer DBC -Datei in hauptsächlich in C -Code, die Can -Nachrichten in Strukturen serialisieren und deserialisieren kann, die diese Nachrichten und Signale darstellen. Es ist auch möglich, die in einer Struktur enthaltenen Informationen auszudrucken.
Weitere Informationen zur Lizenz für dieses Programm finden Sie in der Lizenzdatei. Sie wird unter der MIT -Lizenz veröffentlicht. Die Abhängigkeiten haben möglicherweise eine eigene Lizenz und ihre eigenen Beschränkungen, wenn sie dagegen aufgebaut sind.
Die Quellen -Datei mpc.c und mpc.h stammen aus einem in C bezeichneten Parser -Kombinator, der als MPC bezeichnet wurde und gemäß der 3 -Klausel -BSD -Lizenz lizenziert.
Zum Aufbau benötigen Sie nur einen C (C99) -Kompiler und machen Sie (wahrscheinlich GNU Make, ich bemühe mich nicht, andere Make -Implementierungen zu unterstützen). Das DBCC -Programm selbst wurde in der einzigen externen Abhängigkeit, die Ihre Plattformen C -Bibliothek ist, geschrieben.
Sie sollten in der Lage sein zu tippen:
make
Zum Aufbau wird eine ausführbare Datei namens "DBCC" produziert. Um die Tests durchzuführen, ist Xmllint erforderlich.
-n kann jedoch verwendet werden, um die Ausgabeversion anzugeben, mit der Sie zugreifen können, wenn die Kompatibilität rückwärts implementiert wurde. Sie können die Version angeben, die in einer Befehlszeile mit der Option -n verwendet werden soll. Die neueste Version wird standardmäßig verwendet.
Version 1:
Vermächtnis/ursprüngliches Verhalten. Beachten Sie, dass dies immer noch keine stabile Ausgabe liefert, sondern eine bessere Chance hat, keine Änderungen zu haben.
Version 2:
Neueste Version
Auflaufnamen werden mit dem CAN -Nachrichtennamen qualifiziert
Die Funktionsnamen codieren/dekodieren werden auch mit dem Nachrichtennamen qualifiziert
Der Codegenerator kann Code erstellen, um eine Nachricht auszupacken (einige Bytes in eine Datenstruktur verwandeln), eine Nachricht dekodieren (eine Skalierung/Offset -Minimum und maximale Werte auf die Werte in einer Datenstruktur anwenden), und das Inverse kann erfolgen (Pack/Encode).
Sie können sich den Code ansehen, der aus den DBC -Dateien innerhalb des Projekts generiert wurde, um zu verstehen, wie er funktionieren soll.
Wenn Sie eine Dose -Nachricht verarbeiten möchten, die Sie erhalten haben, müssen Sie die "pack_message" aufrufen. Der Codesgenerate ist für die CPUS -Byte -Reihenfolge agnostisch, er benötigt einen 'uint64_t' -Wert, der ein einzelnes Dose -Paket enthält (zusammen mit der CAN -ID und dem DLC für das Paket) und packt diese in eine Struktur aus. Das erste Byte des Dose -Pakets sollte in das am wenigsten signifikante Byte des 'uint64_t' eingefügt werden.
Sie können die folgenden Funktionen verwenden, um zu/von einer Dose -Nachricht zu konvertieren:
static uint64_t u64_from_can_msg(const uint8_t m[8]) {
return ((uint64_t)m[7] << 56) | ((uint64_t)m[6] << 48) | ((uint64_t)m[5] << 40) | ((uint64_t)m[4] << 32)
| ((uint64_t)m[3] << 24) | ((uint64_t)m[2] << 16) | ((uint64_t)m[1] << 8) | ((uint64_t)m[0] << 0);
}
static void u64_to_can_msg(const uint64_t u, uint8_t m[8]) {
m[7] = u >> 56;
m[6] = u >> 48;
m[5] = u >> 40;
m[4] = u >> 32;
m[3] = u >> 24;
m[2] = u >> 16;
m[1] = u >> 8;
m[0] = u >> 0;
}
Der Codegenerator erstellt eine Struktur basierend auf dem Dateinamen der DBC -Datei, sodass eine Datenstruktur "CAN_OBJ_EX1_H_T" zum Beispiel DBC -Datei "ex1.dbc" hergestellt wird. Diese Struktur enthält alle Meldungsstrukturen, die wiederum alle Signale enthalten. Alle Nachrichten/Signale in einer Struktur haben Vor- und Nachteile, eines der Dinge, die es einfacher machen, die erforderlichen Datenstrukturen zu definieren.
/* reminder of the 'unpack_message' prototype */
int unpack_message(can_obj_ex1_h_t *o, const unsigned long id, uint64_t data, uint8_t dlc);
static can_obj_ex1_h_t ex1;
uint8_t can_message_raw[8];
unsigned long id = 0;
uint8_t dlc = 0;
your_function_to_receive_a_can_message(can_message_raw, &id, &dlc);
if (unpack_message(&ex1, id, can_message_u64, dlc) < 0) {
// Error Condition; something went wrong
return -1;
}
'pack_message' ruft die richtige Entpackfunktion für diese ID als Beispiel für ID '0x020' auf:
case 0x020: return unpack_can_0x020_MagicCanNode1RBootloaderAddress(&o->can_0x020_MagicCanNode1RBootloaderAddress, data, dlc);
Die Auspackfunktion füllt das Nachrichtenobjekt in der Struktur 'CAN_OBJ_EX1_H_T' für diese ID. Die einzelnen Signale können dann mit den entsprechenden Funktionen für dieses Signal dekodiert werden. Zum Beispiel:
uint16_t b = 0;
if (decode_can_0x020_MagicNode1R_BLAddy(o, &b)) {
/* error */
}
Um eine Nachricht zu übermitteln, muss jedes Signal codiert werden, dann gibt die Packfunktion eine verpackte Nachricht zurück.
Einige andere Notizen:
Für eine Spezifikation, wie ich es verstehe, finden Sie im DBC -Dateiformat siehe dbc.md. Dies ist eine laufende Arbeit.
Im Projekt befindet sich eine VIM -Syntaxdatei für DBC -Dateien mit dem Namen dbc.vim
Neben C kann XML generiert werden, das Projekt enthält eine XSD- und XSLT -Datei für das generierte XML.
Eine XML -basierte Datei, die in das Beste und das Testen von Security importiert werden kann, kann die Businfrastruktur in der Can -Can -Infrastruktur verwendet werden.
Eine flache CSV -Datei kann generiert werden, was leichter in Excel importieren kann.
Eine JSON -Datei kann generiert werden, was heutzutage alle coolen Kinder verwenden.
Weitere Informationen zum genauen Betrieb des Programms finden Sie auf der Handbuchseite.
Es wäre möglich, schöne (ASCII -Kunst-) Bilder zu generieren, die zeigen, wie eine Nachricht strukturiert ist. Dies hilft beim Verständnis der fraglichen Nachricht und ist für Dokumentationszwecke nützlich, beispielsweise so etwas wie:
Message Name: Example-1
Message ID: 0x10, 16
DLC: 1 (8-bits)
+-----+-----.-----.-----.-----+-----.-----+-----+
| | | | |
| | | | |
+-----+-----.-----.-----.-----+-----.-----+-----+
0 1 2 3 4 5 6 7
Bit 0: Signal-Name-1, 1 bit signal, scalar 1.0, offset 0
Bits 1-2: Signal-Name-2, 4 bit signal, signed, Motorola, ...
... etcetera ...
Oder ähnliches. Dies wäre ein weiteres Ausgabemodul.
<style type = "text/CSS"> Körper {Margin: 40px Auto;