このページは機械翻訳を使用して翻訳されました。最新版の英語を参照するには、ここをクリックします。
CAN FD メッセージのロギングと再生
この例では、Simulink ® の MathWorks ® 仮想 CAN FD チャネルを使用して CAN FD メッセージをログに記録および再生する方法を示します。このモデルを更新して、システムでサポートされているハードウェアに接続できます。
サンプル フォルダーの SourceFDMsgs.mat
ファイルから保存された CAN FD メッセージを読み込みます。ファイルには、テスト トラックを 90 秒間走行するサイクルを表す CAN FD メッセージが含まれています。
load SourceFDMsgs.mat
CAN FD メッセージを含む timetable を検査します。特に、初期タイムスタンプがゼロではないことに注意してください。
startTime = seconds(canFDMsgTimetable.Time(1)) %#ok<NOPTS>
startTime = 88.6176
stopTime = seconds(canFDMsgTimetable.Time(end)) %#ok<NOPTS>
stopTime = 177.2310
これらのメッセージを CAN FD Replay ブロックと互換性のある形式に変換し、別のファイルに保存します。
canFDMsgs = canFDMessageReplayBlockStruct(canFDMsgTimetable); save DriveReplayFD.mat canFDMsgs whos
Name Size Bytes Class Attributes canFDMsgTimetable 100000x12 45411725 timetable canFDMsgs 1x1 8401848 struct startTime 1x1 8 double stopTime 1x1 8 double
CAN FD 再生モデル
このモデルには以下が含まれます:
MathWorks Virtual Channel 1
に送信する CAN FD Replay ブロック。CAN FD ネットワーク上のメッセージを
MathWorks Virtual Channel 2
経由で受信する CAN FD Receive ブロック。
CAN FD Receive ブロックは、すべての拡張 ID をブロックし、標準 ID 1200
を持つ WheelSpeed
メッセージのみを通過させるように設定されています。
シミュレーションの開始時間と終了時間を、メッセージ時系列の最初のタイムスタンプと最後のタイムスタンプに合わせて設定します。このためには、モデリング タブを選択し、モデル設定 をクリックします。次に、[構成パラメーター] ダイアログ ボックスで、以前に定義した変数 startTime
と stopTime
を使用して、シミュレーションの開始時間と終了時間を設定します。適用 をクリックし、構成パラメータ ウィンドウを閉じます。
実行 ボタンをクリックしてシミュレーションを実行します。
診断ビューアの警告に注意してください。
モデルは、時間ステップが 0.01 秒の固定ステップ ソルバーを使用するように構成されています。ただし、記録された時系列から取得された開始時間と終了時間の値は、シミュレーション時間ステップの整数倍ではありません。Simulink のデフォルトの動作では、これらの値はシミュレーションの時間ステップと互換性を持たせるために丸められます。また、シミュレーションの前に MATLAB ® スクリプトで丸めることもできます。Simulink ソルバーの自動パラメータ選択の詳細については、ドキュメント ページ ソルバーの選択 (Simulink) を参照してください。
ホイールスピードサブシステム
Wheel Speeds サブシステムは、受信した CAN FD メッセージからホイール速度情報をアンパックし、スコープにプロットします。サブシステムはメッセージをファイルに記録します。
ホイール速度情報を可視化
スコープ内のプロットには、テストドライブ中のすべての車輪の車輪速度が表示されます。
コンピュータの構成によっては、シミュレーション後のスコープ内の信号がゼロになる場合があります。この結果は正常です。モデルシミュレーションとメッセージ送信は異なるスレッドで実行され、同期されていません。Simulink は、できるだけ高速にモデルをシミュレートしようとしますが、時系列が非常に短いため、シミュレーションが終了するまでに最初のメッセージの受信が完了していない可能性が非常に高くなります。
Simulink で記録された信号を再生するためのより適切なアプローチは、シミュレーション ペーシングを使用して、ほぼリアルタイムの条件でモデルを実行することです。このようにして、モデルのシミュレーションは、信号が記録されたペースとほぼ同じペースで実行されます。シミュレーションのペースを有効にするには、実行 -> シミュレーション ペース をクリックし、ペースを有効にしてシミュレーションの速度を落とす チェックボックスをオンにします。シミュレーションを再度実行し、スコープを検査すると、適切な信号が表示されます。
シミュレーションのペースの詳細については、次のページをご覧ください: Simulation Pacing Options (Simulink)。
ログメッセージファイルを読み込む
CAN FD Log ブロックは、モデルを実行するたびに一意のファイルを作成します。最新のログ ファイルを見つけるには、MATLAB コマンド ウィンドウで dir
を使用します。
dir WheelSpeeds*.mat
WheelSpeeds_2023-Jun-20_123918.mat WheelSpeeds_2023-Jun-20_151835.mat
load WheelSpeeds_2023-Jun-20_123918.mat
whos
Name Size Bytes Class Attributes canFDMsgTimetable 100000x12 45411725 timetable canFDMsgs 1x1 8401848 struct outFDMsgs 1x1 7845516 struct startTime 1x1 8 double stopTime 1x1 8 double
ログメッセージを変換する
記録されたタイムスタンプを CAN FD Log ブロックからオフセットするには、startTime 変数を使用します。
outFDMsgs.Timestamp = startTime + outFDMsgs.Timestamp;
関数 canFDMessageTimetable
を使用して、シミュレーション中に記録されたメッセージをコマンド ウィンドウで使用できる timetable に変換します。
メッセージ信号に直接アクセスするには、canSignalTimetable
とともに適切なデータベース ファイルを変換で使用します。
db = canDatabase('VehicleInfoFD.dbc');
wheelSpeedMsgTimetable = canFDMessageTimetable(outFDMsgs, db);
wheelSpeedMsgTimetable(1:15, :)
ans=15×12 timetable
Time ID Extended Name ProtocolMode Data Length DLC Signals Error Remote BRS ESI
__________ ____ ________ _______________ ____________ ______________________________ ______ ___ ____________ _____ ______ _____ _____
88.829 sec 1201 false {0×0 char } {'CAN FD'} {[ 0 0 0 0 0 0 0 0]} 8 8 {0×0 struct} false false true false
88.83 sec 1312 false {0×0 char } {'CAN FD'} {[ 250 0 200 50 0]} 5 5 {0×0 struct} false false true false
88.831 sec 512 false {0×0 char } {'CAN FD'} {[ 2 1 1 250 1 231 129 255]} 8 8 {0×0 struct} false false true false
88.832 sec 513 false {0×0 char } {'CAN FD'} {[12 103 255 255 39 16 1 255]} 8 8 {0×0 struct} false false true false
88.832 sec 533 false {0×0 char } {'CAN FD'} {[ 2 26 2 26 2 24 0 0]} 8 8 {0×0 struct} false false true false
88.832 sec 561 false {0×0 char } {'CAN FD'} {[ 15 4 255 255 0 0 0 0]} 8 8 {0×0 struct} false false true false
88.832 sec 576 false {0×0 char } {'CAN FD'} {[ 63 141 140 32]} 4 4 {0×0 struct} false false true false
88.832 sec 1616 false {0×0 char } {'CAN FD'} {[ 0]} 1 1 {0×0 struct} false false true false
88.836 sec 1200 false {'WheelSpeeds'} {'CAN FD'} {[ 39 16 39 16 39 16 39 16]} 8 8 {1×1 struct} false false true false
88.836 sec 1201 false {0×0 char } {'CAN FD'} {[ 0 0 0 0 0 0 0 0]} 8 8 {0×0 struct} false false true false
88.836 sec 1216 false {0×0 char } {'CAN FD'} {[ 163]} 1 1 {0×0 struct} false false true false
88.841 sec 512 false {0×0 char } {'CAN FD'} {[ 2 1 1 250 1 231 129 255]} 8 8 {0×0 struct} false false true false
88.842 sec 513 false {0×0 char } {'CAN FD'} {[12 103 255 255 39 16 1 255]} 8 8 {0×0 struct} false false true false
88.842 sec 533 false {0×0 char } {'CAN FD'} {[ 2 26 2 26 2 24 0 0]} 8 8 {0×0 struct} false false true false
88.843 sec 1296 false {0×0 char } {'CAN FD'} {[ 0 0 1]} 3 3 {0×0 struct} false false true false
wheelSpeedSignals = canSignalTimetable(wheelSpeedMsgTimetable); wheelSpeedSignals(end-14:end, :)
ans=15×4 timetable
Time RR_WSpeed RF_WSpeed LR_WSpeed LF_WSpeed
__________ _________ _________ _________ _________
177.31 sec 57.4 57.37 57.27 57.35
177.32 sec 57.39 57.35 57.3 57.32
177.33 sec 57.36 57.39 57.4 57.31
177.33 sec 57.47 57.46 57.47 57.37
177.34 sec 57.56 57.41 57.45 57.39
177.35 sec 57.48 57.33 57.43 57.4
177.36 sec 57.37 57.35 57.41 57.41
177.37 sec 57.33 57.41 57.41 57.39
177.37 sec 57.37 57.44 57.44 57.36
177.38 sec 57.48 57.47 57.43 57.35
177.39 sec 57.5 57.43 57.4 57.33
177.4 sec 57.48 57.36 57.35 57.32
177.41 sec 57.43 57.35 57.28 57.33
177.42 sec 57.28 57.4 57.26 57.36
177.43 sec 57.27 57.46 57.23 57.35
plot(wheelSpeedSignals.Time, wheelSpeedSignals{:,:});
この例では、MathWorks CAN FD 仮想チャネルが使用されました。ただし、モデルを他のサポートされているハードウェアに接続することはできます。
参考
ツール
- シミュレーション ペーシング オプション (Simulink)
トピック
- ハードウェアインターフェースモデルのタイミング
- ソルバーの選択 (Simulink)