1、 前言
做DICOM研究、开发和应用的人,最头疼的就是没有充分的工具和手段来进行测试,所以无法知道自己的程序、软件是否正确,能否正确地与其他设备进行DICOM连接?连接出错的原因在哪里?改正的话该从哪里下手?实在自己搞不定的话如何寻求别人的帮助?如何向别的人正确描述自己,能够让别人正确的理解和明白你的真正问题所在?你总不能直接找到某台设备去连接和进行测试吧?事实上绝大多数人并没有这样的条件,即使有,你又怎么能保证这太机器测成功,另台机器也必然会成功呢?你又怎么能接更多的实际的设备呢?
说到底,以上问题可以汇集成一个问题:如何找到一套很好的工具来帮助自己进行DICOM的测试?这样的工具并不很多,但是还是有一些的,例如 CTN (Central Testing Nodes),这是一个基于Unix平台的开放源代码的测试包,对开发者来说可以直接用其源代码开发出自己的DICOM应用来(当然,版权或者是否能够用于商业用途这里不讨论),如果只是用来测试的,也可以找一台Unix或者Linux主机,把ctn包安装配置好,来作为测试工具。不过,很多人并不熟悉 Unix/Linux更不用说使用了。更通用的操作系统平台自然是Microsoft Windows,而windows下大家经常能听到的一个DICOM测试工具就是DVT(也有advt)的。
DICOM Validation Tool (DVT)是一个DICOM有效性测试工具,用来测试产品的DICOM兼容性。ADVT顾名思义就是Agfa提供的DICOM Validation Tool。那么ADVT和DVT的关系是什么呢?号称DVT是Agfa在其Advt 2.61版本上发展出来的一个完全免费共享的工具,目的是提供一套独立的工具,任何人都可以用来测试DICOM设备。所以二者虽然有不同,但基本上是可以通用的。DVT比ADVT多了不少扩展功能和有效法则的支持,以方便地支持DICOM标准的发展和扩展,例如它支持DICOM标准里新增加的安全相关的内容,另外DVT也提供了宏定义和更详细的信息提示。
DVT目前的最高版本是1.4(14002),可以在这里Dvt (14002)下载到关于二者的详细说明,可以参考agfa网站如下网页 http://www.agfa.com/healthcare/us/support/dicomconnectivity/ 和 DICOM Validation Tool (DVT) - Version 1.4 .
2、 介绍
DVT采用脚本方式,这样就可以让使用者通过自己定义的脚本来进行DICOM兼容性测试,它预定义了许多测试用例可以来检测不同的DICOM服务。
简单地说,DVT可以认为是一个DICOM服务类的模拟器(我称作模拟器或者虚拟机),可以当作SCU和/或SCP来用,当然,它也可以创建和检测 DICOM格式的文件。它最大的好处是可以详细地显示相关的各种信息(包括通讯、消息、错误/警告、提示、语法、数据、属性、参数等信息),通过这些信息,使用者可以找到问题所在,也可以作为学习DICOM的参考,这在极大程度上为开发测试人员提供了方便。综上所述,DVT既可以用做DICOM测试工具,也可以用做DICOM开发工具,还可以用做DICOM学习参考。
DVT的主要特性包括:
ü Data driven - tool core is independent of specific DICOM SOP Classes and Test Cases - allows future extension as the DICOM Standard evolves.
ü Capable of playing the role of SCU and SCP.
ü Generate / send and receive / validate DICOM encoded messages appropriate to the SOP Class being tested.
ü The conditions specified in DICOM are used for Module / Attribute validation where possible. During validation, when the condition cannot be evaluated logically, DVT displays the condition text to the User.
ü Provides clear test results - including a summary of errors / warnings.
ü High flexibility - access is provided to every single DICOM attribute and parameter.
ü Received image data can be stored in Media Storage Format (DICOM - part 10) or in raw Dataset Format.
ü Provides an Image(Object) Relationship Analysis for received objects.
ü Allows tests to be repeated exactly as before - regression tests to check backward compatibility issues.
ü Multi-platform support (Windows NT/2K) as Command-line and GUI applications.
ü Media File Validation.
ü Emulation for Verification, Storage and Print SOP Classes.
ü Support for TLS and SSL secure sockets.
以上内容可以从dvt附带的DvtGui.hlp帮助文件里获知。DVT软件同时也附带了PDF格式的DICOM Conformance Statement文档和使用手册。
3、 使用
我们从一个实际的例子来看看如何使用,一个DICOM接收的例子(Storage SCP),这是一个Emulator的例子
1、 系统要求
要求Windows 2000/NT操作系统/64M以上内存/100M以上剩余空间/以太网(TCP/IP网络协议)/如果你还需要测试DICOM光盘,还需要有个CD ROM驱动器
2、 安装系统
在机器上安装DVT V14002,安装完成后,应有可执行程序(.exe)、一套标准的SOP类定义文件(.DEF)和一套测试示例(.DS/.TS/.DSS),以及各种脚本和帮助文档等
3、 执行dvtgui.exe
a) 开始-)程序-》DICOM Validation Tool
b) 进入后,Session菜单-》Open-> DVT/emulators/storage/scp/test001.ses,把系统预设的Storage SCP装载进来(注:系统预设了3个emulator,分别是Storage SCU(即DICOM发送),Storage SCP(即DICOM接收)和Print SCP(模拟DICOM打印机)
c) 装载成功后,左边栏显示该模拟器的全部相关定义(.DEF)文件,你可以通过鼠标右键点击查看该文件的内容
d) 设置参数:Session菜单-》Session Properties
这里的一些基本参数,可以不用理会,主要的参数是Product Role参数,这里设置成Requester,具体什么意思和如何设置可以查看帮助,单击ACSE Properties按钮,这里是设置DICOM的通讯参数,主要是设置AE Title和端口号(local listen)。注意Called AE和Calling AE这两个AE Title分别对应对方和自己的AE Title,一般AE Title可以随便设置,很多设备并不对此加以检查,但是DVT检查到AE不正确是,会有一个错误提示“WRN Calling AE Title not correct - expected "DVT" - received "AAA"。设置完成后就可以启动运行。
e) 开始运行:Action菜单-》Emulators-》Run Storage SCP Emulator
DICOM接收程序开始运行,这时你可以将与本机器连接的DICOM发送设备上的图象发送过来
f) 查看结果:在dvt右边栏里会显示详细的网络连接和接收信息,主要包括以下几条:
i. 接收到的ASSOCIATE-RQ消息
ii. 接收到的ASSOCIATE-AC消息
iii. 如果成果接收,文件保存在emulators/storage/scp/xxxxxx.dcm
iv. File Meta Information
v. 接收到的C-STORE-RQ CT Image Storage SOP Class
vi. 发送的C-STORE-RSP消息
vii. 接收到的RELEASE-RQ消息
viii. 发送的RELEASE-RP
结果信息保存在emulators/storage/scp/001_001_em_res.txt文件里,可以查看获得更详细的信
4、 配置
a) 可以在Session菜单的Test Properties里配置模拟器的各种信息,包括要记录哪些信息、文件编码和存储格式、以及支持的消息和Transfer Syntax(传输句法)等
b) 可以在Session菜单的Enviroment里修改环境设置,主要是各种路
5、 Script例子
前面是一个emulator的例子,现在说Script例子。顾名思义,script就是要你自己来写脚本。Dvt已经附带了很多脚本可以供你参考,这里简单说明
a) Script模式下,首先需要有一个运行的session,在session里首先有预先装载(load)的预定义文件Definition Files(.DEF),在该定义文件的支持下,需要运行某个预先写好的脚本文件(.DS/.TS/.DSS),就可以起到相同的测试作用
b) 可以打开一个已有的session,例如scripts/storage/scp/test001.ses,可以看到其Definitions包括三个预定义,分别是CharacterSet.def,SecondaryCaptureImage Storage.def,FileMeta.def。它还有9个脚本文件(scripts下的.ds和.dss)
在Action菜单里通过Execute DICOM (super)Script来选择执行其中的一个脚本,或者通过Parse DICOM (super)Script来选择分析其中的一个脚本。
同样,在左栏Scripts下具体一个脚本文件(.cs/.css)上单击右键可以查看该脚本,双击左键可以直接运行该脚本。需要注意的是,脚本打开查看情况下不能运行,不许关闭该脚本的查看模式才可以运行,关闭方法是File菜单的Close
c) 可以新建一个新的session,例如scripts/storage/scp/test002.ses,首先需要加载预定义(.def),在Action菜单里通过Load Definitions来选择加载的定义文件(注意:加载后要保存)。
对脚本的加载,则需要在Session菜单里设置该Session的脚本路径(DICOM Script Directory),然后把需要的脚本文件(.ds/.ts/.dss)直接放到该路径下就可以。同样地,在Action菜单里通过Execute DICOM (super)Script来选择执行其中的一个脚本,或者通过Parse DICOM (super)Script来选择分析其中的一个脚本。
4、 深入
4.1 配置文件(5种:.SES/.DEF/.DS(.TS)/.DSS/.H)
4.1.1 Session File:每个测试Session的描述和配置定义文件(.SES),是执行测试的最基本平台,这里我把它称作模拟器(虚拟机),它包括三种不同类型
ü Emulator:模拟形式的模拟器
ü Scripting:脚本形式的模拟器
ü Media:DICOM文件格式模拟器
4.1.2 Definition File:定义文件(.DEF)
根据DICOM标准第3、4章,定义一个DICOM(Meta)SOP Class的DIMES命令及其IODs,这是模拟器运行所需要的前提条件。
4.1.3 DICOMScript:脚本文件(.DS/.TS)
测试所用脚本,划分为SCU/SCU/FSC三种不同角色的脚本,是模拟器运行的脚本
4.1.4 DICOMSuperScript:脚本集(.DSS)
列出测试所需要的一系列脚本文件名,是模拟器运行的脚本集
4.1.5 IncludeFiles:头文件(.h)
定义模拟器运行所包含的各种映射
4.2 工作模式
无论是哪一种运行模式(Emulator/Scripting/Media),DVT都是以脚本形式工作,脚本按Send和Receive命令形式,可以处理ACSE(6个低层R/R请求/响应消息)或DIMSE(高层C/N请求/响应消息)消息。发送时每个参数/属性都是可控制的,并且错误和异常也是可控的,这对测试非常有用。
为了方便使用,DVT已经将所有的ACSE/DIMSE/DICOM Command/Data Object数据保存在其数据仓库里,可方便地调用维护和更新。并且有一套管理(创建/删除/导入/导出/读/写/重用)的命令。
4.3 工作
除非你明白了DVT怎么工作,否则它看上去还是比较复杂的,你的主要工作包括3部分,配置运行参数,调整脚本和检查运行结果。
4.3.1 配置运行参数
4.3.2 调整脚本
主要是修改脚本文件,以满足你自己的测试需要,脚本文件可以从dvt的数据仓库里提取、复制和修改,当然如果你足够牛的话也可以自己来修改,但是这绝对是费力不讨好的事情,既然已经有现成的,还何必什么都要自己重头做起来呢,要知道,人类文明的进步是靠懒人推动的。
脚本调整的主要内容包括对Command和IOD内容的调整,因为你要接的不同设备和产品对DICOM的规定是有差异的,比如A设备要求某个字段是必须的 (TYPE 1)的,而在B设备里该字段则可能是不需要的(TYPE 3)的,那么在DICOM标准里呢?它是Type 2的,这时候你就要根据不同设备,调整这样的参数和属性。同时调整不同的参数和属性,也可以检测对方或者你的软件的稳定性和宽容性。
4.3.3 检查运行结果
运行结果详细地写入到Result File里,你可以从其中看到运行中全部的需要信息,理解这些信息需要一些DICOM知识。
4.4 dvt已有脚本
目前dvt附带的脚本包括了主要的DICOM服务的测试,基本已经可以满足一般的测试需要,包括
ü Storage Commit的SCU/SCP
ü Mpps的SCU/SCP
ü Print的SCU/SCP
ü Query/Retrieve的SCU/SCP
ü SR Report的SCU/SCP
ü Storage的SCU/SCP
ü verification的SCU/SCP
ü worklist的SCU/SCP
5、 后记
本文的主要目的是为了概述DVT,让大家能有个整体的了解后,能够知道该怎么去使用它。DVT自带的脚本和模拟器基本能够满足一个不很理解DICOM的人达到其用来测试DICOM通讯连接的目的,但是并不能保证他/她能够完全理解其中的意义。完整的DVT文档和帮助可以在DVT安装软件里的帮助信息和DVT 自带的示范脚本里学习到,这里不做更深入详细的说明。更深入的理解和更熟练的使用(例如:如何自己编写脚本)等需要对DICOM的深入学习和理解,冰冻三尺,非一日之寒,这里没有捷径,想熟悉了解DICOM还是要通过自己的不断努力。如果朋友们有什么意见、建议、更正和补充,非常欢迎大家与我交流,让我能够完善它,能够给更多的朋友提供更多更好的资源和帮助。
(原作者联系方式是dyjia@163.net, QQ:2670136, MSN:gladacer@hotmail.com)
6、 相关资源
感谢Agfa公司提供这样好的工具和资源,以及他们无私的共享精神,我从他们的网站上获得了许多帮助和学习的启示,以下是一些有用的资源连接:
http://www.agfa.com/healthcare/us/support/dicomconnectivity/
DVT说明:http://www.agfa.com/en/he/landing/index.jsp?table=NAVSUPPORT&navguid=E032400677486E3D3A3065AC4BA09646&contentguid=A98DA0B71423C0D9A27EE7A0D844680A
DVT软件下载站点:http://www.agfa.com/en/he/landing/index.jsp?table=NAVSUPPORT&navguid=E032400677486E3D3A3065AC4BA09646&contentguid=92140F7CC50F4CB1E0D12B3D58BBB387