12
11

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

[メモ] オープンソースのcantools の libcandbcで、.dbcファイルの読み込み

Posted at

".dbc" ファイルは、そのスジ(車関係)の方々はよくよくご存知かと思います。

Cのプログラムで簡単に使いたい、というとき、cantools に含まれる、libcandbc を使うと、簡単に読み込みできます。
.lとか、.y のファイルがありますが、cのファイルを生成してくれているようなので、それらは気にしなくていいようです。

# ライセンスは、GPLv2。 なので、その辺は注意。

(例) Visual Studioで使ってみる

  1. .dbcのデータをさがしてくる。(j1939_utf8.dbcとかで検索?)
  2. Projectのページで、ファイルダウンロードして解凍するか、svnで取得する。
  3. cantools-code/src/libcandbc のみ使用するので、うまいとこにコピーする。
  4. サンプルコード(↓のtetdbc.c)を同じフォルダに作成。
  5. Visual Studioを立ち上げて、 File => New => Project From Exsisting Code...から
  6. Visual C++ [Next]で、Project file location:に先ほどのフォルダ、Project name:をてきとうに (testdbcとか)いれて、[Next]
  7. Project type:は、Console application project (printfを使ってるので...)で、[Next]、[Next]、[Finish]
  8. Solution Explorerで、testdbcのプロジェクトプロパティを開いて(右クリ-> Properties)、
  • VC++ DirectriesInclude Directries.;を入れて、[Apply] => .;$(VC_IncludePath);$(WindowsSDK_IncludePath);
  • C/C++ => PreprocessorPreprocessor DefinisionsYY_NO_UNISTD_H;を追加して、[Apply]
  1. ビルドして、実行。
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
12
11
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
12
11

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?