14 个版本
新版本 0.0.13 | 2024年8月18日 |
---|---|
0.0.12 | 2024年8月14日 |
0.0.11 | 2024年7月7日 |
0.0.10 | 2024年6月15日 |
0.0.3 | 2024年3月26日 |
5 在 #wire 中排名
109 每月下载量
用于 m-bus-parser-cli
180KB
3.5K SLoC
m-bus-parser (有线)
简介
有关贡献,请参阅 CONTRIBUTING.md
m-bus-parser 是一个开源解析器(有时也称为解码器或反序列化器),用于解析 有线 m-bus 协议,并使用 Rust 编写。
"M-Bus 或仪表总线是欧洲标准(EN 13757-2 物理和链路层,EN 13757-3 应用层)用于远程读取水、燃气或电力表。M-Bus 也可用于其他类型的消耗仪表,如供暖系统或水表。M-Bus 接口是为在两根线上进行通信而设计的,使其具有成本效益。" - 维基百科
过时的规范可以在 m-bus 网站 上免费获得。这是一份了解协议的好起点。已经有很多其他规范的实现。
此外,开放计量系统(OMS)小组已发布 m-bus 协议的规范。该规范可在 OMS 网站 或更具体地 此处 免费获取。
例如,不再维护的 rscada 编写的 m-bus 编码器和解码器,使用 C 编写,jMbus,使用 Java 编写,Valley.Net.Protocols.MeterBus,使用 C# 编写,tmbus,使用 JavaScript 编写或 pyMeterBus,使用 Python 编写。
依赖和部署
NPM Wasm 包
解析器已作为 npm 包发布,并可在浏览器中使用。示例请参阅网址 https://maebli.github.io/m-bus-parser/。
源代码位于本仓库的wasm文件夹中
CLI rust crate
存在一个命令行界面(CLI),源代码位于子文件夹“cli”中,并在crates.io上发布:https://crates.io/crates/m-bus-parser-cli。
库函数的可视化
不要混淆不同类型的帧类型。最初需要理解的是最常见的帧类型 LongFrame
。其他类型例如用于搜索从机或设置从机主地址。这对于大多数用户来说不是主要兴趣所在。可视化是在工具 excalidraw 的帮助下制作的。
序列化应用层的可视化
上面的序列化应用层可以进一步分解为可解析的部分。
值信息块序列化
目标
- 适用于嵌入式目标
no_std
- 遵循 Rust API 指南 https://rust-lang.github.io/api-guidelines/
- 最小复制
开发状态
该库目前正在开发中。它能够解析链路层但不能解析应用层。下一个目标是解析应用层。一旦实现,该库将作为 v0.1.0
发布。在达到此里程碑后,将设定进一步的目标,例如解密。
当前函数示例
示例取自 https://m-bus.com/documentation-wired/06-application-layer
- 将从机设置为地址8,而不更改其他任何内容
输入: 68 06 06 68 | 53 FE 51 | 017A08 | 25 16
使用库解析帧(数据目前还不能用库解析)
use m_bus_parser::frames::{Address, Frame, Function};
let example = vec![
0x68, 0x06, 0x06, 0x68,
0x53, 0xFE, 0x51,
0x01, 0x7A, 0x08,
0x25, 0x16,
];
let frame = Frame::try_from(example.as_slice()))?;
if let Frame::ControlFrame { function, address, data } = frame {
assert_eq!(address, Address::Broadcast { reply_required: true });
assert_eq!(function, Function::SndUd { fcb: (false)});
assert_eq!(data, &[0x51,0x01, 0x7A, 0x08]);
}
依赖关系
~0.6–11MB
~110K SLoC