传统的医疗设备,特别是便携式的监护、心电、血压测量等设备均是采用标准的RS232串行接口进行数据的通信与传输,已越来越不能满足高速据传输,高数据存储以及频繁的数据采集等要求[1,2]。而USB通讯弥补了这些不足,它有着传输速度快、可靠性高、易于连接、可热插拔等许多优点。基于此,本文就介绍了一种基于USB总线接口芯片CH375实现PC机与便携式医疗设备医学信号的实时数据采集和传输的方法,并给出了相应的源程序。经测试,系统工作稳定可靠。 1 CH375芯片简介 CH375 是一个USB总线的通用接口芯片,支持USB-HOST主机方式和USB-DEVICE/SLAVE 设备方式。在本地端,具有8 位数据总线和读、写、片选控制线以及中断输出,可以方便地挂接到单片/DSP/MCU/MPU等控制器的系统总线上。CH375 芯片内部集成了 PLL 倍频器、主从 USB 接口 SIE、数据缓冲区、被动并行接口、异步串行接口、命令解释器、控制传输的协议处理器、通用的固件程序等。 CH375芯片内置了标准的USB通讯协议,这就免去了开发人员因编写通讯协议而耗费的大量时间,方便了通讯的实现。尤其是其动态链接库提供的文件级接口,更是方便了数据的读写。 2 系统硬件结构 系统的工作过程是嵌入式医疗设备即下位机(PC104)于DOS状态下采集医疗信号送显示器显示,然后通过USB接口送上位机(PC主机)处理,上位机工作在Windows环境下[3,4]。 系统选用带USB接口的PC104工业计算机主板,在开发过程中通过电源接口外接5V直流电源,通过显示器接口外接显示器,多功能接口外接键盘。为方便软件的更新,我们把下位机的工作程序写在优盘,外接于PC104主板的USB接口。 基于CH375芯片的系统还设计了PC104-USB转接板,并把其作为PC104主板的扩展模块通过PC104总线接口与主板相连接。转接板上有两个USB接口,任选其中一个通过 USB转接线与上位机相连即可。这样系统的硬件平台便建立起来了,系统硬件连接如图1所示。下面详细介绍系统通讯的软件实现。 3 下位机中的程序设计 USB协议规定任何传输过程都是由主机端发起并控制的,CH375在接收到主机发来的数据时产生中断,为此下位机要做的工作就是等待CH375的中断并作相应的处理。 下位机工作在DOS状态,软件程序采用BORLANDC语言。主要工作是初始化CH375、查询中断及中断处理。相关程序代码如下: (1)处理接收数据的中断服务程序 void interrupt USB(__CPPARGS) { unsigned char len,i; //获取中断状态并取消中断请求 CH375WriteCmd(0x22); d0=CH375ReadData(); //读回状态 if((d0==0x02)||(d0==0x01)) //批量端点2接收到PC机发送的数据 {//读取数据} inportb(0x21); outportb(0x20,0x20); //发EOI命令, 清除中断 }
(2)写数据子程序 void CH375WriteData( unsigned char dat )
{ /* 写数据口 */ outportb( PortBaseAddr + 0, dat ); DelayuS( 1 ); } (3)读数据子程序 unsigned char CH375ReadData( void ) { unsigned char d; DelayuS( 1 ); /* 读数据口 */ d = inportb( PortBaseAddr + 0 ); return( d ); } (4)主程序 int main(int argc,char *argv[]) { .................. for(;;) //等待 {//软件进入主循环,处理突发事件 while(kbhit()) ch="getch"(); if(ch==27) break; if(ch==59){.//向PC机发送数据} if(ch==60){//写中断特征数据} readbufUSB(); //读USB接口缓冲区数据 } .................. } 4上位机中的程序设计 因为CH375的动态链接库DLL提供了许多API接口函数,所以应用程序只需通过几条简单的文件操作API函数,就可以实现与下位机的通信。 又因CH375的动态链接库DLL提供了伪中断服务(实际的中断服务仍然是在驱动程序库完成的,只是在完成后向DLL发个通知,再由DLL再调用伪中断服务子程序),基于此,系统采用了伪中断服务来实现数据的上传,这不仅缩短了系统的开发周期,而且很好地满足了下位机的实时性要求。 数据的下传只需用简单的下传API发送数据。由CH375中断接收即可。 上位PC机工作在Windows环境下,我们采用Visual C++6.0语言编程。具体程序实现如下: (1)初始化PC104-USB卡 在这里完成对设备的初始化,如CH375DLL.DLL文件的加载、设备的成功打开、缓冲区的清理、数据的上传模式、设置伪中断服务程序等。
图2 上传数据流程图 Figure 2 procedure flowchart of uploading data (1)void Init_PC104-USB() { ................... if ( LoadLibrary( "CH375DLL.DLL" ) == NULL ) { //提示语言 } // 使用之前必须打开设备 if ( CH375OpenDevice( mIndex ) == INVALID_HANDLE_VALUE ) { //提示语言}
else{ m_pc104usb_ok=TRUE; Result=CH375SetTimeout(mIndex, 500, 500 ); // 设置USB数据读写的超时,超过500mS未完成读写将强制返回,避免一直等待下去 CH375SetBufUpload( mIndex, 1); //启用内部缓冲上传模式并清除缓冲区中的已有数据 //设置伪中断服务程序 mPCH375_INT_ROUTINE ptr; ptr=InteruptProcess; Result=CH375SetIntRoutine(mIndex,ptr); } } (2) 接收数据子程序 Void PC_RecievData(); { ......... // 查询内部上传缓冲区中的已有数据包个数,成功返回数据包个数,出错返回-1 Long packnumber= CH375QueryBufUpload( mIndex); { CH375ReadData(mIndex,&m_recev_buf, len) } ........... } 结论 随着嵌入式计算机在医疗设备中的广泛应用以及USB通讯技术的高速发展,本文通过USB总线接口芯片CH375、PC主机以伪中断方式发起上传数据流,以下传API发起下传数据流的通讯方式,并利用一系列的API接口函数,成功实现了上位机(PC)与下位机(PC104)之间的实时数据采集和传输。经测试系统能准确的收发数据,通讯稳定可靠。采用USB通讯,将为传统医疗设备的改造、新一代便携式医疗设备的快速开发和应用提供广阔的前景。 本文创新点:利用USB接口技术,采用USB模块CH 375在PC机与便携式医疗设备之间实现了实时数据采集和传输,而且无需编写复杂的USB驱动程序,利用其动态链接库即可实现。可以使数据采集和传输系统非常方便的从RS232通讯、串行通讯、并行通讯、转向USB通讯,弥补其速度慢的缺点,进行系统升级。 参 考 文 献 [1] 王刚.刘雅言. USB 接口技术在便携式医疗仪器中的应用[J].电子技术.2004,2,10-12. [2] 苏全.梁凯琦. USB TO RS-232在传统医疗设备中的应用[J].医疗设备信息.2005,20(6)19-20. [3] 李新龙,翟宏范,狄国伟,王鑫,. USB芯片CH375在电能测量仪系统中的应用[J]. 微计算机信息,2006-26:318-320. [4] 李建.徐璧华.陈利学.Windows环境下PC机与PC104的串行通讯控制[J].西南石油学院学报.2001,23(4)68-76 [5] 杨晓鹏.宗明.Visual C++ 7.0实用编程技术[M].北京:中国水利水电出版社,2002.
12万家医院招聘,60万名医生护士求职,上康强医疗人才网 www.kq36.com
【免责声明】本文仅代表作者本人观点,与康强药师网无关。康强药师网站对文中陈述、观点判断保持中立,不对所包含内容的准确性、可靠性或完整性提供任何明示或暗示的保证。请读者仅作参考,并请自行承担全部责任。
|