非同期API

Rust版のライブラリでは非同期処理をサポートしている.

NOTE: C++, C#, Python版のライブラリでは, この機能は提供されていない.

Setup

非同期処理を行うには, autd3 crateのasync featureを有効にする必要がある.

cargo add autd3 --features "async"

また, 各Linkに対して, async featureを有効にする必要がある場合がある.

  • SOEM

    cargo add autd3-link-soem --features "async"
  • TwinCAT

    cargo add autd3-link-twincat --features "async"
  • RemoteTwinCAT

    cargo add autd3-link-twincat --features "remote async"
  • RemoteSOEM, Simulator

    • デフォルトで有効

非同期APIを使用するには, 通常のControllerの代わりに, autd3::r#async::Controllerを使用すればいい.

use autd3::prelude::*; use autd3_link_soem::{SOEM, SOEMOption, Status}; #[tokio::main] async fn main() -> Result<(), Box<dyn std::error::Error>> { let mut autd = autd3::r#async::Controller::open( [AUTD3 { pos: Point3::origin(), rot: UnitQuaternion::identity(), }], SOEM::new( |slave, status| { eprintln!("slave[{}]: {}", slave, status); if status == Status::Lost { std::process::exit(-1); } }, SOEMOption::default(), ), ) .await?; autd.firmware_version().await?.iter().for_each(|firm_info| { println!("{}", firm_info); }); autd.send(Silencer::default()).await?; let g = Focus { pos: autd.center() + Vector3::new(0., 0., 150.0 * mm), option: FocusOption::default(), }; let m = Sine { freq: 150 * Hz, option: SineOption::default(), }; autd.send((m, g)).await?; println!("press enter to quit..."); let mut _s = String::new(); std::io::stdin().read_line(&mut _s)?; autd.close().await?; Ok(()) }