CAN dbcファイルのフォーマット (2/2)
CAN dbcファイルの書式 2/2。各項目の詳細を書きます。
目次
- 目次
- 各項目の詳細
- VERSION
- _NS
- BS_
- BU_
- VAL_TABLE_
- BO_
- SG_
- SIG_VALTYPE_
- BO_TX_BU_
- VAL_
- EV_
- ENVVAR_DATA_
- SGTYPE_
- SIG_GROUP_
- CM_
- BA_DEF_
- BA_DEF_DEF_
- BA_
各項目の詳細
VERSION
バージョン情報を定義する。オプション。
書式
'VERSION' version
変数
version = char_string;
バージョン情報。
備考
CANdbエディタで使用するバージョン情報を含む。空でもよい。
使用例
VERSION ""
_NS
new symbolsを定義する。詳細情報は見つからず。オプション。
書式
'_NS' ':' {symbols}
変数
symbols = ['CM_'] ['BA_DEF_'] ['BA_'] ['VAL_'] ['CAT_DEF_'] ['CAT_'] ['FILTER'] ['BA_DEF_DEF_'] ['EV_DATA_'] ['ENVVAR_DATA_'] ['SGTYPE_'] ['SGTYPE_VAL_'] ['BA_DEF_SGTYPE_'] ['BA_SGTYPE_'] ['SIG_TYPE_REF_'] ['VAL_TABLE_'] ['SIG_GROUP_'] ['SIG_VALTYPE_'] ['SIGTYPE_VALTYPE_'] ['BO_TX_BU_'] ['BA_DEF_REL_'] ['BA_REL_'] ['BA_DEF_DEF_REL_'] ['BU_SG_REL_'] ['BU_EV_REL_'] ['BU_BO_REL_'];
使用するシンボルを列挙する。
備考
使用例
NS_ :
NS_DESC_
CM_
BA_DEF_
BA_
VAL_
CAT_DEF_
CAT_
FILTER
BA_DEF_DEF_
EV_DATA_
ENVVAR_DATA_
SGTYPE_
SGTYPE_VAL_
BA_DEF_SGTYPE_
BA_SGTYPE_
SIG_TYPE_REF_
VAL_TABLE_
SIG_GROUP_
SIG_VALTYPE_
SIGTYPE_VALTYPE_
BO_TX_BU_
BA_DEF_REL_
BA_REL_
BA_DEF_DEF_REL_
BU_SG_REL_
BU_EV_REL_
BU_BO_REL_
SG_MUL_VAL_
BS_
ビットタイミングを定義する。廃止された項目だがdbcファイル内に必須な項目。
書式
'BS_:' [baudrate ':' BTR1 ',' BTR2]
変数
baudrate = unsigned_integer;
ボーレートを設定する。
BTR1 = unsigned_integer;
BTRレジスタのビットタイミング1を設定する。
BTR2 = unsigned_integer;
BTRレジスタのビットタイミング2を設定する。
備考
使用例
BS_:
BU_
dbc内に登場する全てのノードを定義する。必須。
書式
'BU_:' {node_name}
変数
node_name = C_identifier;
ノード名。
備考
使用例
BU_: DUT HCM
VAL_TABLE_
値と文字列を関連付けるグローバルな変換テーブルを定義する。オプション。
書式
'VAL_TABLE_' value_table_name {value_description} ';'
変数
value_table_name = C_identifier;
テーブル名を定義する。
value_description = double char_string;
数値と文字列を関連付ける。
備考
単体ではあまり使われないが、SGTYPE_(通常使われない)で使用する。
使用例
BO_
メッセージを定義する。また、これに続くSG_でシグナルを定義する。必須。
書式
'BO_' message_id message_name ':' message_size transmitter {signal}
変数
message_id = unsigned_integer;
CAN ID。CAN IDのMSBが1の場合、拡張CANとみなされる。dbcファイル内で固有のIDである必要がある。
message_name = C_identifier;
メッセージ名。dbcファイル内で固有の名前である必要がある。
message_size = unsigned_integer;
メッセージのサイズ。単位はバイト。
transmitter = node_name | 'Vector__XXX';
メッセージを送信するノードの名前。node_nameはBU_で定義したものに含まれる必要がある。node_nameの型はC_identifier。送信するノードがない場合は'Vector__XXX'を設定する。
signal = (次節のSG_を参照)
備考
使用例
BO_ 910 DUTData1: 8 DUT
SG_ SensorVoltage3 : 55|16@0+ (1,0) [0|5000] "mV" HCM
SG_ SensorVoltage2 : 39|16@0+ (1,0) [0|5000] "mV" HCM
SG_ SensorVoltage1 : 23|16@0+ (1,0) [0|5000] "mV" HCM
SG_ SensorVoltage0 : 7|16@0+ (1,0) [0|5000] "mV" HCM
SG_
シグナルを定義する。オプション。
書式
'SG_' signal_name [multiplexer_indicator] ':' start_bit '|' signal_size '@' byte_order value_type '(' factor ',' offset ')' '[' minimum '|' maximum ']' unit receiver {',' receiver}
変数
signal_name = C_identifier;
シグナル名。これはメッセージ内で固有の名前である必要がある。
multiplexer_indicator = 'M' | ('m' multiplexer_switch_value);
あるIDの特定のデータ領域を複数のシグナルで共有するマルチプレクサ機能を使用する場合に必要な定義。共有パターンごとにunsigned_integerであるmultiplexer_switch_valueを割り当て、データ領域を共有するシグナルごとにm1, m2等を指定する。どれに切り替えるかは別途データ領域で指定する。このデータ領域を表すシグナルには'M'を指定する。
start_bit = unsigned integer;
シグナルが格納されているデータ領域のスタートビットを指定する。ビット位置は信号のエンディアンにより定義が異なる。下記図を参照。
バイト境界をまたぐ場合、シグナルは以下のように成る。
signal_size = unsigned_integer;
シグナルの大きさ。単位はビット。
byte_order = '0' | '1'; (* 0: Big endian, 1: Little endian *) (2021/02/25修正)
シグナルのエンディアンを定義する。0はbig endian(Motorola), 1はlittle endian(Intel)。
value_type = '+' | '-'; (* +: 符号なし, -: 符号あり*)
シグナルの符号あり・符号なしを定義する。
factor = double;
シグナルに適用すべき倍率(ゲイン)を設定する。
offset = double;
シグナルに適用すべきオフセットを設定する。
物理値 = factor × シグナルの値 + offset
minimum = double;
シグナル物理値の最小値。
maximum = double;
シグナル物理値の最大値。
unit = char_string;
シグナルの単位を示す文字列。
receiver = node_name | 'Vector__XXX';
シグナルを受け取るノード名。node_nameはBU_で定義したものに含まれる必要がある。node_nameの型はC_identifier。受信するノードがない場合は'Vector__XXX'を設定する。
備考
シグナルの型はSIG_VALTYPE_で指定可能。特にfloatおよびdoubleはここで指定する必要がある。なお、小数点や符号のある物理値をCANで送る場合はfactorおよびoffsetを用いてシグナルを符号なし整数とし、データサイズを圧縮することが多い。
使用例
BO_を参照。
SIG_VALTYPE_
シグナルの型を定義する。オプション。
書式
'SIG_VALTYPE_' message_id signal_name signal_extended_value_type ';'
変数
message_id = unsigned_integer;
CAN ID。
signal_name = C_identifier;
シグナル名。
signal_extended_value_type = '0' | '1' | '2' | '3';
0: 符号なしまたは符号あり整数
3: 不明
備考
SIG_VALTYPE_が未定義の場合、シグナルの型は符号なしまたは符号あり整数とみなされる。
使用例
BO_TX_BU_
メッセージの送信ノードが複数ある場合に定義する。上位プロトコルが本情報を使用する可能性がある。オプション。
書式
'BO_TX_BU_' message_id ':' {transmitter} ';'
変数
message_id = unsigned_integer;
CAN ID。
transmitter = node_name | 'Vector__XXX';
メッセージを送信するノードの名前。node_nameはBU_で定義したものに含まれる必要がある。node_nameの型はC_identifier。
備考
定義上はtransmitterに'Vector__XXX'を設定できるが、本当に設定できるのか不明。
使用例
VAL_
シグナルまたは環境変数の値から文字列への変換テーブルを定義する。オプション。
書式
シグナル用:
'VAL_' message_id signal_name {value_description} ';'
環境変数用:
'VAL_' env_var_name {value_description} ';'
変数
message_id = unsigned_integer;
CAN ID。
signal_name = C_identifier;
シグナル名。
value_description = double char_string;
値と文字列の関係。
env_var_name = C_identifier;
環境変数名。
備考
シグナルの変換テーブルはシグナルの定義(SG_)後、環境変数の変換テーブルは環境変数の定義(EV_)後にしたほうが良さそうである。
使用例
シグナル用:
VAL_ 300 WARNING_flag 0 "N/A" 1 "WARNING" ;
環境変数用:
VAL_ Move_Stop 1 "On" 0 "Off" ;
EV_
環境変数を定義する。オプション。
書式
'EV_' env_var_name ':' env_var_type '[' minimum '|' maximum ']' unit initial_value ev_id access_type access_node {',' access_node} ';'
変数
env_var_name = C_identifier;
環境変数名。
env_var_type = '0' | '1' | '2'; (* 0: integer, 1: float, 2: string *)
環境変数の型。doubleは指定不能?環境変数には"Data"型も保存できる。備考を参照。
minimum = double;
値の最小値。
maximum = double;
値の最大値。
unit = char_string;
値の単位。
initial_value = double;
値の初期値。
ev_id = unsigned_integer; (* 廃止 *)
廃止されているが何らかの値を設定する必要がある。
access_type = 'DUMMY_NODE_VECTOR0' | 'DUMMY_NODE_VECTOR1' | 'DUMMY_NODE_VECTOR2' | 'DUMMY_NODE_VECTOR3'; (* 0: 無制限, 1: read, 2: write, 3: readWrite *)
access_nodeに許可するアクセス権限。
access_node = node_name | 'VECTOR__XXX';
環境変数へのアクセスを許可するノード。node_nameはBU_で定義したものに含まれる必要がある。node_nameの型はC_identifier。アクセスするノードがない場合は'Vector__XXX'を設定する。
備考
"Data"型を保存したい場合はENVVAR_DATA_にて対象変数名およびデータサイズを指定する。
使用例
EV_ Back_ECU_status: 0 [0|0] "" 0 1 DUMMY_NODE_VECTOR0 Vector__XXX;
ENVVAR_DATA_
環境変数のデータサイズを指定する。オプション。
書式
'ENVVAR_DATA_' env_var_name ':' data_size ';'
変数
env_var_name = C_identifier;
環境変数名。
data_size = unsigned_integer;
データサイズ。単位はバイト。
備考
ENVVAR_DATA_にてデータサイズを指定された環境変数は独自の型"Data"となる。これにより指定された環境変数は任意のデータ長とできる。
使用例
SGTYPE_
複数のシグナルに共通するプロパティを設定する。通常使われない。オプション。
書式
共通プロパティの定義
'SGTYPE_' signal_type_name ':' signal_size '@' byte_order value_type '(' factor ',' offset ')' '[' minimum '|' maximum ']' unit default_value ',' value_table ';'
シグナルと共通プロパティの関連付け
'SGTYPE_' message_id signal_name ':' signal_type_name ';'
変数
signal_type_name = C_identifier;
シグナルタイプ名。
signal_size = unsigned_integer;
シグナルの大きさ。単位はビット。
byte_order = '0' | '1'; (* 0: little endian, 1: big endian *)
シグナルのエンディアンを定義する。0はlittle endian(Intel), 1はbig endian(Motorola)。
value_type = '+' | '-'; (* +: 符号なし, -: 符号あり*)
シグナルの符号あり・符号なしを定義する。
factor = double;
シグナルに適用すべき倍率(ゲイン)を設定する。
offset = double;
シグナルに適用すべきオフセットを設定する。
物理値 = factor × シグナルの値 + offset
minimum = double;
シグナル物理値の最小値。
maximum = double;
シグナル物理値の最大値。
unit = char_string;
シグナルの単位を示す文字列。
default_value = double;
値のデフォルト値。
value_table = value_table_name;
VAL_TABLE_にて作成した値と文字列の関係テーブルであるvalue_tableの名前を指定する。型はC_identifier。
message_id = unsigned_integer;
CAN ID。
signal_name = C_identifier;
シグナル名。
備考
value_tableは省略できない。そのため、関係テーブルを使わない場合でもダミーのテーブルが必要と思われる。
使用例
SIG_GROUP_
メッセージ内のシグナルのグループを定義する。オプション。
書式
'SIG_GROUP_' message_id signal_group_name repetitions ':' {signal_name} ';'
変数
message_id = unsigned_integer;
CAN ID。
signal_group_name = C_identifier;
グループ名。
repetitions = unsigned_integer;
繰り返し回数。
signal_name = C_identifier;
シグナル名。
備考
使用例
CM_
コメント(説明)を設定する。
書式
'CM_' (comment |
'BU_' node_name comment |
'BO_' message_id comment |
'SG_' message_id signal_name comment |
'EV_' env_var_name comment)
';'
変数
comment = char_string;
コメント。説明。
node_name = C_identifier;
ノード名。
message_id = unsigned_integer;
CAN ID。
signal_name = C_identifier;
シグナル名。
env_var_name = C_identifier;
環境変数名。
備考
一番最初のcommentのみの書式が、何のためにあるのかは不明。
使用例
CM_ BO_ 1920 "This is a auto-generated message for not used signals.";
BA_DEF_
ユーザー定義属性を定義する。ここで定義した属性の値はBA_DEF_DEF_を用いてデフォルト値を設定する必要がある。個別の属性の値はBA_にて指定できる。オプション。
書式
'BA_DEF_' object_type attribute_name attribute_value_type ';'
変数
object_type = '' | 'BU_' | 'BO_' | 'SG_' | 'EV_';
ユーザー定義属性を付与するオブジェクトのタイプを指定する。
attribute_name = '"' C_identifier '"';
ユーザー定義属性の名前。
attribute_value_type = ('INT' minimum_integer maximum_integer) |
('HEX' minimum_integer maximum_integer) |
('FLOAT' minimum maximum) |
('STRING') |
('ENUM' [enum_name { ',' enum_name}];
ユーザー定義属性の型を設定する。minimum_integer = signed_integer; maximum_integer = signed_integer; minimum = double; maximum = double; でそれぞれ値の最小値と最大値を定める。enum_name = char_string; でENUMの文字列を定める。ユーザー定義属性は通信等に現れないため、各文字列がどの数値に割り当てられるかはユーザーから隠蔽されている模様。
備考
使用例
BA_DEF_ BU_ "DiagNode" ENUM "No","Yes";
BA_DEF_DEF_ "DiagNode" "Yes";
BA_ "DiagNode" BU_ Tester "No";
BA_DEF_DEF_
ユーザー定義属性のデフォルト値を設定する。オプション。
書式
'BA_DEF_DEF_' attribute_name attribute_value ';'
変数
attribute_name = '"' C_identifier '"';
ユーザー定義属性の名前。
attribute_value = unsigned_integer | signed_integer | double | char_string;
デフォルト値。unsigned_integerをわざわざ含めている理由は不明。
備考
使用例
BA_DEF_を参照。
BA_
ユーザー定義属性の値を個別に設定する。オプション。
書式
'BA_' attribute_name (attribute_value) |
('BU_' node_name attribute_value) |
('BO_' message_id attribute_value) |
('SG_' message_id signal_name attribute_value) |
('EV_' env_var_name attribute_value)
';'
変数
attribute_name = '"' C_identifier '"';
ユーザー定義属性の名前。
attribute_value = unsigned_integer | signed_integer | double | char_string;
デフォルト値。unsigned_integerをわざわざ含めている理由は不明。
node_name = C_identifier;
ノード名。
message_id = unsigned_integer;
CAN ID。
signal_name = C_identifier;
シグナル名。
env_var_name = C_identifier;
環境変数名。
備考
使用例
BA_DEF_を参照。