コンテンツにスキップ
これは開発版のドキュメントである. 内容は次のリリースまでに変更される可能性がある. 最新のリリース版は 0.9.x を参照.

echocat

EchocatLink は AUTD3 のために書かれた EtherCAT Link.

echocat を使うには, OSごとに権限が必要になる.

root で実行するか, 実行バイナリに capability を付与する.

sudo setcap cap_net_raw,cap_net_admin,cap_sys_nice+ep ./target/release/my_app

capability はバイナリに付くので, リビルドすると消える.

Python や C# から capability を付ける場合は, 対象がインタプリタ本体 (python3, dotnet) になる.

root で実行するか, /dev/bpf* に読み書き権限を与える.

sudo chgrp admin /dev/bpf*
sudo chmod g+rw /dev/bpf*

/dev/bpf* は再起動時に作り直されるので, 再起動するたびに権限を付与する必要がある.

npcap を「WinPcap API-compatible mode」でインストールする. インストーラで「Restrict Npcap driver’s access to Administrators only」を選んだ場合は, 管理者権限で実行する必要がある.

npcap が入っていないと wpcap.dll が見つからず, プロセスが起動時点で落ちる (エラーコード 0xc0000135).

EchocatLinkOption {
iface,
sync0_period,
frame_phase,
pdu_timeout,
state_transition_timeout,
dc_static_sync_iterations,
dc_start_delay,
sync_tolerance,
sync_timeout,
process_data_watchdog,
sleep_strategy,
..Default::default()
};
フィールド 型 説明
iface Interface 使用するネットワークインターフェース. Interface::Auto で自動選択, Interface::Name(..) で名前指定
sync0_period Duration SYNC0 信号の周期 (= フレームの送出周期)
frame_phase FramePhase SYNC0 周期内のどこにフレームを着地させるか
pdu_timeout Duration 1 つの PDU の応答を待つタイムアウト
state_transition_timeout Duration EtherCAT 状態遷移 (INIT → PRE-OP → SAFE-OP → OP) を待つタイムアウト
dc_static_sync_iterations u32 DC の静的ドリフト補正で回すフレーム数
dc_start_delay Duration SYNC0 の開始時刻を現在のバス時刻からどれだけ先に置くか
sync_tolerance Duration 同期完了とみなす許容誤差
sync_timeout Duration 同期完了を待つタイムアウト
process_data_watchdog Duration サブデバイスがプロセスデータの途絶を検出するまでの時間
sleep_strategy SleepStrategy 次のサイクルまでの待ち方 (Rust のみ)

sync0_period の既定値は Windows で 2 ms, それ以外で 1 ms.

SYNC0 の立ち上がりから何秒後にフレームを着地させるかを決める.

FramePhase::Auto;
FramePhase::At(Duration::from_micros(500));
バリアント 説明
Auto 実測した 1 サイクルの交換時間から自動で決める
At(phase) SYNC0 から phase 後に着地させる. 0 < phase < sync0_period にすること

デフォルトは Auto.

RT スレッドが次のサイクルまで待つ方法を選ぶ.

SleepStrategy::Sleep;
SleepStrategy::Spin {
margin: Duration::from_micros(100),
};
バリアント 説明
Sleep std::thread::sleep で待つ.
Spin { margin } デッドラインの margin 手前まで sleep し, そこからスピンする

デフォルトはSleep.