fix
This commit is contained in:
parent
55006eb3b1
commit
724bedebf5
@ -1,4 +1,5 @@
|
||||
mod codec;
|
||||
mod modbus_client;
|
||||
|
||||
use tokio::net::{UnixListener, UnixStream};
|
||||
//use tokio_util::codec::{Framed, LinesCodec};
|
||||
@ -8,6 +9,7 @@ use tokio::io::AsyncReadExt;
|
||||
|
||||
use std::io::{self, Read, Write};
|
||||
use std::process;
|
||||
use crate::modbus_client::ModbusClient;
|
||||
|
||||
#[tokio::main]
|
||||
async fn main() {
|
||||
@ -51,7 +53,8 @@ async fn main() {
|
||||
match data[0] {
|
||||
0x01 => {
|
||||
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