《電子技術(shù)應(yīng)用》
您所在的位置:首頁(yè) > 嵌入式技術(shù) > 設(shè)計(jì)應(yīng)用 > 基于有源RFID的智能導(dǎo)醫(yī)系統(tǒng)
基于有源RFID的智能導(dǎo)醫(yī)系統(tǒng)
來(lái)源:電子技術(shù)應(yīng)用2011年第8期
蔣 君,李偉鵬
(南方醫(yī)科大學(xué) 生物醫(yī)學(xué)工程學(xué)院,廣東 廣州510515)
摘要: 介紹一種結(jié)合了有源RFID技術(shù)、嵌入式系統(tǒng)和數(shù)據(jù)庫(kù)技術(shù)的智能導(dǎo)醫(yī)系統(tǒng)。該系統(tǒng)能夠在越來(lái)越復(fù)雜的醫(yī)院環(huán)境中為病人提供就醫(yī)導(dǎo)引信息。優(yōu)化了患者的就醫(yī)體驗(yàn),提高了醫(yī)院各科室的工作效率和協(xié)作化程度。
中圖分類(lèi)號(hào): TP319.3
文獻(xiàn)標(biāo)識(shí)碼: B
文章編號(hào): 0258-7998(2011)08-0039-04
Intelligent medical navigation system based on active RFID
Jiang Jun,Li Weipeng
School of Biomedical Engineering , Southern Medical University, Guangzhou 510515,China
Abstract: This paper presents an intelligent medical navigation system,which integrates active RFID, embedded systems and database technology. Since hospitals are becoming increasingly complex, patients often lost their way when they are in hospital. This system provides an effective way to release medical guidance information for patients. It optimizes the patient's medical experience, and improves efficiency and collaboration between hospital's various departments.
Key words : medical navigation;embedded SQL;active RFID;QT programming


    隨著醫(yī)院規(guī)模的逐漸擴(kuò)大,醫(yī)院的建筑結(jié)構(gòu)越來(lái)越復(fù)雜。本文介紹的患者就醫(yī)導(dǎo)引系統(tǒng),以嵌入式SQL和有源RFID技術(shù)為基礎(chǔ),能夠在患者就醫(yī)的整個(gè)過(guò)程中提供就醫(yī)路線(xiàn)的導(dǎo)引,使患者就醫(yī)的體驗(yàn)更人性化,同時(shí)可以提高醫(yī)生工作效率和各科室的協(xié)作化程度?,F(xiàn)階段綜合性醫(yī)院普遍使用的分診叫號(hào)系統(tǒng)[1-2]只能對(duì)科室內(nèi)部的就診患者進(jìn)行分流。
    智能導(dǎo)醫(yī)系統(tǒng)由導(dǎo)醫(yī)終端(圖1中終端控制核心、RFID閱讀器和LCD顯示器三部分)、局域網(wǎng)、服務(wù)器三部分組成。導(dǎo)醫(yī)終端配置若干個(gè),分別安放于醫(yī)院走廊、過(guò)道、電梯、樓梯間等位置。整個(gè)系統(tǒng)的示意圖如圖1所示。

    構(gòu)建導(dǎo)醫(yī)系統(tǒng)的關(guān)鍵在于導(dǎo)醫(yī)終端的搭建和服務(wù)器上數(shù)據(jù)庫(kù)的建立,而系統(tǒng)的網(wǎng)絡(luò)則可以依靠醫(yī)院原有的有線(xiàn)或無(wú)線(xiàn)局域網(wǎng)。就醫(yī)導(dǎo)引系統(tǒng)(以下簡(jiǎn)稱(chēng)導(dǎo)醫(yī)系統(tǒng))的基本工作原理如下:
 病人掛號(hào)時(shí)領(lǐng)取一張有源射頻卡(閱讀距離大于1 m),該卡周期性發(fā)射病人ID號(hào)。掛號(hào)的過(guò)程中,將病人ID號(hào)與所要就診的科室等信息在數(shù)據(jù)庫(kù)中進(jìn)行關(guān)聯(lián)。當(dāng)病人行進(jìn)到導(dǎo)醫(yī)終端附近時(shí),連接在導(dǎo)醫(yī)終端的射頻卡閱讀器將接收到病人ID號(hào)。導(dǎo)醫(yī)終端依據(jù)接收到的ID號(hào)發(fā)起數(shù)據(jù)庫(kù)檢索,檢索出病人掛號(hào)時(shí)建立的數(shù)據(jù)庫(kù)表項(xiàng),如就診科室等相關(guān)信息。最后,綜合檢索到的信息將就醫(yī)導(dǎo)引信息顯示在LCD屏幕上。
1 硬件平臺(tái)構(gòu)建
    導(dǎo)醫(yī)系統(tǒng)終端硬件平臺(tái)包括四個(gè)主要部分:終端控制核心、RFID閱讀器、LCD顯示模塊和電源。其硬件框圖如圖2所示。

 

 

    終端控制核心采用廣州友善之臂的mini6410開(kāi)發(fā)板,處理器內(nèi)核為ARM11。該處理器性能強(qiáng)勁,能處理較低分辨率的視頻。如果每個(gè)導(dǎo)醫(yī)系統(tǒng)終端控制核心都用PC機(jī)實(shí)現(xiàn),雖然能夠換取更高的性能,但意味著每個(gè)終端的制作成本將大大增加。這將導(dǎo)致醫(yī)院的運(yùn)作成本和患者就醫(yī)成本增加。
    導(dǎo)醫(yī)終端采用臺(tái)式PC用的普通17英寸LCD作為顯示器,屏幕較大,用戶(hù)體驗(yàn)良好。由于終端的控制核心只有并行的LCD數(shù)據(jù)線(xiàn),所以需要LCD轉(zhuǎn)VGA模塊將視頻信號(hào)轉(zhuǎn)成VGA接口模式。這個(gè)模塊采用的是友善之臂提供的方案。
    RFID閱讀器模塊和病人攜帶的RFID標(biāo)簽是自行設(shè)計(jì)的一套有源RFID系統(tǒng),閱讀距離1 m~5 m可調(diào)。有源RFID閱讀器與導(dǎo)醫(yī)系統(tǒng)終端控制核心采用UART串口連接。
    另外,直流電源采用普通的5 V開(kāi)關(guān)電源。USB接口可以在單獨(dú)調(diào)試每個(gè)導(dǎo)醫(yī)終端上的程序時(shí),外接USB鍵盤(pán)或鼠標(biāo)。RJ45是外接網(wǎng)線(xiàn)的物理接口,每個(gè)終端通過(guò)這個(gè)接口獲取患者的完整信息。目前市面上也有很多USB接口的無(wú)線(xiàn)網(wǎng)卡,也可以無(wú)線(xiàn)局域網(wǎng)的形式將導(dǎo)醫(yī)終端連接到局域網(wǎng)。如果采用USB無(wú)線(xiàn)網(wǎng)卡的方式,則需要通過(guò)USB Hub來(lái)擴(kuò)充核心控制板上的USB接口,并移植相應(yīng)的驅(qū)動(dòng)。
2 軟件平臺(tái)構(gòu)建
    導(dǎo)醫(yī)終端的硬件平臺(tái)建立后需要構(gòu)建運(yùn)行于其上的軟件平臺(tái),作為上層應(yīng)用程序運(yùn)行的基礎(chǔ)。由于導(dǎo)醫(yī)終端采用ARM-Linux嵌入式系統(tǒng)設(shè)計(jì),除了OEM廠(chǎng)商提供的軟件包外,很多其他要用到的庫(kù)都需要自己修改或移植[3-4]。
2.1 數(shù)據(jù)庫(kù)訪(fǎng)問(wèn)
    應(yīng)用程序訪(fǎng)問(wèn)數(shù)據(jù)庫(kù)的方式如圖3所示。在A(yíng)RM硬件平臺(tái)、Linux操作系統(tǒng)下也不例外。

    本文介紹的導(dǎo)醫(yī)系統(tǒng)的數(shù)據(jù)庫(kù)是用Microsoft SQL Server建立的。SQL Server(及SyBase)使用TDS(Tabular_
Data_Stream)作為其數(shù)據(jù)庫(kù)現(xiàn)客戶(hù)端傳輸?shù)膮f(xié)議,它對(duì)應(yīng)于圖中的ODBC驅(qū)動(dòng)。Linux下有此協(xié)議的免費(fèi)版——freetds,將其移植到ARMLinux平臺(tái)作為訪(fǎng)問(wèn)SQL Server的ODBC驅(qū)動(dòng)。ODBC可以移植unixODBC和QT自帶的ODBC庫(kù)。
2.2 ODBC庫(kù)及其驅(qū)動(dòng)移植
    系統(tǒng)中帶有相應(yīng)的ODBC驅(qū)動(dòng)和ODBC庫(kù)文件,是以O(shè)DBC方式在嵌入式系統(tǒng)中訪(fǎng)問(wèn)SQL數(shù)據(jù)庫(kù)的必需條件。這些庫(kù)和驅(qū)動(dòng)可以通過(guò)下載相應(yīng)軟件包,經(jīng)過(guò)交叉編譯并拷貝到ARM-Linux平臺(tái)相應(yīng)目錄來(lái)實(shí)現(xiàn)移植。而在交叉編譯之前必須對(duì)其進(jìn)行重新配置,否則無(wú)法生成合適的庫(kù)或驅(qū)動(dòng)。
2.2.1 unixODBC-2.2.12的交叉編譯(arm體系)
    配置選項(xiàng)如下:(--prefix選項(xiàng)指定把編譯好的包釋放到什么地方)
    ./configure --host=arm-linux --prefix=/usr/local/arm/unixODBC-arm-iconv-2.2.12 --disable-gui --enable-iconv --enable-static
然后make & make install。
    另外還要編譯一個(gè)x86體系的unixODBC-2.2.12,因?yàn)榻徊婢幾gfreetds-0.82時(shí)要用到。
2.2.2 unixODBC-2.2.12的x86體系編譯
    配置選項(xiàng)如下:(與上面不同的是去掉了--host=arm-linux 選項(xiàng))
    ./configure --prefix=/usr/local/arm/unixODBC-x86-2.2.12 --disable-gui --disable-iconv --enable-static
    然后make & make install。
2.2.3 交叉編譯freetds-0.82
    配置選項(xiàng)如下:
    ./configure --prefix=/usr/local/arm/freetds --with-tdsver=8.0 --disable-libiconv --host=arm-linux --with-unixodbc=/usr/local/arm/unixODBC-x86-2.2.12 --with-gnu-ld --enable-shared --enable-static  --enable-msdblib --enable-dbmfix
    將arm體系unixODBC目錄下的庫(kù)lib文件夾拷貝到x86體系unixODBC目錄下,替換x86下的庫(kù),然后make & make install。
2.2.4 QT ODBC庫(kù)的移植
    如果需要在QT下直接通過(guò)ODBC方式訪(fǎng)問(wèn)SQL Server,則開(kāi)發(fā)板中還必需含有QODBC,這需要在交叉編譯QT4的庫(kù)時(shí)候加上配置選項(xiàng)-qt-sql-odbc 或者如下配置:
    ./configure -opensource -embedded arm -xplatform qws/linux-arm-g++  -no-webkit -qt-libtiff -qt-libmng  -qt-mouse-tslib -qt-mouse-pc -no-mouse-linuxtp -iconv -qt-sql-odbc -I/usr/local/arm/unixODBC-x86-2.2.12/include -L/usr/local/arm/unixODBC-x86-2.2.12/lib
    然后make & make install,再將新編譯得到的lib目錄下的 *Sql*文件拷貝到開(kāi)發(fā)板下,替換原來(lái)的文件。如果配置時(shí)添加的是 -plugin-sql-odbc 選項(xiàng),需要將plgins/Sqldrivers/目錄下的所有文件拷貝到開(kāi)發(fā)板相同目錄下。
2.3 SQL Server數(shù)據(jù)庫(kù)構(gòu)建[5]
    導(dǎo)醫(yī)系統(tǒng)終端接收到病人ID號(hào)后將檢索數(shù)據(jù)庫(kù)。這個(gè)數(shù)據(jù)庫(kù)的構(gòu)建直接關(guān)系到給出的導(dǎo)醫(yī)信息是否正確。試驗(yàn)階段采用如圖4的數(shù)據(jù)庫(kù)結(jié)構(gòu)。該數(shù)據(jù)庫(kù)一共由5個(gè)表組成:(1)Patient表。記錄病人姓名,將要前往就診的科室等信息;(2)Department表。記錄醫(yī)院科室名稱(chēng)及所在物理位置等信息;(3)Terminal表。記錄終端機(jī)IP地址及所在物理位置等信息;(4)Position表。表示綜合終端機(jī)與科室相對(duì)位置關(guān)系,它的表項(xiàng)直接關(guān)系到導(dǎo)醫(yī)終端給出的方向指引是否正確;(5)Information表。綜合上述所有表給出導(dǎo)醫(yī)所需的信息:病人姓名、將要去往的就診科室和相對(duì)方向(將要去往就診的科室的方向)。應(yīng)用程序只要依據(jù)病人ID檢索到information表即可獲取就醫(yī)導(dǎo)引所需的完整信息。

    SQL Server數(shù)據(jù)庫(kù)在試驗(yàn)階段能夠比較完整地實(shí)現(xiàn)系統(tǒng)功能,實(shí)際使用時(shí)需要依據(jù)每個(gè)醫(yī)院的實(shí)際情況進(jìn)行調(diào)整。導(dǎo)醫(yī)系統(tǒng)應(yīng)用于實(shí)際醫(yī)院時(shí)可能需要另外構(gòu)建一個(gè)數(shù)據(jù)庫(kù)服務(wù)器,并與醫(yī)院現(xiàn)有的HIS系統(tǒng)進(jìn)行連接,以共享一套病人掛號(hào)科室等其他信息。
3 應(yīng)用程序
    導(dǎo)醫(yī)終端上的應(yīng)用程序采用QT4編程實(shí)現(xiàn)[6]。QT是一個(gè)基于C++的圖形用戶(hù)界面庫(kù)。它的跨平臺(tái)特性比較好,編輯好的程序代碼幾乎不需做修改就可以編譯出運(yùn)行于其他平臺(tái)的可執(zhí)行程序。應(yīng)用程序的核心是檢測(cè)串口接收緩沖區(qū),當(dāng)串口接收緩沖區(qū)存在有效的病人ID號(hào),即依據(jù)該ID號(hào)發(fā)起一次數(shù)據(jù)庫(kù)連接與檢索。不同于普通PC環(huán)境,在A(yíng)RMLinux平臺(tái)下,需要解決三個(gè)核心問(wèn)題:ARM-Linux下串口通信、漢字字符集兼容和SQL Server數(shù)據(jù)庫(kù)連接等。
3.1 ARM-Linux下串口通信
    QT下沒(méi)有提供串口通信的控件,但是提供了第三方的串口通信類(lèi)qextserialport。本系統(tǒng)即是采用該類(lèi)完成了ARM-Linux下的串口通信。該類(lèi)繼承自QIODevice類(lèi),可分為Win_QextSerialPort和Posix_QextSerialPort,分別支持Windows和Linux兩種環(huán)境下的編譯。在Linux下需要添加 #define _TTY_POSIX_宏定義,以確保選擇正確的條件編譯。通過(guò)以下代碼即可打開(kāi)串口ttySAC3,并設(shè)置波特率為9 600 Kb/s,無(wú)流控制和奇偶校驗(yàn), 8位數(shù)據(jù)位,1位停止位。
    port=new Posix_QextSerialPort("/dev/ttySAC3",
QextSerialBase::EventDriven);
    port->setBaudRate(BAUD9600);
    port->setFlowControl(FLOW_OFF);
    port->setParity(PAR_NONE);
    port->setDataBits(DATA_8);
    port->setStopBits(STOP_1);
3.2 字符集的轉(zhuǎn)換
    Linux系統(tǒng)下漢字一般采用Unicode編碼,而Windows系統(tǒng)下漢字一般采用GBK編碼。如果將檢索的結(jié)果做了不正確的轉(zhuǎn)化,則顯示的漢字將出現(xiàn)亂碼。這個(gè)問(wèn)題可從以下兩個(gè)方面來(lái)解決:
    (1)移植freetds和unixODBC時(shí),要將配置選項(xiàng)iconv設(shè)置為disable。具體來(lái)說(shuō),unixODBC的配置選項(xiàng)中一定要有--disable-iconv,freetds的配置選項(xiàng)中一定要有--disable-libiconv。這樣做可以避免ODBC和ODBC驅(qū)動(dòng)進(jìn)行字符集的自動(dòng)轉(zhuǎn)換,從而避免出現(xiàn)無(wú)法預(yù)見(jiàn)的字符集不兼容問(wèn)題。
    (2)QT為世界上多數(shù)語(yǔ)系提供廣泛支持。在編寫(xiě)QT程序時(shí)一定要在主程序中添加相關(guān)代碼,定義好程序的字符編碼類(lèi)型。如果希望應(yīng)用程序用UTF8編碼,可以添加如下代碼:
    QTextCodec::setCodecForLocale(QTextCodec::codecForName
("UTF8"));
    QTextCodec::setCodecForCStrings(QTextCodec::codecForName
("UTF8"));
    QTextCodec::setCodecForTr (QTextCodec::codecForName
("UTF8"));
3.3 數(shù)據(jù)庫(kù)的連接與檢索
    為了實(shí)現(xiàn)數(shù)據(jù)庫(kù)的連接,需對(duì)freetds和unixODBC進(jìn)行必要的配置。這可以通過(guò)修改freetds.conf文件、odbc.ini和odbcinst.ini文件來(lái)實(shí)現(xiàn),這些文件分別在各自的安裝目錄下。有了unixODBC和freetds的支持,通過(guò)QT的ODBC庫(kù)QODBC就可以訪(fǎng)問(wèn)Windows XP下的SQL Server數(shù)據(jù)庫(kù)了。
    QSqlDatabase db=QSqlDatabase::addDatabase("QODBC");
    db.setDatabaseName("dbHospital");
    db.setUserName(QString("BME"));
    db.setPassword(QString("123456"));
    db.setConnectOptions("SQL_ATTR_ODBC_VERSION=
SQL_OV_ODBC3");
    由于QODBC會(huì)自動(dòng)調(diào)用unixODBC和freetds的配置文件,所以不用調(diào)用setHostName()函數(shù)單獨(dú)設(shè)置數(shù)據(jù)主機(jī)名。實(shí)現(xiàn)了數(shù)據(jù)庫(kù)的連接,數(shù)據(jù)庫(kù)的檢索就相對(duì)簡(jiǎn)單了。QSqlQuery提供了一套檢索數(shù)據(jù)庫(kù)的簡(jiǎn)單方式。
4 實(shí)驗(yàn)與討論
    經(jīng)實(shí)驗(yàn)驗(yàn)證,該導(dǎo)醫(yī)系統(tǒng)能夠正確接收有源RFID標(biāo)簽發(fā)射的病人ID號(hào),并以此發(fā)起數(shù)據(jù)庫(kù)檢索,檢索得到病人就醫(yī)的相關(guān)信息后在終端上顯示導(dǎo)引信息。
    該導(dǎo)醫(yī)系統(tǒng)不僅可以完成就醫(yī)導(dǎo)引的任務(wù),還可以擴(kuò)展其他功能。例如,可以修改終端程序,使系統(tǒng)空閑時(shí)插播藥品廣告,這可以進(jìn)一步減小系統(tǒng)成本。
    另外,可以修改導(dǎo)醫(yī)系統(tǒng)終端上的應(yīng)用程序,使RFID閱讀器實(shí)現(xiàn)遠(yuǎn)程控制。例如遠(yuǎn)程控制閱讀器的開(kāi)啟和關(guān)閉、增益設(shè)置等。實(shí)現(xiàn)方式是在導(dǎo)醫(yī)終端的后臺(tái)運(yùn)行一個(gè)服務(wù)程序。該程序一直監(jiān)聽(tīng)一個(gè)socket端口,當(dāng)收到有效的RFID控制指令時(shí),將該控制指令寫(xiě)入到UART發(fā)送緩沖區(qū)。RFID閱讀器上的程序收到命令后將執(zhí)行相關(guān)操作。
    該智能導(dǎo)醫(yī)系統(tǒng)整合了有源RFID技術(shù)、嵌入式系統(tǒng)和數(shù)據(jù)庫(kù)等軟硬件技術(shù),能夠?yàn)榛颊咛峁┯押玫木歪t(yī)導(dǎo)引信息,也可以間接為醫(yī)院提供信息發(fā)布平臺(tái),有較好的實(shí)用價(jià)值。整個(gè)系統(tǒng)還處于試驗(yàn)、設(shè)計(jì)階段,應(yīng)用于實(shí)際還需要較長(zhǎng)時(shí)間的完善與驗(yàn)證。后續(xù)的工作將集中于功能的整合、完善和儲(chǔ)存導(dǎo)醫(yī)信息數(shù)據(jù)庫(kù)建設(shè)。
參考文獻(xiàn)
[1] 張忠安,齊俊傳.門(mén)診排隊(duì)叫號(hào)系統(tǒng)設(shè)計(jì)[J].醫(yī)療衛(wèi)生裝備,2006(10).
[2] 李俊,高錄濤.掛號(hào)分診的方法及技巧探討[J].中國(guó)誤診學(xué)雜志,2009(20).
[3] Bi Chunyue.Research and application of SQLite embedded   database technology[J].WSEAS Transactions on Computers,2009,8(1):83-92.
[4] 韋東山.嵌入式Linux應(yīng)用開(kāi)發(fā)完全手冊(cè)[M].北京:人民郵電出版社,2009.
[5] 孫明麗.SQL Server 2005數(shù)據(jù)庫(kù)系統(tǒng)開(kāi)發(fā)完全手冊(cè)(第一版)[M].北京:人民郵電出版社,2007.
[6] BLANCHETTE J,SUMMERFIELD M.C++ GUI programming   with QT4(second edition)[M].BeiJing:Publishing House of  Electronics Industry,2008.

此內(nèi)容為AET網(wǎng)站原創(chuàng),未經(jīng)授權(quán)禁止轉(zhuǎn)載。