基于 ASTM E1381/E1394 协议的实验室信息系统(LIS)模拟器,用于测试医疗检验仪器的串口通信功能。
跨平台支持:Windows / Linux
[!Tip] 🪟 下载 Windows x64 版本 (最新版)


| 组件 | 技术 |
|---|---|
| 语言 | Rust (Edition 2021) |
| UI 框架 | Slint (Fluent 风格) |
| 串口通信 | serialport 4.x |
| 集成测试 | Python 3 + pyserial |
build-essential、pkg-config、libfontconfig-devcargo build --release
cargo run --release
cargo test
# 终端 1:启动无头 TCP 服务器
cargo run -- --headless --tcp 12345
# 终端 2:运行测试脚本
python tests/test_tcp.py --port 12345
# 终端 1:启动 GUI
cargo run
# 终端 2:模拟仪器端
python tests/instrument_simulator.py --port COM11 --baud 9600
仪器与 LIS 之间的通信建立过程:
完整流程:ENQ → ACK → 数据帧(可多帧) → ACK(每帧) → EOT
ASTM 数据帧由以下部分组成:
| 记录类型 | 说明 |
|---|---|
H |
Header Record - 消息头 |
P |
Patient Record - 患者信息 |
O |
Order Record - 检验申请 |
R |
Result Record - 检验结果 |
Q |
Request Record - 查询请求(双向模式) |
C |
Comment Record - 备注 |
L |
Terminator Record - 结束标记 |
不同仪器的帧格式存在细微差异(帧号有无、校验和范围、hex 补零等),通过 protocol.json 适配:
{
"astm": {
"has_frame_number": false,
"checksum_includes_stx": true,
"checksum_zero_padded": false
}
}
| 配置项 | 说明 | 默认值 |
|---|---|---|
has_frame_number |
STX 后是否有帧号字节 | false |
checksum_includes_stx |
校验和计算是否包含 STX | true |
checksum_zero_padded |
校验和 hex 是否补零(2位) | false |
配置文件路径:settings/protocol.json 或项目根目录 protocol.json
根据实际仪器的协议文档调整配置,抓包对比即可确认。
Copyright (C) 2026 Mq-b
本项目基于 GPL-3.0 许可证开源。