非同期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(())
}