CAN出力
- 更新日2025-10-09
- 9分で読める
通信用にCANフレームを書き込みます。
CAN出力を使用してCANポートに書き込むには、以下の手順に従ってください。
- ターゲットとデバイスを追加ダイアログボックスを使用して、CANモジュールをCompactRIO構成に追加します。プロジェクトエクスプローラウィンドウでCANモジュールを右クリックし、プロパティを選択してモジュールの構成プロパティを指定します。
- CAN用にFPGA I/O項目を作成するには、プロジェクトエクスプローラウィンドウのマイ コンピュータの下のFPGAターゲットを右クリックし、新規»FPGA I/Oを選択し、CAN»NI 9852»CAN0(またはCAN»NI 9853»CAN0)および/またはCAN»NI 9852»CAN1(またはCAN»NI 9853»CAN1)をFPGA I/O一覧に追加します。新規FPGA I/Oダイアログボックス(FPGAモジュール)を参照して、FPGA I/Oを作成し、CompactRIOの構成に追加する方法について詳しく確認してください。
- FPGA I/OパレットからFPGA I/OノードをFPGA VIのブロックダイアグラムに配置します。
- FPGA I/Oノードを右クリックしてFPGA I/Oを選択»CAN»NI 9852»CAN0(またはFPGA I/Oを選択»CAN»NI 9853»CAN0)またはFPGA I/Oを選択»CAN»NI 9852»CAN1(またはFPGA I/Oを選択»CAN»NI 9853»CAN1)を選択します。
- FPGA I/Oノードを右クリックして書き込みに変更を選択し、CAN出力用のI/Oノードとして使用します。
- I/Oノードを右クリックしてプロパティを選択し、データタイプを選択します。
CAN出力を使用する前にCANポートの通信を開始してください。通信を開始するには、モジュール構成でAuto Startを有効にするか、開始メソッドを呼び出します。
LabVIEW FPGAからモジュール上のCANポートへの通信パスはFIFOで実装されます。CAN出力ノードはFIFOの要素が利用可能になるまで待機し、その後FIFOにフレームを書き込みます。他のCANフレームがFIFO内に存在しない場合、CANフレームは即座に通信を開始します。
CAN出力は、要求された通信がネットワーク上で完了したことが確認されるまで待機しません。一度に1個のCANフレームを送信する場合は、CAN Outputの後にWait on Transmit Complete(I/Oメソッド)を呼び出してください。
できるだけ高速にCANフレームを通信する場合、出力FIFOに複数のフレームを書き込みます。CANモジュールは、できるだけ高速にこれらのフレームをSJA1000コントローラに送信するため、ほぼ100%のバス負荷が発生します。
出力FIFOが一杯の場合、CAN出力ノードは要素が利用可能になるまで待機し、その後FIFOにフレームを書き込みます。CAN Advanced Port Configurationダイアログボックスの出力タイムアウト(ms)は、新規要素が利用可能になるまで待機する時間を指定します。新規要素が利用可能になるのは、前のCAN出力からのフレームのネットワークへの通信が成功したときです。Output Timeout (ms) を0に指定した場合、新しい要素が利用できないと、CAN出力ノードはTRUEのエラーステータス(エラー)を返します(ブロックなし)。エラーが返された場合は、同じフレームのCAN出力を後で再試行してください。
プロパティダイアログ
Data Typeは、CAN入力ノードに書き込まれるCANフレームのタイプを選択します。利用可能な値はCluster(デフォルト)およびArray of 6 U32です。
Clusterデータタイプを使用する利点は以下のとおりです。
- 使いやすいシンプルなブロックダイアグラム
- フロントパネルを使用せずブロックダイアグラムのみに使用を限定する場合、高速で効率的
Array of 6 U32データタイプの利点、およびホストVIに一度に整数をハンドシェイクする利点は以下のとおりです。
- ホストVIへの通信が高速
- 使用するFPGAゲートが少ない
クラスタと配列の使用の詳細については、LabVIEW FPGA アプリケーションにおけるクラスタと配列の使用に関するメモを参照してください。
ノード入力
| Data Type | 要素 | 説明 |
|---|---|---|
|
|
タイムスタンプ (High) | 無視されます。通信要求はできるだけ早く発生します (タイミング情報は無視されます)。 |
|
|
タイムスタンプ (Low) | 無視されます。通信要求はできるだけ早く発生します (タイミング情報は無視されます)。 |
|
|
識別子 |
アービトレーションID。 ビット29 (16進数形式で20000000) がクリアである場合、このIDは標準形式 (11ビット) を使用します。 ビット29が設定されている場合、このIDは拡張形式 (29ビット) を使用します。 CAN識別子のこの表記法はNI-CANと同じです。 |
|
|
タイプ | フレームのタイプ。
|
|
|
インフォA | 将来の使用のために予約済みです。 |
|
|
インフォB | 将来の使用のために予約済みです。 |
|
|
データ長 |
データフレームの場合、データ(0~8)内のバイト数を示します。 リモートフレームの場合、要求されたバイト数を示します。 |
|
|
データ |
データフレームの場合、データバイトを提供します。この配列は、8バイトの固定サイズを使用します。 データタイプが6つのU32の配列に設定されている場合、CANフレームは下記のテーブルのように6つのU32値の配列として表現されます。 |
| 最上位バイト | ... | ... | 最下位バイト |
|---|---|---|---|
| タイムスタンプ(上位U32) | |||
| タイムスタンプ(下位U32) | |||
| 識別子 | |||
| タイプ | インフォA | インフォB | データ長 |
| データ[0] | Data[1] | Data[2] | Data[3] |
| Data[4] | Data[5] | Data[6] | Data[7] |
上記のテーブルにおける各要素の意味は、クラスタデータタイプの場合と同じです。