需求分析
随着社会事业的发展,医疗行业对各种仪器的需求越来越大,如生化仪,心电监护仪,呼吸机等等,这些设备目前使用两种通信方式和lis/pacs/中心监护系统接口
- 大多数采用串口作为数据接口,使用ASTM作为通信协议
- 使用以太网网络接口,以HL7作为通信协议
协议解释
HL7标准
HL7标准是建立在ISO标准组织之制定的OSI模型的最高层的应用标准,如下图所示:
HL7标准包含256个事件、116个消息类型,139个段,55种数据类型,408个数据字典,涉及79种编码系统。但在应用HL7标准时,并不一定需要涉及标准全部内容,可以选择自己需要应用的相关事件、消息类型和段就可以了。而在数据字典和编码系统方面HL7标准并没有进行强制的规定,可以允许用户选择。标准的内容作为推荐。由于HL7涉及非常广泛,且在开发过程中广泛接纳了最终用户、开发商、研究机构的各方面的意见,从另一个方面也可以将HL7标准理解为医学信息中的其他编码标准的一个总纲性质的索引。
ASTM标准
ASTM的全称是American Society for Testing and Materials,美国材料与试验协会。它规定十几个类别,用途非常广泛,包含以下门类:
1、钢铁产品
2、有色金属产品
3、金属试验和分析方法。
4、建筑
5、石油与化工
6、染料和涂料
7、纺织
8、塑料
9、橡胶
10、电气与电子工业
11、水和环保技术
12、核能、太阳能与地热能
13、医疗器械和服务
14、通用方法和仪器。
15、通用产品和专用化学品
医疗行业用的是第13类 ,比如ASTM E1394 等等
现状
传统医院系统都是使用PC作为仪器服务器来接入的,体积大,价格贵,功耗也大,而且很不灵活,不同的仪器要不同的接口程序,这些接口程序使用Powerbuilder,delphi,C#编写,每次不同仪器参数和协议接口都需要重新编译部署实施调试,成本高,工期长。
用Dragonboard 410c的方案
有鉴于此,我们决定采用Dragonboard代替PC来实现各种仪器接入,使用nodejs开发,带来的好处是明显的,价格远低于pc,而且灵活 不需要编译,而且nodejs本身在www.npmjs.org上提供了海量的模块库,其中就包括HL7的解析库,使用nodejs可以极大的降低开发工作难度,动态配置js脚本就可以对接相应的仪器,因此可以远程配置调试仪器,节省昂贵的差旅费。
开始动手
安装os
先下载img文件,这里我们选择debian,大家可以直接去linaro的网站下载
dragonboard410c_sdcard_install_debian-36.zip这个文件,不过这个网站经常断线,为了大家操作方便我就下载了并且共享了:Debian的img文件
把tf卡通过usb读卡器插入电脑,推荐使用class 10 的tf卡,8G以上。
使用sdformatter 格式化卡
然后使用win32diskimager把镜像烧录到tf卡。
把tf卡插入板子,启动 ,并把跳线位置设成如下模式
根据屏幕提示,选择intall ,然后等待几分钟 系统就安装好了,这时候去掉TF卡
(如果不去掉TF卡,下次启动还是从TF卡启动,或者你可以设置跳线,选择从EMMC启动,我为了图省事就拔掉了TF卡)重新启动
显示linaro登陆界面
密码和用户名都是linaro
为了以后操作方便,使用passwd建立root账号
用root登陆,然后在操作指令 就不需要输入烦人的sudo了
安装nodejs
因为410c板子我已经装好了nodejs 我在另外一个板子上演示一下nodejs的安装过程
curl -sL https://deb.nodesource.com/setup_4.x | sudo -E bash -
sudo apt-get install -y nodejs
如果发现没有curl 可以用apt-get install curl 安装
安装完nodejs 运行node -v 就可以看到已经装好
安装相应的模块
因为我们做的医疗网关需要支持HL7和ASTM协议,因此需要安装相应的node-serialport和hl7模块
使用npm直接安装 npm install node-serialport
npm install hl7 因为每种仪器只会选择其中之一,因此我们装在不同的工作目录
测试串口和ASTM协议
本来打算直接连接我们的ASTM仿真器的,但是Dragonboard 410c的IO是1.8v的,我怕直接接上我们设备的3.3v TTL 会烧掉,所以决定使用USB口转出来的串口解决这个问题
我们使用一个MICO开发板作为串口输入源,插入开发板在/dev/ 下可以看到一个设备ttyUSB1,编写一个测试程序lis.js
var SerialPort = require("serialport").SerialPort,
sp = new SerialPort("/dev/ttyUSB1", {
baudrate: 115200
}, false); // this is the openImmediately flag [default is true]
sp.open(function (error) {
if (error) {
console.log('failed to open: ' + error);
return;
} else {
console.log('open');
}
});
sp.on('data', function (data) {
console.log(data.toString());
//sp.write("hello/r/n");
});
说明串口可以正常工作,实际接入我们的仪器通信程序也可以通信的
测试HL7功能,在drgonboard 安装hl7测试包
npm install simple-hl7
然后进去到node_modules/simple-hl7/examples,可以看到有4个例子,我们运行tcp-server这个
node tcp-server.js
然后在pc上运行hl7模拟器
可以看到模拟器模拟发送的HL7 结果已经被龙版上运行的hl7 server接受到
稍微修改这个hl7 程序,把hl7转成json ,转换功能都是这个hl7包里面提供的,就可以直接保存到rest界面的数据库后端
实际模拟,使用我们自己的仪器数据和模拟器 ,真实连接我们自己的模拟器,数据保存到couchdb
总结
可以看到数据被完整的保存进去了,使用nodejs 也可以方便的通过webhdfs等模块把iot数据保存进hadoop 或者通过其他相关的模块把心电监护数据保存到openTSDB或者infuxdb 等等,而这些代码加起来也不过千行,而且可以运行在嵌入式ARM板如龙板上,这是传统医疗软件开发手段如PB,C#,JAVA都很难做到的。
接下来我还会尝试octoprint控制3d打印等项目,本次测试dragonboard还有一个很重要的事,是希望能拿到dragonboard配套的那个HDMI转CSI的板子,很遗憾一直没有机会测试这个,这个可以用于超声内镜的采集,代替昂贵的采集工作站和笨重的采集卡。
接下来我还会尝试octoprint控制3d打印等项目,本次测试dragonboard还有一个很重要的事,是希望能拿到dragonboard配套的那个HDMI转CSI的板子,很遗憾一直没有机会测试这个,这个可以用于超声内镜的采集,代替昂贵的采集工作站和笨重的采集卡。