1. 引言
患者的临床治疗中,输液是一种经常使用的治疗手段,在输液过程中需要注意滴速异常[1]和输液管的拉拽等问题,输液结束时也需要及时的处理。根据调查,液体滴完发生空气栓塞是患者最担心的问题[2],二级及以上医院99.6%的医护人员认为传统人工换液不仅劳动强度大,而且安全事故发生频率高[3],护士的过劳问题突出[4]。对输液的过程进行自动监测可以有效减轻护理工作量,保证输液安全同时让医患双方都可以得到休息。目前关于这个问题的研究主要采用称重[5] [6]、液滴计数[7]、检测液位[8] [9]、视觉识别[10]-[12]等方式获取输液信息后进行反馈,在实践中也取得了一定效果[13],但存在控制功能不足、考虑不够全面、成本较高等问题。本文针对实际场景下的需求设计了一套的输液监控系统,对之前研究做了一定优化,具有很好的应用价值。
2. 设计方案
2.1. 需求分析
对护理过程来说,一是要实时了解输液的进度和剩余时长以提醒医护人员做好相关准备;二是要对出现的情况快速做出反馈,包括滴速被患者调节得过快或过慢、患者压到输液管,以及结束时自动关闭等;三是信息显示全面、查看方便。
根据智研瞻产业研究院的报告,输液监控管理系统存在成本高、对患者移动和输液管道受阻等情况系统无法准确监测、医护人员错误使用可能存在安全隐患等问题。对医院来说,现有的输液装置和病房等硬件条件已经固定,不适合设计太复杂的结构,特别是对于基层卫生机构,床位不多[14],人员和硬件条件受限,所以系统需要低成本、部署方便、操作简单以降低应用门槛。
2.2. 总体设计
本设计通过在输液设备上加装称重装置和终止输液控制装置,下位机得到重量信息后通过WIFI将数据上传至后台服务器并写入数据库,同时处理数据得到输液情况的信息。用户端采用B/S架构,医护人员和家属等可以通过网页实时查看。
2.3. 硬件设计
(1) 称重模块
称重模块称取输液瓶、输液管和加装设备的总重量,先称好不同型号的输液瓶在输液完成后的重量并录入系统,输液启动时在系统选择输液瓶类型,根据称出的重量即可计算进度。根据重量变化率得到滴速可供医护人员查看,如果有拉拽输液管等情况,也会在重量变化上体现。
图1所示为称重传感器原理图,在铝块上贴应变片,当铝块受力弯曲时,分别在两侧产生拉伸和压缩,通过测量变化值即可算出受力。4块应变片接成电桥,受力引起的电阻变化将转换为测量电路的电压变化△U。受力过程中4个应变片都参与形变,并且处于相同温度场,温度影响可相互抵消,因此具有较高的灵敏度。
Figure 1. Diagram of weighing sensor principle
图1. 称重传感器原理图
医院的输液设备大多为放置在地面或悬吊于房顶、病床的支架,在实际应用中,可将传感器一侧固定在支架上,另一侧挂上输液瓶即可测量。
(2) A/D转换模块
电桥上的电压值通过A/D转换模块处理后得到单片机可以处理的数字量,模块的精度越高,得到的数据越准确,本设计采用的转换模块芯片为HX711,它具有24位精度,芯片集成了稳压电源、片内时钟振荡器,具有集成度高、响应速度快、抗干扰性强等优点。
(3) 下位机和网络模块
接收和处理数据的下位机选择了STC89C52,通过串口通讯接收A/D转换模块的数字信号,这款单片机具有价格便宜、功耗低、运行稳定等优点,性能上也完全能满足设计功能的要求。在下位机向服务器发送数据的环节,考虑到输液的环境较为固定,医院和诊所等也基本覆盖了宽带和无线网络,所以使用ESP01模块通过WIFI连接服务器,可以保证数据传输的可靠性和稳定性。
(4) 蜂鸣器
下位机上安装了蜂鸣器,对输液过程出现异常和输液结束等情况向现场相关人员发出提醒,如提醒后一段时间内未处理,可提高蜂鸣器的频率以加强效果。
(5) 控制器
结束输液的控制采用电磁铁驱动,当系统检测到输液已经完成时,下位机驱动可控硅接通电路,电磁铁产生磁力并通过杠杆结构放大,压迫输液管以达到停止输液的效果,如图2所示。
Figure 2. Diagram of controller schematic
图2. 控制器原理图
(6) 液位传感器
在输液管的上端安装了液位传感器作为输液监测的保险装置,如图3所示。传感器通过测量夹管内的电容值判断是否有液体,但输液完成时可能由于输液管被轻微触碰使得重量数据未达到阈值,这时单片机可根据液位信号停止输液。
Figure 3. Diagram of liquid level sensor
图3. 液位传感器图
2.4. 软件设计
2.4.1. 下位机
本设计的数据传输使用TCP协议,通过访问服务器上接收数据的页面以传参数的方式将实时获取的重量数据写入数据库。下位机使用AT指令驱动ESP01模块,程序代码如下所示:
init();
delay(10000);
sendc("AT+CIPSTART=\"TCP\",\"172.12.3.1\",80\r\n");
delay(10000);
sendc("AT+CIPMODE=1\r\n");
delay(5000);
sendc("AT+CIPSEND\r\n");
建立TCP连接,完成后设置透传模式并开启数据发送,接下来进入“称重–发送数据”循环,程序代码如下所示:
Get_Weight();
delay(300);
init();
s[0]=Weight/10000+0X30;
s[1]=Weight%10000/1000+0X30;
s[2]=Weight%1000/100+0X30;
s[3]=(Weight%100/10+0X30);
s[4]=(Weight%10+0X30);
sendc("GET http://172.172.12.3.1/s/data.php?s1=");
sendc(s);
sendc("\r\n\r\n");
获取称重数据后初始化串口,并将重量数据转换为字符类型,再使用GET命令访问数据接收页面,将数据通过“s1”参数传入,其意义为1床的数据。在应用时根据医疗机构的床位部署设置参数名,也可将多个传感器连接到一台下位机上,在一次循环中顺序读取数据后一并发送。
2.4.2. 服务器
服务器端采用Apache + PHP + MySQL的组合,相关技术具有开源、免费、跨平台等优点,在网站开发中被广泛使用。规模较小的基层医疗卫生机构可以直接部署在办公电脑上,要求更高的可部署在云端。
(1) 数据库设计
本设计主要涉及三张表,一是记录下位机上传数据的重量信息表,包括“床位号”“时间”“重量数据”“时间块编号”;二是输液情况表,对重量信息表做处理后记录结果,包括“床位号”“时间”“时间块编号”“重量数据”“剩余时长”“异常标志”;三是输液瓶信息表,记录各床位所使用的输液瓶在输液完成时的重量数据,通过实验获取常见输液瓶的数据后在输液开始前由医护人员通过管理页面选择所使用的型号完成写入。
(2) 后端设计
通过下位机访问请求的参数获取床位号和重量,为获得及时准确的数据,可提高访问频率,但太多的数据不便展示,所以处理时以5秒为间隔划分出时间块,收到数据后算出其时间块编号,当进入下一个时间块时,计算前一时间块的平均值并判断是否存在异常,计算结果存入数据库以提供前端页面调用。流程如图4所示:
Figure 4. Data processing flowchart
图4. 数据处理流程图
正常输液时滴速应保持在一定范围内,滴速在图像上表示为重量与时间函数的斜率。得到时间块的数据后分别计算其到输液起始点的斜率CZ和到上一个正常数据点的斜率CN,如果CZ或CN高于或低于阈值则标记为异常,根据测试数据将上下阈值设定为−0.3和−2.1。
使用之前的6个无异常时间块的数据,把时间和重量做线性拟合,得到的斜率即为近期的滴速CR,再结合当前重量,可以得到预计的剩余时长,在设计中考虑准确性和实际参考意义,将结果划分为“>10分钟”“<10分钟”“<5分钟”“<1分钟”“已结束”5类。
在后端编写了访问处理结果的接口,通过访问php文件得到各床位最近36个时间块(即3分钟时长)的处理数据并以Json格式输出,用于提供给前端页面以进行可视化显示。
(3) 前端设计
在前端设计中调用了JQuery库和ECharts库,可以提供简洁的页面交互功能和美观的数据可视化结果。在页面中展示各床位的信息,包括开始时间、剩余量百分比、预计剩余时长、正/异常状态、最后更新时间等,需要了解某一床位的具体情况可查看近期进度的折线图。为方便查看最新进展,前端使用Ajax设计了每5秒定时刷新数据。
3. 系统测试
在测试中模拟了2张床位输液的场景,由2个称重传感器连接到1台下位机。在输液过程中调整滴速并模拟了拉拽的情况,当出现异常时,蜂鸣器均发出报警。在服务器端,收到1床在625秒内的5225个数据,收到2床在540秒内的4523条数据,图5和图6中可以清楚地看到滴速变化和扰动。
Figure 5. Infusion data of bed No. 1
图5. 1床输液数据
系统在输液期间工作较为稳定,单位时间收到数据统计如图7所示,数据量大多在8~9次/秒,平均值为8.29次/秒。
前端显示效果如图8所示,可以看到各床位的输液数据。点击床位行可以查看近3分钟的进度折线图,以及总时长、异常出现次数等信息。
Figure 6. Infusion data of bed No. 2
图6. 2床输液数据
Figure 7. Statistics chart of received data
图7. 数据接收统计图
Figure 8. Diagram of infusion situation display
图8. 输液情况展示图
系统共完成了50组常规测试,其中大于15分钟的测试15组,3~5分钟的测试35组,分别测试了正常输液和发生了物体压住输液管、拉拽输液管等异常的情况,并在输液过程中模拟了输液设备随风晃动、人为擦碰等干扰。总体来看,系统接收数据稳定,各模块工作正常,结果如表1所示。其中预测准偏差的算法为以输液瓶中液体刚好达到瓶口为标准,对结束时误差时长的绝对值求算术平均。结果显示对异常情况的漏报和错报率较低,无干扰时预测偏差为9.4秒,有干扰时预测偏差为22.8秒。此外还测试了网络连接异常等情况,相关数据均正常得到处理和显示。
Table 1. System resulting data of standard experiment
表1. 标准试验系统结果数据
测试项 |
数据 |
异常情况漏报率 |
0% |
异常情况错报率 |
1.4次/十分钟 |
结束控制器响应率 |
100% |
蜂鸣器响应率 |
100% |
预测偏差(无干扰) |
9.4秒 |
预测偏差(有干扰) |
22.8秒 |
测试结果看,关键的结束控制及提醒均正常工作,但系统在输液设备晃动时出现了一定的误报现象,且受限于测试的局限性,难以模拟全部的干扰情况,实际应用时可能出现干扰持续时间长而导致频繁报异常的情况。同时,干扰对输液剩余时长的预测也有一定影响,但考虑液位传感器数据可保证输液的结束控制以及医护人员的后续操作也需要一定时间,测试中的误差时长在可接受的范围内。
4. 结语
本文实现的输液监控系统部署成本低、易于使用、便于拓展,适用于各种输液场景,力求用尽量简单的方式在传统医院的现有条件下实现目标,同时,系统的软硬件都有很好的可扩展性,便于加装其他传感器以拓展监控内容或打通医院的HIS以实现更多功能。
系统在测试中很好地实现了对输液过程的监控,但实际应用落地还有一些问题需要考虑,一是完善设备整体结构设计,便于快速安装使用和维护;二是输液支架可能存在结构不稳定问题,同时也为了进一步降低误报率,可以在设计基础上加装陀螺仪以检测设备的运动和姿态,对重量数据进行修正并结合算法过滤风吹等因素的干扰;三是在加强应用层设计,让用户更直观方便地了解状态。