1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96
//! A Rust Modbus library.
//!
//! # Examples
//!
//! A simple Modbus TCP Server:
//!
//! ```rust,no_run
//! use std::error::Error;
//!
//! use futures::SinkExt;
//! use tokio::net::{TcpListener, TcpStream};
//! use tokio_stream::StreamExt;
//! use tokio_util::codec::Framed;
//!
//! use easy_modbus::{Frame, codec::TcpServerCodec};
//!
//! #[tokio::main]
//! async fn main() -> Result<(), Box<dyn Error>> {
//! let addr = "127.0.0.1:502".to_string();
//! let server = TcpListener::bind(&addr).await?;
//! println!("Listening on: {}", addr);
//!
//! loop {
//! let (stream, _) = server.accept().await?;
//! tokio::spawn(async move {
//! if let Err(e) = process(stream).await {
//! println!("failed to process connection; error = {}", e);
//! }
//! });
//! }
//! }
//!
//! async fn process(stream: TcpStream) -> Result<(), Box<dyn Error>> {
//! let mut transport = Framed::new(stream, TcpServerCodec);
//! let frame = Frame::tcp();
//! while let Some(request) = transport.next().await {
//! match request {
//! Ok(request) => {
//! println!("load request --- {:?}", request);
//! let response = frame.read_coils_response(0x01, vec![0x00, 0x01]);
//! println!("send response --- {:?}", response);
//! transport.send(response).await?;
//! }
//! Err(e) => return Err(e.into()),
//! }
//! }
//! Ok(())
//! }
//! ```
//!
//! A simple Modbus TCP Client:
//!
//! ``` rust,no_run
//! use std::error::Error;
//!
//! use futures::SinkExt;
//! use tokio::net::TcpStream;
//! use tokio_stream::StreamExt;
//! use tokio_util::codec::Framed;
//!
//! use easy_modbus::{Frame, codec::TcpClientCodec};
//!
//! #[tokio::main]
//! async fn main() -> Result<(), Box<dyn Error>> {
//! let addr = "127.0.0.1:502".to_string();
//! let stream = TcpStream::connect(&addr).await?;
//! let mut transport = Framed::new(stream, TcpClientCodec);
//! let frame = Frame::tcp();
//! let request = frame.read_coils_request(0x01, 0x02, 0x08);
//!
//! transport.send(request).await?;
//! while let Some(response) = transport.next().await {
//! match response {
//! Ok(response) => {
//! println!("{:?}", response);
//! }
//! Err(e) => {
//! return Err(e.into());
//! }
//! }
//! }
//! Ok(())
//! }
//! ```
//!
extern crate core;
pub use frame::Frame;
pub use frame::Function;
pub use frame::Exception;
pub mod codec;
pub mod util;
mod frame;