サイト内検索

検索

Shares

Table of Content

EtherCAT Library API User Manual

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/ からダウンロードできます。

86duinoIDE_500_Logo

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)・アクセス・インターフェイス
  • EtherCATマスタファームウェア
    • EtherCATマスタコアを実行します。
    • プライマリ/セカンダリ・イーサネット・ドライバを制御し、 EtherCATフレームを送信します。

プログラムは、FreeDOSオペレーティングシステム上で動作するように設計されており、DJGPP 環境によって提供されるGCCコンパイラを使用してコンパイルされています。

1.1.3 ハードウェアプラットフォーム

EtherCATマスタソフトウェアは、デュアル・システム・アーキテクチャを特徴とするDM&P製Vortex86EX2 CPU でのみ動作します。マスタシステムとスレーブシステムに分かれており、それぞれ独自のオペレーティングシステムが稼働しており、システム間の通信はデュアルポートRAM とイベント割り込みによって実現されます。それぞれのタスクは次のとおりです:

  • マスタシステム
    • ユーザーのEtherCATアプリケーション
    • ユーザーのHMIアプリケーション
    • ユーザーのイーサネットアプリケーション
    • など。
  • スレーブシステム
    • EtherCATマスタファームウェアの実行のみを担当します。

ほとんどのアプリケーションはマスタシステム上で実行されるため、スレーブシステム上で実行されるEtherCATマスタファームウェアは、他のアプリケーションによる干渉を受けません。この構成により、EtherCATマスタコアの実行に集中できるようになり、EtherCATの同期とリアルタイム性能が保証されます。

Vortex86EX2_Dualcore_diagram

1.1.4 デュアルシステムの同期

このセクションの主な議論は、デュアルシステムPDOデータの同期です。下図に示すように、ユーザーアプリケーションとEtherCATマスタ・ライブラリ・ブロックはマスタシステム上で実行され、リアルタイムEtherCATマスタコアはスレーブシステム上で実行されます。

EtherCATマスタコアがプロセス入力ステージに到達すると イーサネットドライバからすべての循環フレームを受信し、入力PDOデータをDPRAMにコピーします。

ユーザー・アプリケーション・ステージに到達すると、EtherCATマスタコアは、マスタシステムに対して周期的な割り込みをトリガします。周期的な割り込みを受信すると、マスタシステムはEtherCATマスタライブラリの割り込み処理手順を実行します。マスタ・システムは、入力PDOデータをDPRAMからメインメモリに移動し、ユーザーが登録した周期的なコールバックを呼び出し、周期コールバック完了後に出力PDOデータをメインメモリからDPRAMに転送して、非周期コマンドを処理し、割り込み処理手順を終了します。この時点で、EtherCATマスタコアのユーザーアプリケーションと割り込み処理手順の両方が同時に完了します。

EtherCATマスタコアが書き込み出力ステージに到達すると、出力PDOデータをDPRAMからイーサネット・ドライバのDMAにコピーし、フレームを送信します。

これらのタスクは、概説された手順に従って循環に実行され、デュアルシステムPDOデータの同期が保証されます。

Vortex86EX2_Dualsystem

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 MachineESMの特別な動作のサポートO
Error Handlingネットワークまたはスレーブのエラーのチェック(ワーキング・カウンタ、など)O
EtherCAT Frame TypesEtherCATフレームのサポートO
プロセス・データ交換
Cyclic PDO周期的なプロセス・データ交換O
ネットワークコンフィギュレーション
Online scanningEtherCATマスタがもつネットワークコンフィギュレーション機能O
Reading ENIENIファイルから取得したネットワークコンフィギュレーションO
Compare Network configuration事前に構成されたネットワークと実際のネットワーク構成を起動時に比較するO
Explicit Device Identificationケーブル交換に対し、ホットコネクト防止に使用される識別O
Access to EEPROMESCレジスタ経由で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 ProtocolFoEプロトコルをサポート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同期を参照ください。

Ethercat_synchronization

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が一致しません。このシナリオは、高い同期が要求されるアプリケーションには適していません。

Ethercat_free_run_diagram

1.5.2 SM同期

IRQピンは、ESCが循環フレームを受信するとSMイベントを生成し、このイベントは µC 内のローカルアプリケーションの実行をトリガします。下の図に示すように、循環フレームは送信時にマスタと同じジッタでスレーブに受信されます。ジッタがゼロであると仮定しても、有限のハードウェア伝搬遅延により、最後のスレーブは最初のスレーブよりも遅く循環フレームを受信します。

伝播遅延により、スレーブ間の SMイベントのタイミングにオフセットが生じ、SM同期の制度がマイクロ秒レベルになります。

各スレーブが SyncManagerパラメータオブジェクト (0x1C32.3/0x1C33.3) のシフト時間をサポートしている場合は、すべてのスレーブの出力有効と入力ラッチをお互いに近づくように調整することができます。ただし、伝播遅延を計算できないため、調整は非常に困難です。

Ethercat_sm-synchronous_diagram

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プロトコル拡張機能を参照してください。

Ethercat_dc-synchronous_diagram

2. 関数

QEC EtherCAT マスタライブラリ

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

Ethercat_classes

これらのクラスは、次の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_class_diagram
  • 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
    ECAT_MASTER_SHIFT
    • マスタシステム時間は基準クロックに同期します。
    • すべてのDCスレーブは基準クロックに同期します。
  • バス・シフト・モード - ECAT_BUS_SHIFT
    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 コールバック関数

qec_callback_function_diagram

このライブラリは、次の 3 種類のコールバックを提供します:

  • (循環コールバック、エラーコールバック、イベントコールバックなど)
    循環コールバックの目的は、ユーザーがモーション制御、CNC制御、ロボット制御などの周期的な制御システムを実装できるようにすることです。リアルタイム EtherCATマスタ・コアは、指定されたサイクル時間で EtherCATマスタ・ライブラリへの循環的な割り込みをトリガし、ACK を待機してプロセス・データの同期を確保します。ユーザーが循環コールバックを登録している場合は、周期的な制御を実現するためにそれが呼び出されます。
  • エラー・コールバック(Error Callback)
    リアルタイム EtherCATマスタコアがエラーを検出すると、エラー割り込みをトリガし、32ビット・エラー・コードを EtherCATマスタライブラリに渡します。ユーザーがエラーコールバックを登録している場合、システムはそのコールバックを呼び出して、ユーザーに特定のエラーを通知します。
    エラー・コールバックでサポートされているエラー・コードは次のとおりです:
定義コード説明
ECAT_ERR_WKC_SINGLE_FAULT2000001ワーキング・カウンタに障害が発生しました
ECAT_ERR_WKC_MULTIPLE_FAULTS2000002複数のワーキング・カウンタに障害が発生しました
ECAT_ERR_SINGLE_LOST_FRAME2000003フレームが失われました
ECAT_ERR_MULTIPLE_LOST_FRAMES2000004フレームが複数回失われました
ECAT_ERR_CABLE_BROKEN2000007ケーブルが切断されました
ECAT_ERR_WAIT_ACK_TIMEOUT2001000循環的な割り込みACKの待機中にファームウェアがタイムアウトしました
  • イベント・コールバック(Event Callback)
    リアルタイム EtherCATマスタコアがイベントを検出すると、イベント割り込みをトリガし、32ビット・イベント・コードを EtherCATマスタライブラリに渡します。ユーザーがイベント・コールバックを登録している場合、システムはそのCallBackを呼び出して、特定のイベントをユーザーに通知します。
    イベント・コールバックでサポートされているイベント・コードは次のとおりです:
定義コード説明
ECAT_EVT_STATE_CHANGED1000001マスタのEtherCAT状態が変化しました
ECAT_EVT_CABLE_RECONNECTED1000002ケーブルが再接続しました

2.1.3 スレーブ情報関数

このライブラリは、ネットワーク上のEtherCATスレーブデバイスに関する情報を取得するための関数を提供します。これには、ネットワーク上のスレーブ数を照会したり、スレーブの製造者ID、製品コード、エイリアスアドレスをシーケンス番号で取得したり、前述の情報を使用してスレーブ番号を逆順に照会することが含まれます。これは、スレーブ・デバイスのタイプを識別し、接続する適切な EtherCATスレーブデバイス・クラスを選択するために使用されます。


2.1.4 制御関数

EtherCATマスタライブラリが提供する制御関数は、EtherCATネットワークの状態とオペレーションを管理するために不可欠です。これらの関数を使用することで、ユーザーはネットワークを正確に制御し、マスタデバイスとスレーブデバイス間の信頼性の高い同期通信を実現できます。


2.2 EtherCATデバイス

EtherCATデバイス部分は、PDO、CoE、FoEなどの機能を操作できる汎用EtherCATスレーブデバイス・クラスを提供し、CiA402スレーブ汎用クラスも含まれています。

EtherCATデバイス部分とEtherCATマスタ部分の間の主なクラス関係は、EtherCATマスタ部分に応じてEtherCATデバイス部分が関連付けられます。次の図に示すように、 _EthercatDevice_CommonDriverとEthercatMasterの間には関連性があります。

Ethercat_device_diagram
  • 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のクラス関係性を次の図に示します:

_EthercatDevice_CommonDriver_diagram
  • EthercatMasterと_EthercatDevice_CommonDriverの間には、 EthercatMasterに依存する_EthercatDevice_CommonDriverにより、関連性があります。
  • 他のすべてのEtherCATスレーブデバイス・クラスは、_EthercatDevice_CommonDriverから継承します。

警告: このクラスを使用してオブジェクトを宣言することは禁止です。

情報関数

このライブラリは、ネットワーク上のEtherCATスレーブデバイスに関する情報を取得するための関数を提供します。これには、デバイス識別に使用される製造者ID、製品コード、エイリアスアドレス、デバイス名などの重要な詳細項目が含まれます。さらに、EtherCATスレーブデバイスが CoE、FoE、DC などの特定の機能をサポートしているかどうかに関する情報も提供します。このスレーブ情報により、ユーザーはネットワーク内のデバイスの特性と機能を理解し、対応するコンフィギュレーションおよびタスク制御を実行できます。

分散クロック(DC)関数

分散クロック (DC) は、EtherCATスレーブコントローラ (ESC) 内の重要な機能ユニットです。EtherCATネットワークに時間同期メカニズムを実装し、すべてのスレーブデバイスが統一された時間基準に従ってクロックに同期し、システム全体で時間の一貫性を確保する役割を担います。

システム同期では、すべてのスレーブが 1つの基準クロックに同期します。通常、1つのセグメント内でマスタの後にある分散クロック機能を備えた最初のESCが基準時間 (システム時間) を保持します。このシステム時間は、マスタ及び他のデバイスのDCスレーブ・クロックを同期するための基準クロックとして使用されます。クロック同期では、伝播遅延、ローカルクロック源のドリフト、およびローカル・クロック・オフセットが考慮されます。

ESCは、ローカルアプリケーションをEtherCATシステム時間に同期させるためのSyncSignalを生成できます。SyncSignalは、直接 (たとえば、割り込みとして) 使用することも、デジタル出力の更新/デジタル入力のサンプリングに使用することもできます。さらに、LatchSignalに EtherCATシステム時間を基準としたタイム・スタンプを付けることができます。

Ethercat_dc_diagram

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サイクル時間が経過したときに生成されます。
次の図に、いくつかのコンフィギュレーション例を示します:

Ethercat_dc_diagram-1

詳細な情報については、 ESC Hardware Data Sheet Section I.を参照してください。

プロセス・データ・オブジェクト(PDO)関数

プロセスデータは、EtherCATネットワーク内のマスタとスレーブ間で交換されるリアルタイム通信データを指します。このデータには、制御、監視、および通信目的に使用される情報が含まれます。EtherCATマスタは、高度な同期と低遅延を保証し、すべてのスレーブを制御および監視するプロセス・データを周期的に送信します。

EtherCATスレーブコントローラ (ESC)のフィールドバス・メモリ管理ユニット (FMMU) は、デュアル・ポート・メモリを論理アドレスにマッピングできます。すべてのスレーブノードは、 EtherCATマスタによって送信されたEtherCATフレームをチェックし、プロセスデータの論理アドレスと FMMUで設定されたアドレスを比較します。一致が見つかった場合、出力プロセスデータはデュアル・ポート・メモリに転送され、入力プロセスデータがEtherCATフレームに挿入されます。

総体的に、プロセスデータは、EtherCATテクノロジの重要な部分であり、ロボット制御、CNC制御、オートメーション制御、その他の分野のリアルタイム・アプリケーションに適しています。

CANopen over EtherCAT (CoE) 関数

CANopenは、コントローラ・エリア・ネットワーク (CAN) バスに基づく高度な通信プロトコルで、産業用アプリケーションの制御システムとデバイス間の通信に一般的に使用されます。 これにはデバイス間のデータ交換、構成、制御を容易にするために、一連の通信オブジェクト、データ型、およびネットワーク管理機能を定義します。

CANopenプロトコルには次の側面が含まれます:

  • オブジェクト・ディクショナリ
    デバイス間で交換されるすべてのデータ・オブジェクトと媒介変数を定義します。オブジェクト・ディクショナリには、変数、媒介変数、イベント、関数などの様々なタイプのオブジェクトが含まれます。
  • PDO (プロセス・データ・オブジェクト)
    リアルタイムのデータ転送に使用されます。 PDOを使用すると、デバイスは、固定された、またはイベント・トリガの方法で相互にデータを転送できるようになり、リアルタイム制御とデータ交換が可能になります。
  • SDO (サービス・データ・オブジェクト)
    デバイスの変数の設定と管理に使用されます。 SDOは、読み取り、書き込み、変数設定の機能を提供し、デバイスが設定情報を動的に交換できるようにします。
CoE_diagram

CoE (CAN application over EtherCAT )は、 EtherCATネットワークに基づくCANopenプロトコルです。これにより、 EtherCATネットワーク上でCANopenプロトコルを使用した通信が可能になります。オブジェクト・ディクショナリには、変数、アプリケーションデータ、およびプロセス・データ・インターフェイスとアプリケーションデータ間のマッピング情報 (PDOマッピング) が含まれます。そのエントリには、サービス・データ・オブジェクト (SDO) を介してアクセスできます。 SDOサービスは、主に2種類のコマンドで構成されています。SDOコマンドは、オブジェクトディクショナリに格納されているオブジェクトにアクセスするために使用され、SDO情報コマンドは、これらのオブジェクトの詳細を取得するために使用されます。

SDOコマンド

SDO情報コマンド

File over EtherCAT (FoE) 関数

File access over EtherCAT (FoE) は、EtherCATネットワーク経由でファイル転送機能を有効にする EtherCATのプロトコル拡張です。EtherCATスレーブデバイスにファームウェアやその他のファイルをダウンロードしたり、EtherCATスレーブデバイスからファームウェアやその他のファイルをアップロードしたりするための標準的な方法です。

FoE_diagram
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_diagram
  • 関係性 : 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_diagram
  • _EthercatDevice_DmpCommonDriverは _EthercatDevice_CommonDriver から継承します。

警告: このクラスを使用してオブジェクトを宣言することは禁止です。

システム監視関数

MCUを搭載したQECシリーズ EtherCATスレーブデバイスはすべて、システム温度、システム電圧、システム電流、周辺電圧、周辺電流のシステム監視情報を取得するためのCoEオブジェクトを提供します。したがって、このライブラリはシステム監視情報を取得するための関数を提供し、ユーザーはシステムを迅速に監視し、障害の兆候がないか評価できます。

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_SUCCESS0
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アボート・コード:

ValueMeaning
0x05030000トグル・ビットは変更されていません
0x05040000SDOプロトコルのタイムアウト
0x05040001クライアント/サーバーのコマンドの指定子が無効であるか、不明です。
0x05040005メモリ不足です
0x06010000オブジェクトへのアクセスがサポートされていません
0x06010001書き込み専用オブジェクトへ読み取りを試みます
0x06010002読み取り専用オブジェクトに書き込みを試みます
0x06010003サブインデックスに書き込むことはできません。書き込みアクセスの場合はSI0を0にする必要があります
0x06010004SDO完全アクセスは、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)オブジェクト・タイプ名前
0001DEFTYPEBOOLEAN
0002DEFTYPEINTEGER8
0003DEFTYPEINTEGER16
0004DEFTYPEINTEGER32
0005DEFTYPEUNSIGNED8
0006DEFTYPEUNSIGNED16
0007DEFTYPEUNSIGNED32
0008DEFTYPEREAL32
0009DEFTYPEVISIBLE_STRING
000ADEFTYPEOCTET_STRING
000BDEFTYPEUNICODE_STRING
000CDEFTYPETIME_OF_DAY
000DDEFTYPETIME_DIFFERENCE
000FDEFTYPEDOMAIN
0010DEFTYPEINTEGER24
0011DEFTYPEREAL64
0012DEFTYPEINTEGER40
0013DEFTYPEINTEGER48
0014DEFTYPEINTEGER56
0015DEFTYPEINTEGER64
0016DEFTYPEUNSIGNED24
0018DEFTYPEUNSIGNED40
0019DEFTYPEUNSIGNED48
001ADEFTYPEUNSIGNED56
001BDEFTYPEUNSIGNED64
001DDEFTYPEGUID
001EDEFTYPEBYTE
002DDEFTYPEBITARR8
002EDEFTYPEBITARR16
002FDEFTYPEBITARR32

A.7 EtherCATネットワーク情報

EtherCAT ネットワーク情報(ENI)には、EtherCATネットワークを構成するために必要な設定が含まれています。XMLベースのファイルには、マスタに関する一般情報と、マスタに接続されているすべてのスレーブ・デバイスのコンフィギュレーションが含まれています。EtherCATコンフィギュレーション・ツールは、ESIファイルを読み取るか、またはネットワークですべてのスレーブをオンライン・スキャンし、その後、ユーザーはPDOマッピングや DCの有効化などの関連するEtherCAT 設定を構成し、ENIファイルをエクスポートできます。

Ethercat_network_information

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変数を構成するために使用されます。
上部へスクロール