标题 | 基于OpenPLC的医疗仪器通信协议转换平台设计 |
范文 | 严意炜 郑建立 摘 要:医疗仪器信息集成已成为医疗卫生信息化不可或缺的一环。由于非影像类医疗仪器信息传输标准滞后,使这类医疗仪器信息集成发展较为缓慢。通过分析多种通信协议,利用图形化编程优势,基于OpenPLC设计实现了一种医疗仪器通信协议转换软件的组件化设计平台。使用模块拼接完成医疗仪器数据帧协议转换配置,在保证协议转换通用性、易用性的同时,降低了使用人员的技术门槛。 关键词:医疗仪器;信息集成;数据转化;协议转换;组件化;OpenPLC DOI:10. 11907/rjdk. 182726 开放科学(资源服务)标识码(OSID): 中图分类号:TP319文献标识码:A 文章编号:1672-7800(2019)007-0133-04 Design of Communication Protocol Conversion Platform for Medical Instrument Based on OpenPLC YAN Yi-wei,ZHENG Jian-li (School of Medical Instrument and Food Engineering, University of Shanghai for Science and Technology, Shanghai 200093, China) Abstract: The information integration of medical devices has become an indispensable part of medical and health informatization. Because of the lag of information transmission standard, the development of non-imaging medical instruments information integration is relatively slow. By analyzing various communication protocols and taking advantage of graphical programming, this design realizes a component design platform of communication protocol conversion software for medical instruments based on OpenPLC. The splicing of the module is used to complete the configuration of the data frame protocol conversion of the medical instrument. It guarantees the universality and easiness of protocol transformation while lowering the technical threshold of users. Key Words: medical instrument; information integration; data conversion; protocol conversion; component-based; OpenPLC 基金項目:上海市科委科技支撑项目(17-C-2) 作者简介:严意炜(1993-),男,上海理工大学医疗器械与食品学院硕士研究生,研究方向为医学仪器嵌入式技术;郑建立(1965-),男,博士,上海理工大学医疗器械与食品学院副教授、硕士生导师,研究方向为医学信息系统与集成技术、医学仪器嵌入式控制系统。本文通讯作者:郑建立。 0 引言 随着医疗卫生信息化的快速发展,数字化医疗仪器应用越来越广泛。医疗仪器除了本身治疗及诊断功能外,将采集到的数据有效而准确地输出也是医疗仪器制造商所关心的问题。 目前,影像类医疗仪器集成已有较为成熟的信息传输标准DICOM。对于非影像类医疗仪器而言,虽然国际组织HL7、IHE提供了信息集成解决方案[1],但是并没有被所有医疗仪器制造商所接受,使得非影像类医疗仪器信息集成发展较为缓慢[2],医院使用的非影像类医疗仪器依然存在诸多厂商自定义的信息接口、数据通信协议以及通信方式[3],阻碍了医疗仪器信息集成的发展。 目前解决该问题的办法就是针对已知协议编写对应的通信程序。为解决重复编写协议转化程序,基于JS引擎的医疗仪器协议转换方案[4],通过脚本调用生成转换程序,支持不同的医疗仪器协议。也有基于程序生成技术的解决方案[5],只需通过网页端对帧格式进行配置即可自动生成转化函数。在非医疗仪器领域,有通过协议模版进行转化的集成网关案例[6-7],通过将协议分成帧头、帧尾、位处理以及函数处理4部分对协议模版进行定义,也有通过各个数据元素映射实现数据帧格式转换[8]。上述解决方案对于结构复杂协议或是牵涉到复杂的计算或单位转化,需要编写额外的程序或是脚本进行适配,技术门槛较高。 在工业控制方面,面对复杂而重复的设计,PLC可以有效降低开发和维护成本[9]。PLC具备IEC61131-3规范的编程语言标准,对使用者技术门槛要求较低,使用起来较为方便[10]。其中的功能块图作为一种图形化的编程语言,通过模块之间的相互连接即可完成配置。对使用者而言,只需要知道模块的外部特性即可,不需要了解其内部结构和原理[11]。 本文基于OpenPLC设计了一种通用的医疗仪器通信协议转换软件平台。根据医疗仪器数据协议转换流程,归纳分析通信协议数据转换所必要的模块,通过OpenPLC编辑器实现这些功能模块。技术人员只需对模型进行连接配置,无需编程即可完成医疗仪器集成网关协议转换的配置。对输入或输出协议没有限制,可以是HL7等标准格式,也可以是厂商自定义的格式。 1 通信协议转换模型 1.1 通信协议转换框架 医疗仪器通信协议转换的根本目的是将输入的字节流中医疗仪器中的数据提取出来,并将之转换成符合目标格式规范的数据帧输出,其流程如图1所示。 输入、输出通讯组件是在硬件接口及通信参数与协议上提供支持。输入通讯组件将医疗仪器数据通过字节流形式传入到解析组件,而输出通讯组件则是将转化组件所得到的数据帧传至医疗信息系统中。 解析组件目的是从输入通讯组件传入的字节流中提取所需的数据项,并将这些数据项传入转化组件,主要流程是:对传入的字节流进行同步、校验等处理,得到正确的数据帧。再根据输入数据帧格式,将原有数据项提取出来。 解析原始数据项的难度在于,不同制造商的私有协议可能具有不同的校验、帧同步方式,有的数据帧甚至含有多个层[12],这时的处理方式如图1解析组件部分所示。对于多个层次的数据帧,需要用数据处理层提取出下一层协议数据单元(protocol data unit,PDU),再通过下一层的数据处理层,如此循环,最终提取出原始数据项。 图1 通信协议转换框架 转化组件将解析组件所传入的原始数据项转换成符合输出通讯组件格式的数据帧进行输出。对输入的数据项,转化组件根据输出数据项的格式对原始数据项进行格式或数值转化。最后根据获得的数据项进行计算校验,以及补充输出数据帧的控制码,将所有项目合并起来得到输出数据帧。输出通讯组件的数据帧可含有多个层,其处理方式如图1中转化组件部分所示。 在解析组件与转化组件中,根据协议复杂程度的不同存在多个数据处理层,每个数据处理层由不同的功能块拼接而成。解析组件中每个数据处理层的任务是将该层协议数据单元中的信息提取出来,成为上一层数据处理层的输入。而转化组件中的数据处理层作用与解析组件恰恰相反,是将上一层的协议数据单元封装起来,与本层的其它控制信息一起组成本层协议数据单元输出给下一層。 上述医疗仪器通信协议转换中的解析组件和转化组件,均在OpenPLC平台上通过组件拼接实现,组件化的自由性使其对于分层处理以及复杂的数值或格式转化运算都有良好的适应性。 1.2 数据处理层 OpenPLC主要应用在控制领域,没有为文本信息处理提供适用的组件,因此图2所示的数据处理层所需的多数功能模块需要自行编写。不同的数据处理层处理功能可以不同,但总体处理步骤是相似的。 数据处理层主要对下一层协议数据单元进行处理,提取出其中正确完整的数据单元,或是将本层数据单元封装起来,与本层其它控制信息一起组成新的协议数据单元。在这个过程中,为了保证数据帧的正确性与完整性,常用到分帧/组帧、校验和转义功能,以及从协议数据单元中取出数据单元,或将数据单元与控制信息合并成一个完整的协议数据单元,这时需要用到编码、解码功能[13]。在从数据项到转化组件的数据处理过程中,进行数值格式转化以及一些基础运算时,OpenPLC自带的库函数功能不可或缺。 图2 数据处理层功能结构 通过对多种通信协议分析,可以定义出以下通用的功能模块: (1)分帧/组帧:分帧模块从字节流中识别出协议数据单元的开始和结束,组帧模块则是在传送前对协议数据单元加上帧的封装。支持两种封装方法:①规定特殊字符或字符序列作为一帧的开始,并以固定的字段标识帧的长度;②规定一些特殊字符或字符序列作为一帧的开始与结束[14-15]。 (2)校验:验证协议数据单元传送的正确性,常用方式有CRC校验以及累加和。CRC校验包含宽度、生成项、预设值、输入输出反转等配置项。校验部分除了编写几种常见的校验模式外,还包括比较判断这类校验所需的功能模块。 (3)解码/编码:解码模块从协议数据单元中将上一层的协议数据单元或数据项取出,由上一层数据处理层进一步处理。主要方式一般分为以标识符分割以及以固定长度两种。编码模块则与解码相反,是将上一层的协议数据单元加入额外信息合并起来。 (4)转义:由于帧同步时所规定的特殊字符不能出现在数据内容之中,因此会对含有特殊字符的字节进行转义[16],用特定的换码序列表示该字符。 (5)转换:转换模块包括浮点型、整型与字符等数据类型之间的转换,以及ASCII码与十六进制数之间的转换。 (6)运算:主要是加、减、乘、除、取余等借助于库函数的基础运算。 2 软件设计与实现 2.1 运行环境与数据传输过程 OpenPLC作为第一个全功能标准化的开源PLC,其目的是为自动化研究提供低成本的工业解决方案[17-18]。OpenPLC项目是根据IEC 61131-3标准创建的,该标准支持5种编程语言。其中功能块图语言可由用户事先编写,再通过拼接的方式组成程序。本文通过功能块图生成主程序完成数据的解析与转换,从而实现组件化设计,如图3所示。 图3 OpenPLC系统体系结构 在环境支持方面,OpenPLC支持Linux下运行软PLC,使用Modbus-TCP协议访问软PLC寄存器,可以通过访问本地网页控制软PLC、上传配置文件。OpenPLC以“顺序扫描,不断循环”的方式执行任务[19]。运行时,系统不断扫描寄存器状态,按照顺序执行每条指令。 本文测试硬件使用装有Linux操作系统及OpenPLC的树莓派。测试时由上位机串口发送模拟数据,下位机由网口发送处理后的数据,返回至上位机。具体数据帧转换的读取在软PLC的寄存器上实现。在软PLC寄存器上设立4个标志位:输入数据位、输入标志位、输出数据位以及输出标志位。 在本地运行读写软PLC中寄存器程序:将外部输入的数据写入软PLC的输入数据位后,修改输入标志位,完成数据输入;通过读取输出数据位,修改输出标志位,完成数据输出。 2.2 模块定义与编写 模块定义及编写大致分成4个步骤,以下以CRC模块为例逐一说明。 (1)按照需求新建一个程序组织单元,如图4所示,命名为D00CRC,类型为功能块图,语言为ST语言,同时OpenPLC支持在ST语言中内嵌C语言程序,可通过GetFbVar以及 SetFbVar函数读取输出端口数据。 图4 CRC模块设置 (2)定义程序组织单元的输入输出参数。CRC模块输入输出部分参数按CRC校验中所需的所有参数进行设定[20],如图5所示。DATA:输入待检测的字节流;CRC:输出的校验结果;RESET:重置控制;POLY:生成项的多项式;WIDTH:宽度,即CRC比特数;INIT:算法开始时寄存器的初始化预置值;REFIN:待测数据的每个字节是否按位反转;REFOUT:在计算之后,异或输出之前,整个数据是否按位反转;XOROUT:计算结果与此参数异或后得到最终的CRC值。 图5 CRC模块输入输出部分设置 (3)输入参数设定后,还需完成具体模块功能的程序编写。这里为了方便,使用C语言程序内嵌在ST语言中,部分代码如下: (4)完成程序编写后,对模块进行测试,测试模块连接方式如图6所示。测试参数使用CRC16配置:宽度16位,多项式为1021,初始值为0000,结果异或值为0000,输入、输出值反转。使用send模块发送数据,使用receive模块进行接收。变量Data为待检测数据,Flag为输入标志位,变量CRC为输出数据,对模块输出结果与计算校验结果进行核对,模块通过多种参数测试后可视作完成编写。 图6 CRC模块测试 3 数据帧协议测试 选择某公司某型号血透机若干组现场采集数据进行测试,测试能否正确校验数据帧,并将得到的数据以特定格式输出。该血透机数据帧部分测试数据如表1所示。 表1 某型号血透机数据帧数据及说明 由表1可知,该数据帧以0×02位固定帧头、以0×04为固定帧尾分帧。该数据帧非帧头、帧尾部分也会出现0×02,0×04,因此需要进行转义。转义方式是将原字符增加0×20,前置增加一位转义符0×1b。 根据输入数据帧协议,可将解析组件分成三层:第一层为分帧、转义,第二层累加和校验,第三层为CRC16的校验与数据项提取。第三层内容如图7所示。将数据位中4~14位数据计算CRC校验后与原有校验进行比较,如果校验通过,将数据帧中13及14位的数据取出,传入转化组件。 转化组件将输入的数据以JSON格式输出,属性名为Amounts of Heparin,值为数据具体内容。 图7 数据帧协议配置第三层数据处理层 将配置文件上传至装有OpenPLC的嵌入式端,由串口接收模拟数据,由网口发送处理后的数据。通过输入三组数据判断配置效果:第一组及第三组为正确的数据帧,第二组为校验不通过的数据帧。嵌入式端完成解析后将校验正确数据输出,结果如图8及图9所示。返回了两组校验正确符合格式的数据帧,没有返回校验不通过的数据帧,表明该方案可以将数据帧中的正确数据提取出来,符合设计的基础要求。 图8 模拟血透机输入数据 图9 返回接收数据 4 结语 本文设计了一种通用医疗仪器通信协议转换的组件化平台,通过构建通信协议转换模型,提取必要组件,借助OpenPLC编辑器实现各个组件。该设计无需编写程序,只需通过拼接组件即可针对目标医疗仪器生成配置文件,实现医疗仪器通信协议转换。与同类型的解决方案相比,该设计技术门槛较低。经过实际数据测试,该方案对于复杂的数据帧格式具有较好的适配性。 参考文献: [1] IHE. Patient care devices[EB/OL]. https://wiki.ihe.net/index.php/PCD_Schedule_Archive. [2] 郑建立,廖芸,杨勇勇. 基于医疗健康信息集成规范的医疗仪器信息集成技术的研究[J]. 生物医学工程学杂志,2014,31(3): 671-677. [3] HOFMANN R M. Modeling medical devices for plug-and-play interoperability[EB/OL]. http://xueshu.baidu.com/usercenter/paper/show?paperid=3fc577204b4d115ef825e50b8-site. [4] 廖芸,郑建立. 基于JS引擎的医疗仪器协议转换技术研究[J]. 信息技术,2013,37(3):66-69,73. [5] 郑建立,麦龙华,金嘉伟. 基于程序生成技术的医疗仪器通信协议转换研究[J]. 中国医学物理学杂志,2017,34(2):188-193. [6] 佟立飞,李龙华. 通用网关协议数据转换软件开发[J]. 自动化技术与应用,2012,31(1):16-18. [7] 宋志刚,蔡伟周,李剑波,等. 基于组件式软件平台架构的通用协议转换器设计[J]. 机电工程技术,2018,47(7):97-99,159. [8] 黄敬礼. 通用协议转换设备研制[D]. 哈尔滨:哈尔滨工业大学, 2011. [9] 杨金鸿,肖丰霞. PLC在工业自动化控制中的应用研究[J]. 科技传播,2016,8(9):203-204. [10] 王蔚庭. 解析工業编程语言国际标准IEC61131-3[J]. 国内外机电一体化技术,2007(2):47-62. [11] MEDVIDOVIC N,TAYLOR R N. A classification and comparison framework for software architecture description languages[J]. IEEE Transactions on Software Engineering,2000,26(1):70-93. [12] 刘希远,沈国敏,李峰,等. 编译原理在通信协议转换中的应用[J]. 甘肃工业大学学报,2000(3):69-72. [13] 田祥雨. 基于用户接口协议的数据包编解码软件开发[D]. 哈尔滨:哈尔滨工业大学,2017. [14] 胡莉,张力伟,周希元. 帧同步检测技术的研究进展[J]. 无线电工程,2009,39(2):12-15. [15] TANENBAUM A S. 计算机网络[M]. 第3版. 北京:清华大学出版社,1997. [16] 梁家政,薛质. 网络数据归一化处理研究[J]. 信息安全与通信保密,2010(7):47-48,51. [17] ALVES T R,BURATTO M,SOUZA F M D,et al. Openplc: an open source alternative to automation[C]. Global Humanitarian Technology Conference,2014:585-589. [18] TANG Z Y,DONG J C,QIAO Z F,et al. Research of the soft PLC based on the open PLC[J]. Applied Mechanics & Materials,2012(141):424-428. [19] 练淼森. 分析嵌入式软PLC编程系统的设计[J]. 数字技术与应用,2017(12):9-11. [20] 彭伟. 嵌入式系统CRC循环冗余校验算法设计研究[J]. 南京信息工程大学学报:自然科学版,2012,4(3):258-265. (责任编辑:杜能钢) |
随便看 |
|
科学优质学术资源、百科知识分享平台,免费提供知识科普、生活经验分享、中外学术论文、各类范文、学术文献、教学资料、学术期刊、会议、报纸、杂志、工具书等各类资源检索、在线阅读和软件app下载服务。