Program ini mengubah file DBC menjadi sejumlah format yang berbeda.
CAN-FD saat ini tidak didukung .
Harap pertimbangkan untuk menyumbang ke proyek jika Anda merasa berguna. Proyek ini membutuhkan dukungan Anda untuk melanjutkan. Jika Anda memerlukan dukungan berbayar, silakan hubungi mailto: [email protected].
Seperti yang dapat Anda lihat dengan catatan besar di atas, CAN-FD saat ini tidak didukung, dan kemungkinan tidak akan (untuk sementara waktu). Masalahnya adalah bahwa CAN-FD memungkinkan pesan di atas 64-bit panjang dan proyek ini dan kode yang dihasilkan darinya membuat asumsi bahwa 8-bits dimaksudkan semua pesan dapat dimiliki di dalamnya.
DBCC adalah program untuk mengubah file DBC terutama menjadi kode C yang dapat membuat serial dan deserialize dapat menjadi pesan yang mewakili pesan dan sinyal tersebut. Dimungkinkan juga untuk mencetak informasi yang terkandung dalam suatu struktur.
Lihat file lisensi untuk perincian lisensi untuk program ini , dirilis di bawah lisensi MIT. Ketergantungan, jika dikaitkan dengan, mungkin memiliki lisensi sendiri dan serangkaian pembatasan mereka sendiri jika dibangun terhadap.
File sumber MPC.C dan MPC.h berasal dari kombinator parser yang ditulis dalam C yang disebut MPC dan dilisensikan di bawah lisensi 3 Klausa BSD.
Untuk membangun, Anda hanya perlu kompiler dan membuat C (C99) (mungkin GNU Make, saya tidak berusaha untuk mendukung implementasi membuat lainnya). Program DBCC itu sendiri yang ditulis dalam apa yang seharusnya menjadi portabel C dengan satu -satunya ketergantungan eksternal adalah pustaka C platform Anda.
Anda harus dapat mengetik:
make
Untuk membangun, yang dapat dieksekusi yang disebut 'DBCC' diproduksi. Untuk menguji menjalankan tes, Xmllint diperlukan.
-n dapat digunakan untuk menentukan versi output yang mungkin memberi Anda akses ke perilaku sebelumnya jika kompatibilitas mundur telah diimplementasikan. Anda dapat menentukan versi yang akan digunakan pada baris perintah dengan opsi -n . Versi terbaru akan digunakan secara default.
Versi 1:
Warisan/perilaku asli. Perhatikan bahwa ini masih tidak akan memberikan output yang stabil, tetapi akan memiliki peluang yang lebih baik untuk tidak mengalami perubahan.
Versi 2:
Versi Terbaru
Nama enum memenuhi syarat dengan nama pesan kaleng
Nama fungsi encode/decode juga memenuhi syarat dengan nama pesan
Generator kode dapat membuat kode untuk membongkar pesan (mengubah beberapa byte menjadi struktur data), memecahkan kode pesan (menerapkan nilai skala/offset minimum dan maksimum ke nilai dalam struktur data), dan kebalikan dapat dilakukan (paket/encode).
Anda dapat melihat kode yang dihasilkan dari file DBC dalam proyek untuk mendapatkan pemahaman tentang bagaimana seharusnya kerjanya.
Jika Anda ingin memproses pesan CAN yang telah Anda terima, Anda harus memanggil 'unpack_message'. Kode yang dihasilkan adalah agnostik untuk urutan byte CPU, dibutuhkan nilai 'UInt64_t' yang berisi satu paket kaleng (bersama dengan ID CAN dan DLC untuk paket itu) dan membongkar yang menjadi struktur yang dihasilkannya. Byte pertama dari paket CAN harus dimasukkan ke dalam byte yang paling tidak signifikan dari 'UInt64_t'.
Anda dapat menggunakan fungsi berikut untuk mengonversi ke/dari pesan kaleng:
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;
}
Generator kode akan membuat struktur berdasarkan nama file file DBC, jadi untuk contoh file dbc 'ex1.dbc' struktur data yang disebut 'can_obj_ex1_h_t' dibuat. Struktur ini berisi semua struktur pesan CAN, yang pada gilirannya berisi semua sinyal. Memiliki semua pesan/sinyal dalam satu struktur memiliki kelebihan dan kekurangan, salah satu hal yang lebih mudah adalah mendefinisikan struktur data yang diperlukan.
/* 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' memanggil fungsi pembongkaran yang benar untuk ID itu, sebagai contoh untuk ID '0x020':
case 0x020: return unpack_can_0x020_MagicCanNode1RBootloaderAddress(&o->can_0x020_MagicCanNode1RBootloaderAddress, data, dlc);
Fungsi unpack mengisi objek pesan dalam struktur 'can_obj_ex1_h_t' untuk ID itu. Sinyal individu kemudian dapat diterjemahkan dengan fungsi yang sesuai untuk sinyal itu. Misalnya:
uint16_t b = 0;
if (decode_can_0x020_MagicNode1R_BLAddy(o, &b)) {
/* error */
}
Untuk mengirimkan pesan, setiap sinyal harus dikodekan, maka fungsi paket akan mengembalikan pesan yang penuh sesak.
Beberapa catatan lainnya:
Untuk spesifikasi, seperti yang saya pahami, dari format file DBC, lihat DBC.MD. Ini adalah pekerjaan yang sedang berlangsung.
Ada file sintaks VIM untuk file DBC di proyek, yang disebut dbc.vim
Selain C, XML dapat dihasilkan, proyek ini berisi file XSD dan XSLT untuk XML yang dihasilkan.
File berbasis XML yang dapat diimpor ke Beyond Bestorm Security dan digunakan untuk menguji infrastruktur bus Can.
File CSV datar dapat dihasilkan, yang lebih mudah diimpor ke Excel.
File JSON dapat dihasilkan, itulah yang digunakan semua anak keren saat ini.
Konsultasikan dengan halaman manual untuk informasi lebih lanjut tentang operasi program yang tepat.
Dimungkinkan untuk menghasilkan gambar yang bagus (ASCII ART) yang menunjukkan bagaimana pesan terstruktur, yang membantu dalam memahami pesan yang dimaksud, dan berguna untuk tujuan dokumentasi, misalnya, sesuatu seperti:
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 ...
Atau sesuatu yang serupa. Ini akan menjadi modul output lain.
<type style = "text/css"> body {margin: 40px auto; max-width: 850px; line-height: 1.6; font-size: 16px; warna:#444; padding: 0 10px} h1, h2, h3 {line-height: 1.2} </style>