🛠️ DICOM 调试的坑
做医疗影像系统开发的兄弟们,应该都懂那种痛:生产环境一抓一个准的 Bug,到了测试环境就莫名消失。
- 数据难搞:想调试某个特定的 DICOM C-STORE 交互场景?医院里很难拿到干净的设备样本(没开发调试环境\设备也无法直接远程调试,通过网络请求抓包和日志 调试又不方便还容易忽略重要信息)。
- 模拟太难:新功能上线前,没法精准模拟真实 CT/MRI 设备的通信行为(比如慢速传输、特定 AE Title)。
为了解决这些“生产环境 vs 测试环境”的割裂问题,折腾出了一个轻量级工具:DICOM Process Simulator。简单说,就是一个能帮你把 DICOM C-Store 单文件级别 交互过程录下来,还能随时回放复现的本地神器。
⚠️ 购买须知
🛡️ 本人目前用于日常设备对接测试正常,但无法保证所有设备均可100%复现。医疗影像设备的私有扩展、网络配置差异或特定厂商的传输实现可能导致兼容性问题。仅供开发与调试参考,生产环境请谨慎评估风险!
🚀 核心功能:不仅仅是录制
1. DICOM 录制 (Recording)
启动监听后,本工具自动扮演 SCP(服务类应用)角色,接收来自 SCU 的数据包。它不只是存文件那么简单,而是完整捕获了交互细节:
- ✅ 完整的 DICOM File Meta & Dataset:确保数据完整性。
- ✅ 关联协商信息:记录 AE Title、传输语法 (Transfer Syntax)、PDU ID 等关键上下文。
- ✅ 毫秒级时序日志:网络延迟对影像系统很敏感,这里精确记录了每个 DIMSE 消息的发送时间戳。
- ✅ 多并发支持:模拟真实设备时,多个会话同时录制互不干扰。
2. 会话复现 (Replay)
录下来的数据不是死文件,而是可执行的脚本。选择历史会话,一键启动回放模式:
- 🔄 保留原始顺序:严格按照 C-STORE-RQ -> RSP 的顺序发送。
- ⏱️ 精确复刻时间间隔:还原生产环境的网络抖动或设备处理延迟(这对排查超时 Bug 至关重要)。
- 🐢 自定义速率控制:调试时如果觉得太快,可以设置
sleep模拟慢速传输。 - 📊 实时状态反馈:进度条 + 日志输出,发送成功/失败一目了然。
💡 适用场景:这玩意儿能干嘛?
| 场景 | 描述 |
|---|---|
| 🐞 Bug 复现 | 捕获生产环境的异常会话(比如传输中断),在本地精确回放定位是网络层还是应用层问题。 |
| ⚡️ 性能测试 | 录制一次设备的C-Store文件传输协议流程,用于本地scp测试环境复现请求,便于兼容设备。 |