EtherCATスレーブのLANケーブル抜けをEcConfiguratorで確認する方法【C#コード付き】

EtherCATスレーブのLANケーブル抜けをEcConfiguratorで確認する方法【C#コード付き】 ツール

今回は、EtherCATで装置を動かしている最中にスレーブのLANケーブルが抜けたとき、「どこで切れたのか」をEcConfiguratorで確かめる手順をお伝えします。実機で2台目と3台目の間のケーブルを実際に抜いて、画面がどう変わるかを記録しました。

よくある失敗が「メイン画面のパケットロスが0だから、通信は正常」と判断してしまうこと。実は途中のケーブルが抜けても、パケットロスは0のままなんです。どこを見ればいいのか、順番に見ていきましょう。

▶ 30秒でわかる要約動画(音声あり)

EcConfiguratorのネットワークステータスとは

EcConfigurator(EtherCAT Network Configurator)は、WMX3に付属するEtherCATの設定・診断ツールです。その中の「ネットワークステータス」画面で、スレーブごとの状態と、ポートごとのエラーカウンタを一覧できます。

開き方は「機能」タブ →「通信ステータス」グループの「通信情報」です。隣の「トポロジビュー」では、スレーブのつながりを図で確認できます。

EcConfiguratorの機能タブ。通信情報とトポロジビューのボタン
機能タブの「通信情報」と「トポロジビュー」

列の意味(EtherCAT診断用語との対応)

列名は略号なので、EtherCATの診断資料(ETG「EtherCAT Diagnosis For Users」)の用語と対応させておきます。カウンタは各スレーブのESC(EtherCAT Slave Controller、スレーブ側の通信チップ)のレジスタの値で、16進数で表示されます。

画面の表示正式名称(ETG用語)意味
ステータスAL StatusEtherCATステートマシンの状態(Init / PreOp / SafeOp / Op)
オフライン / アクセス不可—マスタからそのスレーブに届かない状態
IF Port0〜3Frame Error Counter(Invalid Frame)壊れたフレームを受信した回数。いわゆるCRCエラー相当
RE Port0〜3Physical Layer Error Counter物理層(電気信号のレベル)で異常を検出した回数
FRE Port0〜3Forwarded RX Error Counter手前ですでに壊れていたフレームを転送した回数
PUEECAT Processing Unit Error Counterスレーブ内部の処理部で検出したエラー
LL Port0〜3Lost Link Counterポートのリンクが切れた回数

ポート番号は、ライン接続ならPort0=IN側(マスタに近い側)、Port1=OUT側(下流側)と考えればOKです。

基本的な使い方

調べる前に、カウンタを0に戻しておきます。カウンタは過去の値(電源投入後の累積)が残っているので、そのままだと今起きたことか昔のことか区別できません。

  1. EcConfiguratorで「通信開始」する
  2. 「機能」タブ →「通信情報」でネットワークステータスを開く
  3. 「クリア」を押してから「更新」を押す

初期状態は「手動モード」なので、「更新」を押さないと表示が変わりません。ここ、地味にハマります(笑)

クリア後のネットワークステータス。全スレーブがOpで全カウンタが0x0
クリア後。全スレーブが Op、カウンタはすべて 0x0

実例:2台目と3台目の間のケーブルを抜いてみた

ここからが本題です。通信中に、2台目(ID1)と3台目(ID2)の間のケーブルを、3台目のIN側で抜きました。

ネットワークステータス:切れた区間が分かる

抜線後のネットワークステータス。ID2以降がNone・オフラインTrue、ID1のRE Port1が0x27
抜いた直後。ID2以降がオフライン、ID1 の RE Port1 に 0x27
  • ID2(3台目)以降:ステータスが None、オフライン True、アクセス不可 True。カウンタは「–」(読めない)
  • ID0・ID1:Op のまま通信を続けている
  • ID1 の RE Port1 が 0x27:2台目のOUT側(下流側の出口)で物理層エラーを検出

つまり「どこからオフラインになったか」と「どのポートのカウンタが増えたか」を合わせると、切れたのは ID1 の出口 ~ ID2 の入口の区間だと分かります。ETGの診断資料にある「経路の順にカウンタを見て、最初に異常が出たポートが故障箇所の最有力候補」という考え方そのままですね。

なお、約60秒後に更新しても RE は 0x27 のまま増えませんでした。抜けた瞬間にだけ数えられ、抜けている間は増え続けないようです。

トポロジビュー:図で一目で分かる

抜線中のトポロジー。ID1とID2の間の線が消え、ID2以降のランプが灰色
ID1 → ID2 の線が消え、ID2 以降のランプが灰色に

「機能」タブ →「トポロジビュー」では、マスタ → ID0 → ID1 までは線でつながり、ID1 と ID2 の間の線が消えます。現場で説明するときは、この画面が一番伝わりやすいです。

ただし、トポロジビューは開いたままだと自動では更新されません。状態が変わったら一度閉じて開き直してください。

メイン画面:パケットロスは0のまま

抜線中のメイン画面。ツリーで抜けたスレーブが灰色、パケットロスとパケットタイムアウトは0
抜けたスレーブはツリーで灰色。でもパケットロス・パケットタイムアウトは 0

メインタブでは、抜けた側のスレーブがツリー上で灰色になり、ログに「ネットワーク変更」が出ます。一方で、通信状態の「パケット ロス」「パケット タイムアウト」は0のままでした。

これは、ケーブルが抜けると手前のスレーブ(今回は ID1)がOUT側を自動で閉じて、フレームをマスタへ折り返すからです。マスタから見ると「フレームはちゃんと帰ってきている」ので、パケットロスには出ません。「パケットロス0=ネットワーク正常」ではない、と覚えておきましょう。

ちなみに、EtherCATで各スレーブの応答数を数えるWKC(Working Counter、ワーキングカウンタ)は、EcConfiguratorの画面には表示されていませんでした。

ケーブルを戻したあとの復帰のしかた

ケーブルを挿し直しただけでは、自動では復帰しません。ネットワークステータスもトポロジビューも、抜けたときのままです。

ホットコネクトで復帰(ただし二重登録に注意)

メインタブの「ホットコネクト」を押すと、切れていたスレーブが通信に戻ってきます。ここで、再接続した側の ID2 の RE Port0(入口)に 0x50 が付きました。抜いたとき(ID1 の出口)と挿したとき(ID2 の入口)で、区間の両側にカウンタが残るわけです。

ホットコネクト後のネットワークステータス。ID2のRE Port0が0x50、ID3はオフラインのまま
ホットコネクト後。ID2 の RE Port0 に 0x50。ID3 はオフラインのまま

ところが今回は、ID3 だけが元のIDに戻らず、新しいスレーブとしてもう1台分登録されました。ツリーに同じ機種が灰色(旧)と赤字(新)の2行で並び、スレーブ数・軸数が1つずつ増えた状態です。

ホットコネクト後のメイン画面。同じスレーブが灰色と赤字で二重に表示
同じスレーブが灰色と赤字の2行に(二重登録)

通信停止 → 通信開始で元の構成に戻す

この状態のまま運転するのはおすすめしません。「通信停止」→「通信開始」を行うと、二重登録が消えて元の構成(スレーブ数・軸数も元どおり)に戻りました。動力の入れ直しでも同じく戻る見込みです。

通信停止から通信開始後のメイン画面。ツリーが元の構成に戻りパケットロス0
通信を再開始すると元の構成に戻る

C#で抜けたスレーブを見つける

同じ「どのスレーブがオフラインか」は、C#からも確認できます。Ecat クラスの GetMasterInfo で全スレーブの情報を取り、Offline を見るだけです。

using System;
using WMX3ApiCLR;
using WMX3ApiCLR.EcApiCLR;

WMX3Api Wmx3Lib = new WMX3Api();
Wmx3Lib.CreateDevice("C:\\Program Files\\SoftServo\\WMX3\\", DeviceType.DeviceTypeNormal, 0xFFFFFFFF);
Wmx3Lib.SetDeviceName("CableCheck");

Ecat ecat = new Ecat(Wmx3Lib);
EcMasterInfo masterInfo = new EcMasterInfo();

int err = ecat.GetMasterInfo(masterInfo);    // ref は付けない
if (err != ErrorCode.None)
{
    Console.WriteLine($"取得失敗: {Ecat.ErrorToString(err)}");
    return;
}

for (int i = 0; i < (int)masterInfo.NumOfSlaves; i++)
{
    if (masterInfo.Slaves[i].Offline)
    {
        Console.WriteLine($"ID{i}: オフライン(State = {masterInfo.Slaves[i].State})");
    }
}

// 途中のケーブル抜けでは、ここは 0 のままのことがある
Console.WriteLine($"パケットロス: {masterInfo.StatisticsInfo.PacketLoss}");

Wmx3Lib.CloseDevice();
Wmx3Lib.Dispose();

オフラインになった一番小さいIDの手前が、切れた区間の候補です。今回の例なら ID2 が最初のオフラインなので「ID1 と ID2 の間」となります。

コード中のコメントのとおり、StatisticsInfo.PacketLoss だけを監視していても途中のケーブル抜けは見逃します。必ず各スレーブの Offline も見るようにしましょう。

画面で見た RE カウンタの値をC#から直接読む方法(RegisterRead によるESCレジスタの読み出し)は、実機で確かめてから次の記事で扱う予定です。

注意事項

カウンタは「クリア」するまで残る

RE などのカウンタは、通信停止 → 通信開始をしても消えませんでした(電源を切るか「クリア」で0になります)。逆に言えば、トラブルのあとから調べても痕跡が残っているということ。調査するときは、まずスクリーンショットを撮ってから「クリア」する順番にしてください。

ケーブル抜けで増えたのは RE だけだった

今回の実機では、増えたのは RE(物理層エラー)だけで、IF(CRCエラー相当)も LL(Lost Link)も0のままでした。「CRCの値を見ればケーブル抜けが分かる」わけではありません。IF は、ノイズや接触不良でフレームが壊れたときに増える指標と考えてください。

LL が増えなかった理由は、スレーブの通信チップがこのカウンタを持っていない(実装が任意のレジスタ)などが考えられますが、まだ確かめていません(推測です)。機種によって見え方が変わる可能性があります。

起動直後・挿し直し直後のカウントは気にしなくていい

ETGの診断資料によると、起動直後や隣の機器の電源を入れ直した直後は、一時的にカウンタが増えることがあります。問題として扱うのは、運転中に増え続けている場合です。

まとめ

  • ネットワークステータス:機能タブ →「通信情報」。「クリア」→「更新」してから調べる(手動モードでは更新を押さないと変わらない)
  • ケーブル抜けの検知:抜けた先のスレーブが「オフライン True / アクセス不可 True」。トポロジビューでは線が消える
  • 区間の特定:抜けた手前のスレーブの出口(Port1)の RE が増える。挿し直すと先のスレーブの入口(Port0)の RE も増える
  • パケットロス0でも安心しない:途中で抜けるとフレームが折り返すので、パケットロスには出ない
  • 復帰:挿し直しだけでは戻らない。ホットコネクトで二重登録されたら、通信停止 → 通信開始で元に戻す
  • C#:GetMasterInfo の Slaves[i].Offline で切れたスレーブを見つけられる

EtherCATの接続確認全般はEtherCAT機器接続確認 トラブル時の早期検出、EcConfiguratorの基本はEcConfiguratorTOOLについてもあわせてどうぞ。

あとがき

WMXの標準ツールを使うと、このスレーブとスレーブの間で問題が起こっているということがわかりました。通信部分のトラブル解決は時間がかかることが多かったのですが、パソコン画面で教えてくれるので大変助かります。トラブル時に有効活用してください。

コメント

タイトルとURLをコピーしました