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

リンク状態の監視

Checkerを使うことでデバイスとの EtherCAT リンクが正常に動いているかどうかを監視できる.

通常の Client::open の代わりに open_with_checker を使うと, ClientChecker の組が返る.

let (client, mut checker) = Client::open_with_checker(
&geometry,
EchocatLinkOption::default(),
ClientConfig::default(),
)
.await?;

Checker::check は, 呼び出した時点のリンク状態 LinkStatus を返す. LinkStatus は以下を持つ.

  • devices: デバイスごとの状態 (DeviceState). 正常なら OP, 切断されると LOST など.
  • all_op: 全デバイスが OP 状態か.
  • any_lost: いずれかのデバイスが LOST 状態か.
  • recoveries: 切断から復帰した累計回数.

以下は, 一定間隔で check を呼び, 状態が変化したときだけ出力する例.

let mut last: Option<LinkStatus> = None;
loop {
let status = checker.check().await?;
if last.as_ref() != Some(&status) {
for (i, state) in status.devices().iter().enumerate() {
println!("device[{i}]: {state}");
}
println!(
"all operational: {}, any lost: {}, recoveries: {}",
status.all_op(),
status.any_lost(),
status.recoveries()
);
last = Some(status);
}
tokio::time::sleep(CHECK_INTERVAL).await;
}

check を呼ぶ頻度はユーザー次第である.