CANバスプロトコル
Typhoon HIL ツールチェーンにおける CAN バス プロトコルの実装の説明。
CANバスプロトコルの紹介
コントローラ エリア ネットワーク プロトコル (CAN または CAN バス) は、電子サブシステムを相互にリンクしてネットワーク内で相互作用できるようにする 2 線式 (ツイストペア) の双方向シリアル バス通信方式です。
- 物理層はツイストペア線による差動伝送を使用する
- 非破壊的なビット単位の調停がバスへのアクセスを制御するために使用される
- メッセージは小さく(最大8データバイト)、チェックサムによって保護されている。
- メッセージには明示的なアドレスはなく、代わりに各メッセージはバス上の優先順位を制御する数値を持ち、メッセージの内容の識別としても機能する。
- メッセージが適切に受信されなかった場合に再送される精巧なエラー処理方式
- 障害を分離し、障害のあるノードをバスから除去するための効果的な手段がある
CAN バスにはマルチマスター機能があり、バス上のどのノードでもネットワーク内の他のノードとの通信を開始できます。
CAN ネットワーク上のすべてのノードは同じ公称ビット レートで動作する必要があります。そうしないと、受信側でエラーが発生します。
CAN仕様は国際規格です。現在、2つのバージョンが使用されています。低速版のCAN 2.0Aは、Basic CANまたはStandard CANとも呼ばれ、ISO11519規格で定義されています。高速版のCAN 2.0Bは、Full CANまたはExtended-Frame CANとも呼ばれ、ISO11898規格で定義されています。
CANバスネットワークでは、通信に2つ以上のノードが必要です。メッセージ(フレーム)は、主にメッセージの優先度を表すID(識別子)と最大8バイトのデータで構成されます。CRC、確認応答(ACK)、その他のオーバーヘッドもメッセージの一部です。CANバスのメッセージフレームを図1に示します。

メッセージは、ネットワーク上の1つ以上のノードに割り当てられた識別子(ID)によってラベル付けされます。すべてのノードはメッセージを受信し、フィルタリング操作を実行します。つまり、各ノードは識別子に基づいて受け入れテストを実行し、メッセージとその内容がそのノードに関連があるかどうかを判断します。メッセージが関連しているノードのみがメッセージを処理します。それ以外のノードはメッセージを無視します。
識別子にはさらに2つの機能があります。メッセージの優先度を指定するデータが含まれており、ハードウェアがバスのアービトレーションを行う際に使用されます。つまり、複数のノードが同時に送信しようとした場合に、どのノードが送信するかを決定するために使用されます。メッセージIDは、単一のCANバスネットワーク内で一意である必要があります。そうでない場合、2つのノードがアービトレーションフィールド(ID)の終端を超えて送信を継続し、エラーが発生します。数値IDが小さいほど、メッセージの優先度が高くなります。
1つのCANバスメッセージで最大8バイトのデータを転送できます。DLCフィールド(データ長コード)は、データフィールドに含まれるデータのバイト数を示します。
DLC値が0の場合、リモートフレームと呼ばれる特殊なメッセージフレームであることを示します。リモートフレームは、ネットワーク内の特定のノードにデータを要求するために使用され、これらのフレームには情報は含まれません。ノードが正しいIDを持つリモートフレームを受信すると、そのノードは自動的にネットワークを介してデータを送信します。
Typhoon HILツールチェーンのCANバスプロトコル
現在、Typhoon HIL の CAN バス機能は、HIL デバイス (次の Typhoon HIL デバイスでサポートされています: HIL101、HIL404、HIL602+、HIL604、HIL506、および HIL606 ) に直接実装されているか、ACE ボード( Automotive Communication Extender )を介して実装されています。
現在サポートされている各HILデバイスには、それぞれ独立したコネクタを備えた2つのCANコントローラが搭載されており、100MHzのリファレンスクロックで動作します。これらの2つのコントローラ(CAN1およびCAN2)は、標準の9ピンD-subタイプ(オス)コネクタを介してCANバスネットワークに接続できます。
各HILデバイスモデルで利用可能なポートに関する情報は、各デバイスのハードウェアマニュアルの「一般仕様」セクションに記載されています。各HILデバイスごとのCANコネクタのピン配置は、以下をご覧ください。
ACE ボード上の CAN コントローラのコネクタ ピン配列については、 「自動車用通信エクステンダ カードのピン配列」で説明されています。
HIL デバイス上の CAN コントローラは抵抗器で終端されていません。必要に応じて 120 オームの終端抵抗器を追加する必要があります。
ACE ボード上の CAN コントローラは 120 オームの抵抗で終端されています。
CAN コントローラが HIL デバイス上にあるか ACE ボード上にあるかに応じて、各 CAN コントローラはCAN バス セットアップコンポーネントまたはACE CAN セットアップコンポーネントを使用して構成できます。
各CANコントローラは、メッセージの受信と送信に使用できます。CANバス送信コンポーネントとCANバス受信コンポーネントは、メッセージの送受信を定義するために使用されます。
CAN バス プロトコルでは 64 ビット データの送受信がサポートされていますが、HIL デバイス内のすべてのレジスタは 32 ビット長であるため、受信データは 32 ビットに変換され、64 ビット データの送信は 32 ビット データの送信と同じになります。
また、リモート フレームの処理は現在サポートされていないことにも注意してください。
CAN FDコントローラ経由のCANバス
CAN FD コントローラ (現在はHIL506 および HIL606 ) を備えた HIL デバイスは、これらのコントローラが通常の CAN バス コントローラとして動作するように構成できるため、CAN バスの機能が 2 倍になります。
モデル設定で適切なHILデバイスを選択すると、 CANバス設定コンポーネントにコントローラパラメータを定義するための追加タブが表示されます。また、 CANバス送信コンポーネントとCANバス受信コンポーネントでは、CANコントローラ選択のオプションとしてCAN FD1とCAN FD2の値が表示されます。
CANバスのセットアップ

CANバスセットアップコンポーネントを図2に示します。現在サポートされている各HILデバイスには2つのCANコントローラ(CAN1およびCAN2)が搭載されており、CANバスセットアップコンポーネントは、モデルで使用される各HILデバイスに対してこれらのコントローラを設定するために使用されます。
CAN プロトコルを使用する場合、CAN プロトコルを使用する HIL デバイスごとに、モデル内に CAN バス セットアップ コンポーネントが 1 つだけ存在する必要があります。
- 一般(タブ)
- 実行率
- 信号処理の実行速度。実行速度は、モデルで使用される他のコンポーネントと一致する必要があります。
- 実行率
- CAN (FD)x (タブ)
- CAN(FD)xのビットタイミング値を指定する
- ビットタイミング定数 (クロック分周器、タイムセグメント 1、タイムセグメント 2、再同期ジャンプ幅) は、次の 2 つの方法で指定できます。
- 自動 - 指定されたボーレートとコントローラのリファレンスクロック(100MHz)に基づいて、ビットタイミング定数が自動的に計算されます。値は、時間量子数が8~25の範囲、サンプルポイントが約85%、再同期ジャンプ幅が4になるように計算されます。
- 手動 - ビットタイミング定数は手動で設定されます。
注: CAN ビット タイミングの概念に精通していない場合は、この値を[自動]に設定しておくことを強くお勧めします。
- ビットタイミング定数 (クロック分周器、タイムセグメント 1、タイムセグメント 2、再同期ジャンプ幅) は、次の 2 つの方法で指定できます。
- CAN (FD)x ボーレート
- CAN (FD)x のビットタイミング値の指定が自動に設定されている場合に使用できます。
- コントローラ x のボーレート値。
- CAN (FD)x クロック分周器
- CAN (FD)x のビットタイミング値の指定が手動に設定されている場合に使用できます。
- ビットタイミングのクロック分周定数を指定します。
- CAN (FD)x タイムセグメント 1
- CAN (FD)x のビットタイミング値の指定が手動に設定されている場合に使用できます。
- ビットタイミングのタイムセグメント 1 定数を指定します。
- CAN (FD)x タイムセグメント 2
- CAN (FD)x のビットタイミング値の指定が手動に設定されている場合に使用できます。
- ビットタイミングのタイムセグメント 2 定数を指定します。
- CAN (FD)x 再同期ジャンプ幅
- CAN (FD)x のビットタイミング値の指定が手動に設定されている場合に使用できます。
- 再同期ジャンプ幅定数を指定します。
- CAN (FD)x 実行速度
- コントローラ x に対してメッセージの送信が実行される実行速度。
- CAN(FD)xのビットタイミング値を指定する
CANバスステータス
CANセットアップコンポーネントには、CAN1およびCAN2コントローラのステータスを示す2つの出力(can1とcan2 )があります。これらのステータスは、通信プロセス中にエラーが発生したかどうかを示します。発生する可能性のあるエラーは、 ACKエラー、ビットエラー、スタッフエラー、フォームエラー、 CRCエラーです。
- xxxx1 - ACK エラー- 送信側が応答として優勢な確認応答ビットを受信しない場合、確認応答エラーが発生します。
- xxx1x -ビット エラー- 受信したビットが送信したビットと同じでない場合にこのエラーが発生します。
- xx1xx -スタッフ エラー- ビット スタッフィング プロセスの後に、バス上で同じレベルのビットが 5 つ以上連続して発生した場合、スタッフ エラーが通知されます。
- x1xxx -フォームエラー- これはフィールドの固定形式を示します。フォームチェックは、フレームが標準CAN形式に準拠しているかどうかをチェックします。固定ビット形式に違反すると、フォームエラーが発生します。
- 1xxxx - CRC エラー- 受信した CRC が計算されたコードと一致しない場合、受信側はペイロードの 8 バイトが送信中に破損または変更されたことを認識し、 CRC エラーが通知されます。
ACE CAN セットアップ

ACE CANセットアップコンポーネントを図3に示します。これは、車載通信エクステンダーに搭載されたCAN/CAN FDコントローラーの設定に使用されます。
- 一般(タブ)
- デバイスID
- 設定を適用する ACE ボードに対応するデバイス ID を選択します。
- イーサネットポート
- ACE ボードが接続されているイーサネット ポートを選択します。
- 実行率
- 信号処理の実行速度。実行速度は、モデルで使用される他のコンポーネントと一致する必要があります。
- CANxプロトコルタイプ
- CAN と CAN FD のプロトコル タイプを選択します。
- 選択したプロトコルに応じて、ACEy - CANx コントローラー (y は選択したデバイス ID の値) を選択するオプションが、CAN バス送信および受信コンポーネントまたは CAN FD 送信および受信コンポーネントのいずれかで使用できるようになります。
- CANxのビットタイミング値を指定する
- ビットタイミング定数 (クロック分周器、タイムセグメント 1、タイムセグメント 2、再同期ジャンプ幅) は、次の 2 つの方法で指定できます。
- 自動 - 指定されたボーレートとコントローラのリファレンスクロック(100MHz)に基づいて、ビットタイミング定数が自動的に計算されます。値は、時間量子数が8~25の範囲、サンプルポイントが約85%、再同期ジャンプ幅が4になるように計算されます。
- 手動 - ビットタイミング定数は手動で設定されます。
注: CAN ビット タイミングの概念に精通していない場合は、この値を[自動]に設定しておくことを強くお勧めします。
- ビットタイミング定数 (クロック分周器、タイムセグメント 1、タイムセグメント 2、再同期ジャンプ幅) は、次の 2 つの方法で指定できます。
- CANxボーレート
- CANx のビット タイミング値の指定が自動に設定されている場合に使用できます。
- コントローラ x のボーレート値。
- CANxクロック分周器
- CANx のビット タイミング値の指定が手動に設定されている場合に使用できます。
- ビットタイミングのクロック分周定数を指定します。
- CANxタイムセグメント1
- CANx のビット タイミング値の指定が手動に設定されている場合に使用できます。
- ビットタイミングのタイムセグメント 1 定数を指定します。
- CANxタイムセグメント2
- CANx のビット タイミング値の指定が手動に設定されている場合に使用できます。
- ビットタイミングのタイムセグメント 2 定数を指定します。
- CANx再同期ジャンプ幅
- CANx のビット タイミング値の指定が手動に設定されている場合に使用できます。
- 再同期ジャンプ幅定数を指定します。
- デバイスID
CANバス送信

CANバス送信コンポーネントを図4に示します。これは、送信する単一のCANメッセージの形式と値を指定するために使用されます。
- CANコントローラ
- メッセージを送信するコントローラを選択します。CAN1 と CAN2 は、メッセージ送信のデフォルトのオプションです。
- CAN バス プロトコル タイプのACE CAN セットアップコンポーネントが回路図に存在する場合、ACEy - CANx コントローラーを選択するための追加オプションが表示されます (y は選択されたデバイス ID、x は CAN バス コントローラーのインデックスです)。
- CAN FD 機能を備えた HIL デバイスを選択した場合は、追加の CAN FD1 および CAN FD2 オプションも利用できるようになります。
- データ入力
- メッセージをダイアログ ウィンドウを通じて手動で定義するか、構成ファイルを通じて定義するかを選択します。
- 設定ファイル
- 解析する設定ファイルを選択してください。ファイルはDBCまたはARXML形式です。
- メッセージを選択
- 構成ファイルからシミュレートするメッセージを選択します。
- メッセージID
- メッセージ識別子の値を指定します。IDの値は0~2の範囲で指定できます。北 - 1(Nは選択したIDタイプに応じて11または29)注:識別子の値はCANネットワーク内で一意である必要があります。異なるCANコントローラに同じID値を指定することは可能です(CAN1とCAN2を介して送信されるメッセージの両方に同じIDを設定できます)。ただし、これらのコントローラを同じネットワークに接続すると、通信中に予期しないエラーが発生する可能性があります。
- メッセージ識別子の値を指定します。IDの値は0~2の範囲で指定できます。北 - 1(Nは選択したIDタイプに応じて11または29)
- 識別子の種類
- 識別子の種類を定義します。識別子の長さは次のようになります。
- 11ビット(CAN 2.0A) - 標準の11ビット識別子を持つメッセージを作成するために使用されます
- 29ビット(CAN 2.0B) - 拡張された29ビットの識別子を持つメッセージを作成するために使用されます
- 識別子の種類を定義します。識別子の長さは次のようになります。
- メッセージの長さ
- メッセージペイロードの長さをバイト単位(8ビット)で指定します。長さは1~8の範囲で指定できます。
- リモート フレームはサポートされていないため、長さ 0 は許可されません。
- メッセージを送信する
- メッセージを送信する際の条件を指定します。条件は次のいずれかです。
- イベント発生時 - 送信をトリガーするコンポーネントに追加のイベント端子が作成されます。イベントの変化は、CANバスセットアップコンポーネントで定義されたCAN(FD)x実行レートに基づいてチェックされます。
- オンタイマー - メッセージは指定された周期で定期的に送信されます。周期は、 CANバスセットアップコンポーネントで定義されたCAN (FD)x実行レートの整数倍である必要があります。
- メッセージを送信する際の条件を指定します。条件は次のいずれかです。
- 送信期間
- メッセージの送信がオンタイマーに設定されている場合に使用できます。
- メッセージの送信期間を指定します。
複数の信号を単一のCANメッセージで送信できます。+(プラス)ボタンをクリックすると、CANバス送信ダイアログウィンドウの信号テーブルに新しい信号が追加されます。すべての信号は、信号パラメータで定義された方法で1つのメッセージにまとめられます。図5に示すように、テーブルの右側にメッセージのプレビューが表示されます。

- 信号名 - CANバス送信コンポーネントに表示される信号の名前
- スタートビット - CANメッセージ内の信号の開始ビット
- 長さ - 信号の長さ(ビット単位)
- バイトオーダー - 信号のバイトオーダーを表します。信号はリトルエンディアンまたはビッグエンディアンとして定義できます。
- データ型 - 信号データ型。信号はuint、int、またはrealとして定義できます。
- Muxタイプ - メッセージの送信時にマルチプレクサを使用するかどうかを定義するために、「なし」、「Muxer」、「Muxed」のいずれかを選択します。タイプが「なし」の場合、シグナルは通常どおり動作し、常にメッセージにパックされます。タイプが「Muxer」の場合、そのシグナルはメッセージにパックされ、その値はマルチプレクサとして使用され、どのMuxedシグナルもパックされるかを決定します。タイプが「Muxed」の場合、そのシグナルはMuxerの値とシグナルのMux値が一致する場合にのみメッセージにパックされます。
- Mux値 - 信号がMuxedとして定義されている場合、Mux値はその信号がいつパックされるかを定義します。複数の信号を重ねて配置することができ、Mux値はどの信号がパックされるかを定義するために使用されます。
- スケール - 信号値に対して実行されるスケールを定義します
- オフセット - 信号値に対して実行されるオフセットを定義します
- 最小 - 最小信号値を定義する
- 最大 - 最大信号値を定義する
- 単位 - 信号単位を定義する
スタートビットの値は、フレームのデータフィールド内における信号の位置を指定します。リトルエンディアンバイトオーダーの信号の場合、最下位ビットの位置が示されます。ビッグエンディアンバイトオーダーの信号の場合、最上位ビットの位置が示されます。ビットは鋸歯状にカウントされます。ビッグエンディアンバイトオーダーとリトルエンディアンバイトオーダーのCANメッセージのデータフィールドの詳細については、以下を参照してください。
係数とオフセットは、信号のコード化された値を信号の物理値に変換したり、その逆を行ったりする線形変換を定義します。
coded_value = (physical_value - offset) / scale
物理値 = コード値 * スケール + オフセット
最小値と最大値は、信号の有効な物理値の範囲を定義します。
信号がリストに追加されると、図6に示すようにCANバス送信コンポーネントが表示されます。信号ポートは、モデルの任意の信号処理部分に接続できます。

回路図には複数のCANバス送信コンポーネントを配置でき、各コンポーネントは送信するCANメッセージを1つずつ記述します。複数のメッセージを送信するためにモデルにCANバス送信コンポーネントを追加する場合は、すべてのメッセージに一意のIDが割り当てられていることを確認する必要があります。
CANバス受信

CANバス受信コンポーネントを図7に示します。これは、CANネットワークを介して受信したメッセージを解凍するために使用されます。
- CANコントローラ
- メッセージを受信するコントローラを選択します。CAN1 と CAN2 はメッセージ受信のデフォルト オプションです。
- CAN バス プロトコル タイプのACE CAN セットアップコンポーネントが回路図に存在する場合、ACEy - CANx コントローラーを選択するための追加オプションが表示されます (y は選択されたデバイス ID、x は CAN バス コントローラーのインデックスです)。
- CAN FD 機能を備えた HIL デバイスを選択した場合は、追加の CAN FD1 および CAN FD2 オプションも利用できるようになります。
- データ入力
- メッセージをダイアログ ウィンドウを通じて手動で定義するか、構成ファイルを通じて定義するかを選択します。
- 設定ファイル
- 解析する設定ファイルを選択してください。ファイルはDBCまたはARXML形式です。
- メッセージを選択
- 構成ファイルからシミュレートするメッセージを選択します。
- メッセージID
- メッセージ識別子の値を指定します。識別子の値は0~2 N - 1の範囲で、Nは選択した識別子の種類に応じて11または29になります。ネットワーク内のすべてのメッセージはフィルタリングされ、CANバス受信コンポーネントで定義された値と一致する識別子を持つメッセージのみが解析されます。
- 識別子の種類
- 識別子の種類を定義します。識別子の長さは次のようになります。
- 11ビット(CAN 2.0A) - 標準の11ビット識別子を持つメッセージを受信するために使用されます
- 29ビット(CAN 2.0B) - 拡張された29ビットの識別子を持つメッセージを受信するために使用されます
- 識別子の種類を定義します。識別子の長さは次のようになります。
- メッセージの長さ
- ペイロードの長さをバイト(8ビット)単位で指定します。長さは1~8の範囲で指定できます。リモートフレームはサポートされていないため、長さ0は許可されません。
- 実行率
- 信号処理の実行速度。実行速度は、モデルで使用される他のコンポーネントと一致する必要があります。
+(プラス)ボタンをクリックすると、CANバス受信ダイアログウィンドウの信号テーブルに新しい信号が追加されます。すべての信号は、信号パラメータで定義された方法で展開されます。
図 8 は信号を定義する方法を示しています。

- 信号名 - CANバス送信コンポーネントに表示される信号の名前
- スタートビット - CANメッセージ内の信号の開始ビット
- 長さ - 信号の長さ(ビット単位)
- バイトオーダー - 信号のバイトオーダーを表します。信号はリトルエンディアンまたはビッグエンディアンとして定義できます。
- データ型 - 信号データ型。信号はuint、int、またはrealとして定義できます。
- Mux タイプ - None、Muxer、Muxed のいずれかを選択して、メッセージをデコードするときにマルチプレクサが使用されるかどうかを定義します。
- Mux 値 - 信号が Muxed として定義されている場合、Mux 値によってその信号がいつアンパックされるかが定義されます。
- スケール - 信号値に対して実行されるスケールを定義します
- オフセット - 信号値に対して実行されるオフセットを定義します
- 最小 - 最小信号値を定義する
- 最大 - 最大信号値を定義する
- 単位 - 信号単位を定義する
スタートビットの値は、フレームのデータフィールド内における信号の位置を指定します。リトルエンディアンバイトオーダーの信号の場合、最下位ビットの位置が示されます。ビッグエンディアンバイトオーダーの信号の場合、最上位ビットの位置が示されます。ビットは鋸歯状にカウントされます。ビッグエンディアンバイトオーダーとリトルエンディアンバイトオーダーのCANメッセージのデータフィールドの詳細については、以下を参照してください。
係数とオフセットは、信号のコード化された値を信号の物理的な値に変換したり、その逆を行ったりする線形変換を定義します。
coded_value = (physical_value - offset) / scale
物理値 = コード値 * スケール + オフセット
最小値と最大値は、信号の有効な物理値の範囲を定義します。
信号がリストに追加されると、図9に示すようにCANバス受信コンポーネントが表示されます。信号ポートは、モデルの任意の信号処理部分に接続できます。

回路図には多数のCANバス受信コンポーネントを配置することができ、各コンポーネントは定義されたID値を持つCANメッセージの受信に使用されます。CANバス受信コンポーネントで定義されたID値と一致しないID値を持つメッセージは無視されます。
新しいメッセージが受信されるたびに、rcv_cnt 値は 1 ずつ増加します。
設定ファイルを使用してCANメッセージを指定する
送信コンポーネントと受信コンポーネントはどちらも、DBCファイルまたはARXMLファイルをインポートしてメッセージを定義できます。基本的な動作はどちらのコンポーネントでも同じですが、ここではCANバス送信コンポーネントについてのみ説明します。
設定ファイルを読み込むには、「データ入力」プロパティで「設定ファイル」を選択し、 「ファイルの選択」ボタンを使用して目的のファイルを選択します。ファイルが正しく解析されると、 「メッセージの選択」コンボボックスにファイル内のメッセージ名が表示されます。異なるメッセージを選択すると、ダイアログ内のメッセージとシグナルのパラメータが変更されます。例を図10に示します。

DBCファイルまたはARXMLファイルを使用してCANメッセージを定義する場合、すべてのメッセージおよび信号パラメータは編集不可となります。データ入力をダイアログウィンドウに変更するとパラメータは編集可能になりますが、その後データ入力を構成ファイルに戻すと、パラメータは構成ファイルの値に戻ります。
Schematic API を使用してコンポーネントのプロパティ値を変更する
カスタムコンポーネントダイアログは、CANメッセージのパラメータを簡単に定義できるように設計されています。これらの値の変更は、標準の回路図API関数を使用しても可能ですが、変更された方法となります。つまり、送信メッセージと信号情報を除くすべてのプロパティは標準的な方法で変更されます。送信メッセージはPython辞書型として指定し、要求情報はPython辞書型のリストとして指定する必要があります。
フィールド名 | 許容値 |
---|---|
「イベント中」 | 真、偽 |
「タイマーオン」 | 真、偽 |
フィールド名 | 許容値 |
---|---|
"名前" | ASCII文字列 |
「スタートビット」 | 0 - 63 |
"長さ" | 1 - 64 |
「バイトオーダー」 | 「リトルエンディアン」、「ビッグエンディアン」 |
「データ型」 | 「int」、「uint」、「real」 |
「mux_type」 | 「なし」、「マルチプレクサー」、「マルチプレクサー」 |
"mux_val" | 正の整数 |
"規模" | 実数 |
"オフセット" | 実数 |
「分」 | 実数 |
「最大」 | 実数 |
"ユニット" | ASCII文字列 |
transmit_type = {
"On event": True,
"On timer": False
}
mdl.set_property_value(mdl.prop(can_component, "transmit_type"), transmit_type)
signals = [
{"name": "signal0", "start_bit": 0, "length": 8, "byte_order": "Little Endian", "data_type": "uint", "mux_type": "None"},
{"name": "signal1", "start_bit": 8, "length": 8, "byte_order": "Little Endian", "data_type": "uint", "mux_type": "Muxer"},
{"name": "signal2", "start_bit": 16, "length": 8, "byte_order": "Little Endian", "data_type": "uint", "mux_type": "Muxed", "mux_val": "0"},
{"name": "signal3", "start_bit": 16, "length": 8, "byte_order": "Little Endian", "data_type": "uint", "mux_type": "Muxed", "mux_val": "1"}
]
mdl.set_property_value(mdl.prop(can_component, "signals"), signals)
dbc_file_path = r"C\dbc_files\ford_fusion_2018_pt.dbc" mdl.set_property_value(mdl.prop(can_component, "file_path"), dbc_file_path) mdl.set_property_value(mdl.prop(can_component, "choose_message"), "Lane_Keep_Assist_Control")
CAN実行レートの説明
- 実行率
- CANxコントローラの実行速度
- CANxボーレート
- 送信期間
このセクションでは、これらのそれぞれの値と、それらの相互関係を明確にすることを目的としています。
まず、CAN通信プロトコルを使用するすべてのモデルにおいて、2つの側面を区別することが重要です。信号処理の側面と、CAN通信プロトコル自体の処理です。モデルのコンパイル時に、回路図上のすべての信号処理コンポーネントは、1つのCPUコアで実行される1つのアプリケーションに統合されます。一方、すべてのCANコンポーネント(信号処理ライブラリの一部であっても)は、別のCPUコアで実行される別のアプリケーションに統合されます。これら2つのアプリケーションは、それぞれ異なるエンティティです。
すべての信号処理コンポーネント(CANコンポーネントを含む)には実行レートプロパティがあります。接続され、論理関数を実行するすべてのコンポーネントは、同じ実行レート値を共有します。実行レート値は、その関数が実行される頻度を定義します。
CANxコントローラの実行レートはCANアプリケーションに固有の機能を持ちますが、CAN関数が呼び出される頻度を定義します。
各CAN送信コンポーネントには、メッセージがネットワークに送信される頻度を定義する送信周期プロパティがあります。送信周期とCANxコントローラの実行速度は直接相関しており、 CANxコントローラの実行速度は送信周期の粒度値として機能します。つまり、 CANxコントローラの実行速度が1msに設定されている場合、送信周期は1msの整数倍、つまりN*1msのみとなります。同様に、 CANxコントローラの実行速度が3msに設定されている場合、送信周期はN*3msのみとなります。
ボーレートは、CAN規格で定義されている唯一の値です。この値はビット/秒で表され、2つのCANコントローラ間でメッセージが中継される速度を定義します。送信周期とボーレートの違いは、メトロノームの例で簡単に説明できます。メトロノームは定期的にクリック音を発しますが(送信周期)、そのクリック音は音速でリスナーに伝わります(ボーレート)。
図 11 は上で説明した内容をすべて示しています。

ビッグエンディアンおよびリトルエンディアンのバイト順におけるCANメッセージフレームのデータフィールド形式
図1に示すように、1つのメッセージフレーム内で8バイト(バイト0からバイト7)を送信できます。スタートビットパラメータ値は、フレームのデータフィールド内における信号の位置を指定します。リトルエンディアン信号の場合、スタートビットは最下位ビット(LSB)の位置に対応し、ビッグエンディアン信号の場合、スタートビットは最上位ビット(MSB)の位置に対応します。
図12と図13に示す2つの例では、メッセージは3つの信号で構成されていますが、最初の例ではリトルエンディアンバイトオーダー、2番目の例ではビッグエンディアンバイトオーダーです。信号のバイトオーダーがビッグエンディアンかリトルエンディアンのどちらであるかに応じて、各信号に適切なスタートビットを設定する必要があります。
「更新」ボタンをクリックすると、CANメッセージフレームのデータフィールドセクション内の各信号のビット配置が右側の表に表示されます。この表の各行は、CANメッセージの1データバイト(バイト0からバイト5まで)を表します。この例ではデータ長が6バイトであるためです。
図12の場合、信号の値が1の場合、CANバスに現れるデータバイトは16進数で0x01、0x04、0x01、0x00、0x00、0x00となります。一方、図13の場合、0x00、0x41、0x00、0x00、0x00、0x01となります。


仮想HILサポート
Virtual HILは現在このプロトコルをサポートしていません。非リアルタイム環境(例:ローカルコンピュータでモデルを実行する場合)を使用する場合、このコンポーネントへの入力は破棄され、このコンポーネントからの出力はゼロになります。