これは開発版のドキュメントである. 内容は次のリリースまでに変更される可能性がある. 最新のリリース版は 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_appcapability はバイナリに付くので, リビルドすると消える.
Python や C# から capability を付ける場合は, 対象がインタプリタ本体 (python3, dotnet) になる.
root で実行するか, /dev/bpf* に読み書き権限を与える.
sudo chgrp admin /dev/bpf*sudo chmod g+rw /dev/bpf*/dev/bpf* は再起動時に作り直されるので, 再起動するたびに権限を付与する必要がある.
Windows
Section titled “Windows”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()};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,)new EchocatLinkOption{ Iface = iface, Sync0Period = sync0Period, FramePhase = framePhase, PduTimeout = pduTimeout, StateTransitionTimeout = stateTransitionTimeout, DcStaticSyncIterations = dcStaticSyncIterations, DcStartDelay = dcStartDelay, SyncTolerance = syncTolerance, SyncTimeout = syncTimeout, ProcessDataWatchdog = processDataWatchdog,};| フィールド | 型 | 説明 |
|---|---|---|
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.
FramePhase
Section titled “FramePhase”SYNC0 の立ち上がりから何秒後にフレームを着地させるかを決める.
FramePhase::Auto;FramePhase::At(Duration::from_micros(500));FramePhase.AutoFramePhase.At(Duration.from_micros(500))_ = FramePhase.Auto;_ = FramePhase.At(TimeSpan.FromMicroseconds(500));| バリアント | 説明 |
|---|---|
Auto |
実測した 1 サイクルの交換時間から自動で決める |
At(phase) |
SYNC0 から phase 後に着地させる. 0 < phase < sync0_period にすること |
デフォルトは Auto.
SleepStrategy (Rust のみ)
Section titled “SleepStrategy (Rust のみ)”RT スレッドが次のサイクルまで待つ方法を選ぶ.
SleepStrategy::Sleep;SleepStrategy::Spin { margin: Duration::from_micros(100),};| バリアント | 説明 |
|---|---|
Sleep |
std::thread::sleep で待つ. |
Spin { margin } |
デッドラインの margin 手前まで sleep し, そこからスピンする |
デフォルトはSleep.