三菱電機#MXF-EtherCAT_PART02_Distributed Clocksを有効しよう

こちらは新しい記事のシリーズで、三菱電機のMXF-EtherCATバージョンのCPUで様々な検証を行います。第2話ではMXF-EtherCATでオムロンのECC203・ECC202と接続し、デバイスIDチェック・Distributed Clocksを有効にする方法などを説明します。

さ、FAを楽しもう!

Reference Link

https://soup01.com/ja/category/mitsubishi-jp/mxr/

Distributed clocks

EtherCATにおけるDistributed Clocksとは、ネットワーク上に分散配置されたクロックを論理的に統合し、同期させる仕組みを指す。

EtherCATは、この分散クロック機能を利用することで、リアルタイムEthernetネットワークに接続された各スレーブデバイスの時刻を、極めて高い精度で同期させることができる。

分散クロック機能に対応したEtherCATスレーブは、それぞれ独立した内部クロックを備えている。このクロックは、スレーブ内部の水晶振動子や発振器など、独立したクロック源を基準として動作する。そのため、電源投入直後の各スレーブのクロックは、ネットワーク全体で同期されておらず、それぞれが独立したローカルクロックとして動作を開始する。

EtherCATネットワークでは、特定のEtherCATスレーブがReference Clock)として選択される。ネットワーク内の他のスレーブが持つクロック(S)およびコントローラは、この基準クロックに同期する。したがって、基準クロックがEtherCATシステム全体のシステム時刻を決定する役割を担う。

クロックの時刻補正と同期処理は、分散クロック機能に対応したEtherCATマスタによって、自動的かつ継続的に実行される。

この同期処理を実現するため、EtherCATマスタは専用のEtherCATデータグラムを短い周期で送信する。この送信周期は、各スレーブのクロックが規定の許容誤差範囲内で同期状態を維持できるよう、十分に短く設定される。

送信されたデータグラムには、基準クロックを持つEtherCATスレーブが自身の現在時刻を書き込む。その後、他の分散クロック対応スレーブは、同じデータグラムから基準クロックの時刻情報を読み取る。

この仕組みは、EtherCATがリング構造の通信方式を採用していることによって実現される。ただし、すべてのスレーブが同じデータグラムから時刻情報を取得するためには、基準クロックを持つスレーブが、ネットワークのトポロジー上で他のスレーブクロックよりも前段に配置されている必要がある。この条件を満たすため、EtherCATマスタは、ネットワーク上で最初に位置する分散クロック対応EtherCATスレーブを基準クロックとして選択する。

EtherCATスレーブでは、RJ45コネクタから入力された電気信号が、トランス(絶縁トランス)を介してPHY(Physical Layer:物理層インターフェース)に伝送される。

PHYは、符号化されたEthernet信号からデータを抽出し、EtherCATスレーブコントローラ(ESC)へ転送する。ESCは受信したデータを処理するとともに、EtherCATフレームを次のスレーブへ中継する。このとき、ESCはフレームを通過させながら動的に処理するため、極めて小さな遅延でデータを転送できる。

処理されたEtherCATフレームは、再びPHYとRJ45コネクタを経由して、次のEtherCATスレーブへ送信される。

また、EtherCATスレーブの起動時には、ESCがEEPROMに保存されたコンフィギュレーションデータを自動的に読み込み、自身の動作に必要な各種パラメータを設定する。

さらに、スレーブ内部に別のCPUが搭載されている場合、ESCは所定のインターフェースを介してCPUと通信し、データの受け渡しを行うことができる。

EtherCATの分散クロック(Distributed Clocks:DC)機能を利用することで、以下のような高精度な同期処理を実現できる。ただし、利用可能な機能は各デバイスの実装によって異なる。

  • EtherCATスレーブ間、およびスレーブとマスタ間のクロック同期
  • 出力信号の同期生成(Sync信号)
  • 入力信号の同期読み取り
  • 入力信号に対する高精度なタイムスタンプの取得(Latch信号)
  • 同期割り込みの生成

EtherCATマスタの後段に位置する最初の対応スレーブが、基準クロック(M)として選択されています。EtherCATネットワークでは、各スレーブ内部でのフレーム処理や、スレーブ間の通信経路において、わずかな伝送遅延が発生する。

これらの遅延は、フレームの往路と復路の両方で発生するため、各スレーブクロック(S)を基準クロックに同期させる際には、基準クロックと各スレーブ間の伝送時間(Δt)を考慮する必要がある。したがって、基準クロックの現在時刻を、そのまま後段のすべてのスレーブクロックにコピーするだけでは、正確な時刻同期を実現することはできない。高精度な同期を実現するためには、複数のパラメータを考慮し、各スレーブに対して個別の時刻補正値(オフセット値)を算出する必要がある。

各スレーブの時刻補正に必要な遅延時間を求めるため、EtherCATマスタはシステムの起動時に、すべてのEtherCATスレーブコントローラ(ESC)に対して、特定のアドレスを指定したブロードキャストリードデータグラムを送信する。

このデータグラムを受信すると、各スレーブは、フレームが往路と復路で到達した時刻を、それぞれ自身のローカルクロックに基づいて記録する。その後、EtherCATマスタは各スレーブに保存された時刻情報を読み出し、伝送遅延を算出するための基礎データとして利用する。

この測定処理は、すべてのEtherCATスレーブを対象として複数回繰り返される。

これにより、EtherCATマスタは、スレーブ間におけるフレームの伝送遅延を高精度に把握し、ネットワークトポロジーと各通信経路の遅延時間を対応付けた詳細な情報を構築できる。

こうして得られた測定結果が、各スレーブの時刻補正値を算出し、ネットワーク全体のクロックを高精度に同期させるための基礎となる。

Implementation

オムロン側

最初にオムロン側から設定します。

今回記事で使用するNX-ECC203・NX-ECC202本体にあるロータリースイッチからデバイスIDを設定します。

MXF-EtherCAT側

次はMXF-EtherCATコントローラー側を構築します。

EtherCATネットワーク構築

EtherCATネットワークを構築するにはModule Parameters→Module Extended Parametersをクリックします。

オムロンNX-ECC202追加

Own Station→Add SubDeviceをクリックします。

Part1でImportしたオムロンNX-ECC EtherCAT カプラーからNX-ECC202を選び→OKで追加します。

デバイスの複製操作で追加

次は先程追加したNX-ECC202を右クリック→Copy Subdevicesでデバイスを複製します。

デバイスを追加したい位置を選び→右クリック→Paste SubDeviceします。

Done!

スロット設定

次は2つのNX-ECC202にインストールしたIOモジュールを設定します。

Distributed Clocks有効

今回の記事ではDistributed Clocks同期を使用します。Own Station→Main Device→DCM Enabled/disabledにEnabledします。

動作モード設定‐Distributed Clocks

NX-ECC203をDistributed Clocks 動作モードにするので、Distributed ClocksのTab→Operation Mode→DC for synchronizationをクリックします。

動作モード設定‐Free Run

NX-ECC202をFree Run 動作モードにするので、Distributed ClocksのTab→Operation Mode→Free Runをクリックします。

Configure Device ID

次は各デバイスのNodeアドレスを設定し、そのアドレスは実際機器上にあるロータリースイッチに一致する必要があります。デバイスTab開き→General→Node Addressを設定します。

Done!今回は以下の設定になりました。

  • デバイス1 NX-ECC203:20
  • デバイス2 NX-ECC202:40
  • デバイス3 NX-ECC202:10

デバイスIDチェック機能を有効する

次はEtherCATネットワークを起動するときデバイスのIDをチェックするように設定します。Own Station→Details→に赤枠の部分をチェックします。

すべてのデバイスに設定適用

最後は右下にある”Apply to all Subdeviecs”をクリックし、設定を有効します。

Done!

設定保存

Close with Reflecting the Settingをクリックしネットワーク設定を保存します。

Yesをクリックします。

ラベル生成

今度はラベルを生成します。

前回の記事ではNX-ECC203のデータをすべて個別ラベルで生成したんですが、今回は1つのデバイスを構造体として生成します。Label Data Type→Structured Data Typesを選択します。

Labeling Targetを選択し→Label Nameを入力→Create Labelで構造体ラベルを生成しましょう。

Done!

プログラム

こちらは検証のプログラムです。ST言語のR_TRIGとSHLを使用し、16ビットのデジタル出力を順番にONさせるプログラムを作成しました。

  • R_TRIGで10msクロック信号の立ち上がりを検出し、SHLによって出力データを1ビットずつ左にシフトします。
  • 出力データが0の場合は初期値として1を設定し、最上位ビット(Bit 15)に到達すると出力データをクリアして、再びBit 0から処理を繰り返します。

これにより、各出力チャンネルを順番に切り替え、デジタル出力モジュールの動作を確認できます。

//EtherCAT Ready
M10:=MX_EC.bIn_EtherCATFunction_Ready;

//Sub Devices
D100:=MX_EC.unSts_SubDeviceESMState_D[0];
D101:=MX_EC.unSts_SubDeviceESMState_D[1];
D102:=MX_EC.unSts_SubDeviceESMState_D[2];

fbR_TRIG(CLK:= MX_SQ.stSM.b10msClock);

IF SubDevice_1001NX_ECC203_Module1NX_OD5256OutputDataSet1_OutputBit16bits = 0 THEN

SubDevice_1001NX_ECC203_Module1NX_OD5256OutputDataSet1_OutputBit16bits:=1;

END_IF;

IF fbR_TRIG.Q THEN

SubDevice_1001NX_ECC203_Module1NX_OD5256OutputDataSet1_OutputBit16bits:=
SHL(
SubDevice_1001NX_ECC203_Module1NX_OD5256OutputDataSet1_OutputBit16bits
,1
);

END_IF;

IF stID40.Module2NX_OD5256OutputDataSet1_OutputBit16bits =0 THEN
stID40.Module2NX_OD5256OutputDataSet1_OutputBit16bits:=1;
END_IF;

IF fbR_TRIG.Q THEN

stID40.Module2NX_OD5256OutputDataSet1_OutputBit16bits:=
SHL(
stID40.Module2NX_OD5256OutputDataSet1_OutputBit16bits
,1
);

END_IF;

CPUと接続する

最後はPCとMXF-EtherCATをUSB-Cで接続します。

ダウンロード

プロジェクトをCPUにダウンロードし、電源を入れ直します。

結果

Done!オムロンのECC203はエラーなく、RUN・TS両方とも緑点灯になっています。

MXF-EtherCAT側にもエラーなくEtherCATマスター稼働しています。

こちらの動画から動作確認できます。

シェアする

  • このエントリーをはてなブックマークに追加

フォローする