EtherCrab

NOTE: TwinCATが使用可能な環境では, 基本的にTwinCATを使用することを推奨する.

このリンクはオープンソースのEtherCAT MasterライブラリであるEtherCrabを利用したリンクである.

Windowsの場合は, npcapを「WinPcap API compatible mode」でインストールしておくこと. Linux/macOSの場合は, 特に準備は必要ない.

Install

cargo add autd3-link-ethercrab
target_link_libraries(<TARGET> PRIVATE autd3::link::ethercrab)

メインライブラリに含まれている.

メインライブラリに含まれている.

メインライブラリに含まれている.

APIs

第1引数にはエラーが起きたときのコールバック関数を, 第2引数にはオプションを指定する.

use autd3_link_ethercrab::{EtherCrab, EtherCrabOption};
use std::time::Duration;

fn main() {
let _ = 
EtherCrab::new(
    |idx, status| {
        eprintln!("Device[{}]: {}", idx, status);
    },
    EtherCrabOption {
        ifname: None,
        state_check_period: Duration::from_millis(100),
        sync0_period: Duration::from_millis(2),
        sync_tolerance: Duration::from_micros(1),
        sync_timeout: Duration::from_secs(10),
        ..Default::default()
    },
);
}
#include <iostream>
#include <autd3/link/ethercrab.hpp>

int main() {
using namespace autd3;
link::EtherCrab(
    [](const uint16_t idx, const link::Status status) {
      std::cout << "Device[" << idx << "]: " << status << std::endl;
    },
    link::EtherCrabOption{
        .ifname = std::nullopt,
        .state_check_period = std::chrono::milliseconds(100),
        .sync0_period = std::chrono::milliseconds(2),
        .sync_tolerance = std::chrono::microseconds(1),
        .sync_timeout = std::chrono::seconds(10),
    });
return 0; }
using AUTD3Sharp;
using AUTD3Sharp.Link;
using AUTD3Sharp.Utils;

new EtherCrab(
    errHandler: (idx, status) =>
    {
        Console.Error.WriteLine($"Device[{idx}]: {status}");
    },
    option: new EtherCrabOption
    {
        Ifname = null,
        StateCheckPeriod = Duration.FromMillis(100),
        Sync0Period = Duration.FromMillis(2),
        SyncTolerance = Duration.FromMicros(1),
        SyncTimeout = Duration.FromSecs(10),
    }
);
from pyautd3 import Duration
from pyautd3.link.ethercrab import (
    EtherCrab,
    EtherCrabOption,
    Status,
)


def err_handler(idx: int, status: Status) -> None:
    print(f"Device[{idx}]: {status}")


EtherCrab(
    err_handler=err_handler,
    option=EtherCrabOption(
        ifname=None,
        state_check_period=Duration.from_millis(100),
        sync0_period=Duration.from_millis(2),
        sync_tolerance=Duration.from_micros(1),
        sync_timeout=Duration.from_secs(10),
    ),
)

EtherCrabリンクで指定できるオプションは以下の通りである. デフォルト値は上記の通り.

  • ifname: ネットワークインタフェース名. Noneの場合はAUTD3デバイスが接続されているネットワークインタフェースを自動的に選択する.
  • state_check_period: エラーが出ているかどうかを確認する間隔
  • sync0_period: 同期信号の周期
    • 大量のデバイスを接続すると挙動が不安定になる場合がある. このときは, sync0_periodの値を増やす. これら値はエラーが出ない中で, 可能な限り小さな値が望ましい. どの程度の値にすべきかは接続している台数に依存する.
  • sync_tolerance: 同期許容レベル. 初期化時, 各デバイスのシステム時間差がこの値以下になるまで待機する. 以下のタイムアウト時間が経過しても同期が完了しない場合はエラーとなる. この値を変更することは推奨されない.
  • sync_timeout: 同期タイムアウト. 上記のシステム時間差測定のタイムアウト時間.