Client

Struct Client 

Source
pub struct Client { /* private fields */ }

Implementations§

Source§

impl Client

Source

pub fn new<A: ToSocketAddrs + Debug>( addr: A, timeouts: Timeouts, source: Source, ) -> Result<(Self, Reader)>

Open a new connection to an ADS server.

If connecting to a server that has an AMS router, it needs to have a route set for the source IP and NetID, otherwise the connection will be closed immediately. The route can be added from TwinCAT, or this crate’s udp::add_route helper can be used to add a route via UDP message.

source is the AMS address to to use as the source; the NetID needs to match the route entry in the server. If Source::Auto, the NetID is constructed from the local IP address with .1.1 appended; if there is no IPv4 address, 127.0.0.1.1.1 is used.

The AMS port of source is not important, as long as it is not a well-known service port; an ephemeral port number > 49152 is recommended. If Auto, the port is set to 58913.

Since all communications is supposed to be handled by an ADS router, only one TCP/ADS connection can exist between two hosts. Non-TwinCAT clients should make sure to replicate this behavior, as opening a second connection will close the first.

§Panics

Should not panic

Source

pub fn source(&self) -> AmsAddr

Return the source address the client is using.

Source

pub fn get_notification_channel(&self) -> Receiver<Notification>

Get a receiver for notifications.

Source

pub fn device(&self, addr: AmsAddr) -> Device

Return a wrapper that executes operations for a target device (known by NetID and port).

The local NetID 127.0.0.1.1.1 is mapped to the client’s source NetID, so that you can connect to a local PLC using:

let client = Client::new("127.0.0.1", ..., Source::Request);
let device = client.device(AmsAddr::new(AmsNetId::local(), 851));

without knowing its NetID.

Source

pub fn session_id(&self) -> usize

Get internal session ID. The handles should be recreated if changed

Source

pub fn lock_session(&self) -> Result<SessionGuard>

Lock TCP session (disable reconnects)

Source

pub fn communicate( &self, cmd: Command, target: AmsAddr, data_in: &[&[u8]], data_out: &mut [&mut [u8]], ) -> Result<usize>

Low-level function to execute an ADS command.

Writes a data from a number of input buffers, and returns data in a number of output buffers. The latter might not be filled completely; the return value specifies the number of total valid bytes. It is up to the caller to determine what this means in terms of the passed buffers.

Source

pub fn purge(&self)

Purge client, e.g. after restart

Source

pub fn shutdown(&self)

Trait Implementations§

Source§

impl Clone for Client

Source§

fn clone(&self) -> Client

Returns a duplicate of the value. Read more
1.0.0 · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more

Auto Trait Implementations§

§

impl Freeze for Client

§

impl !RefUnwindSafe for Client

§

impl Send for Client

§

impl Sync for Client

§

impl Unpin for Client

§

impl !UnwindSafe for Client

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T> Instrument for T

Source§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided Span, returning an Instrumented wrapper. Read more
Source§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> if into_left is true. Converts self into a Right variant of Either<Self, Self> otherwise. Read more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> if into_left(&self) returns true. Converts self into a Right variant of Either<Self, Self> otherwise. Read more
Source§

impl<T> Pointable for T

Source§

const ALIGN: usize

The alignment of pointer.
Source§

type Init = T

The type for initializers.
Source§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
Source§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
Source§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
Source§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
Source§

impl<T> ToOwned for T
where T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
Source§

impl<T> WithSubscriber for T

Source§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a WithDispatch wrapper. Read more
Source§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a WithDispatch wrapper. Read more