fix: 严格化解析、报告、统计与 CLI 边界并发布 0.1.2 解析器支持 BOM 与行内注释、拒绝超过 6 个字段;按区域报告排序并保留越界寄存器;JSON 报告补全控制字符转义;CLI 对 –format/–order/–word-order/–gap/–json-in 的不合法输入不再静默回退;统计修正未知区域边界并补充类型/权限计数;测试增至 136 个全部通过。
fix: 严格化解析、报告、统计与 CLI 边界并发布 0.1.2
解析器支持 BOM 与行内注释、拒绝超过 6 个字段;按区域报告排序并保留越界寄存器;JSON 报告补全控制字符转义;CLI 对 –format/–order/–word-order/–gap/–json-in 的不合法输入不再静默回退;统计修正未知区域边界并补充类型/权限计数;测试增至 136 个全部通过。
面向 MoonBit 生态的 Modbus 寄存器点表静态校验器(linter)+ 值编码库 + 命令行工具。 解析 PLC 寄存器点表(文本 / JSON),按 14 条静态规则 校验出重名、地址越界、地址重叠、地址漏配、JSONB 字段冲突等问题,输出多种人读/机器报告,并提供 --encode/--decode 直接做 int16/uint16/int32/float32/float64 的 Modbus 值编码与反解。
面向 MoonBit 生态的 Modbus 寄存器点表静态校验器(linter)+ 值编码库 + 命令行工具。
解析 PLC 寄存器点表(文本 / JSON),按 14 条静态规则 校验出重名、地址越界、地址重叠、地址漏配、JSONB 字段冲突等问题,输出多种人读/机器报告,并提供 --encode/--decode 直接做 int16/uint16/int32/float32/float64 的 Modbus 值编码与反解。
--encode
--decode
本项目以 MoonBit 为主要实现语言(100% MoonBit .mbt 源码),面向需要在构建与交付前发现工业点位配置错误的库作者、工具开发者和自动化使用者。
.mbt
在设备接入、数据采集或 MES 集成交付之前,尽早发现 Modbus 点表(point table)中人工维护产生的常见错误,减少现场排查成本。核心价值:
#
<name> <address> <type> <access> [unit] [jsonb]
bool / int16 / uint16 / int32 / uint32 / float32 / float64
R / W / RW
device_to_json_string
parse_device_json
json_roundtrip
render_issues_json
parse_issues_json
ByteOrder
WordOrder
需要 MoonBit 工具链(下载安装):
# Linux / macOS curl -fsSL https://cli.moonbitlang.com/install/unix.sh | bash export PATH="$HOME/.moon/bin:$PATH"
克隆仓库:
git clone https://github.com/668xin/modbus_lint.git cd modbus_lint
拉取依赖并本地构建验证(可复现,无需额外系统依赖):
moon update # 拉取依赖锁 moon check # 静态类型检查 moon test # 运行测试 moon build cmd/main # 构建 CLI 可执行程序
moon run cmd/main -- --demo
内置演示点表故意包含一处地址重叠,用于展示 Error 级问题如何阻断交付,因此该命令以非零状态退出;想看到通过效果可运行 moon run cmd/main -- --format summary "$(cat examples/point_table_ok.txt)"。
moon run cmd/main -- --format summary "$(cat examples/point_table_ok.txt)"
moon run cmd/main -- "a 40001 int16 R degC"
examples/
moon run cmd/main -- --format summary "$(cat examples/point_table_ok.txt)" moon run cmd/main -- --format json "$(cat examples/point_table_bad.txt)"
examples/point_table_ok.txt 应全部通过;examples/point_table_bad.txt 应命中地址重叠、寄存器重名、JSONB 重复映射、地址间隙过大、地址越界等错误。
examples/point_table_ok.txt
examples/point_table_bad.txt
--order big|little
moon run cmd/main -- --encode float64 1.5 # 打包 1.5 为 IEEE-754 字与字节 moon run cmd/main -- --encode int16 -248 # int16 字 0xFF08 + 大端字节 moon run cmd/main -- --decode int32 ffff 8000 # 从字(MSW 在前)还原有符号值 moon run cmd/main -- --decode int16 ff 08 --order little # 按字节序还原
moon run cmd/main -- --help
表格速览:
--format FMT
text
json
markdown
summary
by-area
csv
html
--json
--format json
--json-in J
--gap N
--show
--stats
--encode TYPE VAL
int16
uint16
int32
uint32
float32
float64
--decode TYPE HEX
--order BO
big
little
--word-order WO
hi-lo
lo-hi
--demo
存在 Error 级别问题(或解析失败)时,CLI 以非零状态退出,可直接用于 CI 阻断交付。
Error
校验一行点表并把结果输出为 JSON(完整可复现):
$ moon run cmd/main -- --format json "motor 40001 float32 R Hz jsonb->motor_freq"
输出示意(校验规则结论 + 结构化 JSON):
[{"issue": "重名/越界/重叠等" }, ...]
完整可运行输入样张见 examples/ 目录:point_table_ok.txt(通过)与 point_table_bad.txt(命中多项错误),可直接用于复现。
point_table_ok.txt
point_table_bad.txt
modbus_lint ├─ modbus_lint.mbt 核心数据模型(Device/Register/Issue) ├─ parser.mbt 解析器:点表文本 -> 结构化模型 ├─ validator.mbt 14 条静态校验规则 ├─ reporter.mbt 7 种报告输出 ├─ jsonio.mbt JSON 双向 I/O ├─ jsonb.mbt JSONB 字段映射模型 ├─ tools.mbt / stats.mbt 点表工具与统计 ├─ encoding.mbt 值编码模块(字节序/字序) ├─ cmd/main/main.mbt CLI 入口 ├─ examples/ 可运行示例点表 └─ .github/workflows/ci.yml CI:check + test + build
OSC 申报书见同目录 申报书.md;参赛功能/阶段任务清单见 TASKS.md。
申报书.md
TASKS.md
仓库内配置了 GitHub Actions(.github/workflows/ci.yml),在 push 到 main/master 或 pull_request 时自动执行 moon check(检查)→ moon test(测试)→ moon build cmd/main(构建) 三件套,保证 136 个测试在干净环境每次提交均可复现通过。
.github/workflows/ci.yml
push
main
master
pull_request
jobs: build: runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 - run: curl -fsSL https://cli.moonbitlang.com/install/unix.sh | bash - run: moon check # 检查 - run: moon test # 测试 - run: moon build cmd/main # 构建
moon test --deny-warn
moon check --deny-warn
moon check --deny-warn && moon test --deny-warn
本项目已按 MoonBit 模块规范配置模块元数据(moon.mod:name = "668xin/modbus_lint"、readme = "README.mbt.md"、license = "Apache-2.0"、keywords/description),并在 README.mbt.md 提供面向包使用者的说明。已发布到 mooncakes.io(668xin/modbus_lint@0.1.2)。
moon.mod
name = "668xin/modbus_lint"
readme = "README.mbt.md"
license = "Apache-2.0"
keywords
description
README.mbt.md
668xin/modbus_lint@0.1.2
moon publish
若服务器端需要仓库认证与版本号,请参照当前 MoonBit 官方 moon publish 说明配置;version、license、readme 字段均已就绪,可直接发布。
version
license
readme
本项目采用 Apache-2.0(OSI 认可的开源许可证),详见 LICENSE。moon.mod 中 license = "Apache-2.0" 已同步声明。
LICENSE
本项目为原创项目,不依赖或移植任何上游工程结构;如参考其他开源项目,将遵循对应原项目许可证要求。参考来源仅包括 Modbus 协议标准的寄存器区域划分与通用点表行式文本约定。
版权所有:中国计算机学会技术支持:开源发展技术委员会 京ICP备13000930号-9 京公网安备 11010802047560号
modbus_lint
本项目以 MoonBit 为主要实现语言(100% MoonBit
.mbt源码),面向需要在构建与交付前发现工业点位配置错误的库作者、工具开发者和自动化使用者。项目目标
在设备接入、数据采集或 MES 集成交付之前,尽早发现 Modbus 点表(point table)中人工维护产生的常见错误,减少现场排查成本。核心价值:
特性总览
#注释、空行(容忍 CRLF)、多空格/Tab 分隔,字段序<name> <address> <type> <access> [unit] [jsonb];自动推断 Modbus 区域(coil/DI/IR/HR)。bool / int16 / uint16 / int32 / uint32 / float32 / float64,权限R / W / RW。device_to_json_string/parse_device_json/json_roundtrip;发现render_issues_json/parse_issues_json。ByteOrder/WordOrder双序控制,16/32/64 位整数与 IEEE-754 浮点双向映射,float64 逐位精确、float32 按 IEEE-754 舍入。环境要求与安装
需要 MoonBit 工具链(下载安装):
克隆仓库:
拉取依赖并本地构建验证(可复现,无需额外系统依赖):
快速开始
1. 内置演示
2. 直接 lint 一行点表
3. 校验示例点表(正确 / 含错误各一份,位于
examples/)examples/point_table_ok.txt应全部通过;examples/point_table_bad.txt应命中地址重叠、寄存器重名、JSONB 重复映射、地址间隙过大、地址越界等错误。4. 值编码 / 解码(
--order big|little)5. 更多选项
表格速览:
--format FMTtext/json/markdown/summary/by-area/csv/html(默认 text)--json--format json的别名--json-in J--gap N--show--stats--encode TYPE VALint16/uint16/int32/uint32/float32/float64--decode TYPE HEX--order BObig/little--word-order WOhi-lo/lo-hi(int32/uint32/float32/float64)--demo存在
Error级别问题(或解析失败)时,CLI 以非零状态退出,可直接用于 CI 阻断交付。最小可运行示例
校验一行点表并把结果输出为 JSON(完整可复现):
输出示意(校验规则结论 + 结构化 JSON):
完整可运行输入样张见
examples/目录:point_table_ok.txt(通过)与point_table_bad.txt(命中多项错误),可直接用于复现。项目结构
持续集成(CI)
仓库内配置了 GitHub Actions(
.github/workflows/ci.yml),在push到main/master或pull_request时自动执行 moon check(检查)→ moon test(测试)→ moon build cmd/main(构建) 三件套,保证 136 个测试在干净环境每次提交均可复现通过。测试与质量保证
moon test --deny-warn),覆盖:数据模型、解析器、全部 14 条校验规则(正/反向)、JSON 往返、工具与统计、各报告输出、值编码 round-trip。moon check --deny-warn0 警告。发布到 mooncakes.io
本项目已按 MoonBit 模块规范配置模块元数据(
moon.mod:name = "668xin/modbus_lint"、readme = "README.mbt.md"、license = "Apache-2.0"、keywords/description),并在README.mbt.md提供面向包使用者的说明。已发布到 mooncakes.io(668xin/modbus_lint@0.1.2)。开源许可证
本项目采用 Apache-2.0(OSI 认可的开源许可证),详见
LICENSE。moon.mod中license = "Apache-2.0"已同步声明。本项目为原创项目,不依赖或移植任何上游工程结构;如参考其他开源项目,将遵循对应原项目许可证要求。参考来源仅包括 Modbus 协议标准的寄存器区域划分与通用点表行式文本约定。