J1939プロトコル

Typhoon HIL ツールチェーンにおける J1939 プロトコルの実装の説明。

リアルタイムのみ:このドキュメントは、リアルタイム シミュレーションにのみ有効です。

J1939は、コントローラエリアネットワーク(CAN)をベースにした上位層プロトコルです。CAN自体は一般的な自動車や小規模な産業用途の通信には十分適していますが、ネットワーク管理に関してはいくつかの欠点があります。これらの機能を追加するために、物理層としてのCANは、上位層プロトコルと呼ばれる追加のソフトウェアによって拡張することができます。

J1939プロトコルは、CANの29ビットメッセージ識別子を最大限に活用するように設計されています。J1939は、無数のプロトコル機能に依存するのではなく、事前定義されたパラメータテーブルを使用することで、実際のプロトコルを分かりやすいレベルに維持しています。

J1939 プロトコルの基本的な特性は次のとおりです。
  • CANを物理層として使用する上位層プロトコル
  • 最大ネットワーク長40m
  • 標準ボーレート250 kBit/s
  • ネットワーク内の最大ノード数(ECU)は30
  • 最大253のコントローラ アプリケーション(1つのECUで複数のコントローラ アプリケーションを管理可能)
  • ピアツーピアおよびブロードキャスト通信
  • 最大1785バイトのメッセージ長をサポート
  • パラメータグループの定義(定義済み車両パラメータ)
  • ネットワーク管理

最大ネットワーク長 40 メートル (約 120 フィート)、ボー レート 250 kBit/秒、最大ノード数 (30) はプロトコルによる自主的な制限であり、すべてを安全側に保ち、実行時に発生する可能性のある問題を防止しようとする意図によるものであることを強調する必要があります。

PGNとSPN

J1939の主な特徴は、膨大な数の事前定義された車両データと制御機能を指すサスペクトパラメータ番号(SPN)とパラメータグループ番号(PGN)の使用です。PGNとサスペクトパラメータ番号(SPN)の定義は、J1939標準規格集の大部分を占めています。SPNは、パラメータグループ内の各パラメータのデータ型と用途を定義します。パラメータグループ番号は、29ビットのCANメッセージ識別子に埋め込まれます。

図1 疑わしいパラメータ番号、パラメータ グループ、およびパラメータ グループ番号の使用方法を示します。
1 SPNとPGN

J1939は29ビットの識別子のみを使用します。この識別子は、バス上のデータの送信元、そして場合によっては送信先を識別するために使用されます。29ビットの識別子の構造を図2に示します。

2 . 29ビットの識別子構造

各PGNは、予約済み、データページ、PDUフォーマット、PDU固有という4つのフィールドで構成されます。予約済みは常に0に設定されます。データページは、規格で定義されているPGNの数を増やすために使用されます。現在、PGN範囲全体が埋められていないため、データページはまだ0のままです。

PDUフォーマットは、メッセージがピアツーピアかブロードキャストかを決定します。PDUフォーマットが240未満(PDU1とも呼ばれます)の場合、メッセージはピアツーピアであり、宛先アドレスはPDU Specificフィールドに格納されます。一方、PDUフォーマットが240以上(PDU2とも呼ばれます)の場合、メッセージはブロードキャストであり、PDU Specificフィールドは送信可能なパラメータグループの範囲を拡大するために使用されます。

PDU1はピアツーピア通信ですが、これらのメッセージは宛先アドレス255を使用してブロードキャストできます。255番地はまさにこの目的のために予約されており、ECUがそのアドレスを占有することはできません。

リクエストメッセージ

J1939プロトコルは、データ要求として機能する特別なPGNを定義しています。0x00EE00値を持つPGNは、要求されたPGNがメッセージデータに埋め込まれたデータ要求として解釈されます。

PDUフォーマット(0xEEまたは238)が240未満であるため、要求はピアツーピアです。PDU Specificは要求の宛先アドレスを定義します。宛先アドレスとして255が使用されている場合、要求はブロードキャストされ、ネットワーク内のすべてのノードが要求に応答する必要があります。

要求への応答は、要求されたPGNを含むメッセージです。要求されたPGNがノードでサポートされていない場合、ノードはNACK(Not Acknowledge)メッセージを送信します。要求がブロードキャストされる場合、NACKは不要です。

トランスポートプロトコル

J1939では、最大メッセージ長は1785バイトと定義されています。トランスポート層としてのCAN自体は8バイトを超えるメッセージをサポートしていないため、メッセージを8バイトサイズのメッセージシーケンスにまとめる必要があります。

トランスポートプロトコルは、これらのメッセージの転送方法と、目的のノードとの接続を確立する方法を定義します。このために、接続管理PGN(0x00EC00)とトランスポートプロトコルPGN(0x00EB00)という2つのPGNが定義されています。

宛先アドレスに応じて、2 種類のトランスポートが定義されます。宛先が 255 の場合はマルチパケット ブロードキャストが使用され、宛先が 0 から 253 の間の場合はマルチパケット ピアツーピアが使用されます。

マルチパケットブロードキャストはよりシンプルで、接続管理PGNを使用してブロードキャストアナウンスメッセージ(BAM)を送信し、トランスポートプロトコルPGNを使用してデータメッセージを送信することで構成されます。BAMメッセージの送信後、および各データメッセージ間で、送信ノードは50~200ミリ秒待機します。

マルチパケットピアツーピアでは、送信ノードと受信ノード間のハンドシェイクメカニズムが必要です。送信ノードがメッセージを送信する場合、まず受信ノードに送信要求(RTS)メッセージを送信します。受信ノードは、接続を受け入れる場合は送信可(CTS)メッセージで応答し、拒否する場合は接続中止メッセージで応答します。CTSメッセージには、次のパケットのインデックスが格納されています。次に、送信ノードはトランスポートプロトコルPGNを使用してパケットを送信し、受信ノードは次のパケットインデックスを含むCTSメッセージで応答します。このハンドシェイクメカニズムは、最後のパケットが受信され、受信ノードがメッセージ終了確認応答を送信して接続が閉じられるまで使用されます。RTS、CTS、メッセージ終了、および接続中止は、接続管理PGNを使用して交換されます。

ネットワーク管理

J1939に基づくネットワーク管理は、アドレス要求手順(Address Claiming Procedure)を指します。ネットワーク内の各ノードは固有のアドレスを持つ必要があり、この手順はこれを管理するのに役立ちます。アドレス要求手順では、以下の4つのメッセージが定義されています。
  • アドレス要求メッセージ - このメッセージは、ネットワーク内の各ノードのアドレス情報を中継するために使用されます。
  • 要求不可メッセージ - このメッセージは、ノードが希望するアドレスを要求できないことをネットワークに通知するために使用されます。
  • アドレス要求メッセージ - このメッセージは、ネットワーク内のすべてのノードのアドレスを要求するために使用されます。
  • コマンド アドレス メッセージ - このメッセージは、ノードに特定のアドレスを使用するようにコマンドするために使用されます。

標準的なアドレス要求手順では、すべてのノードが電源投入時にアドレス要求メッセージを送信することが規定されています。このメッセージを送信することで、ノードはネットワーク内の他のすべてのノードに、使用するアドレスを通知します。他のノードが既にこのアドレスを使用している場合もあります。その場合、2つのノードはNAME値を比較します。NAMEは、各アドレス要求メッセージと共に送信される64ビットデータであり、各ノードの機能を表します。NAME値が小さいノードがそのアドレスを保持し、もう一方のノードは別のアドレスを使用する必要があります。

アドレス衝突が発生し、ノードがアドレスを変更する必要がある場合、2つの状況が考えられます。ノードが任意アドレス対応の場合、何らかのメカニズムを用いて別のアドレスを選択し、アドレス要求メッセージを再送信します。J1939では、この処理を容易にするために、ノードの機能の種類ごとに特別なアドレス範囲が定義されています。ノードが任意アドレス対応でない場合、アドレス254(NULL)を取得し、この値を含むアドレス要求メッセージを送信することで、アドレスを要求できないことを示します。アドレス254を持つノードは、ネットワークにデータを送信しません。

任意アドレス対応でないノードは、有効なアドレスを決定するために何らかの外部メカニズムを必要とします。このアドレス定義は手動で行うことも、どのノードがどのアドレスを使用するかを定義するコマンドアドレスメッセージを送信する別のノードによって行うこともできます。

診断メッセージ

J1939は、ネットワーク上のデバイスの診断情報の監視、テスト、およびクリアに使用できる19種類の診断メッセージを提供します。これらのメッセージは一般にDMメッセージと呼ばれます。現在、Typhoon HILはDM1診断メッセージのみをサポートしています。

DM1メッセージは、アクティブな診断トラブルコード(DTC)のリストを提供します。これらは、デバイス上で現在アクティブなDTCです。

診断トラブルコード(DTC)は、デバイスの問題を特定するために使用される値の集合です。アクティブDTCメッセージには、以下のパラメータが含まれます。
1 J1939 DTCパラメータ
分野 バイト ビット 状態 説明
診断ランプの状態 0 7-6 故障表示ランプの状態 排出関連のトラブル コードがアクティブであることを示すランプ。
5-4 赤色のストップランプの状態 車両を停止させる必要があるほど重大な問題を示すランプ。
3-2 オレンジ色の警告灯の状態 車両システムに問題があるが、車両を直ちに停止する必要がないことを示すランプ。
1-0 ランプステータスの保護 車両システムに問題があることを示すランプ。電子サブシステムとは関係ない可能性が高い。例:冷却水の温度が定義された範囲を超えている。
診断ランプの状態(予約済み) 1 7-6 SAE割り当てランプステータス用に予約済み
5-4 SAE割り当てランプステータス用に予約済み
3-2 SAE割り当てランプステータス用に予約済み
1-0 SAE割り当てランプステータス用に予約済み
DTC [0] 2 7-0 SPN 疑わしいパラメータ番号(SPN)は、問題の原因となっているJ1939データパラメータを識別します。各J1939パラメータにはSPNが割り当てられます。
3 7-0
4 7-5
4-0 FMI 障害モードインジケーター (FMI) 値は、発生した問題の種類を示します。
5 7 SPN変換方法 SPNとFMIの処理方法または変換方法を指定します。これは主に、古いバージョンの診断プロトコルを処理するために使用されます。
6-0 発生回数 この DTC 問題が発生した回数。
DTC [1]
DTC [2]

1つのメッセージで、1つまたは複数の診断トラブルコード(DTC)を送信できます。1つのDTCがアクティブな場合、メッセージはLS、DTC(ランプステータス、診断トラブルコード)の形式で送信され、複数のDTCがアクティブな場合、メッセージはLS、DTC1、DTC2、DTC3、…、DTCnの形式で送信されます。

DM1 メッセージは可変長であるため、このタイプのメッセージを受信するには、 「DM1 メッセージの受信」で説明されている別の方法が必要です。

DM1診断メッセージ

アクティブ診断トラブル コード メッセージ (DM1 メッセージとも呼ばれます) は、診断ランプの状態と現在アクティブな診断トラブル コード (DTC) を伝えます。

Typhoon HILツールチェーンにおけるJ1939プロトコルの実装

J1939がCANバスプロトコルの拡張であるのと同様に、Typhoon HILツールチェーンのJ1939コンポーネントは既存のCANバスコンポーネントの拡張です。J1939 SendコンポーネントとJ1939 Receiveコンポーネントの使用方法は、CANバスSendコンポーネントとCANバスReceiveコンポーネントと同じであり、同じハードウェアデバイス( HIL101、HIL404、HIL602+、HIL604、HIL506、HIL606)でサポートされています。

次のいくつかのセクションでは、J1939 に固有の機能についてのみ説明します。

CANセットアップ

J1939コンポーネントはCANバスコンポーネントの修正版であるため、CANコントローラのボーレートと実行速度を定義するために、回路図にCANセットアップコンポーネントを配置する必要があります。CANセットアップコンポーネントの使用方法については、こちらをご覧ください。

J1939 送信

コンポーネントはサポートされていません:このコンポーネントは現在 TyphoonSim ではサポートされていません。このコンポーネントをモデルに追加すると、TyphoonSim でモデルを実行できなくなります。TyphoonSim モードでモデルを実行する前に、このコンポーネントを無効にするか、モデルから削除してください。

J1939 送信 (J1939 PGN 送信) コンポーネントは、送信するメッセージの形式、値、およびサイズを指定するために使用されます。

コンポーネントは表 2に示され、J1939 送信ダイアログ ウィンドウは図 3に示されます。

2 J1939送信
成分 コンポーネントのプロパティ

J1939 送信

  • CANコントローラ
  • データ入力
  • 設定ファイル
  • メッセージを選択
  • IDタイプ
  • 優先度
  • データページ
  • PDUフォーマット
  • 宛先アドレス/グループ内線
  • 宛先アドレスの定義
  • 送信元アドレス(ECU ID)
  • 送信元アドレスの定義
  • メッセージの長さ
  • 送信タイプ
    • イベントで
    • タイマーオン
    • リクエストに応じて
  • 送信期間
3 J1939送信ダイアログウィンドウ

J1939送信コンポーネントのパラメータの説明は表3に示す。

3 J1939送信プロパティの説明
プロパティ名 説明
CANコントローラ メッセージを送信するコントローラを選択します(CAN1 または CAN2)
データ入力 メッセージをダイアログ ウィンドウを通じて手動で定義するか、構成ファイルを通じて定義するかを選択します。
設定ファイル 解析する設定ファイルを選択してください。ファイルはDBCまたはARXML形式です。
メッセージを選択 設定ファイルからシミュレートするメッセージを選択する
IDタイプ 29ビット拡張CAN識別子として定義(J1939準拠)
優先度 3 ビットの優先度値。メッセージ優先度 0 は最高優先度を示し、メッセージ優先度 7 は最低優先度を示します。
データページ 1ビットのデータページ値。データページビットは、後続のPDUフォーマットフィールドのページセレクタとして機能します。現在、このビットは0でページ0を指しており、ページ1は将来的に容量拡張のために利用されます。
PDUフォーマット 8-bit PDU Format value. <p>A value between 0 and 239 (PDU1) indicates a destination address in Peer-to-Peer communication. A value between 240 and 255 (PDU2, broadcast message) indicates a Group Extension. The Group Extension is used to increase the number of available messages to be broadcast.
宛先アドレス/グループ内線 8-bit Destination address or Group extension value. If PDU Format is < 240, the destination address is defined. Otherwise, the group extension is defined.
宛先アドレスの定義 値が「固定」の場合、ダイアログの値が宛先アドレスとして使用されます。値が「可変」の場合、コンポーネントに追加の端子が作成され、シミュレーションからの信号を接続できます。
送信元アドレス(ECU ID) 8 ビットの送信元アドレス (EDU ID) 値。
送信元アドレスの定義 値が「固定」の場合、ダイアログの値がソースアドレスとして使用されます。値が「可変」の場合、コンポーネントに追加の端子が作成され、シミュレーションからの信号を接続できます。
メッセージの長さ メッセージペイロードの長さをバイト単位で指定します。長さは1~1785の範囲で指定できます。
メッセージを送信する メッセージを送信する際の条件を指定します。条件は次のいずれかです。
  • イベント発生時 - 送信をトリガーするコンポーネント上に追加のイベントターミナルが作成されます。イベントの変化は、CANバスセットアップコンポーネントで定義されたCANx実行レートに基づいてチェックされます。
  • 周期的 - メッセージは指定された周期で定期的に送信されます。周期は、CANバスセットアップコンポーネントで定義されたCANx実行速度の整数倍である必要があります。
  • 要求時 - 正しい PNG 値を含む Request PGN (0x00EA00) メッセージが受信されると、メッセージが送信されます。
送信期間(非表示) メッセージの送信期間を指定します。このパラメータは、「メッセージ送信」パラメータの値に「期間指定」を選択した場合に有効になります。

J1939 送信信号の定義については、CAN バス送信信号の定義を参照してください。

回路図には多数のJ1939送信コンポーネントが存在する可能性があり、各コンポーネントは送信するJ1939 PGNメッセージを1つずつ記述します。複数のメッセージを送信するためにモデルにJ1939送信コンポーネントを追加する場合は、すべてのメッセージに一意のIDが割り当てられていることを確認してください。

ダイアログウィンドウで定義されたメッセージ長に応じて、J1939送信コンポーネントは異なるメッセージタイプを使用します。メッセージ長が8バイト未満の場合は、CANバス送信コンポーネントと同様に、通常の方法でメッセージが送信されます。メッセージ長が8バイトを超える場合は、「トランスポートプロトコル」で定義されたトランスポートプロトコルが使用されます。

コンポーネントへのecu_id入力は、送信元アドレスの値として機能します。ECU ID値はCANメッセージにパックされた値としてのみ使用され、システム全体のECU IDとして認識されることはありません。つまり、ECU ID値を変更しても、ネットワーク管理で定義されているアドレスクレーム手順はトリガーされません。

アドレス要求手順では、 J1939 仲裁コンポーネントを使用する必要があります。

J1939メッセージの送信時、ECU ID値254は禁止されています。ecu_id入力でこの値が検出された場合、メッセージは送信されません。

4定義された信号を持つJ1939送信コンポーネント

J1939 受信

コンポーネントはサポートされていません:このコンポーネントは現在 TyphoonSim ではサポートされていません。このコンポーネントをモデルに追加すると、TyphoonSim でモデルを実行できなくなります。TyphoonSim モードでモデルを実行する前に、このコンポーネントを無効にするか、モデルから削除してください。

J1939 受信(J1939 PGN 受信)コンポーネントは、CAN ネットワークを介して受信したメッセージを解凍するために使用されます。

コンポーネントは表 4に示され、J1939 受信ダイアログ ウィンドウは図 5に示されます。

4 J1939受信
成分 コンポーネントパラメータ

J1939仲裁

  • CANコントローラ
  • データ入力
  • 設定ファイル
  • メッセージを選択
  • IDタイプ
  • 優先度
  • データページ
  • PDUフォーマット
  • 宛先アドレス(ECU ID)/グループ拡張
  • 宛先アドレスの定義
  • 送信元アドレス
  • 送信元アドレスの定義
  • メッセージの長さ
  • 実行率
5 J1939受信ダイアログウィンドウ
5 J1939受信パラメータの説明
パラメータ名 説明
CANコントローラ メッセージを送信するコントローラを選択します(CAN1 または CAN2)
データ入力 メッセージをダイアログ ウィンドウを通じて手動で定義するか、構成ファイルを通じて定義するかを選択します。
設定ファイル 解析する設定ファイルを選択してください。ファイルはDBCまたはARXML形式です。
メッセージを選択 設定ファイルからシミュレートするメッセージを選択する
IDタイプ 29ビットの拡張CAN識別子として定義されています(J1939に準拠)
優先度 3 ビットの優先度値。メッセージ優先度 0 は最高優先度を示し、メッセージ優先度 7 は最低優先度を示します。
データページ 1ビットのデータページ値。データページビットは、後続のPDUフォーマットフィールドのページセレクタとして機能します。現在、このビットは0でページ0を指しており、ページ1は将来的に容量拡張のために利用されます。
PDUフォーマット 8 ビットの PDU 形式の値。

0~239(PDU1)の値は、ピアツーピア通信における宛先アドレスを示します。240~255(PDU2、ブロードキャストメッセージ)の値は、グループ拡張を示します。グループ拡張は、ブロードキャスト可能なメッセージ数を増やすために使用されます。

宛先アドレス(ECU ID)/グループ拡張 8-bit Destination address or Group extension value. If PDU Format is < 240, the destination address is defined. Otherwise, the group extension is defined.
宛先アドレスの定義 値が「固定」の場合、ダイアログの値が宛先アドレスとして使用されます。値が「可変」の場合、コンポーネントに追加の端子が作成され、シミュレーションからの信号を接続できます。
送信元アドレス(ECU ID) 8ビットの送信元アドレス値
送信元アドレスの定義 値が「固定」の場合、ダイアログの値がソースアドレスとして使用されます。値が「可変」の場合、コンポーネントに追加の端子が作成され、シミュレーションからの信号を接続できます。
メッセージの長さ メッセージペイロードの長さをバイト単位で指定します。長さは1~1785の範囲で指定できます。

J1939 受信信号の定義については、CAN バス受信信号の定義を参照してください。

回路図には多数のJ1939受信コンポーネントが存在する可能性があり、これらのコンポーネントはすべて、定義されたID値を持つJ1939メッセージの受信に使用されます。J1939受信コンポーネントで定義されたID値と一致しないID値を持つメッセージは無視されます。

新しいメッセージが受信されるたびに、rcv_cnt 値は 1 ずつ増加します。

6 .定義された信号を持つJ1939受信コンポーネント

DM1メッセージを受信

DM1 メッセージは可変長であるため、このタイプのメッセージを受信するには別の方法が必要です。

すべてのCANベースコンポーネントでは信号定義が静的であるため、受信可能なDTC信号の最大数を定義する必要があります。つまり、常に受信するわけではないDTC1、DTC2、DTC3…といった信号をテーブルに追加する必要があります。これは図7に示されています。この構成では、最大13個のDTC値を受信できます。

7 DM1メッセージのJ1939受信構成
DM1 メッセージがネットワーク上でアクティブな場合、次の 3 つのシナリオのいずれかが発生する可能性があります。
  • メッセージ内のDTCの数が受信コンポーネントで定義された数より少ない場合、メッセージは受信され、未使用のDTC値はすべて0xFF(未使用)値で埋められます。
  • メッセージ内のDTCの数は、受信コンポーネントで定義された数とまったく同じです。メッセージは受信され、すべてのTDC値が適用されます。
  • メッセージ内の DTC の数が、受信コンポーネントで定義された数を超えています。メッセージの長さが受信コンポーネントが処理できる長さを超えているため、メッセージは無視されます。

J1939仲裁

コンポーネントはサポートされていません:このコンポーネントは現在 TyphoonSim ではサポートされていません。このコンポーネントをモデルに追加すると、TyphoonSim でモデルを実行できなくなります。TyphoonSim モードでモデルを実行する前に、このコンポーネントを無効にするか、モデルから削除してください。

J1939 仲裁コンポーネントは、ネットワーク管理で定義されているアドレス要求プロセスを実行するために使用されます。

J1939アービトレーションコンポーネントは1つのECU IDを定義します。ネットワーク上の各ECUは起動時にアドレス要求手続きを実行する必要があります。J1939アービトレーションコンポーネントはこれを可能にします。

6 J1939仲裁パラメータの説明
成分 コンポーネントパラメータ

J1939仲裁

  • CANコントローラ
  • 任意のアドレスに対応
  • 業界団体
  • 車両システムインスタンス
  • 車両システム
  • 関数
  • 関数インスタンス
  • ECUインスタンス
  • メーカーコード
  • 身分証明書番号
8 J1939仲裁ダイアログウィンドウ

J1939仲裁コンポーネントのパラメータの説明は表7に示す。

7 J1939仲裁パラメータの説明
パラメータ名 説明
CANコントローラ アドレス要求メッセージを送信するためのCANコントローラインスタンスを指定する
任意のアドレスに対応 1ビットの調停アドレス対応値
業界団体 3ビットの業界グループ値
車両システムインスタンス 4ビットの車両システムインスタンス値
車両システム 7ビットの車両システム値
関数 8ビット関数値
関数インスタンス 5ビット関数インスタンス値
ECUインスタンス 3ビットECUインスタンス値
メーカーコード 11ビットのメーカーコード値
身分証明書番号 21ビットのID番号値

ダイアログウィンドウ内のパラメータを組み合わせることで、アドレス取得手順で使用されるECU NAME値が作成されます。ECUの優先アドレスは、J1939アービトレーションコンポーネントへの入力信号として定義されます。

シミュレーション開始時に、J1939アービトレーションコンポーネントはネットワーク上にアドレス要求メッセージを送信し、250ミリ秒間待機します。ネットワーク上の他のノードがこのメッセージに応答しなかった場合、 preferred_addr入力の値がecu_id出力に渡され、この値はJ1939送信コンポーネントと受信コンポーネントでECU IDとして使用できます。

他のノードがAddress Claimedメッセージを送信し、NAME値がJ1939 Arbitrationコンポーネントで定義された値より小さい場合、そのコンポーネントはArbitrationに敗れます。その結果、Cannot Claimメッセージが送信され、 ecu_id値は254になります。J1939 Sendコンポーネントのecu_id値として254を使用すると、メッセージの送信がブロックされます。

J1939 仲裁コンポーネントは、単一アドレス対応 ECU として動作します (NAME のプロパティ値に関係なく)。つまり、コンポーネントが提示されたアドレスを要求できない場合、優先アドレス値が変更され、要求手順全体が再度トリガーされるまで、値 254 を出力します。

コマンド アドレス メッセージもサポートされていません。

9 J1939仲裁コンポーネントの使用法

設定ファイルを使用してCANメッセージを指定する

送信コンポーネントと受信コンポーネントはどちらも、DBCファイルまたはARXMLファイルをインポートしてメッセージを定義できます。基本的な動作はどちらのコンポーネントでも同じですが、ここではCANバス送信コンポーネントについてのみ説明します。

設定ファイルを読み込むには、「データ入力」プロパティで「設定ファイル」を選択し、 「ファイルの選択」ボタンを使用して目的のファイルを選択します。ファイルが正しく解析されると、 「メッセージの選択」コンボボックスにファイル内のメッセージ名が表示されます。異なるメッセージを選択すると、ダイアログ内のメッセージとシグナルのパラメータが変更されます。例を図10に示します。

10 DBCファイルを使用して定義されたCANメッセージ

DBCファイルまたはARXMLファイルを使用してCANメッセージを定義する場合、すべてのメッセージおよび信号パラメータは編集不可となります。データ入力をダイアログウィンドウに変更するとパラメータは編集可能になりますが、その後データ入力構成ファイルに戻すと、パラメータは構成ファイルの値に戻ります。

Schematic API を使用してコンポーネントのプロパティ値を変更する

カスタムコンポーネントダイアログは、CANメッセージのパラメータを簡単に定義できるように設計されています。これらの値の変更は、標準の回路図API関数を使用しても可能ですが、変更された方法となります。つまり、送信メッセージ信号情報を除くすべてのプロパティは標準的な方法で変更されます。送信メッセージはPython辞書型として指定し、要求情報はPython辞書型のリストとして指定する必要があります。

変更するために メッセージを送信する 値を指定するには、Python辞書を 送信タイプ プロパティ。辞書には次のフィールドがあります。
8送信メッセージ辞書
フィールド名 許容値
「イベント中」 真、偽
「タイマーオン」 真、偽
変更するために 信号情報リクエストのリストを 信号 プロパティ。このリストは、定義済みのフィールドを持つPython辞書で構成されています。各リクエスト辞書には以下のフィールドがあります。
9信号情報辞書フィールド
フィールド名 許容値
"名前" ASCII文字列
「スタートビット」 0 - 63
"長さ" 1 - 64
「バイトオーダー」 「リトルエンディアン」、「ビッグエンディアン」
「データ型」 「int」、「uint」、「real」
「mux_type」 「なし」、「マルチプレクサー」、「マルチプレクサー」
"mux_val" 正の整数
"規模" 実数
"オフセット" 実数
「分」 実数
「最大」 実数
"ユニット" ASCII文字列
特定するために メッセージを送信する イベントとリクエストを送信するには、 図5、次のコードを実行する必要があります。
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実行レートの説明

CANopenを除くすべての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 は上で説明した内容をすべて示しています。

11 CANタイミング

仮想HILサポート

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