当前位置: 首页 > news >正文

DICOM通讯(ACSE->DIMSE->Worklist)

DICOM 通讯协议中的 ACSE → DIMSE → Worklist 这条通讯链路。DICOM 通讯栈本身是一个多层的协议结构,就像 OSI 模型一样,逐层封装功能。

一、DICOM 通讯协议栈总体架构

DICOM 通讯使用 TCP/IP 建立连接,其上面封装了多个协议层次,如下所示:

物理层 (TCP/IP)
└── 应用服务元素层(ACSE)└── DICOM 消息服务元素层(DIMSE)└── DICOM 服务类(如 Worklist、C-FIND、C-STORE)

二、分层结构分析(ACSE → DIMSE → 服务类)

层级全称功能示例
ACSEAssociation Control Service Element建立、维护、释放连接握手、验证 AE Title、协商 SOP Class
DIMSEDICOM Message Service Element封装具体 DICOM 命令C-ECHO(测试联通)、C-FIND(查询)、C-STORE(存储)
服务类(SCP/SCU)如 Worklist、Storage 等提供特定服务操作的实现Modality Worklist、Image Store 等

三、各层通讯流程详解

1. ACSE – 建立连接和协商参数

  • 目的: 类似“握手”,保证双方都支持相同的 SOP Class 和传输语法。
  • 主要操作: A-ASSOCIATE 请求/响应。
  • 双方角色:
    • SCU(Service Class User)——客户端,一般是 Modalities(如 CT、MR);
    • SCP(Service Class Provider)——服务端,一般是 RIS、PACS 系统。

🔁 示例流程:

Modality(SCU) ---- A-ASSOCIATE-REQUEST ----> RIS/PACS(SCP)<---- A-ASSOCIATE-ACCEPT ----

2. DIMSE – 封装命令与数据

  • DIMSE-C(Command)服务:
    • C-ECHO:测试网络连通性;
    • C-FIND:查找 Worklist;
    • C-STORE:存储影像;
  • DIMSE-N(Normalized)服务:
    • 如 N-CREATE, N-SET,多用于打印、影像挂接等场景。

📌 这些命令都是通过 P-DATA 传输的,一次 DICOM 命令可能包含多个数据块(PDUs)。


3. 服务类:Modality Worklist 实际通讯流程

Modality Worklist(MWL)服务帮助 Modalities 自动获取病人检查信息,避免人工输入。

🧭 实际通讯步骤如下:
步骤通讯方向操作协议层说明
1Modality → RISA-ASSOCIATEACSE连接并协商 SOP Class 和传输语法
2Modality → RISC-FIND 请求DIMSE提交查询条件(如 Scheduled Station AE Title)
3RIS → ModalityC-FIND 响应DIMSE返回匹配的 Worklist 项(可能多条)
4Modality → RISA-RELEASEACSE释放连接

🌐 查询参数举例(Worklist C-FIND 请求 DataSet)

属性标签属性名称说明示例
(0008,0050)Accession Number检查号20240401-01
(0010,0020)Patient ID病人ID123456
(0010,0010)Patient Name病人姓名张三
(0040,0100)Scheduled Procedure Step Sequence计划检查步骤包含影像类型、时间等信息

四、现实系统中的典型场景(示意图)

+-----------+            +-------------+
|  Modalities| <--C-FIND--|  Worklist SCP|
|  (CT/MR)  | --C-FIND--> |   (如RIS)   |
+-----------+            +-------------+\                       ^\-C-STORE 影像--------/\--> PACS 存储服务器

🧠 总结知识点(结构化回顾)

层级关键术语说明举例
ACSEA-ASSOCIATE, A-RELEASE, A-RJ建立/释放会话连接连接 RIS/PACS
DIMSEC-FIND, C-STORE, C-ECHO封装 DICOM 操作指令查询 Worklist、发送影像
服务类Worklist, Storage 等提供具体 DICOM 服务自动查询病人信息、影像归档

🌐模块一 DICOM 通讯分层机制简明解析

DICOM 通讯协议遵循类似于 TCP/IP 的分层架构,其核心通信流程由以下三层构成:

🔷 1. ACSE(Association Control Service Element)

负责 建立、确认、拒绝或释放会话连接

✅ 功能:
  • 完成 SCU(客户端) 与 SCP(服务器)之间的会话建立和协商
  • 协议协商内容:SOP Class、传输语法、AE Title 等
📦 ACSE 层常见 PDU(协议数据单元)类型:
PDU 类型含义功能说明
A-ASSOCIATE-RQ请求建立连接SCU 发起连接请求
A-ASSOCIATE-AC接受连接SCP 接受并返回
A-ASSOCIATE-RJ拒绝连接SCP 拒绝连接请求
A-RELEASE-RQ / RP释放连接通讯结束时使用
P-DATA-TF传输数据封装 DICOM 命令与数据(传入 DIMSE 层)

🔷 2. DIMSE(DICOM Message Service Element)

处理 DICOM 命令、响应和数据,如查询、存储、回声测试等

✅ 功能:
  • 接收 ACSE 层传入的 P-DATA PDU;
  • 解包获取 DIMSE 命令:如 C-ECHOC-FINDC-STORE 等;
  • 执行 DICOM 服务操作,封装响应回传。
📌 数据识别关键:

📍若接收到的第一个字节为 0x04(十进制 4),则代表该 PDU 类型为 P-DATA-TF,表明数据需进入 DIMSE 层进一步处理。


🔷 3. DICOM 服务类(以 Worklist 为例)

通过 DIMSE 封装的服务,提供真实的医疗影像业务能力,例如病人信息查询、影像传输等。

✅ Worklist 示例(Modality Worklist):
  • 基于 DIMSE 层的 C-FIND 命令;
  • 查询参数包括病人姓名、检查日期、检查类型等;
  • 返回结果包含待检查病人的详细信息,供 Modalities 自动填充。

你的分析很精准,抓住了 DICOM 协议中从 ACSE 到 DIMSE 的过渡细节。下面我将对你这段内容进行条理清晰的结构化分析,并补充:

  1. PDU → PDV → DIMSE Command/DataSet 的转换流程图解
  2. DIMSE 服务组(11种服务)全部列出并说明作用
  3. PDV Flags 字节说明表格

🔄 模块二 DICOM 通讯处理流程:PDU → PDV → DIMSE

ACSE 层接收到 PDU 且其类型为 0x04(P-DATA-TF) 时,进入以下处理流程:

PDU(P-DATA-TF)↓
剥离 PDU Header↓
分解为一个或多个 PDV(Presentation Data Value)↓
每个 PDV 包含:- Presentation Context ID(表示关联 SOP Class)- PDV Header Flags(标识 Command/Data Set 及是否结束)- PDV 内容(真正的数据)↓
根据 Flags 判断:- 是 Command 还是 Data Set- 是否已完成该 PDV 单元↓
交由 DIMSE 层解析并执行服务操作(如 C-FIND、C-STORE)

🧱 DIMSE 层完整服务列表(11种)

DIMSE(DICOM Message Service Element)定义了 11种服务原语,包括命令和响应,分为两类:

1️⃣ DIMSE-C 服务(基于 Composite 信息对象,最常用)

服务名操作代码用途说明
C-ECHO0x0030测试 DICOM 通讯连通性
C-FIND0x0020执行查询操作(如 Worklist 查询)
C-GET0x0010从 SCP 获取数据(图像等)
C-MOVE0x0021将数据从 SCP 推送到其他 AE
C-STORE0x0001向 PACS 服务器存储图像或其他实例

2️⃣ DIMSE-N 服务(基于 Normalized 信息对象,主要用于打印管理等)

服务名操作代码用途说明
N-EVENT-REPORT0x0100报告事件(如打印完成)
N-GET0x0110获取属性信息
N-SET0x0120设置属性(如修改打印参数)
N-ACTION0x0130请求操作(如开始打印)
N-CREATE0x0140创建对象(如打印作业)
N-DELETE0x0150删除对象

🧾 PDV Header Flags 字节说明

每个 PDV(Presentation Data Value) 的头部包含一个 Flags 字节(1字节),用于指示数据性质:

含义值为 1 时备注
bit 0命令/数据集标识表示这是一个命令(Command);为0则为数据集(Data Set)
bit 1最后一个片段标识表示这是该 PDV 的最后一个片段PDV 可能被分片
bit 2-7保留固定为0未来扩展位

示例:

Flags 十六进制说明
0x01命令,未结束(中间片段)
0x03命令,最后片段
0x00数据集,未结束
0x02数据集,最后片段

🎯 完整结构梳理

层级数据类型说明
PDU 层(ACSE)P-DATA-TF类型值为 0x04,承载 PDV
表示层(PDV)Flags + 数据表示是否是命令、数据及是否最后片段
DIMSE 层命令/数据集解析 PDV 后进入执行(如 C-FIND 查询)

每个 DIMSE 服务对应的典型 SOP Class UID(服务对象类唯一标识符) 和实际应用场景。我们将从 DIMSE-CDIMSE-N 两大类出发,列成表格。


🧱 模块三 DIMSE-C 服务类:SOP Class UID & 典型场景

DIMSE 命令SOP Class 名称SOP Class UID应用场景
C-ECHOVerification SOP Class1.2.840.10008.1.1检查 DICOM 节点联通性(Ping 测试)
C-FINDModality Worklist Information Model – FIND1.2.840.10008.5.1.4.31Modalities 查询待检病人信息(从 RIS)
C-FINDPatient Root Query/Retrieve Information Model – FIND1.2.840.10008.5.1.4.1.2.1.1PACS 查询病人级别影像信息
C-FINDStudy Root Query/Retrieve Information Model – FIND1.2.840.10008.5.1.4.1.2.2.1PACS 查询检查级影像信息
C-MOVEStudy Root Query/Retrieve Information Model – MOVE1.2.840.10008.5.1.4.1.2.2.2从 PACS 将图像“推送”到目标 AE
C-GETStudy Root Query/Retrieve Information Model – GET1.2.840.10008.5.1.4.1.2.2.3客户端主动“拉取”图像
C-STORECT Image Storage1.2.840.10008.5.1.4.1.1.2CT 图像发送至 PACS
C-STOREMR Image Storage1.2.840.10008.5.1.4.1.1.4MR 图像发送至 PACS
C-STORESecondary Capture Image Storage1.2.840.10008.5.1.4.1.1.7屏幕截图或再处理图像存储

📝 说明:

  • C-FINDC-MOVEC-GET 对应的 SOP Class UID 会根据查询层级(Patient/Study/Image)变化;
  • C-STORE 的 SOP Class UID 会根据图像类型变化(CT、MR、US、CR 等);
  • 有超过百种 SOP Class UID,但常用如上所列。

🧱 DIMSE-N 服务类:SOP Class UID & 典型场景

DIMSE 命令SOP Class 名称SOP Class UID应用场景
N-CREATE / N-SET / N-ACTIONBasic Film Session1.2.840.10008.5.1.1.1打印系统:创建打印会话
N-CREATE / N-SETBasic Film Box1.2.840.10008.5.1.1.2打印系统:设置打印页布局
N-CREATE / N-SETBasic Grayscale Image Box1.2.840.10008.5.1.1.4打印图像
N-GET / N-DELETEPrint Job SOP Class1.2.840.10008.5.1.1.14查询或取消打印作业
N-EVENT-REPORTBasic Film Session Event Reporting1.2.840.10008.5.1.1.40打印完成等事件通知

📝 DIMSE-N 服务多用于 DICOM 打印系统(DICOM Print Management),在临床中已有 PACS 较少使用,但仍用于一些医疗影像打印服务器对接中。


🧩 补充说明:SOP Class UID 的作用

  • 每个 SOP Class UID 唯一标识一种 DICOM 服务或数据模型;
  • 在 ACSE 建立连接时,双方通过 A-ASSOCIATE-RQ 中的 Presentation Context 协商 SOP Class(即功能);
  • 若某一端不支持该 UID,则连接请求会被拒绝或功能无法执行。

📌模块四 总结 Modality Worklist 通讯涉及的完整流程

阶段协议元素操作描述
1️⃣ 连接建立A-ASSOCIATE-RQSCU(模态设备)发起连接请求,协商服务(如 Worklist SOP Class)和传输语法
A-ASSOCIATE-ACSCP(Worklist Server)返回确认接受连接
2️⃣ 查询发起P-DATA-TF(封装 C-FIND-RQSCU 发送 Worklist 查询请求,封装在 P-DATA-TF 中
3️⃣ 查询响应P-DATA-TF(封装 C-FIND-RSPSCP 多次返回查询结果(逐条或批量),每次包含状态字段
4️⃣ 查询结束C-FIND-RSP(Status=0x0000)表示查询结果已全部返回,结束
5️⃣ 会话释放A-RELEASE-RQ / A-RELEASE-RP通讯完成后主动释放连接

🔁 流程图概览(通讯交互顺序)

[SCU]                                  [SCP]|                                      ||-- A-ASSOCIATE-RQ (请求连接) -------->||<-- A-ASSOCIATE-AC (接受连接) --------||                                      ||-- P-DATA-TF (封装 C-FIND-RQ) ------->||<-- P-DATA-TF (封装 C-FIND-RSP) -----||<-- P-DATA-TF (封装 C-FIND-RSP) -----|  多次,返回一个或多个结果|<-- P-DATA-TF (Status=0x0000) -------|  表示返回完毕|                                      ||-- A-RELEASE-RQ --------------------->||<-- A-RELEASE-RP ---------------------|

🧾 关键服务元素详解

1️⃣ A-ASSOCIATE-RQ 包含协商内容:
字段含义
Called AE Title接收方 AE 标识(服务器)
Calling AE Title发送方 AE 标识(客户端)
SOP Class UID通讯中使用的服务类(如:1.2.840.10008.5.1.4.31
Transfer Syntax如:Implicit VR Little Endian、Explicit VR 等
Presentation Context ID绑定 SOP Class + Transfer Syntax
2️⃣ C-FIND-RQ 包含查询数据集(DataSet)

一个标准的 Worklist 查询参数示例:

(PatientName, PN, “DOE^JOHN”)
(ScheduledProcedureStepStartDate, DA, “20250414”)
(Modality, CS, “CT”)
3️⃣ C-FIND-RSP 包含:
字段含义
Command FieldC-FIND-RSP
Status0xFF00(匹配项)、0x0000(完成)、其他值(错误)
DataSet一项或多项匹配结果(病人、预约信息)

🎯 四、Status 字段值说明(C-FIND-RSP)

Status 值含义说明
0xFF00Pending匹配项返回中,后续还有结果
0xFF01Pending同上(备用代码)
0x0000Success所有结果已返回,正常结束
0xA700RefusedSCP 拒绝处理请求
0xA900Error请求参数错误或内部失败
0xCxxxFailed查询失败,具体错误由 x 标识

✅典型场景回顾(应用于 Modalities 自动填充)

  1. CT 设备启动时主动发起 Worklist 查询;
  2. 查询参数通常为当天日期;
  3. PACS 或 RIS 返回病人待检查列表;
  4. 技术员选择一条记录,设备自动填充病人信息;
  5. 完善检查项后进行采集、图像发送等操作。

📘 模块四 连接释放的作用

在 DICOM 网络通讯中,一个完整的会话由“建立 → 通讯 → 释放”三阶段构成:

阶段操作功能
建立连接A-ASSOCIATE-RQ / AC建立 DICOM 连接
数据交换P-DATA-TF 封装 DIMSE 命令进行 C-FIND、C-STORE 等业务操作
释放连接A-RELEASE-RQ / RP优雅关闭连接,释放网络和会话资源

📌 释放连接并不是“强制断开”,而是一种双向确认的正常断开过程


🧱 A-RELEASE-RQ / RP 数据结构说明(简化)

A-RELEASE-RQ(SCU 发起)
字段
PDU Type0x05
Reserved00
Length固定值 4(或0)
Data空(无实际数据)
A-RELEASE-RP(SCP 响应)
字段
PDU Type0x06
Reserved00
Length固定值 4(或0)
Data空(无实际数据)

🔁 释放流程图(时序)

[SCU]                                  [SCP]|                                      ||-- A-RELEASE-RQ --------------------->|  ← 客户端请求释放连接|<-- A-RELEASE-RP ---------------------|  ← 服务端确认释放|                                      ||----> 关闭 Socket ------------------->|  ← 通讯资源释放完成

🔍 为什么“释放连接”是必须的?

原因描述
✅ 协议规范要求不释放会话会被视为异常断开,影响后续通讯
✅ 系统资源回收每个连接都占用线程、缓冲区、Socket 等资源
✅ 日志清晰正常释放连接便于审计和问题追踪
❌ 反面案例强制断开(如关闭Socket)可能导致远端状态不一致或挂起

🎯 释放连接失败的处理(异常处理建议)

场景建议
网络中断时强制断开日志记录 + 自动重连机制
SCP 未响应 A-RELEASE-RP设置超时后断开连接并释放资源
出现异常前未释放连接加入 finally 或连接池释放机制

✅ 总结:释放连接在 DICOM 中的地位

  • 是整个 ACSE 协议的重要组成;
  • 是符合 DICOM 协议的“优雅断开”;
  • 必须在 SCU 或 SCP 完成所有 DIMSE 命令操作后再发起
  • 在调试网络通讯时,如果发现连接悬挂不释放,极可能是 A-RELEASE 环节未正确处理。


http://www.mrgr.cn/news/98407.html

相关文章:

  • Linux vagrant 导入ubuntu到virtualbox
  • spring-boot nacos
  • Java-面向对象
  • Uniapp: 大纲
  • One-Hot标签编码方法详解
  • STM32(M4)入门: 概述、keil5安装与模板建立(价值 3w + 的嵌入式开发指南)
  • 《高阶函数:把函数当玩具传来传去》
  • Linux命令-vim编辑
  • 第十六届蓝桥杯大赛软件赛省赛 Python 大学 B 组 满分题解
  • 供应链管理:探索供应链管理的边界
  • android面试情景题详解:android如何处理断网、网络切换或低速网络情况下的业务连续性
  • SomeIP:服务端or客户端发送event或method源码参考via CAPL
  • linux多线(进)程编程——番外1:内存映射与mmap
  • 欧拉服务器操作系统部署deekseep(Ollama+DeekSeep+open WebUI)
  • 数据库索引深度解析:原理、类型与高效使用实践
  • ARCGIS PRO DSK 利用两期地表DEM数据计算工程土方量
  • 在轨道交通控制系统中如何实现μs级任务同步
  • 2025年第十六届蓝桥杯省赛真题解析 Java B组(简单经验分享)
  • cline 提示词工程指南-架构篇
  • [Python基础速成]2-模块与包与OOP