[Ethercat Master]
説明
EtherCATマスタを起動し、すべてのスレーブのSM、FMMU、およびDCレジスタを設定し、EtherCATステートマシンをオペレーション可能状態に切り替えます。
構文
int start(uint64_t cycletime_ns = 0, EthercatMasterMode mode = ECAT_FREERUN);
媒介変数
[in] uint64_t cycletime_ns
EtherCATサイクル・タイム。 EtherCATファームウェアは、このサイクル・タイムに従って周期的に割り込みを生成し、プロセスデータを更新して非循環送信を処理します。ユーザーが循環コールバックを登録し、EtherCATマスタ制御モードがECAT_FREERUN_MANUAL
に設定されていない場合、これらの周期的な割り込み中にコールバックが呼び出されます。[in] EthercatMasterMode mode
EtherCAT制御モードの選択。各モードの詳細な説明については、以下の例を参照してください。ECAT_SYNC
ECAT_FREERUN
ECAT_FREERUN_MANUAL
戻り値
error codeを返します。返された値が 0の場合、この関数が正常に完了したことを示します。
備考
この関数はブロッキングされており、コールバック関数内で呼び出すことはできません。
例
We will show how to select the EtherCAT control modes (ECAT_SYNC
, ECAT_FREERUN
, ECAT_FREERUN_MANUAL
) in the following examples.
ECAT_SYNC

このモードでは、最高レベルのデュアルシステム同期が提供されます。図に示すように、番号付きの矢印はオペレーションのシーケンスを示しており、分岐はありません。EtherCATファームウェアがEtherCATマスタライブラリへの周期的な割り込みをトリガした後 (ステップ 2)、次のアクションに進む前に、EtherCATマスタライブラリからのACK応答を待機します (ステップ8)。ユーザーが循環コールバックを登録している場合は、ステップ4に示すように、循環割り込みにより呼び出されます。ユーザーが循環コールバック内で現在の入力プロセスデータを読み取り、処理し、出力プロセスデータを計算し、書き戻す限り、現在のサイクルで出力プロセスデータが EtherCATネットワークに送信され、リアルタイム制御システムの要件が満たされます。
#include "Ethercat.h" EthercatMaster master; void CyclicCallback() { // ... } void setup() { master.begin(); master.attachCyclicCallback(CyclicCallback); master.start(1000000, ECAT_SYNC); } void loop() { // ... }
ECAT_FREERUN

これはデュアルシステム同期のないフリー・ラン・モードです。図に示すように、番号付きの矢印は操作のシーケンスを示しています。ただし、EtherCATファームウェアがEtherCATマスタライブラリへの循環割り込みをトリガした後 (ステップ2)、EtherCATマスタライブラリを待たずに次のアクションを直接続行するため、ステップ3で分岐が発生します。2つのシステムは同期なしで独立して動作します。ユーザーが循環コールバックを登録している場合は、ステップ4Aに示すように、循環割り込みがそれを呼び出します。
#include "Ethercat.h" EthercatMaster master; void CyclicCallback() { // ... } void setup() { master.begin(); master.attachCyclicCallback(CyclicCallback); master.start(1000000, ECAT_FREERUN); } void loop() { // ... }
ECAT_FREERUN_MANUAL

これもデュアル・システム同期のないフリー・ラン・モードです。 ECAT_FREERUN
モードとの基本的な違いは、プロセスデータを更新して非循環コマンドを処理するための循環割り込みがないことです。代わりにユーザーは自身で EthercatMaster::update()
を呼び出し、プロセスデータを更新し、非循環コマンドを処理する必要があります。さらに、このモードでは循環割り込みがないため、循環コールバックは呼び出されません。図の番号付き矢印で示されているように、2つのシステムは同期なしで独立して動作します。
#include "Ethercat.h" EthercatMaster master; void setup() { master.begin(); master.start(1000000, ECAT_FREERUN_MANUAL); } void loop() { // ... master.update(); }
詳細は EtherCAT Library User Manual QEC EtherCAT命令とAPI使用法参照