2024.08.15, Version 2.2r1.
You can download the EtherCAT Library API User Manual file ここ.
1. 概要
1.1 QECマスタについて
QECマスタは、86DuinoコーディングIDE 500+と互換性のあるEtherCATマスタシステムで、EtherCATマスタデバイスとEtherCATスレーブデバイス間のリアルタイムEtherCAT通信を提供します。86Duino IDEのEtherCATライブラリを除き、QECマスタはModbus、イーサネットTCP/IP、CANバスなどの産業用通信プロトコルも提供し、迅速なアプリケーション開発のために豊富な高レベルC/C++プログラミング言語を使用します。
1.1.1 86Duino IDE とは?
86Duino統合開発環境 (IDE)ソフトウェアを使用することで、86DuinoボードとQECマスタデバイスに関するコードを簡単に記述し、アップロードできます。Windows、Mac OS X、Linux で動作します。この環境は、Javaで記述されており、Arduino IDE、Processing、DJGPP、およびその他のオープン・ソース・ソフトウェアに基づいています。これらは https://www.qec.tw/software/ からダウンロードできます。

QECマスタのソフトウェアである86Duino IDE は、コンフィギュレーションユーティリティ: 86EVA(コンフィグレーション)を提供します。これはユーザーがEtherCATネットワークのパラメータを編集するためのグラフィカル・ユーザー・インターフェイス・ツールであり、その機能は次のとおりです:
- EtherCATスレーブデバイスの精査
- ENIファイルのインポート
- EtherCATマスタの設定
- EtherCATスレーブデバイスを構成
その他の詳細な機能については、86EVA ユーザーマニュアルを参照してください。 86EVA User Manual.
1.1.2 QEC EtherCATマスタアーキテクチャ
EtherCATマスタソフトウェアは、主に2つの部分に分かれており、それぞれが Vortex86EX2 CPUの各システム上で実行されます。各システムは次のタスクを担当します:
- EtherCATマスタライブラリ
- C/C++ アプリケーション・インターフェイスを提供します:
- 初期化インターフェイス
- コンフィギュレーションインターフェイス
- プロセス・データ (PDO)・アクセス・インターフェイス
- EtherCATを介したCANアプリケーション・プロトコル(CoE)・アクセス・インターフェイス
- EtherCATを介したファイル(FoE)・アクセス・インターフェイス
- スレーブ情報インターフェイス (SII)・アクセス・インターフェイス
- 同期クロック (DC)・アクセス・インターフェイス
- C/C++ アプリケーション・インターフェイスを提供します:
- EtherCATマスタファームウェア
- EtherCATマスタコアを実行します。
- プライマリ/セカンダリ・イーサネット・ドライバを制御し、 EtherCATフレームを送信します。
プログラムは、FreeDOSオペレーティングシステム上で動作するように設計されており、DJGPP 環境によって提供されるGCCコンパイラを使用してコンパイルされています。
1.1.3 ハードウェアプラットフォーム
EtherCATマスタソフトウェアは、デュアル・システム・アーキテクチャを特徴とするDM&P製Vortex86EX2 CPU でのみ動作します。マスタシステムとスレーブシステムに分かれており、それぞれ独自のオペレーティングシステムが稼働しており、システム間の通信はデュアルポートRAM とイベント割り込みによって実現されます。それぞれのタスクは次のとおりです:
- マスタシステム
- ユーザーのEtherCATアプリケーション
- ユーザーのHMIアプリケーション
- ユーザーのイーサネットアプリケーション
- など。
- スレーブシステム
- EtherCATマスタファームウェアの実行のみを担当します。
ほとんどのアプリケーションはマスタシステム上で実行されるため、スレーブシステム上で実行されるEtherCATマスタファームウェアは、他のアプリケーションによる干渉を受けません。この構成により、EtherCATマスタコアの実行に集中できるようになり、EtherCATの同期とリアルタイム性能が保証されます。

1.1.4 デュアルシステムの同期
このセクションの主な議論は、デュアルシステムPDOデータの同期です。下図に示すように、ユーザーアプリケーションとEtherCATマスタ・ライブラリ・ブロックはマスタシステム上で実行され、リアルタイムEtherCATマスタコアはスレーブシステム上で実行されます。
EtherCATマスタコアがプロセス入力ステージに到達すると 、 イーサネットドライバからすべての循環フレームを受信し、入力PDOデータをDPRAMにコピーします。
ユーザー・アプリケーション・ステージに到達すると、EtherCATマスタコアは、マスタシステムに対して周期的な割り込みをトリガします。周期的な割り込みを受信すると、マスタシステムはEtherCATマスタライブラリの割り込み処理手順を実行します。マスタ・システムは、入力PDOデータをDPRAMからメインメモリに移動し、ユーザーが登録した周期的なコールバックを呼び出し、周期コールバック完了後に出力PDOデータをメインメモリからDPRAMに転送して、非周期コマンドを処理し、割り込み処理手順を終了します。この時点で、EtherCATマスタコアのユーザーアプリケーションと割り込み処理手順の両方が同時に完了します。
EtherCATマスタコアが書き込み出力ステージに到達すると、出力PDOデータをDPRAMからイーサネット・ドライバのDMAにコピーし、フレームを送信します。
これらのタスクは、概説された手順に従って循環に実行され、デュアルシステムPDOデータの同期が保証されます。

1.2 主な機能
EtherCATテクノロジーグループは、ETG.1500でEtherCATマスタソフトウェア実装の2つのクラスを定義しました。 この仕様では、マスタクラスの明確に定義された機能を定義しています。 議論を簡単にするために、マスタ・クラスは 2つだけ定義されています: ETG.1500この仕様では、マスタクラスの明確に定義された機能を定義しています。 議論を簡単にするために、マスタ・クラスは 2つだけ定義されています:
- クラス A: 標準EtherCATマスタデバイス
- クラス B: 最小EtherCATマスタデバイス
以下に、クラス A、クラス B、および QECマスタの比較を示します。
1.2.1 機能表
単語の使い方:
- shall: 等しい必要があります。
- should: 等しいことが推奨されます。
- may: 等しいことが許可されます。
- O: サポートされていることに相当します。
機能名 | 簡単な説明 | QEC マスタ |
基本的な機能 | ||
Service Commands | すべてのコマンドのサポート | O |
Slaves with Device Emulation | アプリケーションコントローラの有無にかかわらずスレーブをサポート | O |
EtherCAT State Machine | ESMの特別な動作のサポート | O |
Error Handling | ネットワークまたはスレーブのエラーのチェック(ワーキング・カウンタ、など) | O |
EtherCAT Frame Types | EtherCATフレームのサポート | O |
プロセス・データ交換 | ||
Cyclic PDO | 周期的なプロセス・データ交換 | O |
ネットワークコンフィギュレーション | ||
Online scanning | EtherCATマスタがもつネットワークコンフィギュレーション機能 | O |
Reading ENI | ENIファイルから取得したネットワークコンフィギュレーション | O |
Compare Network configuration | 事前に構成されたネットワークと実際のネットワーク構成を起動時に比較する | O |
Explicit Device Identification | ケーブル交換に対し、ホットコネクト防止に使用される識別 | O |
Access to EEPROM | ESCレジスタ経由でEEPROMにアクセスするためのルーチンをサポート | O |
メールボックスのサポート | ||
Support Mailbox | メールボックス転送の主な機能 | O |
Mailbox Resilient Layer | フレーム損失時の回復レイヤーをサポート | O |
EtherCATを介したCANアプリケーション層( CoE ) | ||
SDO Up/Download | 通常および迅速な転送 | O |
Segmented Transfer | 分割転送 | O |
Complete Access | 一度にオブジェクト全体 (すべてのサブ・インデックスを含む) を転送 | O |
SDO Info service | オブジェクト辞書を読み取るサービス | O |
FoE | ||
FoE Protocol | FoEプロトコルをサポート | O |
Firmware Up/Download | パスワード、ファイル名は、アプリケーションにより与えられる | O |
高精度時刻同期 (DC) との同期 | ||
DC support | 時刻同期のサポート | O |
1.3 機能パック
1.3.1 ケーブルの冗長性
EtherCATケーブルの冗長性とは、ケーブル障害が発生した場合でも継続的に信頼性の高い通信を維持するEtherCAT通信システムの機能を指します。ケーブル冗長性では、両方向で動作するリングトポロジが採用されています。1つのケーブルに障害が発生するか、切断されても、別のケーブルパスが機能し通信が中断されません。ケーブル冗長性により、EtherCATネットワークの耐障害性が強化され、休止時間が最小限に抑えられ、システム全体の信頼性が向上します。
ケーブル冗長化におけるケーブル断線の有無については、以下の3つのシナリオが挙げられます。以下では、ケーブル冗長性を実現する方法と、これらのシナリオ間のEtherCATマスタコントローラの違いについて説明します。
- ケーブル断線なし
- 2台のスレーブ間のケーブルが断線
- マスタとスレーブ間のケーブル断線
説明を簡単にするために、ここではいくつかの仮定を置きます:
- サイクル・タイムが 125μsに設定されていると仮定します。
- すべてのスレーブが入力PDOのみ(出力PDOなし)であると仮定すると、プロセス・データ・フレーム内のワーキングカウンタ (WKC) は、すべてのスレーブを通過するときに1増加します。
- EtherCATネットワーク上にスレーブが 6個しかなく、想定されるワーキング・カウンタ (EWKC) が 6であると仮定します。
- プライマリ・ポートとセカンダリ・ポートは、すべてのサイクルで同時にプロセス・データ・フレームを送信します。
更に詳しいケーブル冗長性は以下WEBをご参照下さい。 EtherCAT機能パック:ケーブル冗長性.
1.4 ベンチマーク
EtherCATは、高い同期能力で知られるフィールドバス・テクノロジです。高度な同期を必要とするアプリケーションでは、多くの場合、リアルタイム性能と高制御周波数が求められます。これらの背景をもつユーザーは、通常、次のような仕様を考慮します:
- より短いサイクル・タイムをサポート
- より多くのプロセス・データをサポート
- より多くのEtherCATスレーブデバイスをサポート
ただし、EtherCAT マスターがユーザーのアプリケーション要件を満たしているかどうかを評価するには、多くの場合、ベンチマーク測定が主な考慮事項となります。
詳細はEtherCATマスタベンチマークをご参照ください。
1.5 同期を参照してください。
EtherCATネットワーク内のすべてのスレーブ間の時間同期は、EtherCATスレーブコントローラ (ESC) 内の分散クロック (DC) 単位に依存し、システム全体の一貫性を保証します。通常、最初のDC機能を持つスレーブがシステムの基準クロックとして機能し、他のDC機能を持つスレーブを同期させます。DCの詳細な説明については、1.5.3 DC同期を参照ください。

ESCには3つの同期出力ピンがあります。 IRQ, SYNC0, SYNC1: ESCがEtherCAT循環フレームを受信した後に、IRQピンは上位層のマイクロコントローラ (µC) へ信号を生成します。SYNC0およびSYNC1ピンは、ESCのDC関連レジスタの設定に基づいて、周期的にマイクロコントローラに信号を生成します。したがって、EtherCATスレーブに µC がない場合、同期機能はサポートされません。
EtherCAT には 3つの同期モードがあります:
- Free run(フリーラン)
- SM同期
- DC同期
1.5.1 Free run(フリーラン)
EtherCATマスタとすべてのEtherCATスレーブはそれぞれ独自のローカルタイマを持ち、夫々のサイクルタイムは独立しているため、同期されません。下の図に示すように、EtherCATマスタとスレーブ1、スレーブ2、スレーブ3からスレーブ n の両方に独自のサイクル・タイムがあり、Output ValidとInput Latchが一致しません。このシナリオは、高い同期が要求されるアプリケーションには適していません。

1.5.2 SM同期
IRQピンは、ESCが循環フレームを受信するとSMイベントを生成し、このイベントは µC 内のローカルアプリケーションの実行をトリガします。下の図に示すように、循環フレームは送信時にマスタと同じジッタでスレーブに受信されます。ジッタがゼロであると仮定しても、有限のハードウェア伝搬遅延により、最後のスレーブは最初のスレーブよりも遅く循環フレームを受信します。
伝播遅延により、スレーブ間の SMイベントのタイミングにオフセットが生じ、SM同期の制度がマイクロ秒レベルになります。
各スレーブが SyncManagerパラメータオブジェクト (0x1C32.3/0x1C33.3) のシフト時間をサポートしている場合は、すべてのスレーブの出力有効と入力ラッチをお互いに近づくように調整することができます。ただし、伝播遅延を計算できないため、調整は非常に困難です。

1.5.3 DC同期
SYNC0またはSYNC1 ピンは、ESCのDC関連レジスタのコンフィギュレーションに基づいて SYNCイベントを周期的に生成し、このイベントにより µC 内のローカル・アプリケーションの実行をトリガします。下の図に示すように、ジッタと伝播遅延は依然として存在し、循環フレームを受信した後に SMイベントがトリガされます。ただし、このDC同期方式では、SYNC0イベントは周期的にトリガされるため、ジッタや伝播遅延の影響を受けません。
SYNC0イベントはDCユニットによってトリガされるため、スレーブ間のすべてのSYNC0イベントには、ほとんどオフセットがなく、すべてのスレーブのシステム時間を同期するためのAPRW/FPRWコマンドの定期的な送信により、精度はナノ秒レベルになります。
スレーブがSyncManagerパラメータ・オブジェクト (0x1C32.3/0x1C33.3) のシフト時間をサポートしている場合、これらのスレーブの出力有効タイミングと入力ラッチ ・タイミングを同じ時間点に調整することができます。
ただし、図に示すグローバル・シフト時間の選択は重要ですが、次の条件を満たす必要があります :
- すべてのスレーブが循環フレームを受信した後
- 次のサイクルの循環フレームを送信する前
- さまざまなDC同期方式に応じて、 DC同期 出力の準備を実行した後に選択する必要がある場合があります Prepare Outputs:
- Trigger µC to execute Prepare Outputs SMイベントが発生したときに、 µCをトリガして出力準備を実行します
- Trigger µC to execute Output Valid SYNC イベントが発生したときに、 µCをトリガして出力有効を実行します
修正されたグローバル・シフト時間は一意ではありません。サイクル時間の全間隔内で選択できます。さまざまな DC同期方式の詳細については、ETG.1020 EtherCATプロトコル拡張機能を参照してください。

2. 関数
QEC EtherCAT マスタライブラリ
EtherCATは、オートメーションおよび制御システムで広く使用されているリアルタイムの産業用イーサネット通信プロトコルです。QECマスタは、C/C++ で実装されたEtherCATマスタライブラリで、マスタ、汎用スレーブ、CiA 402スレーブの各クラスと、QECシリーズスレーブ専用のクラスが含まれています。 これらのクラスは、責務が明確に定義されているだけでなく、将来の拡張性も考慮されています。

これらのクラスは、次の3つの部分に分けられます:
- EtherCAT マスタ
EtherCATマスタは、多様で柔軟なマスタコンフィギュレーションと操作機能だけでなく、 EtherCATデバイス部分から呼び出すための多様なEtherCATスレーブ操作機能も提供します。
- EtherCATデバイス
EtherCATデバイス部分は、PDO、CoE、FoEなどの機能を操作できる汎用EtherCATスレーブデバイス・クラスを提供し、CiA402スレーブ汎用クラスも含まれています。
- QECシリーズデバイス
QECシリーズデバイスは、ICOP社のQECシリーズ・スレーブ・デバイス専用の機能を提供し、ユーザーがより使いやすく、簡潔な方法でコード化できるようにします。
2.1 EtherCATマスタ
EtherCATマスタ部分は、様々で柔軟なマスタ・コンフィギュレーションや操作機能を提供するだけでなく、EtherCATデバイス部分から呼び出すための様々なEtherCATスレーブ操作機能も提供します。
EthercatMasterは、EtherCATマスタ部分の唯一のクラスであり、EtherCATファームウェアとの重要な通信ブリッジとして機能します。デュアルシステム通信の側面では、その役割には、通信インターフェイスの初期化、循環的なデータ交換の処理、非循環転送インターフェイスの処理、および割り込みイベントの管理が含まれます。APIの面では、マスタの初期化、マスタの制御、スレーブ情報へのアクセスに関連する機能を提供します。
EtherCATマスタ部分とEtherCATデバイス部分の間の主なクラス関係性は、EtherCATマスタ部分に依存したEtherCATデバイス部分で関連付けされています。EthercatMasterのクラス関係性を次の図に示します:

- EthercatMasterと _EthercatDevice_CommonDriver の間には関連があり、_EthercatDevice_CommonDriver は EthercatMasterに依存します。
- EthercatMaster と EthercatDevice_CiA402 の間には関連があり、EthercatMaster は EthercatDevice_CiA402 に依存します。
EtherCATマスタ設定を参照ください。
このライブラリは、ユーザーの多様なアプリケーション・ニーズを満たすために、ユーザーが選択できる様々なコンフィギュレーション変数を提供します。以下は、このライブラリによって提供されるコンフィギュレーション変数です。
typedef struct { EthercatDcSyncMode DcSyncMode; uint32_t StaticDriftCompensationFrames; uint32_t StateMachineTimeoutI2P; uint32_t StateMachineTimeoutP2S; uint32_t StateMachineTimeoutS2O; uint32_t ScanNetworkTimeout; uint32_t StartMasterTimeout; uint32_t StartDeviceTimeout; uint32_t ErrorDetectWkcMultipleFaultsThreshold; uint32_t ErrorDetectMultipleLostFramesThreshold; uint32_t EnableErrorBusReactionSyncUnitToSafeOp:1, EnableErrorBusReactionSyncUnitToSafeOpAutoRestart:1, IgnoreBiosOverride:1; } EthercatMasterSettings;
DcSyncMode
デフォルト: ECAT_MASTER_SHIFT
DC同期モードでは、DCを持つ最初のスレーブがシステム基準クロックとして機能し、DCで他のスレーブを同期します。ただし、これにはネットワーク上のすべてのスレーブのシステム時間の同期のみであり、EtherCATマスタは含まれません。DC同期モードが有効になっているアプリケーションでは、通常、マスタはスレーブを正確かつ定期的に制御する必要があるため、マスタはネットワーク上のすべてのスレーブとシステム時間を同期する必要もあります。
この同期には 2つの方法があります:
- マスタ・シフト・モード -
ECAT_MASTER_SHIFT
- マスタシステム時間は基準クロックに同期します。
- すべてのDCスレーブは基準クロックに同期します。
- バス・シフト・モード -
ECAT_BUS_SHIFT
- 基準クロックは、マスタシステム時間に同期します。
- すべてのDCスレーブは基準クロックに同期します。
StaticDriftCompensationFrames
デフォルト: 30000
EtherCATマスタは、多くの個別のARMSまたはFRAMEドリフト補償フレームを送信して、基準クロックのシステム時間をすべてのDCスレーブに提供します。
StateMachineTimeoutI2P
デフォルト: 3000 単位:ミリ秒
Init 状態から Pre-Operational状態への移行のタイムアウト時間
StateMachineTimeoutP2S
デフォルト:10000 単位:ミリ秒
Pre-Operational状態からSafe-Operational状態への移行のタイムアウト時間
StateMachineTimeoutS2O
デフォルト:10000 単位:ミリ秒
Safe-Operational状態からOperational状態への移行のタイムアウト時間
ScanNetworkTimeout
デフォルト: 5000 単位:ミリ秒
スキャン・ネットワークのタイムアウト時間。スキャン・ネットワーク操作は、 EthercatMaster::begin()
.で行われます。
StartMasterTimeout
デフォルト:: 3000 単位:ミリ秒
スタートマスタの基本タイムアウト時間、T~base~.
EthercatMaster::start()
内で、ファームウェアは EtherCAT を起動するように要求され、この要求のタイムアウト時間は起動タイムアウト時間 (T~startup~) と呼ばれます。
EtherCATの起動タイムアウト時間は次のように計算されます:
$$ T_{startup} = T_{base} + ( T_{slave} × N_{slaves}) $$
ここで、N~slaves~ はネットワーク上のスレーブ数です。
StartDeviceTimeout
Default: 500; Unit: milliseconds
Timeout per slave for start master, T~slave~.
ErrorDetectWkcMultipleFaultsThreshold
デフォルト: 3
マスタは受信したEtherCATデータグラムのワーキング・カウンタ値をチェックする必要があります。ワーキング・カウンタ値が期待値と一致しない場合は、エラーが検出されます。連続したエラーの数がこの変数を超えると、 ECAT_ERR_WKC_MULTIPLE_FAULTS エラー割り込みがトリガされます。
ErrorDetectMultipleLostFramesThreshold
デフォルト: 3
マスタは受信したEtherCATデータグラムのワーキング・カウンタ値をチェックする必要があります。ワーキング・カウンタ値が期待値と一致しない場合は、エラーが検出されます。連続したエラーの数がこの変数を超えると、 ECAT_ERR_WKC_MULTIPLE_FAULTS エラー割り込みがトリガされます。
EnableErrorBusReactionSyncUnitToSafeOp
デフォルト: 0
この変数を 1 に設定すると、マスタはアプリケーション・コントローラを使用してスレーブの EtherCAT状態を変更し、EtherCATステート・マシン・エミュレーションのみをサポートするスレーブのSync Managerチャネルを無効にします。
EnableErrorBusReactionSyncUnitToSafeOpAutoRestart
デフォルト: 1
このパラメータは、EnableErrorBusReactionSyncUnitToSafeOpが1に設定されている場合にのみ有効になります。このパラメータが 1 に設定されている場合、マスタは ETG.1020 EtherCATプロトコル拡張機能で定義されているマスタ内の同期ユニットの再起動動作に従って同期ユニットを自動的に再起動し、EtherCATステート・マシンをOperational状態に戻します。
IgnoreBiosOverride
デフォルト: 0
QEC-マスタには、BIOS内にいくつかのEtherCATコンフィギュレーション変数があります。この変数を 1に設定すると、BIOS内のEtherCATコンフィギュレーション変数は無効されます。それ以外の場合は無効にはなりません。
2.1.1 初期化関数
EtherCATマスタを起動する前に、初期化する必要があります。このライブラリは、ユーザーの多様なアプリケーション・ニーズを満たすために、ユーザーが選択できる様々なコンフィギュレーション・パラメータを提供します。
2.1.2 コールバック関数

このライブラリは、次の 3 種類のコールバックを提供します:
- (循環コールバック、エラーコールバック、イベントコールバックなど)
循環コールバックの目的は、ユーザーがモーション制御、CNC制御、ロボット制御などの周期的な制御システムを実装できるようにすることです。リアルタイム EtherCATマスタ・コアは、指定されたサイクル時間で EtherCATマスタ・ライブラリへの循環的な割り込みをトリガし、ACK を待機してプロセス・データの同期を確保します。ユーザーが循環コールバックを登録している場合は、周期的な制御を実現するためにそれが呼び出されます。 - エラー・コールバック(Error Callback)
リアルタイム EtherCATマスタコアがエラーを検出すると、エラー割り込みをトリガし、32ビット・エラー・コードを EtherCATマスタライブラリに渡します。ユーザーがエラーコールバックを登録している場合、システムはそのコールバックを呼び出して、ユーザーに特定のエラーを通知します。
エラー・コールバックでサポートされているエラー・コードは次のとおりです:
定義 | コード | 説明 |
ECAT_ERR_WKC_SINGLE_FAULT | 2000001 | ワーキング・カウンタに障害が発生しました |
ECAT_ERR_WKC_MULTIPLE_FAULTS | 2000002 | 複数のワーキング・カウンタに障害が発生しました |
ECAT_ERR_SINGLE_LOST_FRAME | 2000003 | フレームが失われました |
ECAT_ERR_MULTIPLE_LOST_FRAMES | 2000004 | フレームが複数回失われました |
ECAT_ERR_CABLE_BROKEN | 2000007 | ケーブルが切断されました |
ECAT_ERR_WAIT_ACK_TIMEOUT | 2001000 | 循環的な割り込みACKの待機中にファームウェアがタイムアウトしました |
- イベント・コールバック(Event Callback)
リアルタイム EtherCATマスタコアがイベントを検出すると、イベント割り込みをトリガし、32ビット・イベント・コードを EtherCATマスタライブラリに渡します。ユーザーがイベント・コールバックを登録している場合、システムはそのCallBackを呼び出して、特定のイベントをユーザーに通知します。
イベント・コールバックでサポートされているイベント・コードは次のとおりです:
定義 | コード | 説明 |
ECAT_EVT_STATE_CHANGED | 1000001 | マスタのEtherCAT状態が変化しました |
ECAT_EVT_CABLE_RECONNECTED | 1000002 | ケーブルが再接続しました |
- attachCyclicCallback()
- detachCyclicCallback()
- attachErrorCallback()
- detachErrorCallback()
- attachEventCallback()
- detachEventCallback()
- errGetCableBrokenLocation1()
- errGetCableBrokenLocation2()
- evtGetMasterState()
2.1.3 スレーブ情報関数
このライブラリは、ネットワーク上のEtherCATスレーブデバイスに関する情報を取得するための関数を提供します。これには、ネットワーク上のスレーブ数を照会したり、スレーブの製造者ID、製品コード、エイリアスアドレスをシーケンス番号で取得したり、前述の情報を使用してスレーブ番号を逆順に照会することが含まれます。これは、スレーブ・デバイスのタイプを識別し、接続する適切な EtherCATスレーブデバイス・クラスを選択するために使用されます。
- getSlaveCount()
- getVendorID()
- getProductCode()
- getRevisionNumber()
- getSerialNumber()
- getAliasAddress()
- getSlaveNo()
2.1.4 制御関数
EtherCATマスタライブラリが提供する制御関数は、EtherCATネットワークの状態とオペレーションを管理するために不可欠です。これらの関数を使用することで、ユーザーはネットワークを正確に制御し、マスタデバイスとスレーブデバイス間の信頼性の高い同期通信を実現できます。
- start()
- stop()
- update()
- setShiftTime()
- getShiftTime()
- getSystemTime()
- getWorkingCounter()
- getExpectedWorkingCounter()
2.2 EtherCATデバイス
EtherCATデバイス部分は、PDO、CoE、FoEなどの機能を操作できる汎用EtherCATスレーブデバイス・クラスを提供し、CiA402スレーブ汎用クラスも含まれています。
EtherCATデバイス部分とEtherCATマスタ部分の間の主なクラス関係は、EtherCATマスタ部分に応じてEtherCATデバイス部分が関連付けられます。次の図に示すように、 _EthercatDevice_CommonDriverとEthercatMasterの間には関連性があります。

- EthercatMasterと_EthercatDevice_CommonDriverの間には、 EthercatMasterに依存する_EthercatDevice_CommonDriverにより、関連性があります。
- 他のすべてのEtherCATスレーブデバイス・クラスは、_EthercatDevice_CommonDriverから継承します。
警告: このクラスを使用してオブジェクトを宣言することは禁止です。
2.2.1 _EthercatDevice_CommonDriver
_EthercatDevice_CommonDriver は、スレーブ情報にアクセスするための関数だけでなく、PDO、SII、CoE、FoE、DCなど、様々なEtherCAT機能へのアクセス方法も提供する抽象クラスです。すべてのEtherCATスレーブ・クラスはこれを継承します。
_EthercatDevice_CommonDriverのクラス関係性を次の図に示します:

- EthercatMasterと_EthercatDevice_CommonDriverの間には、 EthercatMasterに依存する_EthercatDevice_CommonDriverにより、関連性があります。
- 他のすべてのEtherCATスレーブデバイス・クラスは、_EthercatDevice_CommonDriverから継承します。
警告: このクラスを使用してオブジェクトを宣言することは禁止です。
情報関数
このライブラリは、ネットワーク上のEtherCATスレーブデバイスに関する情報を取得するための関数を提供します。これには、デバイス識別に使用される製造者ID、製品コード、エイリアスアドレス、デバイス名などの重要な詳細項目が含まれます。さらに、EtherCATスレーブデバイスが CoE、FoE、DC などの特定の機能をサポートしているかどうかに関する情報も提供します。このスレーブ情報により、ユーザーはネットワーク内のデバイスの特性と機能を理解し、対応するコンフィギュレーションおよびタスク制御を実行できます。
- getVendorID()
- getProductCode()
- getRevisionNumber()
- getSerialNumber()
- getAliasAddress()
- getSlaveNo()
- getDeviceName()
- getMailboxProtocol()
- getCoEDetails()
- getFoEDetails()
- getEoEDetails()
- getSoEChannels()
- isSupportDC()
分散クロック(DC)関数
分散クロック (DC) は、EtherCATスレーブコントローラ (ESC) 内の重要な機能ユニットです。EtherCATネットワークに時間同期メカニズムを実装し、すべてのスレーブデバイスが統一された時間基準に従ってクロックに同期し、システム全体で時間の一貫性を確保する役割を担います。
システム同期では、すべてのスレーブが 1つの基準クロックに同期します。通常、1つのセグメント内でマスタの後にある分散クロック機能を備えた最初のESCが基準時間 (システム時間) を保持します。このシステム時間は、マスタ及び他のデバイスのDCスレーブ・クロックを同期するための基準クロックとして使用されます。クロック同期では、伝播遅延、ローカルクロック源のドリフト、およびローカル・クロック・オフセットが考慮されます。
ESCは、ローカルアプリケーションをEtherCATシステム時間に同期させるためのSyncSignalを生成できます。SyncSignalは、直接 (たとえば、割り込みとして) 使用することも、デジタル出力の更新/デジタル入力のサンプリングに使用することもできます。さらに、LatchSignalに EtherCATシステム時間を基準としたタイム・スタンプを付けることができます。

The DC unit supports the generation of a base SyncSignal SYNC0 and a dependent SyncSignal SYNC1. The second SyncSignal (SYNC1) depends on SYNC0, it can be enerated with a predefined delay after SYNC0 pulses.
SYNC1サイクル時間が SYNC0サイクル時間よりも長い場合、次のように生成されます:
循環オペレーションの開始時間に達すると、SYNC0パルスが生成されます。SYNC1パルスは、SYNC0パルスから SYNC1サイクル時間の遅延後に生成されます。次のSYNC1パルスは、次の SYNC0パルスが生成され、そしてSYNC1サイクル時間が経過したときに生成されます。
次の図に、いくつかのコンフィギュレーション例を示します:

詳細な情報については、 ESC Hardware Data Sheet Section I.を参照してください。
プロセス・データ・オブジェクト(PDO)関数
プロセスデータは、EtherCATネットワーク内のマスタとスレーブ間で交換されるリアルタイム通信データを指します。このデータには、制御、監視、および通信目的に使用される情報が含まれます。EtherCATマスタは、高度な同期と低遅延を保証し、すべてのスレーブを制御および監視するプロセス・データを周期的に送信します。
EtherCATスレーブコントローラ (ESC)のフィールドバス・メモリ管理ユニット (FMMU) は、デュアル・ポート・メモリを論理アドレスにマッピングできます。すべてのスレーブノードは、 EtherCATマスタによって送信されたEtherCATフレームをチェックし、プロセスデータの論理アドレスと FMMUで設定されたアドレスを比較します。一致が見つかった場合、出力プロセスデータはデュアル・ポート・メモリに転送され、入力プロセスデータがEtherCATフレームに挿入されます。
総体的に、プロセスデータは、EtherCATテクノロジの重要な部分であり、ロボット制御、CNC制御、オートメーション制御、その他の分野のリアルタイム・アプリケーションに適しています。
- pdoBitWrite()
- pdoBitRead()
- pdoGetOutputBuffer()
- pdoGetInputBuffer()
- pdoWrite()
- pdoWrite8()
- pdoWrite16()
- pdoWrite32()
- pdoWrite64()
- pdoRead()
- pdoRead8()
- pdoRead16()
- pdoRead32()
- pdoRead64()
CANopen over EtherCAT (CoE) 関数
CANopenは、コントローラ・エリア・ネットワーク (CAN) バスに基づく高度な通信プロトコルで、産業用アプリケーションの制御システムとデバイス間の通信に一般的に使用されます。 これにはデバイス間のデータ交換、構成、制御を容易にするために、一連の通信オブジェクト、データ型、およびネットワーク管理機能を定義します。
CANopenプロトコルには次の側面が含まれます:
- オブジェクト・ディクショナリ
デバイス間で交換されるすべてのデータ・オブジェクトと媒介変数を定義します。オブジェクト・ディクショナリには、変数、媒介変数、イベント、関数などの様々なタイプのオブジェクトが含まれます。 - PDO (プロセス・データ・オブジェクト)
リアルタイムのデータ転送に使用されます。 PDOを使用すると、デバイスは、固定された、またはイベント・トリガの方法で相互にデータを転送できるようになり、リアルタイム制御とデータ交換が可能になります。 - SDO (サービス・データ・オブジェクト)
デバイスの変数の設定と管理に使用されます。 SDOは、読み取り、書き込み、変数設定の機能を提供し、デバイスが設定情報を動的に交換できるようにします。

CoE (CAN application over EtherCAT )は、 EtherCATネットワークに基づくCANopenプロトコルです。これにより、 EtherCATネットワーク上でCANopenプロトコルを使用した通信が可能になります。オブジェクト・ディクショナリには、変数、アプリケーションデータ、およびプロセス・データ・インターフェイスとアプリケーションデータ間のマッピング情報 (PDOマッピング) が含まれます。そのエントリには、サービス・データ・オブジェクト (SDO) を介してアクセスできます。 SDOサービスは、主に2種類のコマンドで構成されています。SDOコマンドは、オブジェクトディクショナリに格納されているオブジェクトにアクセスするために使用され、SDO情報コマンドは、これらのオブジェクトの詳細を取得するために使用されます。
SDOコマンド
- sdoDownload()
- sdoDownload8()
- sdoDownload16()
- sdoDownload32()
- sdoDownload64()
- sdoUpload()
- sdoUpload8()
- sdoUpload16()
- sdoUpload32()
- sdoUpload64()
SDO情報コマンド
File over EtherCAT (FoE) 関数
File access over EtherCAT (FoE) は、EtherCATネットワーク経由でファイル転送機能を有効にする EtherCATのプロトコル拡張です。EtherCATスレーブデバイスにファームウェアやその他のファイルをダウンロードしたり、EtherCATスレーブデバイスからファームウェアやその他のファイルをアップロードしたりするための標準的な方法です。

SII EEPROM関数
下記の API はまだ開発中であり、使用は推奨されません。
EtherCATスレーブ・コントローラは、必須のNVRAM (通常は I²Cインターフェイスを備えたシリアルEEPROM) を使用して、EtherCATスレーブ情報 (ESI) を保存します。この情報には、製造者 ID、製品コード、メールボックス・コンフィギュレーション、FMMU、PDOなどが含まれます。ESCに応じて、1 Kビット から最大 4 MビットまでのEEPROMサイズがサポートされます。
ESCコンフィギュレーション領域 (EEPROMワード・アドレス0~7) は、電源投入またはリセット後に ESCによって自動的に読み込まれます。PDIコンフィギュレーション、DC設定、およびコンフィギュレーションされたステーション・エイリアスが含まれます。 ESCコンフィギュレーション・データの一貫性は、チェックサムによって確保されます。詳細については、ESC Hardware Data Sheet Section I.を参照ください
2.2.2 EthercatDevice_Generic
EthercatDevice_Genericは、スレーブ情報へのアクセス、PDO、CoE、FoE、DCなどを含む、すべてのEtherCATスレーブの制御に使用できる汎用EtherCATスレーブ・クラスです。
EthercatDevice_Genericのクラス関係を次の図に示します:

- 関係性 : EthercatDevice_Generic は、_EthercatDevice_CommonDriverから継承します。
- 基本クラス:_EthercatDevice_CommonDriver
初期化関数
EthercatDevice_Genericクラスの初期化に関連した関数。
2.3 QECシリーズ・デバイス
QECシリーズ・デバイス部分では、ICOP社のQECシリーズ・スレーブ・デバイス専用の関数を提供し、ユーザーがより使いやすく、簡潔な方法でコード化できるようにします。
QECシリーズ・デバイス部分とEtherCATデバイス部分の間の主なクラス関係は関連付けされており、QECシリーズ・デバイス部分はEtherCATデバイス部分に依存しています。以下の図に示すように、_ EthercatDevice_DmpCommonDriverと_ EthercatDevice_CommonDriver間に関連した関係があります。

クラス:
- _EthercatDevice_DmpCommonDriveから継承します。
- EthercatDevice_DmpDIQ_Generic
- EthercatDevice_DmpAIQ_Generic
- EthercatDevice_DmpHID_Generic
- EthercatDevice_DmpLCD_Generic
- EthercatDevice_DmpEM_Generic
- EthercatDevice_DmpStepper_Generic
2.3.1 _EthercatDevice_DmpCommonDriver
_EthercatDevice_DmpCommonDriverは、ICOP社によって開発されたEtherCATスレーブ特定機能専用へのアクセス機能を提供する抽象クラスです。これらの機能には、システム監視 (温度、電圧、電流)、注文情報、MTBF などが含まれます。
_EthercatDevice_DmpCommonDriverのクラス関係を次の図に示します:

- _EthercatDevice_DmpCommonDriverは _EthercatDevice_CommonDriver から継承します。
警告: このクラスを使用してオブジェクトを宣言することは禁止です。
システム監視関数
MCUを搭載したQECシリーズ EtherCATスレーブデバイスはすべて、システム温度、システム電圧、システム電流、周辺電圧、周辺電流のシステム監視情報を取得するためのCoEオブジェクトを提供します。したがって、このライブラリはシステム監視情報を取得するための関数を提供し、ユーザーはシステムを迅速に監視し、障害の兆候がないか評価できます。
- getSystemTemperature()
- getSystemPowerVoltage()
- getSystemPowerCurrent()
- getPeripheralPowerVoltage()
- getPeripheralPowerCurrent()
- tryToGetSystemTemperature()
- tryToGetSystemPowerVoltage()
- tryToGetSystemPowerCurrent()
- tryToGetPeripheralPowerVoltage()
- tryToGetPeripheralPowerCurrent()
MTBF関数
MTBF は、平均故障間隔 (Mean Time Between Failures) の略です。これは、システムまたはコンポーネントの故障間隔の平均時間を測定する信頼性の指標です。これは、動作時間の合計をその時間内に発生した故障の数で割ることによって計算されます。その結果は、システムまたはコンポーネントの予想耐用年数を見積もるために使用できる平均値です。MTBFは、システムおよびコンポーネントの信頼性を追跡し、潜在的な設計上の欠陥や製造上の欠陥を特定するために役立つ指標です。また、予防保守スケジュールを決定するためにも使用できます。
MCUを搭載したQECシリーズ EtherCATスレーブデバイスはすべて、MTBF関連情報を取得するためのCoEオブジェクトを提供します。そのため、このライブラリはこれらのMTBF関連情報を取得するための関数を提供し、ユーザーまたはユーザーがそれをメーカーに提供して、デバイスの寿命と故障を評価および判断できるようにします。
注文情報関数
QECシリーズのEtherCATスレーブデバイスは、すべてMCUを搭載しており、出荷前にデバイスに書き込まれた顧客注文関連情報を取得するためのCoEオブジェクトを提供します。したがって、このライブラリは、必要に応じてこれらの顧客注文情報を取得するための機能を提供し、問い合わせを容易にします。
2.3.2 EthercatDevice_DmpDIQ_Generic
EthercatDevice_DmpDIQ_Generic は、ICOP社がデジタル I/O EtherCATスレーブ・モジュール用に特別に開発したEtherCATスレーブ・クラスです。デジタル入力、デジタル出力、その他の機能用のAPIを提供します。
2.3.3 EthercatDevice_DmpAIQ_Generic
EthercatDevice_DmpAIQ_Genericは、アナログ I/O EtherCATスレーブ・モジュール用にICOP社により特別に開発されたEtherCATスレーブ・クラスです。アナログ入力、アナログ出力、およびその他の機能用のAPI を提供します。
2.3.4 EthercatDevice_DmpHID_Generic
EthercatDevice_DmpHID_Genericは、QEC EtherCATスレーブHIDモジュール用にICOP社によって特別に開発された EtherCATスレーブクラスです。RS-232/RS-485、4x4キーパッド、16x2 LCM、手動パルス ジェネレーター (MPG) 、そしてブザー機能があります。
2.3.5 EthercatDevice_DmpLCD_Generic
EthercatDevice_DmpLCD_Generic は、LCD EtherCATスレーブ・モジュール用にICOP社によって特別に開発されたEtherCATスレーブ・クラスです。さまざまな描画 APIを提供します。
2.3.6 EthercatDevice_DmpStepper_Generic
EthercatDevice_DmpStepper_Generic は、DM&P グループの 3 軸ステッピング モーター コントローラー EtherCAT スレーブ モジュール用に開発された EtherCAT スレーブ クラスです。このモジュールは、モーター ドライバー、エンコーダー入力、およびその他の CNC 関連機能を備えています。モーター制御セクションでは、CiA 402 モードだけでなく、3 軸同期 G コード モードもサポートしています。
3. 例
3.1 スレーブ情報
#include "Ethercat.h" EthercatMaster master; void setup(void) { uint16_t slavecount, i; Serial.begin(115200); while (!Serial); master.begin(); slavecount = master.getSlaveCount(); for (i = 0; i < slavecount; i++) { Serial.print("Slave"); Serial.print(i); Serial.print(" => Vendor ID: 0x"); Serial.print(master.getVendorID(i), HEX); Serial.print(", Product Code: 0x"); Serial.println(master.getProductCode(i), HEX); } } void loop() { // ... }
3.2 PDO読み込み/書き込み
#include "Ethercat.h" EthercatMaster master; EthercatDevice_Generic slave; void setup() { Serial.begin(115200); master.begin(); slave.attach(0, master); master.start(); } void loop() { /* Write value of byte offset 0 of slave's output process data. */ slave.pdoWrite8(0, 0xFF); /* Read value of byte offset 0 of slave's input process data. */ Serial.println(slave.pdoRead8(0), HEX); delay(100); }
3.3 SDOアップロード/ダウンロード
#include "Ethercat.h" EthercatMaster master; EthercatDevice_Generic slave; void setup() { Serial.begin(115200); while (!Serial); master.begin(); slave.attach(0, master); /* Write 0x08 to the object with index 0x6060. */ slave.sdoDownload8(0x6060, 0x00, 0x08); /* Read value from the object with index 0x6061. */ Serial.prinln(slave.sdoUpload8(0x6061, 0x00)); master.start(); } void loop() { // ... }
3.4 オブジェクト記述情報
#include <Ethercat.h> EthercatMaster master; EthercatDevice_Generic slave; uint16_t DataType; uint8_t MaxSubindex, ObjectCode; char ObjectName[64]; void setup() { Serial.begin(115200); master.begin(); slave.attach(0, master); slave.getObjectDescription(0x1C12, DataType, MaxSubindex, ObjectCode, ObjectName, sizeof(ObjectName)); Serial.print("Data Type : "); Serial.print(DataType, HEX); Serial.println("h"); Serial.print("Object Code : "); Serial.print(ObjectCode, HEX); Serial.println("h"); Serial.print("Max Subindex : "); Serial.println(MaxSubindex); Serial.print("Object Name : "); Serial.println(ObjectName); } void loop() { // ... }
3.5 循環コールバック
#include "Ethercat.h" EthercatMaster master; EthercatDevice_Generic slave; void CyclicCallback() { // put your cyclic Callback function here. } void setup() { master.begin(); slave.attach(0, master); slave.setDc(1000000); // 1000000 ns = 1 ms master.attachCyclicCallback(CyclicCallback); master.start(1000000, ECAT_SYNC); // 1000000 ns = 1 ms } void loop() { // ... }
3.6 QECスレーブ DIOシリーズ
#include "Ethercat.h" EthercatMaster master; EthercatDevice_QECR00DF0H slave; void setup() { Serial.begin(115200); master.begin(); slave.attach(0, master); master.start(); } void loop() { Serial.println(slave.digitalReadAll()); delay(4000); }
3.7 QECスレーブ HIDシリーズ
#include "Ethercat.h" // Include the EtherCAT Library EthercatMaster EcatMaster; // Create an EtherCAT Master Object EthercatDevice_QECR11HU9S Slave1; // Create an EtherCAT Slave Object for QEC R11HU9S int incomingByte = 0; // Variable for incoming serial data char read_ch; // Variable for read serial data (char) void setup() { Serial.begin(115200); // Initialize serial communication at 115200 baud rate // Initialize the EtherCAT Master. If successful, all slaves enter PRE OPERATIONAL state EcatMaster.begin(); // Attach QECR11HU9S slave device to the EtherCAT Master at position 0 Slave1.attach(0, EcatMaster); // Start the EtherCAT Master. If successful, all slaves enter OPERATIONAL state // FreenRun Mode, and the parameter 1000000 sets the cycle time in nanoseconds EcatMaster.start(1000000, ECAT_FREERUN); // Configure UART settings for two COM ports of the slave device Slave1.uartSetBaud(COM1, 115200); // Set baud rate for COM1 Slave1.uartSetFormat(COM1, SERIAL_8N1); // Set data format for COM1 Slave1.uartSetBaud(COM2, 115200); // Set baud rate for COM2 Slave1.uartSetFormat(COM2, SERIAL_8N1); // Set data format for COM2 } void loop() { // send data only when you receive data: if (Serial.available() > 0) { // read the incoming byte: incomingByte = Serial.read(); // Send the byte via UART COM1 of the slave device Slave1.uartWrite(COM1, incomingByte); while (Slave1.uartQueryRxQueue(COM2) <1) Slave1.update();// Because the function is non-blocking, so we need to call update(); by ourselves // Read the received character from slave's UART COM2 if((read_ch = (char)Slave1.uartRead(COM2)) > 0) { // Print the received data to the serial monitor Serial.print("COM2 receive: "); Serial.println(read_ch); } } }
3.8 QECスレーブ ステッピングモータ
#include "Ethercat.h" // Include the EtherCAT Library EthercatMaster EcatMaster; // Create an EtherCAT Master Object EthercatDevice_QECR11MP3S Slave1; // Create an EtherCAT Slave Objects for QECR11MP3S // Callback function for cyclic updates void myCallback() { Slave1.update(); // Update the Ethercat slave } void setup() { Serial.begin(115200); // Initialize the EtherCAT Master. If successful, all slaves enter PRE OPERATIONAL state EcatMaster.begin(); // Attach the QECR11MP3S to the EtherCAT Master at position 0 Slave1.attach(0, EcatMaster); // Set a cyclic callback for the Ethercat Master EcatMaster.attachCyclicCallback(myCallback); // Start the EtherCAT Master. If successful, all slaves enter OPERATIONAL state // Sync Mode, and the parameter 1000000 sets the cycle time in nanoseconds EcatMaster.start(1000000, ECAT_SYNC); // Enable motor (G-code) to prepare the device for movement commands Slave1.machineServoOn(); } void loop() { // Move to position X=100 at speed F=1000. This command moves the machine axis to position 100 // at a feed rate of 1000. The operation will take some time to complete. Slave1.machineGcode("G1 X100 F1000"); delay(6000); // Wait for the command to be processed // Move back to position X=0 at speed F=10000. This command returns the machine axis to the starting position // at a faster feed rate of 10000. This operation is quicker due to the higher feed rate. Slave1.machineGcode("G1 X0 F10000"); delay(1000); // Wait for the command to be processed }
付録
A.1 エラーリスト
ほとんどの関数では、返される値が0未満の場合、エラーであることを示し、その値はエラー・コードを表します。エラー・コードがある場合は、エラーの原因と修正処置を下記で確認できます。
定義 | コード |
ECAT_SUCCESS | 0 |
ECAT_ERR_MODULE_INIT_FAIL | -100 |
ECAT_ERR_MODULE_GET_VERSION_FAIL | -101 |
ECAT_ERR_MODULE_VERSION_MISMATCH | -102 |
ECAT_ERR_MODULE_GENERIC_TRANSFER_INIT_FAIL | -103 |
ECAT_ERR_MASTER_DOWNLOAD_SETTINGS_FAIL | -200 |
ECAT_ERR_MASTER_SET_DEVICE_SETTINGS_FAIL | -201 |
ECAT_ERR_MASTER_GET_GROUP_INFO_FAIL | -202 |
ECAT_ERR_MASTER_GET_MASTER_INFO_FAIL | -203 |
ECAT_ERR_MASTER_GET_DEVICE_INFO_FAIL | -204 |
ECAT_ERR_MASTER_SET_GROUP_SETTINGS_FAIL | -205 |
ECAT_ERR_MASTER_MAPPING_INIT_FAIL | -206 |
ECAT_ERR_MASTER_INTERRUPT_INIT_FAIL | -207 |
ECAT_ERR_MASTER_ACTIVE_FAIL | -208 |
ECAT_ERR_MASTER_ENI_INITCMDS_FAIL | -209 |
ECAT_ERR_MASTER_NO_DEVICE | -210 |
ECAT_ERR_MASTER_ACYCLIC_INIT_FAIL | -300 |
ECAT_ERR_MASTER_ACYCLIC_REQUEST_FAIL | -301 |
ECAT_ERR_MASTER_ACYCLIC_BUSY | -302 |
ECAT_ERR_MASTER_ACYCLIC_TIMEOUT | -303 |
ECAT_ERR_MASTER_ACYCLIC_ERROR | -304 |
ECAT_ERR_MASTER_ACYCLIC_WRONG_STATUS | -405 |
ECAT_ERR_MASTER_GENERIC_SEND_FAIL | -400 |
ECAT_ERR_MASTER_GENERIC_RECV_FAIL | -401 |
ECAT_ERR_MASTER_NOT_BEGIN | -1000 |
ECAT_ERR_MASTER_WRONG_BUFFER_SIZE | -1001 |
ECAT_ERR_MASTER_REDUNDANCY_NO_DC | -1002 |
ECAT_ERR_MASTER_MEMORY_ALLOCATION_FAIL | -1003 |
ECAT_ERR_MASTER_OSLAYER_INIT_FAIL | -1004 |
ECAT_ERR_MASTER_NIC_INIT_FAIL | -1005 |
ECAT_ERR_MASTER_BASE_INIT_FAIL | -1006 |
ECAT_ERR_MASTER_CIA402_INIT_FAIL | -1007 |
ECAT_ERR_MASTER_SETUP_PDO_FAIL | -1008 |
ECAT_ERR_MASTER_SCAN_NETWORK_FAIL | -1009 |
ECAT_ERR_MASTER_START_MASTER_FAIL | -1010 |
ECAT_ERR_MASTER_CYCLETIME_TOO_SMALL | -1011 |
ECAT_ERR_MASTER_DUMP_OUTPUT_PDO_FAIL | -1012 |
ECAT_ERR_MASTER_CONFIG_DEVICE_FAIL | -1013 |
ECAT_ERR_MASTER_CONFIG_MAPPING_FAIL | -1014 |
ECAT_ERR_MASTER_WAIT_BUS_SYNC_TIMEOUT | -1015 |
ECAT_ERR_MASTER_WAIT_MASTER_SYNC_TIMEOUT | -1016 |
ECAT_ERR_MASTER_CYCLIC_START_FAIL | -1017 |
ECAT_ERR_MASTER_WRONG_BUFFER_POINTER | -1018 |
ECAT_ERR_MASTER_ENI_INIT_FAIL | -1050 |
ECAT_ERR_MASTER_ENI_MISMATCH | -1051 |
ECAT_ERR_MASTER_STOPPED | -1100 |
ECAT_ERR_MASTER_STARTED | -1101 |
ECAT_ERR_MASTER_NOT_IN_PREOP | -1102 |
ECAT_ERR_MASTER_NOT_IN_SAFEOP | -1103 |
ECAT_ERR_MASTER_NOT_IN_OP | -1104 |
ECAT_ERR_MASTER_II_TRANSITION_FAIL | -1200 |
ECAT_ERR_MASTER_IP_TRANSITION_FAIL | -1201 |
ECAT_ERR_MASTER_PS_TRANSITION_FAIL | -1202 |
ECAT_ERR_MASTER_SO_TRANSITION_FAIL | -1203 |
ECAT_ERR_DEVICE_NOT_EXIST | -2000 |
ECAT_ERR_DEVICE_NOT_ATTACH | -2001 |
ECAT_ERR_DEVICE_NO_MAILBOX | -2002 |
ECAT_ERR_DEVICE_NO_DC | -2003 |
ECAT_ERR_DEVICE_WRONG_INPUT | -2004 |
ECAT_ERR_DEVICE_MEMORY_ALLOCATION_FAIL | -2005 |
ECAT_ERR_DEVICE_VENDOR_ID_MISMATCH | -2006 |
ECAT_ERR_DEVICE_PRODUCT_CODE_MISMATCH | -2007 |
ECAT_ERR_DEVICE_NO_SUCH_FUNCTION | -2008 |
ECAT_ERR_DEVICE_FUNCTION_NOT_INIT | -2009 |
ECAT_ERR_DEVICE_BUSY | -2010 |
ECAT_ERR_DEVICE_TIMEOUT | -2011 |
ECAT_ERR_DEVICE_NO_DATA | -2012 |
ECAT_ERR_DEVICE_SII_READ_FAIL | -2100 |
ECAT_ERR_DEVICE_SII_WRITE_FAIL | -2101 |
ECAT_ERR_DEVICE_PDO_NOT_EXIST | -2200 |
ECAT_ERR_DEVICE_PDO_OUT_OF_RANGE | -2201 |
ECAT_ERR_DEVICE_FOE_NOT_SUPPORT | -2300 |
ECAT_ERR_DEVICE_FOE_REQUEST_FAIL | -2310 |
ECAT_ERR_DEVICE_FOE_TIMEOUT | -2311 |
ECAT_ERR_DEVICE_FOE_ERROR | -2312 |
ECAT_ERR_DEVICE_FOE_BUFFER_TOO_SMALL | -2313 |
ECAT_ERR_DEVICE_FOE_READ_FAIL | -2314 |
ECAT_ERR_DEVICE_FOE_WRITE_FAIL | -2315 |
ECAT_ERR_DEVICE_COE_SDO_NOT_SUPPORT | -2400 |
ECAT_ERR_DEVICE_COE_SDO_INFO_NOT_SUPPORT | -2401 |
ECAT_ERR_DEVICE_COE_BUSY | -2410 |
ECAT_ERR_DEVICE_COE_REQUEST_FAIL | -2411 |
ECAT_ERR_DEVICE_COE_TIMEOUT | -2412 |
ECAT_ERR_DEVICE_COE_ERROR | -2413 |
ECAT_ERR_DEVICE_CIA402_NOT_EXIST | -2500 |
ECAT_ERR_DEVICE_CIA402_ADD_FAIL | -2501 |
ECAT_ERR_DEVICE_CIA402_TYPE_MISMATCH | -2502 |
ECAT_ERR_DEVICE_CIA402_NO_MODE_SUPPORT | -2503 |
ECAT_ERR_DEVICE_CIA402_WRONG_MODE | -2504 |
ECAT_ERR_DEVICE_CIA402_MODE_NOT_SUPPORT | -2505 |
ECAT_ERR_DEVICE_CIA402_CHANGE_WRONG_STATE | -2506 |
ECAT_ERR_DEVICE_CIA402_WRITE_OBJECT_FAIL | -2507 |
ECAT_ERR_DEVICE_CIA402_NO_SUCH_TOUCH_PROBE | -2580 |
ECAT_ERR_DEVICE_CIA402_NO_SUCH_TOUCH_PROBE_SOURCE | -2581 |
ECAT_ERR_DEVICE_EOE_NOT_SUPPORT | -2600 |
ECAT_ERR_DEVICE_EOE_NO_SUCH_PORT | -2601 |
ECAT_ERR_DEVICE_EOE_TOO_MUCH_CONTENT | -2602 |
ECAT_ERR_DEVICE_EOE_BUSY | -2610 |
ECAT_ERR_DEVICE_EOE_REQUEST_FAIL | -2611 |
ECAT_ERR_DEVICE_EOE_TIMEOUT | -2612 |
ECAT_ERR_GROUP_WRONG_INPUT | -3000 |
ECAT_ERR_GROUP_NOT_ATTACH | -3001 |
A.2 エラーの説明と修正処置
エラーコードの詳細と修正処置
A.3 エラー・コールバック・コード
エラー・コールバック・コードのリスト:
ECAT_ERR_WKC_SINGLE_FAULT | ワーキング・カウンタ障害 | 2000001 |
ECAT_ERR_WKC_MULTIPLE_FAULTS | ワーキング・カウンタの複数の障害 | 2000002 |
ECAT_ERR_SINGLE_LOST_FRAME | 単一のフレームが失われました | 2000003 |
ECAT_ERR_MULTIPLE_LOST_FRAMES | 複数のフレームが失われました | 2000004 |
ECAT_ERR_LOST_SLAVE | スレーブが失われました | 2000005 |
ECAT_ERR_STATE_MISMATCH | 状態の不一致です | 2000006 |
ECAT_ERR_CABLE_BROKEN | ケーブルの断線です | 2000007 |
ECAT_ERR_WAIT_ACK_TIMEOUT | ACKタイムアウト待ちです | 2001000 |
A.4 イベント・コールバック・コード
イベント・コールバック・コードのリスト:
ECAT_EVT_STATE_CHANGED | 状態が変更されました | 1000001 |
ECAT_EVT_CABLE_RECONNECTED | ケーブルを再接続しました | 1000002 |
A.5 SDOアボート・コード
ETG.1000.6に定義されたCoE SDOアボート・コード:
Value | Meaning |
0x05030000 | トグル・ビットは変更されていません |
0x05040000 | SDOプロトコルのタイムアウト |
0x05040001 | クライアント/サーバーのコマンドの指定子が無効であるか、不明です。 |
0x05040005 | メモリ不足です |
0x06010000 | オブジェクトへのアクセスがサポートされていません |
0x06010001 | 書き込み専用オブジェクトへ読み取りを試みます |
0x06010002 | 読み取り専用オブジェクトに書き込みを試みます |
0x06010003 | サブインデックスに書き込むことはできません。書き込みアクセスの場合はSI0を0にする必要があります |
0x06010004 | SDO完全アクセスは、ENUMオブジェクト・タイプのような可変長のオブジェクトではサポートされていません |
0x06010005 | オブジェクトの長さがメールボックスのサイズを超えています |
0x06010006 | オブジェクトがRxPDOにマップされ、SDOダウンロードがブロックされました |
0x06020000 | オブジェクトがオブジェクト・ディレクトリに存在しません |
0x06040041 | オブジェクトは PDO にマッピングできません |
0x06040042 | マップされるオブジェクトの数と長さは PDOの長さを超えます |
0x06040043 | 一般的な媒介変数の非互換性理由 |
0x06040047 | デバイスの一般的な内部非互換性 |
0x06060000 | ハードウェア・エラーによりアクセスに失敗しました |
0x06070010 | データ型が一致せず、サービス変数の長さが一致しません |
0x06070012 | データ型が一致せず、サービス変数の長さが長すぎます |
0x06070013 | データ型が一致せず、サービス変数の長さが短すぎます |
0x06090011 | サブインデックスが存在しません |
0x06090030 | 媒介変数の値の範囲を超えました(書き込みアクセスの場合のみ) |
0x06090031 | 書き込まれた変数の値が高すぎます |
0x06090032 | 書き込まれた変数の値が低すぎます |
0x06090036 | 最大値が最小値より小さいです |
0x08000000 | 一般的なエラーです |
0x08000020 | データをアプリケーションに転送または保存することはできません。 注: これは、理由の詳細が特定できない場合の一般的な中止コードです。より詳細な中止コード(0x08000021、0x08000022)のいずれかを使用することをお勧めします。 |
0x08000021 | ローカル制御のため、データをアプリケーションに転送または保存することはできません。 注: 「ローカル制御」とは、アプリケーション固有の理由を意味します。 ESM固有の制御を意味するものではありません。 |
0x08000022 | 現在のデバイスの状態のため、データをアプリケーションに転送または保存できません。 注: 「デバイスの状態」とは、ESMの状態を意味します。 |
0x08000023 | オブジェクト・ディクショナリの動的生成が失敗するか、オブジェクト・ディクショナリが存在しません |
Data Typeを参照ください
ETG.1000.6で定義されている基本データ型:
インデックス (hex) | オブジェクト・タイプ | 名前 |
0001 | DEFTYPE | BOOLEAN |
0002 | DEFTYPE | INTEGER8 |
0003 | DEFTYPE | INTEGER16 |
0004 | DEFTYPE | INTEGER32 |
0005 | DEFTYPE | UNSIGNED8 |
0006 | DEFTYPE | UNSIGNED16 |
0007 | DEFTYPE | UNSIGNED32 |
0008 | DEFTYPE | REAL32 |
0009 | DEFTYPE | VISIBLE_STRING |
000A | DEFTYPE | OCTET_STRING |
000B | DEFTYPE | UNICODE_STRING |
000C | DEFTYPE | TIME_OF_DAY |
000D | DEFTYPE | TIME_DIFFERENCE |
000F | DEFTYPE | DOMAIN |
0010 | DEFTYPE | INTEGER24 |
0011 | DEFTYPE | REAL64 |
0012 | DEFTYPE | INTEGER40 |
0013 | DEFTYPE | INTEGER48 |
0014 | DEFTYPE | INTEGER56 |
0015 | DEFTYPE | INTEGER64 |
0016 | DEFTYPE | UNSIGNED24 |
0018 | DEFTYPE | UNSIGNED40 |
0019 | DEFTYPE | UNSIGNED48 |
001A | DEFTYPE | UNSIGNED56 |
001B | DEFTYPE | UNSIGNED64 |
001D | DEFTYPE | GUID |
001E | DEFTYPE | BYTE |
002D | DEFTYPE | BITARR8 |
002E | DEFTYPE | BITARR16 |
002F | DEFTYPE | BITARR32 |
A.7 EtherCATネットワーク情報
EtherCAT ネットワーク情報(ENI)には、EtherCATネットワークを構成するために必要な設定が含まれています。XMLベースのファイルには、マスタに関する一般情報と、マスタに接続されているすべてのスレーブ・デバイスのコンフィギュレーションが含まれています。EtherCATコンフィギュレーション・ツールは、ESIファイルを読み取るか、またはネットワークですべてのスレーブをオンライン・スキャンし、その後、ユーザーはPDOマッピングや DCの有効化などの関連するEtherCAT 設定を構成し、ENIファイルをエクスポートできます。

EtherCATテクノロジー・グループでは、EtherCATマスタ・ソフトウェアはネットワーク・コンフィギュレーション・セクションで少なくとも、オンライン・スキャンまたは ENIの読み取りのいずれかをサポートする必要があると規定しています。ただし、このライブラリは両方をサポートしています。ENI の読み取りの場合、現在、このライブラリはネットワーク・コンフィギュレーションのために ENIファイルから部分的な情報のみを抽出します。
抽出された情報には次のものが含まれます:
EtherCATConfig : Config : Slave : Info
- 使用要素
- VendorId
- ProductCode
- 属性
- 識別 : 値
- 目的
ネットワーク上のEtherCATスレーブがENIファイルで指定されたスレーブと一致するかどうかを確認するために使用されます。チェック・ルールは次のとおりです:- ENIファイル内のスレーブの数がネットワーク上のスレーブの数と一致しているかどうかを確認します。
- ENIファイル内の識別:値 属性を持つスレーブについては、エイリアス・アドレスと 識別: 値 属性、および製造者IDと製品コードが一致するスレーブがネットワーク上に存在するかどうかを確認します。そのスレーブが存在する場合、一致を確認したことを示します。
- 一致に失敗した識別:値 属性を持つスレーブ、またはこの属性を持たないスレーブについては、ネットワーク上で同じシーケンス番号を持つスレーブの製造者IDと製品コードが一致するかどうかを確認します。
EtherCATConfig : Config : Slave : Mailbox
- 使用要素
- Send : MailboxSendInfoType : Start
- Recv : MailboxRecvInfoType : Start
- 目的
EtherCATスレーブのメールボックスの物理開始アドレスを構成するために使用されます。
EtherCATConfig : Config : Slave : Mailbox : CoE
- 使用要素
- InitCmds : InitCmd : Index
- InitCmds : InitCmd : SubIndex
- InitCmds : InitCmd : Data
- InitCmds : InitCmd : Timeout
- 属性
- InitCmds : InitCmd : CompleteAccess
- 目的
EtherCATステート・マシンをプリオペレーションl状態に切り替えた後、EthercatMaster::begin()
内でEtherCATスレーブのCoE初期化コマンドを実行します。
EtherCATConfig : Config : Slave : ProcessData
- 使用要素
- Recv : BitLength
- Send : BitLength
- 目的
EtherCATスレーブの出力プロセスデータと入力プロセスデータのビット長は、関連するコンフィギュレーションのためにファームウェアに提供されます。
EtherCATConfig : Config : Slave : ProcessData : Sm
- 使用要素
- SyncManagerSettings : StartAddress
- SyncManagerSettings : ControlByte
- SyncManagerSettings : Enable
- 目的
EtherCATスレーブのDC変数を構成するために使用されます。
EtherCATConfig : Config : Slave : DC
- 使用要素
- CycleTime0
- CycleTime1
- ShiftTime
- 目的
EtherCATスレーブのDC変数を構成するために使用されます。