メモ 本コンテンツの日本語版は、便宜を図るために自動翻訳で提供されています。正確な最新情報については、英語版をご覧ください。

各CANポートは、LabVIEW FPGAとモジュール間で個別の通信パスを使用するだけでなく、LabVIEW FPGA内では専用リソースを使用します。2つの異なるCANポートにFPGA VIでアクセスする場合、LabVIEW FPGA VIブロックダイアグラムのノードはそれぞれ独立して実行されます。

たとえば、CANフレームをCAN0CAN1に同時に出力する場合、2つのCAN出力ノードはそれぞれ独立して実行します。また、スロット1のモジュールのCAN0へのアクセスは、スロット2のモジュールのCAN0へのアクセスとは独立して行われます。

2つ以上のLabVIEW FPGA VIブロックダイアグラムが同時に同じCANポートにアクセスする場合、どちらのノードを先に実行するかのアービトレーションが行われます。このアービトレーションのためにアプリケーションに遅延やジッタが発生する場合があります。たとえば、LabVIEW FPGAでのデジタル入力トリガ検出時に特定のCANフレームを送信する場合、CAN出力ノードとその他のCANを調整することによってデジタル入力パルスからCANフレーム開始までのジッタが発生する場合があります。

ノードアービトレーション

同じCANポートの場合、同じタイプのCANノードは調整する必要があります。CANノードには以下の4つのタイプがあります。

  • CAN入力
  • CAN出力
  • I/Oメソッドノード
  • I/Oプロパティノード

異なるタイプのCANノードは、ノードレベルで調整を行いません。

ほとんどのアプリケーションにおいて、発生するジッタが小さい場合はCANノードアービトレーションは発生しません。たとえば、通常、同じCANポートで2つのCAN入力ノードを同時に使用することはありません。これは、どちらのノードもCANフレームの正しいシーケンスを返さないからです。

CANノードアービトレーションが発生する最も一般的な状況は、他のI/Oメソッドと同時にWait I/Oメソッドを使用する場合です。たとえば、Timeoutを10秒に設定したWait on Transmit Completeメソッドの呼び出し後にAbort Transmitメソッドを呼び出した場合、ノードレベルのアービトレーションによってWait on Transmit Completeメソッドの後にAbort Transmitメソッドが実行されます(呼び出しの10秒後)。複数のI/Oメソッドを使用する場合、Timeoutを0に設定してイベントをポーリングすることにより、これを回避することができます。

出力パスアービトレーション

各CANポートにおいて、LabVIEW FPGAとCANモジュール間には2つの通信パスがあります。出力パスはLabVIEW FPGAからCANポートに、入力パスはCANポートからLabVIEW FPGAに情報を送信します。

LabVIEW FPGA VIブロックダイアグラムで2つ以上のノードが同時に同じCANポートにアクセスする場合、出力パスの優先順位を決定するためにアービトレーションが行われます。このアービトレーションは、LabVIEW FPGAにおける通常のノードアービトレーション(ノードが複数インスタンスある場合)とは異なります。たとえば、CAN0にフレームを書き込み、同時にCAN0のプロパティを読み取る場合、CAN出力ノードとI/Oプロパティノードの両方がLabVIEW FPGAからCANポートへ情報を送信するため、出力パスでアービトレーションが発生します。

以下のノードはCANポートへの出力パスを使用します。

  • CAN出力
  • I/Oメソッドノード: Abort Transmit
  • I/Oメソッドノード: Reset
  • I/Oメソッドノード: Start
  • I/Oメソッドノード: Stop
  • I/Oプロパティノード: 任意のプロパティの読み取り
  • I/Oプロパティノード: 任意のプロパティの書き込み

同じCANポートでこれらのノードを2つ以上同時に実行すると、順次に実行させるためにアービトレーションが行われジッタが発生する場合があります。同じFPGAクロックサイクル内でアービトレーションが発生した場合、まずCAN出力ノード、次にI/Oメソッドノード、その次にI/Oプロパティノードの順で優先されます。ノードが同じ場合は、CANノードアービトレーションが発生します。

出力パスはFIFOとして実装されます。これにより、複数フレームをCANモジュールに送信でき、バス負荷を最大限にするテストが可能になります。

上記の一覧のうちStopメソッドおよびResetメソッドを除くすべてのノードは出力FIFOを使用します。この2つのメソッドはCAN通信を停止するため、待機中の送信フレームに関わらず実行される必要があります。StopメソッドまたはResetメソッドは、出力パスに対して正常にアービトレートされるとFIFOをバイパスしてCANポートに送信され即座に実行されます。

StopメソッドおよびResetメソッドを除く上記の一覧のノードは、出力FIFOが一杯である場合、要素が利用可能になるまで待機する必要があります。これは一般的に、前のCAN出力からのフレームがネットワークに正常に送信される場合に発生します。CAN Advanced Port Configurationダイアログボックスの出力タイムアウト(ms)は、新規要素が利用可能になるまで待機する時間を指定します。したがって、出力タイムアウト(ms)はCAN出力ノードだけではなく上記の一覧のすべてのCANノードに適用します。

出力タイムアウト(ms)を0に指定すると、ノードは新規要素が利用可能かどうかのみを確認します(ブロックなし)。要素が存在する場合、ノードが実行されFALSEのエラーステータスが返されます(正常)。要素が存在しない場合、ノードは実行されずTRUEのエラーステータスが返されます(エラー)。したがって、ポーリング(待機せずにフレームに書き込むなど)するには、ノードのエラー端子を有効にする必要があります。エラーが返される場合、ノードを後で再実行する必要があります。

入力パスアービトレーション

CANポートからLabVIEW FPGAへの入力パスアービトレーションはLabVIEW FPGA内では発生しません。LabVIEW FPGAノード用のデータがCANモジュールで利用可能になるとデータが即座に送信されます。

CANポートの2つ以上のノードからLabVIEW FPGAに送信しようとする場合、入力パスアービトレーションはCANモジュール内で発生します。たとえば、プロパティが読み取られるのと同時にCANフレームを受信する場合、どのノードのデータを最初に送信するかどうかをCANモジュールが判断する必要があります。この入力パスアービトレーションによってジッタが発生する場合がありますが、CANノードアービトレーションやCAN出力パスアービトレーションよりも小さいジッタになります。

モジュール構成

モジュール構成の構成情報は、FPGA VIの実行時にLabVIEW FPGAからCANモジュールに送信されます。VIが実行を開始すると自動的に送信されますが、この1回の構成が完了するまですべてのCANノードは待機する必要があります。構成に必要な時間は最大1秒です。

構成時間が経過する前にFPGA VIがCANノードを実行しなければ、この遅延に気付くことはありません。構成時間が経過する前にFPGA VIがCANノードを実行する場合、CANノードは構成が完了するまで待機してから通常通り実行します。タイミングに依存しない方法でCANノードを実行する場合、この動作は問題になりません。ただし、FPGA VI内の最初のCAN入力やCAN出力を遅延なく実行する必要がある場合、VIの最初の部分(メインループの前)に以下のどちらかを追加することで対応できます。

  • 1秒の遅延
  • CANプロパティノードまたはメソッドノード(たとえばStartメソッドノード)

概要

FPGA VIに各CANポートのCAN入力およびCAN出力しか含まれない場合、ノード実行とCANフレーム送信の間のジッタは非常に小さくなります。これは、各CANポートが入力データおよび出力データに個別の通信パスを使用しているためです。

入力/出力と併せてメソッドやプロパティを使用する場合、ノード呼び出しとCANフレーム送信の間にジッタが増加します。このジッタはアービトレーションによるものです。通常、ジッタは数ミリ秒であるため、アプリケーションのタイミング制限内に収まります。