今回は、EtherCATで装置を動かしている最中にスレーブのLANケーブルが抜けたとき、「どこで切れたのか」をEcConfiguratorで確かめる手順をお伝えします。実機で2台目と3台目の間のケーブルを実際に抜いて、画面がどう変わるかを記録しました。
よくある失敗が「メイン画面のパケットロスが0だから、通信は正常」と判断してしまうこと。実は途中のケーブルが抜けても、パケットロスは0のままなんです。どこを見ればいいのか、順番に見ていきましょう。
EcConfiguratorのネットワークステータスとは
EcConfigurator(EtherCAT Network Configurator)は、WMX3に付属するEtherCATの設定・診断ツールです。その中の「ネットワークステータス」画面で、スレーブごとの状態と、ポートごとのエラーカウンタを一覧できます。
開き方は「機能」タブ →「通信ステータス」グループの「通信情報」です。隣の「トポロジビュー」では、スレーブのつながりを図で確認できます。

列の意味(EtherCAT診断用語との対応)
列名は略号なので、EtherCATの診断資料(ETG「EtherCAT Diagnosis For Users」)の用語と対応させておきます。カウンタは各スレーブのESC(EtherCAT Slave Controller、スレーブ側の通信チップ)のレジスタの値で、16進数で表示されます。
| 画面の表示 | 正式名称(ETG用語) | 意味 |
|---|---|---|
| ステータス | AL Status | EtherCATステートマシンの状態(Init / PreOp / SafeOp / Op) |
| オフライン / アクセス不可 | — | マスタからそのスレーブに届かない状態 |
| IF Port0〜3 | Frame Error Counter(Invalid Frame) | 壊れたフレームを受信した回数。いわゆるCRCエラー相当 |
| RE Port0〜3 | Physical Layer Error Counter | 物理層(電気信号のレベル)で異常を検出した回数 |
| FRE Port0〜3 | Forwarded RX Error Counter | 手前ですでに壊れていたフレームを転送した回数 |
| PUE | ECAT Processing Unit Error Counter | スレーブ内部の処理部で検出したエラー |
| LL Port0〜3 | Lost Link Counter | ポートのリンクが切れた回数 |
ポート番号は、ライン接続ならPort0=IN側(マスタに近い側)、Port1=OUT側(下流側)と考えればOKです。
基本的な使い方
調べる前に、カウンタを0に戻しておきます。カウンタは過去の値(電源投入後の累積)が残っているので、そのままだと今起きたことか昔のことか区別できません。
- EcConfiguratorで「通信開始」する
- 「機能」タブ →「通信情報」でネットワークステータスを開く
- 「クリア」を押してから「更新」を押す
初期状態は「手動モード」なので、「更新」を押さないと表示が変わりません。ここ、地味にハマります(笑)

実例:2台目と3台目の間のケーブルを抜いてみた
ここからが本題です。通信中に、2台目(ID1)と3台目(ID2)の間のケーブルを、3台目のIN側で抜きました。
ネットワークステータス:切れた区間が分かる

- ID2(3台目)以降:ステータスが None、オフライン True、アクセス不可 True。カウンタは「–」(読めない)
- ID0・ID1:Op のまま通信を続けている
- ID1 の RE Port1 が 0x27:2台目のOUT側(下流側の出口)で物理層エラーを検出
つまり「どこからオフラインになったか」と「どのポートのカウンタが増えたか」を合わせると、切れたのは ID1 の出口 ~ ID2 の入口の区間だと分かります。ETGの診断資料にある「経路の順にカウンタを見て、最初に異常が出たポートが故障箇所の最有力候補」という考え方そのままですね。
なお、約60秒後に更新しても RE は 0x27 のまま増えませんでした。抜けた瞬間にだけ数えられ、抜けている間は増え続けないようです。
トポロジビュー:図で一目で分かる

「機能」タブ →「トポロジビュー」では、マスタ → ID0 → ID1 までは線でつながり、ID1 と ID2 の間の線が消えます。現場で説明するときは、この画面が一番伝わりやすいです。
ただし、トポロジビューは開いたままだと自動では更新されません。状態が変わったら一度閉じて開き直してください。
メイン画面:パケットロスは0のまま

メインタブでは、抜けた側のスレーブがツリー上で灰色になり、ログに「ネットワーク変更」が出ます。一方で、通信状態の「パケット ロス」「パケット タイムアウト」は0のままでした。
これは、ケーブルが抜けると手前のスレーブ(今回は ID1)がOUT側を自動で閉じて、フレームをマスタへ折り返すからです。マスタから見ると「フレームはちゃんと帰ってきている」ので、パケットロスには出ません。「パケットロス0=ネットワーク正常」ではない、と覚えておきましょう。
ちなみに、EtherCATで各スレーブの応答数を数えるWKC(Working Counter、ワーキングカウンタ)は、EcConfiguratorの画面には表示されていませんでした。
ケーブルを戻したあとの復帰のしかた
ケーブルを挿し直しただけでは、自動では復帰しません。ネットワークステータスもトポロジビューも、抜けたときのままです。
ホットコネクトで復帰(ただし二重登録に注意)
メインタブの「ホットコネクト」を押すと、切れていたスレーブが通信に戻ってきます。ここで、再接続した側の ID2 の RE Port0(入口)に 0x50 が付きました。抜いたとき(ID1 の出口)と挿したとき(ID2 の入口)で、区間の両側にカウンタが残るわけです。

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

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

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


コメント