lis-simulator

LIS 模拟器

基于 ASTM E1381/E1394 协议的实验室信息系统(LIS)模拟器,用于测试医疗检验仪器的串口通信功能。

跨平台支持:Windows / Linux

[!Tip] 🪟 下载 Windows x64 版本 (最新版)

🐧 下载 Linux x64 版本 (最新版)

主界面截图

串口主界面截图

功能特性

技术栈

组件 技术
语言 Rust (Edition 2021)
UI 框架 Slint (Fluent 风格)
串口通信 serialport 4.x
集成测试 Python 3 + pyserial

构建与运行

环境要求

编译

cargo build --release

运行

cargo run --release

使用说明

  1. 启动程序,在配置面板选择串口号/波特率或 TCP 模式
  2. 选择单向或双向通信模式
  3. 点击 开始监听
  4. 仪器发送数据后,原始日志和解析结果实时显示

测试

单元测试与集成测试

cargo test

TCP 无头模式(无需物理串口)

# 终端 1:启动无头 TCP 服务器
cargo run -- --headless --tcp 12345

# 终端 2:运行测试脚本
python tests/test_tcp.py --port 12345

串口模式(需要 com0com 或物理串口线)

# 终端 1:启动 GUI
cargo run

# 终端 2:模拟仪器端
python tests/instrument_simulator.py --port COM11 --baud 9600

协议说明

ASTM E1381 握手流程

仪器与 LIS 之间的通信建立过程:

ASTM 握手流程

完整流程:ENQACK → 数据帧(可多帧) → 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

根据实际仪器的协议文档调整配置,抓包对比即可确认。

License

Copyright (C) 2026 Mq-b

本项目基于 GPL-3.0 许可证开源。