".dbc" ファイルは、そのスジ(車関係)の方々はよくよくご存知かと思います。
Cのプログラムで簡単に使いたい、というとき、cantools に含まれる、libcandbc
を使うと、簡単に読み込みできます。
.lとか、.y のファイルがありますが、cのファイルを生成してくれているようなので、それらは気にしなくていいようです。
# ライセンスは、GPLv2。 なので、その辺は注意。
(例) Visual Studioで使ってみる
- .dbcのデータをさがしてくる。(
j1939_utf8.dbc
とかで検索?) - Projectのページで、ファイルダウンロードして解凍するか、svnで取得する。
-
cantools-code/src/libcandbc
のみ使用するので、うまいとこにコピーする。 - サンプルコード(↓の
tetdbc.c
)を同じフォルダに作成。 - Visual Studioを立ち上げて、 File => New => Project From Exsisting Code...から
-
Visual C++
[Next]で、Project file location:
に先ほどのフォルダ、Project name:
をてきとうに (testdbc
とか)いれて、[Next] -
Project type:
は、Console application project
(printfを使ってるので...)で、[Next]、[Next]、[Finish] - Solution Explorerで、testdbcのプロジェクトプロパティを開いて(右クリ-> Properties)、
-
VC++ Directries
のInclude Directries
に.;
を入れて、[Apply] => .;$(VC_IncludePath);$(WindowsSDK_IncludePath); -
C/C++
=>Preprocessor
のPreprocessor Definisions
にYY_NO_UNISTD_H;
を追加して、[Apply]
- ビルドして、実行。
testdbc.c
#include <stdio.h>
#include "dbcReader.h"
int main(int ac, char *av[])
{
dbc_t *p;
p = dbc_read_file("./j1939_utf8.dbc");
if (p == NULL) return -1;
for (message_list_t *ml = p->message_list; ml != NULL; ml = ml->next)
{
printf("ID:$%08x - %s \n", ml->message->id, ml->message->name);
for (signal_list_t *sl = ml->message->signal_list; sl != NULL; sl = sl->next)
{
printf("\t%s\n", sl->signal->name);
}
}
return 0;
}
実行結果
ID:$c0000000 - VECTOR__INDEPENDENT_SIG_MSG
TrailerWeight
ReferenceTirePressSetting
ReferenceTirePress
TirePressThresholdDetection
TireAirLeakageRate
CTIWheelEndElectricalFault
CTITireStatus
CTIWheelSensorStatus
TireTemp
TirePress
ID:$88f02dfe - AccelerationSensor
SpprtVrblTrnsRpttnRtFrAcclrtnSns
VrtclAcclrtnExRngeFigureOfMerit
LngtdnlAcclrtnExRngFgureOfMerit
LtrlAcclrtnExRangeFigureOfMerit
VerticalAccelerationExRange
LateralAccelerationExRange
LongitudinalAccelerationExRange
ID:$98fceafe - VEP4
HybrdBatteryPackRemainingCharge
ID:$8cf029fe - SSI2
RllAndPtchExRngMsurementLatency
RollAngleExRangeFigureOfMerit
RollAngleExRangeCompensation
PitchAngleExRangeFigureOfMerit
PitchAngleExRangeCompensation
RollAngleExRange
PitchAngleExRange
...
...
...
ID:$9cfda7fe - VROM
VoltageRegulatorEnabled
VoltageRegulatorSoftStartState
VltgRgltrUndrfrqncyCmpnstnEnbld
VltgRgltrVAr_PwrFctrOprtingMode
VltgRglatorLoadCompensationMode
ID:$8cfda6fe - VREP
GnrtrOtputVoltageBiasPercentage
GeneratorExcitationFieldCurrent
GeneratorExcitationFieldVoltage