fix
This commit is contained in:
parent
55006eb3b1
commit
724bedebf5
@ -1,4 +1,5 @@
|
|||||||
mod codec;
|
mod codec;
|
||||||
|
mod modbus_client;
|
||||||
|
|
||||||
use tokio::net::{UnixListener, UnixStream};
|
use tokio::net::{UnixListener, UnixStream};
|
||||||
//use tokio_util::codec::{Framed, LinesCodec};
|
//use tokio_util::codec::{Framed, LinesCodec};
|
||||||
@ -8,6 +9,7 @@ use tokio::io::AsyncReadExt;
|
|||||||
|
|
||||||
use std::io::{self, Read, Write};
|
use std::io::{self, Read, Write};
|
||||||
use std::process;
|
use std::process;
|
||||||
|
use crate::modbus_client::ModbusClient;
|
||||||
|
|
||||||
#[tokio::main]
|
#[tokio::main]
|
||||||
async fn main() {
|
async fn main() {
|
||||||
@ -51,7 +53,8 @@ async fn main() {
|
|||||||
match data[0] {
|
match data[0] {
|
||||||
0x01 => {
|
0x01 => {
|
||||||
let config = codec::parse_serial_config(&data[1..]).unwrap();
|
let config = codec::parse_serial_config(&data[1..]).unwrap();
|
||||||
println!("{:?}", config)
|
println!("{:?}", config);
|
||||||
|
let client = ModbusClient::new(config);
|
||||||
},
|
},
|
||||||
_ => {
|
_ => {
|
||||||
|
|
||||||
|
|||||||
49
src/modbus_client.rs
Normal file
49
src/modbus_client.rs
Normal file
@ -0,0 +1,49 @@
|
|||||||
|
use crate::codec::SerialConfig;
|
||||||
|
|
||||||
|
use tokio_serial::{SerialPortBuilderExt, SerialStream};
|
||||||
|
use tokio_modbus::{
|
||||||
|
client::rtu,
|
||||||
|
client::Context,
|
||||||
|
slave::Slave,
|
||||||
|
prelude::*,
|
||||||
|
};
|
||||||
|
|
||||||
|
pub (crate) struct ModbusClient {
|
||||||
|
ctx: Context
|
||||||
|
}
|
||||||
|
|
||||||
|
impl ModbusClient {
|
||||||
|
|
||||||
|
pub fn new(serial_config: SerialConfig) -> Self {
|
||||||
|
let port_name = String::from_utf8(serial_config.port).unwrap();
|
||||||
|
let parity = match serial_config.parity {
|
||||||
|
0x00 => tokio_serial::Parity::None,
|
||||||
|
0x01 => tokio_serial::Parity::Odd,
|
||||||
|
0x02 => tokio_serial::Parity::Even,
|
||||||
|
_ => tokio_serial::Parity::None
|
||||||
|
};
|
||||||
|
|
||||||
|
let stopbits = match serial_config.stopbits {
|
||||||
|
0x01 => tokio_serial::StopBits::One,
|
||||||
|
0x02 => tokio_serial::StopBits::Two,
|
||||||
|
_ => tokio_serial::StopBits::One
|
||||||
|
};
|
||||||
|
|
||||||
|
let builder = tokio_serial::new(port_name, serial_config.baudrate)
|
||||||
|
.data_bits(tokio_serial::DataBits::Eight)
|
||||||
|
.stop_bits(stopbits)
|
||||||
|
.parity(parity)
|
||||||
|
.timeout(std::time::Duration::from_millis(serial_config.timeout as u64));
|
||||||
|
|
||||||
|
// 2. 建立串口连接
|
||||||
|
let port = builder.open_native_async().unwrap();
|
||||||
|
|
||||||
|
// 3. 创建Modbus RTU客户端 (0.16.1新API)
|
||||||
|
let slave_id = Slave(0x01); // 从站地址
|
||||||
|
let ctx = rtu::attach_slave(port, slave_id);
|
||||||
|
|
||||||
|
Self {
|
||||||
|
ctx
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
Loading…
x
Reference in New Issue
Block a user