2个版本
0.0.2 | 2024年4月29日 |
---|---|
0.0.1 | 2024年4月29日 |
#307 in 嵌入式开发
21KB
386 行
ModbusBuffer
ModbusBuffer
是一个Rust库,提供了针对Modbus通信的环形缓冲区实现。它设计用于高效处理Modbus帧的缓冲,具有可配置的帧长度和可选的缓冲区满时数据覆盖功能。这个库在无标准库(即no_std
环境)的系统中特别有用。这个库的初始目的是允许在RS485上解码Modbus流而不必担心silences
。
功能
- 环形缓冲区:高效管理Modbus存储的环形缓冲区。
- 可配置的帧长度:设置最小和最大帧大小。
- 覆盖选项:在缓冲区满时选择覆盖旧数据或恐慌。
- CRC检查:包含计算和验证Modbus帧的CRC16功能。
- 帧解码:在接收到每个字节时尝试持续解码帧,这在无法可靠检测到静默(表示帧的结束)的场合中是理想的。
安装
将以下内容添加到您的Cargo.toml
[dependencies]
modbus_buffer = "0.0.2"
示例用法
use modbus_buffer::ModbusBuffer;
fn main() {
let mut buffer = ModbusBuffer::<16>::new()
.min_frame_len(3)
.max_frame_len(8)
.overwrite(true);
// start receiving data in the middle of a request
buffer.push(0xCD); // value
buffer.push(0x9F); // crc
buffer.push(0xBE); // crc
// Receive a second request
buffer.push(0x12); // unit address
buffer.push(0x06); // fn code
buffer.push(0x22); // addr
buffer.push(0x22); // addr
buffer.push(0xAB); // value
buffer.push(0xCD); // value
buffer.push(0x9F); // crc
buffer.push(0xBE); // crc
let mut output = [0u8; 16];
// Here, the 'noise' from previous request will be dropped and the second request detected
let len = buff.try_decode_frame(&mut output);
}
贡献
欢迎贡献!如果您发现错误或有改进建议,请随时提交拉取请求或创建问题。