このプログラムは、DBCファイルをさまざまな形式に変えます。
CAN-FDは現在サポートされていません。
あなたがそれが役立つと思うなら、プロジェクトへの寄付を検討してください。このプロジェクトでは、サポートを継続する必要があります。有料のサポートが必要な場合は、mailto:[email protected]にお問い合わせください。
上記の大きなメモでわかるように、CAN-FDは現在サポートされておらず、おそらく(しばらくの間)そうではありません。問題は、CAN-FDで64ビットを超える長さを超えるメッセージを許可し、このプロジェクトとそこから生成されたコードにより、8ビットがすべて存在するという仮定が、その中に缶のメッセージを意図しているということです。
DBCCは、DBCファイルを主にCコードに変換するためのプログラムです。これは、CANメッセージをシリアル化および脱また調整できるメッセージと信号を表す構造に変換できます。構造に含まれる情報を印刷することもできます。
このプログラムのライセンスの詳細については、ライセンスファイルを参照してください。MITライセンスの下でリリースされています。依存関係は、リンクされていれば、独自のライセンスと独自の制限セットを備えている場合があります。
ソースファイルMPC.CおよびMPC.Hは、MPCと呼ばれるCで記述されたパーサーコンビネーターから発生し、3節BSDライセンスの下でライセンスされています。
構築するには、C(C99)コンパイラと作成のみが必要です(おそらくGNU Make、私は他の実装をサポートする努力をしません)。 DBCCプログラム自体は、唯一の外部依存関係がプラットフォームCライブラリであることで、ポータブルCであるべきもので書かれています。
入力できるはずです。
make
構築するには、「DBCC」と呼ばれる実行可能ファイルが生成されます。テストを実行するには、xmllintが必要です。
-nオプションを使用して、逆方向の互換性が実装されている場合に以前の動作にアクセスできる可能性のある出力バージョンを指定できます。 -nオプションを使用してコマンドラインで使用するバージョンを指定できます。最新バージョンはデフォルトで使用されます。
バージョン1:
レガシー/オリジナルの行動。これはまだ安定した出力を提供することはありませんが、変化を起こさない可能性が高いことに注意してください。
バージョン2:
最新バージョン
列挙名は缶のメッセージ名で資格があります
エンコード/デコード関数名もメッセージ名で資格があります
コードジェネレーターは、コードを作成してメッセージを解除し(一部のバイトをデータ構造に変換)、メッセージをデコードし(データ構造の値にスケーリング/オフセットの最小値と最大値を適用します)、逆を実行できます(パック/エンコード)。
プロジェクト内のDBCファイルから生成されたコードを見て、それがどのように機能するかを理解することができます。
受け取ったメッセージを処理したい場合は、「unpack_message」を呼び出す必要があります。コード生成は、CPUSバイトの順序に対して不可知論的であり、単一の缶パケット(そのパケットのcan idとdlcとともに)を含む「uint64_t」値を取得し、それを生成する構造に解きます。缶パケットの最初のバイトは、「UINT64_T」の最も重要なバイトに配置する必要があります。
次の関数を使用して、缶に賛成に変換できます。
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;
}
コードジェネレーターは、DBCファイルのファイル名に基づいて構造を作成するため、DBCファイルの例「ex1.dbc」では、「can_obj_ex1_h_t」と呼ばれるデータ構造が作成されます。この構造には、すべてのCANメッセージ構造が含まれており、これにはすべての信号が含まれています。すべてのメッセージ/信号を1つの構造に持つことには利点と短所があります。簡単にすることの1つは、必要なデータ構造を定義することです。
/* 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;
}
「unpack_message」は、ID '0x020'の例として、そのIDの正しいアンパック関数を呼び出します。
case 0x020: return unpack_can_0x020_MagicCanNode1RBootloaderAddress(&o->can_0x020_MagicCanNode1RBootloaderAddress, data, dlc);
[解放]関数は、そのIDの 'can_obj_ex1_h_t'構造のメッセージオブジェクトに浸透します。その後、個々の信号は、その信号の適切な関数でデコードできます。例えば:
uint16_t b = 0;
if (decode_can_0x020_MagicNode1R_BLAddy(o, &b)) {
/* error */
}
メッセージを送信するには、各信号をエンコードする必要があります。パック関数は梱包されたメッセージを返します。
他のいくつかのメモ:
DBCファイル形式の仕様については、DBC.MDを参照してください。これは進行中の作業です。
プロジェクトには、DBC.VIMと呼ばれるDBCファイルのVIM構文ファイルがあります
C、XMLを生成することができ、プロジェクトには生成されたXMLのXSDおよびXSLTファイルが含まれています。
Beyond SecurityのBestormにインポートし、バスインフラストラクチャをテストするために使用できるXMLベースのファイル。
フラットCSVファイルを生成でき、Excelにインポートしやすいです。
JSONファイルを生成できます。これは、すべてのクールな子供たちが最近使用しているものです。
プログラムの正確な操作の詳細については、マニュアルページを参照してください。
メッセージの構造を示す素敵な(ASCIIアート)画像を生成することが可能です。これは、問題のメッセージを理解するのに役立ち、ドキュメントの目的で役立ちます。
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 ...
または似たようなもの。これは別の出力モジュールになります。
<style type = "text/css"> body {margin:40px auto; max-width:850px; line-height:1.6; font-size:16px; color:#444; padding} h1、h2、h3 {line-height:1.2} </style>