FPGAEtherCAT I/Oプログラミング

内容

FPGA(field-programmable gate array)でプログラミング可能なEtherCAT I/Oで、リアルタイムシステムを開発することができます。EtherCAT RIOモジュール式スレーブシャーシは、NI CompactRIOのほかEtherCATをサポートするプログラマブルオートメーションコントローラ(PAC)向けに、インテリジェントな拡張I/Oを提供します。NI LabVIEW FPGAモジュールを使用してEtherCAT RIOスレーブシャーシをプログラムすると、プログラム可能な分散型デバイスでカスタムタイミング、閉ループ制御、インライン処理が可能となります。

確定リモートI/O必要性

拡張I/Oへのニーズが高まるのは、多チャンネルや広い面積が必要とされるリアルタイムシステムを開発する場合です。拡張I/Oを使用することで、分散計測機能を追加したり元のアプリケーションを拡張することができます。ただし、制御システムの確定性を維持するために独自の同期アーキテクチャを構築するのは、複雑な場合が多く拡張性も失われがちです。そのようなアプリケーションはEtherNet/IP、EtherCAT、PROFINETなどのリアルタイムEthernet I/O技術を利用することで簡素化できますので、メインコントローラとの確定的通信を維持するために開発されたリモートI/Oのリアルタイムネットワークの使用をお勧めします。

EtherCAT RIOEtherCATスレーブシャーシ

EtherCAT RIO拡張シャーシを使用すると、CompactRIO、PXI、または工業用コントローラシステムにEtherCAT I/Oを追加することができます。この堅牢なCシリーズモジュール用8スロットシャーシは、EtherCATと呼ばれるオープン規格のリアルタイムEthernetプロトコルを使って、確定的な通信を行います。EtherCATマスタコントローラから複数のEtherCAT RIO拡張シャーシをデイジーチェーン接続することで、タイムクリティカルなアプリケーションを拡張することができます。さらに、ソフトウェア構成とLabVIEWプログラミングの経験があると、リアルタイムEtherCAT I/Oの追加がより簡単になります。

 

図1. NIマスタコントローラと分散スレーブデバイスを使用した一般的なEtherCATシステム

FPGA機能追加するメリット

EtherCAT RIOスレーブシャーシは、LabVIEW Real-TimeモジュールとLabVIEW FPGAモジュールのどちらでもプログラミングできます。LabVIEW Real-Timeを使用してNIスキャンモードでプログラミングすると、拡張I/Oが容易になります。NIスキャンモードでは、シンプルなドラッグアンドドロップI/O変数を使ってEtherCAT RIOスレーブデバイスの物理I/Oの値に即座にアクセスしたり、ライブテストパネルでシステム性能を監視し高度なトラブルシューティングを実行することができます。そこで、EtherCAT拡張I/OにFPGAの知能を追加するとどのようなメリットがあるのでしょうか。

EtherCAT RIOスレーブシャーシをFPGAモードでプログラミングすると、アプリケーションのカスタマイズ性と柔軟性がさらにアップします。条件判断機能を組み込むことで応答時間が短縮され、ホストによる介入がなくても環境にすばやく応答することができます。また高知能なスレーブデバイスを使用することにより、ノードでインライン解析、カスタムトリガ、信号操作などのタスクを実行することで、マスタコントローラの処理負荷を軽減できます。さらにLabVIEW FPGAを使用すれば、VHDLプログラミングの知識のない技術者でもアイデアを簡単に試作し実装することができます。

LabVIEW FPGAプログラミングAPI相違点

CompactRIOなどのNI再構成可能I/O(RIO)プラットフォームでLabVIEW FPGAによるプログラミングに慣れている方にとっては、ローカルFPGAとEtherCAT RIOのFPGAのプログラミングに多少の違いがあります。LabVIEW 2009では、スレーブのFPGAデータをマスタのリアルタイム処理と同期させるためのユーザ定義のI/O変数が追加されました。それらのユーザ定義I/O変数はまた、コントローラのリアルタイムプログラムと拡張シャーシのFPGAプログラムの間でデータの転送する唯一の方法でもあります。

表1. ローカルシャーシと拡張シャーシのFPGA転送方式を比較

LabVIEWプロジェクトウィンドウでFPGAターゲットをEtherCAT RIOスレーブに追加したら、EtherCAT RIOデバイスを右クリックして「追加」→「ユーザ定義変数」を選択することでユーザ定義のI/O変数を作成することができます。変数名、データタイプ、およびデータの方向(ホストからFPGA、またはその逆)は、プロパティウィンドウで設定できます。ここで注意すべきなのが、スレーブのFPGAモードで作成できるユーザ定義のI/O変数の数には制限があるという点です。EtherCAT RIOは、スキャンモードのI/O変数とFPGAモードのユーザ定義I/O変数の両方で、合わせて512バイトの入力データと512バイトの出力データを保持することができます。例えば、4個の32チャンネルモジュールをスキャンモードで使用していて、1つのチャンネルが32ビットのデータに対応できる場合、256バイトの入力データがスキャンモードI/O変数によって使用されることになります。残りの256バイトの入力データで、最大64入力のユーザ定義I/O変数(32ビット長)をFPGAモードで作成することができます。

 

図2. ユーザ定義のI/O変数を作成して、マスタのリアルタイムコードとスレーブのFPGAコードの間で通信を行うことができます。

FPGA特殊機能使用例

これらのユーザ定義のI/O変数は、各スキャンサイクルでシングルポイントデータをマスタコントローラとの間で送受信しますので、EtherCAT RIO拡張シャーシからの処理済みデータを渡すのに使用するのが最適です。例えば、NIWeek 2009の基調講演では、EtherCAT RIOスレーブシャーシを6台使用してチャイムを鳴らし、曲を演奏するパフォーマンスを行いました。マスタのリアルタイムコードが分散された各チャイムを鳴らすタイミングを制御する一方、スレーブシャーシのFPGAはマイクロフォンからのオーディオ波形計測を記録し、高速フーリエ変換(FFT)を実行して特定のチャイムの周波数に対する音響強度を特定します。するとスレーブシャーシのFPGAは、パルス幅変調(PWM)を使用して、チャイムの音量に合わせて一連のLEDの輝度を制御します。リアルタイムプログラムが実行していなくても、EtherCAT RIO拡張シャーシ上のFPGAロジックにより、LEDはチャイムと同じ周波数の他の大音響にも反応します。

 

図3. このEtherCAT RIO FPGAコードは、NIWeek 2009の基調講演で行ったチャイムによる曲の演奏に使用されたものです。

LabVIEW FPGAアルゴリズム関数を使用する以外に、スレーブシャーシはコードのカスタマイズと同期を可能にする複数のシャーシI/O信号を提供します。例えば、EtherCAT Stateにより、7つのEtherCAT状態のいずれかの間に特定のFPGAロジックを実行することができます。そのため、マスタコントローラとの通信が停止すると、EtherCAT RIO拡張シャーシはSafe-Operational状態になり、FPGAコードは適切な安全状態の動作を指定することが可能となります。その他の便利な信号として、Output Virtual PointとInput Virtual Pointがあります。これらの2つのタイミング信号は、各スレーブがスキャン周期中に出力値と入力値をアップデートするタイミングを示します。そのため信号の立ち上がりエッジを使用して、複数のEtherCAT RIO拡張シャーシ間でFPGAコードを同期させることができます。NIスキャンエンジン同期や特殊デジタル信号、非同期オーバーサンプリングなど、高度なFPGA機能を示すためのLabVIEWサンプルは、NI-Industrial Communications for EtherCATドライバに含まれています。

図4. 仮想ポイントタイミング信号を使用してEtherCAT I/O FPGAコードを同期します。

 

まとめ

EtherCAT RIO拡張シャーシのような確定性に優れたリモートI/Oを利用すると、リアルタイムアプリケーションに求められる緊密なタイミングや同期を維持することができます。さらに、ハードウェアレベルのFPGAコードをEtherCAT RIOスレーブに追加することで、ノードにおける高度な条件判断が可能となるため、コントローラの処理負荷を軽減し応答時間を短縮することができます。

関連リンク

EtherCAT RIO製品を検索

EtherCAT RIOのアプリケーションや技術リソースを見る