メモ:WindowsでEtherCATマスター

やりたいこと

Windows PCで通常のLANポートを用いてEtherCATのマスターになる。

SOEM

SOEM (Simple Open EtherCAT Master) とは、Open EtherCAT Society が提供しているオープンソースの小規模なEtherCATマスターのスタック。ソースコードGitHubで公開されている。ちなみにEtherCATスレーブのスタックとして SOES (Simple Open EtherCAT Slave) も提供されている。

SOEMのビルド

mkdir build
cd build
cmake .. -G "NMake Makefiles"
nmake
  • 成功するとbuild/test/linux/にsimple_test.exeができる
    • なぜwin32フォルダでなくlinuxフォルダなのかは謎

simple_test.exeの実行

下記のようにネットワークインターフェースを指定して実行

cd test\linux\simple_test
simple_test.exe \Device\NPF_{XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX}

【実行結果】 (とりあえずスレーブ機器が無い状態なので No slaves found! となっている)

SOEM (Simple Open EtherCAT Master)
Simple test
Starting simple test
ec_init on \Device\NPF_{XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX} succeeded.
No slaves found!
End simple test, close socket
End program

このネットワークインターフェース名は、PowerShellで下記を実行すると確認できる。

Get-NetAdapter | select Name,DeviceName

【実行結果】

Name                DeviceName
----                ----------
ローカル エリア接続 \Device\{XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX}

また、このネットワークインターフェース名は、C#アプリからは下記のようにして取得できる。

using System;
using System.Net.NetworkInformation;

namespace ConsoleApp
{
    class Program
    {
        static void Main(string[] args)
        {
            var interfaces = NetworkInterface.GetAllNetworkInterfaces();
            foreach (var ni in interfaces)
            {
                Console.WriteLine($"{ni.Id},{ni.Name}");
            }
        }
    }
}

【実行結果】

{XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX},ローカル エリア接続
{YYYYYYYY-YYYY-YYYY-YYYY-YYYYYYYYYYYY},Loopback Pseudo-Interface 1