PPS消息传送可简化医疗设备设计
扫描二维码
随时随地手机看文章
一款电子医疗设备的设计、开发和上市准备可能比拥有同等技术复杂度的消费级设备要花费更多的时间、努力和成本。除了一般的开发和审批需求,医疗器械还有严格的功能安全和认证要求。这些要求都意味着医疗器械拥有严格定义和管理的设计、开发和审批环境,并需要对功能安全进行广泛和精细的验证。
当然,医疗器械在上市之前必须得到产品销售地和使用地主管当局的相关认证,比如:FDA 510(k)上市前通告、医疗器械指令(MDD)和其他国际和国家机构颁发的认证。
本文描述了医疗数据聚合器和发布者(QNX公司医疗演示)中的PPS消息传送。QNX医疗演示(MD)在便携式演示应用中整合了血压计、肺活量计、脉搏氧饱和度仪、心电图和胰岛素泵。这些设备连接至QNX康体佳互通性管理器上,并利用QNX PPS消息传送与Qt HMI进行通信。PPS也为远程管理器提供了消息传送服务,以确保与基于云的数据库和便携式平板电脑之间进行安全互联网通信。由于带有PPS消息传送功能的系统可以简易地整合不同的组件,我们可以得出结论:PPS消息传送功能非常适用于像QNX MD应用之类的系统。
图1:QNX MD演示。
异步消息传送
异步消息已众所周知并得到广泛应用,这里不再赘述。它是很多系统可选的解决方案,但其一些特性使它难以成为需要集成大量器件和软件的系统的理想解决方案。
图2:采用异步消息传送,进程无须等待目标接收进程的回复。
对于复杂医疗设备的消息传送模式,值得注意的是,异步消息传送是一个低端的解决方案--它将错误处理、端到端语义和缓冲管理等负担推高至应用程序级。因此,架构师在设计采用异步消息传送模式的系统时,必须开发一个或多个协议,以确保在所有应用中消息传送正确进行,因为它们必须保证这些应用程序在高负载条件下能够获得足够的内存分配用于消息缓冲。
在简单的系统中,完成这些任务可能不太费劲,但对于设计或升级复杂的系统,这些任务可能构成艰巨的挑战。进一步来说,它们给应用程序级或者应用开发流程带来的复杂操作不仅会影响设计和开发进程,也会影响设备的审批,进而影响设备认证。
发送/接收/回复
发送/接收/回复(或者同步)消息传送不如异步消息传送那样常见。它的重要性主要体现在实时环境中--许多进程必须先响应其消息后才能继续运行。此外,与异步消息传送不同的是,采用发送/接收/回复消息传送时,系统框架会承受处理消息传送错误和消息缓冲的负担。
每个服务器都与其客户端直接通信,而且必须知道如何响应所有的客户端消息。
同步消息传送密切联系着发送方和接收方,因此,更改一个软件组件可能需要更改其他的软件组件,这不仅延缓或阻碍了系统开发,还加剧了系统的脆弱性。
图3:采用同步消息传送,进程阻塞直到它接收到从目标接收进程发出的回复。
总之,如果采用发送/接收/回复消息传送,当系统不断扩展并增加不同组件时,系统的复杂性会迅速加剧,变得不堪一击,因此很难在确保性能和对医疗器械来说极为重要的可靠性的同时进行升级和扩展。
二进制还是可读对象?
系统可扩展性
利用PPS服务,发布者与订阅者之间并不认识;他们之间唯一的联系是具有某种含义和用途的对象。这种消息传送模式赋予了系统设计者极大的灵活性:如有必要,他们可以将关于模块连接点和数据流的决策推迟到运行时间再做出。因为这些决定既非硬编码,也没有直接联系,开发人员可以根据实际情况或要求的变化改变决定,甚至还能在系统运行时动态地更改决定。
松耦合PPS消息传送模式还能简化新软件组件的集成。由于发布者和订阅者不必认识对方,增加组件的开发人员只需要确定这些新组件的发布内容,以及他们需要其他PPS客户端发布的数据内容。开发人员无需精确地调整应用程序接口;系统复杂性不会随组件的增加而加剧。
图4:QNX MD视频截图。
医疗演示
作为QNX软件系统公司开展的医疗器械开发计划的一部分,运行QNX Neutrino RTOS的系统中设计和创建了QNX MD数据聚合和发布应用,以在便携式医疗器械提供的有限的计算资源上运行。该应用利用基于康体佳标准的互通性管理器、PPS和用户界面框架Qt创建的HMI,将一系列典型设备组合起来。
Qt和CESL
选择Qt用户界面和康体佳使能软件库(CESL)的互通性管理器是因为这两种技术都在医疗器械行业享有盛誉。Qt在C++开发环境中提供了一套明确定义的UI组件,并且有着在获得了FDA及其他规定认证的医疗器械上成功实现的悠久历史。
图5:带有PPS消息传送模式的QNX MD数据聚合和发布应用。需要注意,PPS为HMI和互通性管理器以及远程管理器提供所有消息传送。
Qt提供了打造符合严格设计要求的清晰、高效的用户界面所需的所有组件,包括布局、分层和多媒体支持。与之类似,康体佳软件库中的通信协议不仅提供了与完全不同的医疗器械进行通信的简单方法,而且是一个早已在医疗器械中成功部署的标准化协议。简而言之,Qt和康体佳技术满足所有需求,并且为医疗器械行业所熟知和信任。
简化的架构
QNX MD演示应用使用PPS服务的一个重要好处是松耦合的消息传送模式可以实现灵活的架构。如果出于任何原因而必须要求这样的改变,也仅需要极少量的工作来用另一个库替代康体佳库,或者替代HMI的Qt.
改变HMI技术无需改变互通性管理器或者远程管理器,就像改变这些管理器不会要求改变HMI一样。此外,PPS消息传送模式也便于添加新的设备,可以利用标准的康体佳协议通过USB、蓝牙甚至TCP将新的设备连接至系统。例如,仅需利用康体佳协议将一个EEG连接至互通性管理器,创建适当的PPS对象与数据库、本地HMI和平板电脑上的远程HMI交流数据,并在HMI中添加相关的显示和控制功能,即可将该EEG添加到可行性论证模型中。
在使用其他消息传送模式的系统中,组件彼此紧密联系,也与人机界面密切联系。每个组件都要了解需要与其交换数据的其他组件--在这种系统架构中更改或增加内容势必会困难重重、耗费时间和充满风险。PPS消息传送模式的另一个优势是它可以简化测试和功能安全验证,因为增加新的组件无需重新访问其他所有组件之间的消息传送。
最后,PPS消息传送简化了品牌重塑、本地化和用户界面更新。因为HMI通过PPS对象与系统的其余组件进行通信,所以用户界面设计者仅需确保新的或改变的HIMI所订阅和发布的PPS对象与先前HMI的PPS对象相同。他们不需要改变HMI下面任一行代码。在完全相同的基础系统上,仅需通过不同的界面、实现不同的特性或者不同区域的不同HMI设计(例如支持不同的写入系统或不同的颜色偏好和意义),即可打造出各种产品系列。
图6:QNX MD应用程序连接外部数据库的高层视图。
本文小结
QNX MD应用展现了PPS消息传送可以如何应用于松耦合的医疗器械架构中。该设计实现了HMI和支持标准康体佳协议的互通性管理器之间灵活、强大的通信。这个互通性管理器还可与外部组件设备通信。由于组件仅仅根据实施需求来发布和订阅PPS对象,他们不需要了解对方,因此不费吹灰之力就可以扩展或修改系统。实际上,PPS组件的松耦合架构使更改、升级和扩展任务变得更加轻松,从而减少了风险。
PPS服务可设计成使用二进制对象或可读对象。
我们选择将可读对象和属性用于QNX PPS,因为与较大对象的成本相比,其具有更大的开发和调试优势。
可读对象允许使用简单的文件系统工具从命令行进行调试,比如cat命令用于订阅,echo命令用于发布。
举例来说:
cat /pps/media/PlayCurrent
cat /pps/media/.all?wait
或
echo "attr::value"》/pps/objectfilename
同样,调试信息(包括PPS对象和属性)能够通过订阅一个对象并打印出来的简单程序被检索到。
持久发布/订阅
对于实时操作系统(比如必须满足严格的可靠性和可获取性要求的QNX Neutrino RTOS)来说,发送/接收/回复消息传送模式非常适用,甚至是有强制要求。但是,和异步消息传送一样,发送/接收/回复消息传送也不是复杂系统的最佳选择,特别是当这些系统必须轻松地集成不同的应用和功能时。发送/接收/回复消息传送密切联系着发送方和接收方。
发布/订阅已经以各种形式存在了至少20年。1987年,K.P.Birman和T.A.Joseph将类似的消息传送模式(虚拟同步)描述为"一种容错的异步公告牌机制".
二十年前,北电网络公司应用了一种类似模型以在电话交换机(如DMS-100)上进行故障监测,并使用了网络监测和报告系统的技术。只要在网上快速搜索,就能找到许多发布/订阅的应用实例。再深入搜索,还能在美国计算机协会(ACM)的门户网站上找到几百份与发布/订阅的某些方面或其他观察者模式计算模型有关的文章。
我们将重点介绍,在重启时也能确保持续性的发布/订阅模型或PPS如何能够帮助不仅支持各种设备和软件组件、而且能与复杂人机界面进行通信的嵌入式应用程序进行开发和部署。
我们对QNX MD使用了基于Qt的HMI,但是PPS消息传送模式的优势也可以应用于由其他技术建造的HMI.实际上,在其他系统上已经应用了PPS,包括QNX CAR应用平台和Smart Energy参考应用,这两者都拥有基于Adobe Flash的HMI.
基于对象的系统
PPS是在松耦合消息传送架构中针对发布者和订阅者提供的一种基于对象的服务。根据实现服务的需要,任何PPS服务客户端都既可以是单独的发布者或订阅者,也可以既是发布者又是订阅者。
发布以异步方式进行。PPS对象集成在PPS文件系统的路径名空间中。发布者可修改对象及其属性并将其写入到文件系统中。当任何发布者更改对象时,PPS服务都会通知订阅该对象的所有客户端。PPS客户端能订阅多个对象,PPS对象可以有多个发布者和多个订阅者。因此,能访问应用到不同对象属性的数据的发布者可使用相同对象与该对象的所有订阅者交流信息。
PPS客户端必须知道感兴趣的是哪些PPS对象。如果是发布方,他们需要知道在什么时候发布什么消息;如果是订阅者,他们需要知道订阅的对象种类和感兴趣的对象属性。然而,PPS客户端不必管理错误,只需在使用open()、read()和write() POSIX API调用的范围内缓冲,确认其理解读取的内容以及是否希望读取处于阻塞或非阻塞状态。PPS服务会负责处理其他内容。客户端只需要知道已读取消息并且能分析读取内容。同样,由于PPS订阅者使用read()调用检索对象,他们无需管理这些对象的缓冲区。
推送还是提取?
在默认状态下,QNX PPS服务是作为推送式发布系统运行的;也就是说,发布者会将数据推送到对象中,订阅者会根据通知或在闲暇时读取数据。
但有些数据(如接口上的数据包计数)变化太快,因此无法通过使用默认推送发布的PPS有效地进行发布。
为此,QNX PPS还提供了一种选项,允许订阅者将PPS变成提取式发布系统。当订阅者打开具有该选项的对象并发出一个read()调用时,该对象的所有发布者会收到一个通知以在对象中写入当前数据。订阅者的读取会一直阻塞直至对象的数据得到更新并返回新的数据。[!--empirenews.page--]
利用这种提取机制,PPS订阅者能按其需要的速度向发布者检索数据,从而实现了真正意义上的按需发布。
语言独立
PPS服务可以设计成使用标准POSIX文件系统,并能与所有编程语言或应用程序环境连用,包括C、C++、Java、Javascript、ksh脚本语言等。
以一种语言编写的组件能与使用其他语言编写的组件通信。无需具备其他组件的专门知识。
持久性
PPS服务可以在重启时维护数据。它不仅能在运行时维护内存中的对象,而且能在运行时按照需要或在关机时将对象保存到永久性存储器中。它能在系统启动时或在首次访问(延迟加载)时恢复对象。当然,底层永久性存储器依赖于可靠的文件系统和存储介质,如硬盘、NAND或NOR闪存或其他定制文件系统。
除了能在重启时确保数据的持久性以外,PPS消息传送模式还能简化系统启动。例如,在使用另一种消息传送模式的系统中,如果客户端紧随服务器之后启动,该客户端必须向服务器请求最新数据,以防在服务器和客户端启动之间的时间段内发生某些变化。当客户端与服务器失去联系(无论何种原因导致)时会发出这种请求,系统中所有的客户端都会发出这样的请求,而且服务器必须做出响应。
采用PPS时,系统服务会在启动时恢复对象并在其更改时进行维护。所有客户端(无论何时启动或者重新连接)只需读取这些对象以获取最新数据即可。