10 releases
0.4.4 | Oct 3, 2024 |
---|---|
0.4.3 | Nov 17, 2022 |
0.4.2 | Sep 22, 2022 |
0.4.1 | Aug 26, 2022 |
0.0.1 | May 1, 2018 |
#114 in Hardware support
185 downloads per month
Used in ads-proxy
150KB
3K
SLoC
ads
This crate allows to connect to Beckhoff TwinCAT devices and other servers speaking the ADS (Automation Device Specification) protocol.
Installation
Use with Cargo as usual, no system dependencies are required.
[dependencies]
ads = "0.4"
Rust version
Minimum supported Rust version is 1.63.0.
Usage
A simple example:
fn main() -> ads::Result<()> {
// Open a connection to an ADS device identified by hostname/IP and port.
// For TwinCAT devices, a route must be set to allow the client to connect.
// The source AMS address is automatically generated from the local IP,
// but can be explicitly specified as the third argument.
let client = ads::Client::new(("plchost", ads::PORT), ads::Timeouts::none(),
ads::Source::Auto)?;
// Specify the target ADS device to talk to, by NetID and AMS port.
// Port 851 usually refers to the first PLC instance.
let device = client.device(ads::AmsAddr::new([5, 32, 116, 5, 1, 1].into(), 851));
// Ensure that the PLC instance is running.
assert!(device.get_state()?.0 == ads::AdsState::Run);
// Request a handle to a named symbol in the PLC instance.
let handle = Handle::new(device, "MY_SYMBOL")?;
// Read data in form of an u32 from the handle.
let value: u32 = handle.read_value()?;
println!("MY_SYMBOL value is {}", value);
// Connection will be closed when the client is dropped.
Ok(())
}
Features
All ADS requests are implemented.
Further features include support for receiving notifications from a channel, file access via ADS, and communication via UDP to identify an ADS system and set routes automatically.
Examples
A utility called adstool
is found under examples/
, very similar to the one
provided by the C++ library.
Dependencies
~1.6–2.3MB
~41K SLoC