このページは機械翻訳を使用して翻訳されました。最新版の英語を参照するには、ここをクリックします。
BLFファイルからJ1939データを復号化する
この例では、解析のために MATLAB ® の BLF ファイルから J1939 データをインポートして復号化する方法を示します。
この例で使用される BLF ファイルは、「システム構成 (J1939)」サンプルを使用して Vector CANoe から生成されました。この例では、Vector サンプル コンフィギュレーションに付属する CAN データベース ファイル Powertrain_J1939_BLF.dbc
も使用します。
BLFファイルを調査する
BLF ファイルに関する情報を取得して表示します。blfinfo
関数は、Vector Binary Logging Format BLF ファイルの形式と内容に関する一般情報を解析し、その情報を構造体として返します。
binf = blfinfo("LoggingBLF_J1939.blf")
binf = struct with fields:
Name: "LoggingBLF_J1939.blf"
Path: "C:\Users\michellw\OneDrive - MathWorks\Documents\MATLAB\Examples\vnt-ex52809946\LoggingBLF_J1939.blf"
Application: "CANoe"
ApplicationVersion: "12.0.167"
Objects: 131119
StartTime: 21-Apr-2021 10:05:13.232
EndTime: 21-Apr-2021 10:09:14.344
ChannelList: [2×3 table]
ChannelList プロパティは、ChannelID 値が 1 と 2 である 2 つのチャネルが BLF ファイルで参照されていることを示しています。対象となる J1939 パワートレイン データは CAN2 ネットワークから記録されたため、この例では ChannelID 2 に焦点を当てています。
binf.ChannelList
ans=2×3 table
ChannelID Protocol Objects
_________ ________ _______
1 "CAN" 92720
2 "CAN" 26054
J1939 は、CAN プロトコルの上に構築されたプロトコルです。パラメータ グループ (PG) は、同じトピックに属し、同じ送信速度を共有するパラメータのセットです (例: ET1_EMS PG の EngCoolantTemp、EngFuelTemp、EngTurboOilTemp など) (以下の signalTimetables の ET1_EMS PG を参照)。各パラメータ グループは、パラメーター グループ ナンバー (PGN) と呼ばれる一意の番号によってアドレス指定されます。J1939 PG は CAN フレームとして送信されます。
BLF ファイルから J1939 CAN データフレームを読み取る
blfread
関数を使用して、チャネル 2 のすべてのデータを timetable に読み取ります。timetable の各行は、バスからの 1 つの生の CAN フレームを表します。
canData = blfread("LoggingBLF_J1939.blf", 2)
canData=26054×8 timetable
Time ID Extended Name Data Length Signals Error Remote
____________ _________ ________ __________ ___________________________________ ______ ____________ _____ ______
0.000568 sec 418316262 true {0×0 char} {[ 105 52 169 232 0 131 0 16]} 8 {0×0 struct} false false
0.27057 sec 418383078 true {0×0 char} {[ 255 255 255 208 7 255 255 255]} 8 {0×0 struct} false false
0.29057 sec 418383078 true {0×0 char} {[ 255 255 255 208 7 255 255 255]} 8 {0×0 struct} false false
0.30058 sec 418382822 true {0×0 char} {[ 255 0 255 255 255 255 255 255]} 8 {0×0 struct} false false
0.30116 sec 419327206 true {0×0 char} {[255 255 255 255 255 255 255 255]} 8 {0×0 struct} false false
0.31057 sec 418383078 true {0×0 char} {[ 255 255 255 208 7 255 255 255]} 8 {0×0 struct} false false
0.33057 sec 418383078 true {0×0 char} {[ 255 255 255 208 7 255 255 255]} 8 {0×0 struct} false false
0.35058 sec 418382822 true {0×0 char} {[ 255 0 255 255 255 255 255 255]} 8 {0×0 struct} false false
0.35115 sec 418383078 true {0×0 char} {[ 255 255 255 208 7 255 255 255]} 8 {0×0 struct} false false
0.35173 sec 419327206 true {0×0 char} {[255 255 255 255 255 255 255 255]} 8 {0×0 struct} false false
0.3523 sec 419361254 true {0×0 char} {[ 255 0 0 12 255 255 224 255]} 8 {0×0 struct} false false
0.37057 sec 418383078 true {0×0 char} {[ 255 255 255 208 7 255 255 255]} 8 {0×0 struct} false false
0.39057 sec 418383078 true {0×0 char} {[ 255 255 255 208 7 255 255 255]} 8 {0×0 struct} false false
0.40058 sec 418382822 true {0×0 char} {[ 255 0 255 255 255 255 255 255]} 8 {0×0 struct} false false
0.40116 sec 419327206 true {0×0 char} {[255 255 255 255 255 255 255 255]} 8 {0×0 struct} false false
0.41057 sec 418383078 true {0×0 char} {[ 255 255 255 208 7 255 255 255]} 8 {0×0 struct} false false
⋮
DBC ファイルを使用して J1939 パラメータ グループを復号化する
canDatabase
関数を使用してデータベース ファイルを開きます。
canDB = canDatabase("Powertrain_J1939_BLF.dbc")
canDB = Database with properties: Name: 'Powertrain_J1939_BLF' Path: 'C:\Users\michellw\OneDrive - MathWorks\Documents\MATLAB\Examples\vnt-ex52809946\Powertrain_J1939_BLF.dbc' Nodes: {12×1 cell} NodeInfo: [12×1 struct] Messages: {93×1 cell} MessageInfo: [93×1 struct] Attributes: {3×1 cell} AttributeInfo: [3×1 struct] UserData: []
j1939ParameterGroupTimetable
関数は、データベースを使用して、生の CAN データを PG、PGN、および信号に復号化します。バイナリ ログ形式データの timetable は、Vehicle Network Toolbox ™ J1939 parameter group timetable に変換されます。
j1939PGTimetable = j1939ParameterGroupTimetable(canData, canDB)
j1939PGTimetable=26030×8 timetable
Time Name PGN Priority PDUFormatType SourceAddress DestinationAddress Data Signals
____________ ________ _____ ________ _____________________ _____________ __________________ ___________________________________ ____________
0.000568 sec ACL 60928 6 Peer-to-Peer (Type 1) 230 255 {[ 105 52 169 232 0 131 0 16]} {1×1 struct}
0.27057 sec EEC1_EMS 61444 6 Broadcast (Type 2) 230 255 {[ 255 255 255 208 7 255 255 255]} {1×1 struct}
0.29057 sec EEC1_EMS 61444 6 Broadcast (Type 2) 230 255 {[ 255 255 255 208 7 255 255 255]} {1×1 struct}
0.30058 sec EEC2_EMS 61443 6 Broadcast (Type 2) 230 255 {[ 255 0 255 255 255 255 255 255]} {1×1 struct}
0.30116 sec TCO1_TCO 65132 6 Broadcast (Type 2) 230 255 {[255 255 255 255 255 255 255 255]} {1×1 struct}
0.31057 sec EEC1_EMS 61444 6 Broadcast (Type 2) 230 255 {[ 255 255 255 208 7 255 255 255]} {1×1 struct}
0.33057 sec EEC1_EMS 61444 6 Broadcast (Type 2) 230 255 {[ 255 255 255 208 7 255 255 255]} {1×1 struct}
0.35058 sec EEC2_EMS 61443 6 Broadcast (Type 2) 230 255 {[ 255 0 255 255 255 255 255 255]} {1×1 struct}
0.35115 sec EEC1_EMS 61444 6 Broadcast (Type 2) 230 255 {[ 255 255 255 208 7 255 255 255]} {1×1 struct}
0.35173 sec TCO1_TCO 65132 6 Broadcast (Type 2) 230 255 {[255 255 255 255 255 255 255 255]} {1×1 struct}
0.3523 sec CCVS_EMS 65265 6 Broadcast (Type 2) 230 255 {[ 255 0 0 12 255 255 224 255]} {1×1 struct}
0.37057 sec EEC1_EMS 61444 6 Broadcast (Type 2) 230 255 {[ 255 255 255 208 7 255 255 255]} {1×1 struct}
0.39057 sec EEC1_EMS 61444 6 Broadcast (Type 2) 230 255 {[ 255 255 255 208 7 255 255 255]} {1×1 struct}
0.40058 sec EEC2_EMS 61443 6 Broadcast (Type 2) 230 255 {[ 255 0 255 255 255 255 255 255]} {1×1 struct}
0.40116 sec TCO1_TCO 65132 6 Broadcast (Type 2) 230 255 {[255 255 255 255 255 255 255 255]} {1×1 struct}
0.41057 sec EEC1_EMS 61444 6 Broadcast (Type 2) 230 255 {[ 255 255 255 208 7 255 255 255]} {1×1 struct}
⋮
「EEC1_EMS」PG の 1 つのインスタンスである timetable の 3 番目の PG に保存されている信号データを表示します。
signalData = j1939PGTimetable.Signals{3}
signalData = struct with fields:
EngDemandPercentTorque: 130
EngStarterMode: 15
SrcAddrssOfCtrllngDvcForEngCtrl: 255
EngSpeed: 250
ActualEngPercentTorque: 130
DriversDemandEngPercentTorque: 130
EngTorqueMode: 15
関心のある信号値を再パッケージ化して可視化する
j1939SignalTimetable
関数を使用して、バス上の各固有 PGN からの信号データを signal timetable に再パッケージ化します。この例では、J1939 PG timetable から、対象の 2 つの PG「EEC1_EMS」と「TCO1_TCO」の 2 つの個別の signal timetable を作成します。
signalTimetable1 = j1939SignalTimetable(j1939PGTimetable, "ParameterGroups", "EEC1_EMS")
signalTimetable1=12043×7 timetable
Time EngDemandPercentTorque EngStarterMode SrcAddrssOfCtrllngDvcForEngCtrl EngSpeed ActualEngPercentTorque DriversDemandEngPercentTorque EngTorqueMode
___________ ______________________ ______________ _______________________________ ________ ______________________ _____________________________ _____________
0.27057 sec 130 15 255 250 130 130 15
0.29057 sec 130 15 255 250 130 130 15
0.31057 sec 130 15 255 250 130 130 15
0.33057 sec 130 15 255 250 130 130 15
0.35115 sec 130 15 255 250 130 130 15
0.37057 sec 130 15 255 250 130 130 15
0.39057 sec 130 15 255 250 130 130 15
0.41057 sec 130 15 255 250 130 130 15
0.43057 sec 130 15 255 250 130 130 15
0.45115 sec 130 15 255 250 130 130 15
0.47057 sec 130 15 255 250 130 130 15
0.49057 sec 130 15 255 250 130 130 15
0.51057 sec 130 15 255 250 130 130 15
0.53057 sec 130 15 255 250 130 130 15
0.55115 sec 130 15 255 250 130 130 15
0.57057 sec 130 15 255 250 130 130 15
⋮
signalTimetable2 = j1939SignalTimetable(j1939PGTimetable, "ParameterGroups", "TCO1_TCO")
signalTimetable2=4817×14 timetable
Time TachographVehicleSpeed TachographOutputShaftSpeed DirectionIndicator TachographPerformance HandlingInformation SystemEvent DriverCardDriver2 Driver2TimeRelatedStates Overspeed DriverCardDriver1 Driver1TimeRelatedStates DriveRecognize Driver2WorkingState Driver1WorkingState
___________ ______________________ __________________________ __________________ _____________________ ___________________ ___________ _________________ ________________________ _________ _________________ ________________________ ______________ ___________________ ___________________
0.30116 sec 256 8191.9 3 3 3 3 3 15 3 3 15 3 7 7
0.35173 sec 256 8191.9 3 3 3 3 3 15 3 3 15 3 7 7
0.40116 sec 256 8191.9 3 3 3 3 3 15 3 3 15 3 7 7
0.45173 sec 256 8191.9 3 3 3 3 3 15 3 3 15 3 7 7
0.50116 sec 256 8191.9 3 3 3 3 3 15 3 3 15 3 7 7
0.55173 sec 256 8191.9 3 3 3 3 3 15 3 3 15 3 7 7
0.60116 sec 256 8191.9 3 3 3 3 3 15 3 3 15 3 7 7
0.65173 sec 256 8191.9 3 3 3 3 3 15 3 3 15 3 7 7
0.70116 sec 256 8191.9 3 3 3 3 3 15 3 3 15 3 7 7
0.75173 sec 256 8191.9 3 3 3 3 3 15 3 3 15 3 7 7
0.80116 sec 256 8191.9 3 3 3 3 3 15 3 3 15 3 7 7
0.85173 sec 256 8191.9 3 3 3 3 3 15 3 3 15 3 7 7
0.90116 sec 256 8191.9 3 3 3 3 3 15 3 3 15 3 7 7
0.95173 sec 256 8191.9 3 3 3 3 3 15 3 3 15 3 7 7
1.0012 sec 256 8191.9 3 3 3 3 3 15 3 3 15 3 7 7
1.0517 sec 256 8191.9 3 3 3 3 3 15 3 3 15 3 7 7
⋮
あるいは、J1939 PG timetable 全体を、各 PG の複数の J1939 signal timetable を含む構造体に変換し、その構造体にインデックスを付けて特定の PG のデータを取得することもできます。
signalTimetables = j1939SignalTimetable(j1939PGTimetable)
signalTimetables = struct with fields:
ACL: [1×14 timetable]
CCVS_EMS: [2408×19 timetable]
DD: [240×5 timetable]
EEC1_EMS: [12043×7 timetable]
EEC2_EMS: [4817×10 timetable]
ET1_EMS: [240×6 timetable]
HOURS_EMS: [240×2 timetable]
LFC_EMS: [480×2 timetable]
SERV: [240×6 timetable]
TCO1_TCO: [4817×14 timetable]
VDHR_EMS: [240×2 timetable]
VI_EMS: [24×1 timetable]
VW_SSC: [240×4 timetable]
signalTimetables.EEC1_EMS
ans=12043×7 timetable
Time EngDemandPercentTorque EngStarterMode SrcAddrssOfCtrllngDvcForEngCtrl EngSpeed ActualEngPercentTorque DriversDemandEngPercentTorque EngTorqueMode
___________ ______________________ ______________ _______________________________ ________ ______________________ _____________________________ _____________
0.27057 sec 130 15 255 250 130 130 15
0.29057 sec 130 15 255 250 130 130 15
0.31057 sec 130 15 255 250 130 130 15
0.33057 sec 130 15 255 250 130 130 15
0.35115 sec 130 15 255 250 130 130 15
0.37057 sec 130 15 255 250 130 130 15
0.39057 sec 130 15 255 250 130 130 15
0.41057 sec 130 15 255 250 130 130 15
0.43057 sec 130 15 255 250 130 130 15
0.45115 sec 130 15 255 250 130 130 15
0.47057 sec 130 15 255 250 130 130 15
0.49057 sec 130 15 255 250 130 130 15
0.51057 sec 130 15 255 250 130 130 15
0.53057 sec 130 15 255 250 130 130 15
0.55115 sec 130 15 255 250 130 130 15
0.57057 sec 130 15 255 250 130 130 15
⋮
関心のある信号を可視化するために、signal timetable の変数を時間の経過に沿ってプロットし、さらに解析することができます。この例では、「EEC1_EMS」PG からの「EngineSpeed」信号を確認します。
plot(signalTimetable1.Time, signalTimetable1.EngSpeed, "r") title("{\itEngineSpeed} signal from {\itEEC1\_EMS} PG", "FontWeight", "bold") xlabel("Timestamp") ylabel("Engine Speed")
ファイルを閉じる
ワークスペースから変数をクリアして、DBC ファイルへのアクセスを閉じます。
clear canDB