【转】DICOM通讯(ACSE->DIMSE->Worklist)

2024-01-01 22:08
文章标签 通讯 dicom acse dimse worklist

本文主要是介绍【转】DICOM通讯(ACSE->DIMSE->Worklist),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

转自:DICOM通讯(ACSE->DIMSE->Worklist) - 知乎

1 DICOM通讯概要介绍

DICOM通讯和TCP IP的设计原理别无二致。从用户数据到网络上传输数据的过程中,要经历多层协议处理,每经一层,就会加入用来描述当前层含义的数据字段,例如,我们熟悉的TCP层,会在用户的数据流前,加入目标端口,源端口,TCP层用来模拟链接通道的Sequence Number和Acknowlegment Number等的字段。

TCP IP协议栈示意图

在DICOM通讯中,当数据通过TCP层后,数据流就进入了DICOM的会话层(ACSE),详细介绍可在标准第8章中。ACSE(Association Control Service Element),包含了7种类型的协议数据单元,分别是A-ASSOCIATE-RQ PDU(Protocol Data Units),A-ASSOCIATE-AC PDU,A-ASSOCIATE-RJ PDU,P-DATA-TF PDU,A-RELEASE-RQ PDU,A-RELEASE-RP PDU,A-ABORT PDU。这些服务数据单元构成了ACSE服务组。解析数据流时,当第一个字节的值是4的时候,就代表PDU是一个P-DATA类型,应当由DIMSE层来处理;相反,如果是其他值,就属于a-associate-rq, a-associate-rj, a-associate-ac, a-release-rq, a-release-rsp, a-abort6种类型PDU中的一种,直接在ACSE层内进行处理。具体的解析过程,第二章节中,以一个Modality Worklist(C-Find)的例子来介绍。

ACSE层数据流示意图

当会话层接收到PDU,并且PDU的Type是4的时候,ACSE层协议,擦掉PDU头信息,将信息流变为PDVs(Presentation Data Values )后,将数据流交给表示层来解析。详细介绍,可参考第七章。在表示层DIMSE层中,提供了C-Find, C-Store, C-Move, C-Get, C-Echo, N-EVENT-REPORT, N-GET,N-SET, N-CREATE, N-DELETE, N-ACTION 11种类型的服务,这些服务成为了DIMSE服务组。​

DIMSE层数据流示意图

可以标识PDV是什么类型,在PDV的头信息中,有一个Flags标识,具体的含义见下图。DIMSE中消息由指令集(Command)和数据集(Data Set)构成。​

PDV类型含义

2 Modality Worklist通讯

Worklist 消息交互过程

2.1 A-ASSOCIATE-req​​

A-ASSOCIATE-rq

首先,由SCU向SCP发起建立连接建立连接请求,此过程主要是要协商是否能够提供此服务,以及在实际通讯中所使用的传输语法,传输语法主要是指显式或者隐式VR以及大小尾编码方式;从上图中可以看出,在1标记处,能看到PDU的Type是0x01,是A-ASSOCIATE-req类型的PDU;SCU的AE Title是WLY(占用16个字节),SCP的AE Title是CONQUESTSRV1(占用16个字节);之后有32个字节的保留区域不存放任何信息;​​

A-ASSOCIATE-rq 字节流占位

具体的字节占位,请看下图中所示: ​​

A-ASSOCIATE-rq 二进制流占位

2.1.1 应用上下文

应用上下文,大家可以不必关注,这个只是标识DICOM通讯类型的标识,所有通讯都是一致的;下图是应用上下文的二进制的占位​​

应用上下文二进制流占位

具体的二级制流如下​

应用上下文二进制流

2.1.2 表示上下文​

表示上下文二进制流占位

表示上下文二进制流

2.1.3 User Info​

User Info 二进制流

通过对request的分析后,后续的PDU将只针对内部关键的信息进行说明。

2.2 A-ASSOCIATE-ac

A-ASSOCIATE-ac 二进制流

2.3 P-DATA-TF PDU (C-FIND-RQ)

SCU发送端WLY向SCP服务端CONQUESTSRV1发送C-FIND的DIMSE消息,服务端解析当前的PDU,发现其类型是0x04。那么,后续的解析工作,就将PDU的头信息去掉后,交给DIMSE层来进行处理,详细的解释见下图,其中,橘黄色2位置,表示当前的PDV是一个命令集。在命令集中,请求的Message ID是1,注意,服务方要对当前的请求进行应答,必须也要携带此Message ID,来表示应答信息是对此请求进行的响应。​​

Worklist请求信息组成的PDU二进制流

2.4 P-DATA-TF PDU (C-FIND-RSP)

C-FIND-RQ的命令集二级制流

服务端接收到C-FIND-RQ后,将回复请求端信息。在回复命令信息中,Status是一个重要的概念,如果是Pending,表示对应客户端请求(回复数据流的Message ID Being Responsed To的值和请求端的Message ID的值相同)的回复数据流还未结束。具体的含义,可以在第4章中进行查询。下边给出Status的可能的值

C-FIND Response中的Status的值

2.5 P-DATA-TF PDU 服务端返回相关查询信息​​

服务端回复客户端查询信息的数据集二级制信息流

2.6 P-DATA-TF PDU ,PDV是命令集,标识对应MessageID=1的查询已结束

回复命令集二进制流

2.7 A-RELEASE request和 A-RELEASE response

A-RELEASE request

A-RELEASE response

这篇关于【转】DICOM通讯(ACSE->DIMSE->Worklist)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/560643

相关文章

如何使用C#串口通讯实现数据的发送和接收

《如何使用C#串口通讯实现数据的发送和接收》本文详细介绍了如何使用C#实现基于串口通讯的数据发送和接收,通过SerialPort类,我们可以轻松实现串口通讯,并结合事件机制实现数据的传递和处理,感兴趣... 目录1. 概述2. 关键技术点2.1 SerialPort类2.2 异步接收数据2.3 数据解析2.

Java Websocket实例【服务端与客户端实现全双工通讯】

Java Websocket实例【服务端与客户端实现全双工通讯】 现很多网站为了实现即时通讯,所用的技术都是轮询(polling)。轮询是在特定的的时间间隔(如每1秒),由浏览器对服务器发 出HTTP request,然后由服务器返回最新的数据给客服端的浏览器。这种传统的HTTP request 的模式带来很明显的缺点 – 浏 览器需要不断的向服务器发出请求,然而HTTP

STM32 HAL CAN通讯 实操

1、简介 相比于串口通讯,对于刚接触CAN通讯的小白来说,CAN通讯相对复杂,看各种视频、帖子理论,总是一知半解。本次通过傻瓜式操作,先实现CAN通讯的交互,以提高小白的信心,也便于自己复习观看。本次以STM32CubeMX进行初始化配置,通过Keil 5软件进行软件设计,通过CAN盒实现进行数据的交互。该流程实际以STM32F0、F1、F3、F4、F7实测好用(理论上都适用),这三种型号单片机

关于Qt在子线程中使用通讯时发生无法接收数据的情况

在多线程应用中,串口通讯或TCP通讯的场景常常涉及到持续的读写操作,如果子线程处理不当,可能会导致信号阻塞问题。本文将通过串口通讯或TCP通讯为例,详细解释如何在多线程环境中避免信号阻塞,并提供代码示例。 1. 问题背景 假设我们在一个应用程序中使用多线程处理串口或TCP通讯,通常会在子线程中实现持续的数据读取。为了确保实时处理数据,常见的做法是在子线程的 run() 方法中使用 while

QQ通讯协议

不管UDP还是TCP,最终登陆成功之后,QQ都会有一个TCP连接来保持在线状态。这个TCP连接的远程端口一般是80,采用UDP方式登陆的时候,端口是8000。因此,假如你所在的网络开放了80端口(80端口是最常用端口。。就是通常访问Web的端口,禁掉它的话,你的网络对你来说价值已经不大了),但没有屏蔽腾讯的服务器IP,恭喜你,你是可以登陆成功QQ的。 二、聊天消息通信。       采用UDP协

串口与Labview通讯的调试

在学习Labview和串口的通讯和调试的时候。首先必须先了解一些Labview的基础知识,然后就是了解串口,在调试的过程中,我们需要下位机来辅助我们的程序编写与调试,也就是我们平时使用的单片机,如果没有单片机也不要紧,可以使用虚拟串口来把电脑的串口相连接,这样也可以达到我们的预期效果 工欲善其事,必先利其器 让我们先来做一些准备工作 在这里可以把两个虚拟的串口相连接,在上图的左边,可以看到我

不等了,华为计划在5.5G阶段就实现6G的空天地一体通讯网络功能

朋友们,你们是否曾经幻想过,无论身处何地,都能保持与世界的无缝连接?在偏远的山区、在茫茫的大海、甚至是在飞机上,都能享受畅通无阻的网络服务? 现在,这不再是幻想,华为正计划将这一切变为现实。在最近召开的空天信息产业国际生态大会上,华为的余承东宣布了一项激动人心的计划——在5.5G时代就实现6G的空天地一体通讯网络功能。 一、星地融合,永不失联 华为一直在探索如何将卫星通信技术与地面网络相

副本技能-使用RabbitMQ做即时消息通讯,使用STOMP协议

1.消息通讯的基础环境 技术使用: 后端使用Spring Websocket通讯,前端使用SocketJS,非长连接,有心跳检测信息交互使用RabbitMQ的插件Stomp 给RabbitMQ安装Stomp的插件 安装前: 安装后: 安装步骤(我的RabbitMQ是使用的Docker) 1.进入Docker容器RabbitMQ的后台(docker exec -it 容器ID /bin

java与modbusRtu(COM口)通讯

modbous协议通讯byte数据解析含义 依赖的modbus包请看java与modbusTcp通讯JDK中配置串口通讯能力 提取码:hmfn串口模拟工具 提取码: npqx依赖串口协议包: <dependency><groupId>org.rxtx</groupId><artifactId>rxtx</artifactId><version>2.1.7</version></depende

SGM41511电源管理芯片与STM32L496通讯源码虚拟I2C协议实测成功读写cubemx设置裸机和freertos操作系统源码通用

不用它的I2C设置,容易出错不通讯,只打开GPIO输出就可以; 如果是RTOS的话请打开系统定时器提供参考时间基准,那个定时器都行; 以下是经过验证的代码,同样适用于SGM同类系列电源管理芯片; 准备好jlink进行RTT打印观测: SGM41511.c /**************************************************************