《電子技術(shù)應(yīng)用》
您所在的位置:首頁 > 嵌入式技術(shù) > 設(shè)計(jì)應(yīng)用 > 基于有源RFID的智能導(dǎo)醫(yī)系統(tǒng)
基于有源RFID的智能導(dǎo)醫(yī)系統(tǒng)
來源:電子技術(shù)應(yīng)用2011年第8期
蔣 君,李偉鵬
(南方醫(yī)科大學(xué) 生物醫(yī)學(xué)工程學(xué)院,廣東 廣州510515)
摘要: 介紹一種結(jié)合了有源RFID技術(shù)、嵌入式系統(tǒng)和數(shù)據(jù)庫技術(shù)的智能導(dǎo)醫(yī)系統(tǒng)。該系統(tǒng)能夠在越來越復(fù)雜的醫(yī)院環(huán)境中為病人提供就醫(yī)導(dǎo)引信息。優(yōu)化了患者的就醫(yī)體驗(yàn),提高了醫(yī)院各科室的工作效率和協(xié)作化程度。
中圖分類號: TP319.3
文獻(xiàn)標(biāo)識碼: B
文章編號: 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)越來越復(fù)雜。本文介紹的患者就醫(yī)導(dǎo)引系統(tǒng),以嵌入式SQL和有源RFID技術(shù)為基礎(chǔ),能夠在患者就醫(yī)的整個(gè)過程中提供就醫(yī)路線的導(dǎo)引,使患者就醫(yī)的體驗(yàn)更人性化,同時(shí)可以提高醫(yī)生工作效率和各科室的協(xié)作化程度?,F(xiàn)階段綜合性醫(yī)院普遍使用的分診叫號系統(tǒng)[1-2]只能對科室內(nèi)部的就診患者進(jìn)行分流。
    智能導(dǎo)醫(yī)系統(tǒng)由導(dǎo)醫(yī)終端(圖1中終端控制核心、RFID閱讀器和LCD顯示器三部分)、局域網(wǎng)、服務(wù)器三部分組成。導(dǎo)醫(yī)終端配置若干個(gè),分別安放于醫(yī)院走廊、過道、電梯、樓梯間等位置。整個(gè)系統(tǒng)的示意圖如圖1所示。

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

 

 

    終端控制核心采用廣州友善之臂的mini6410開發(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ī)終端采用臺式PC用的普通17英寸LCD作為顯示器,屏幕較大,用戶體驗(yàn)良好。由于終端的控制核心只有并行的LCD數(shù)據(jù)線,所以需要LCD轉(zhuǎn)VGA模塊將視頻信號轉(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開關(guān)電源。USB接口可以在單獨(dú)調(diào)試每個(gè)導(dǎo)醫(yī)終端上的程序時(shí),外接USB鍵盤或鼠標(biāo)。RJ45是外接網(wǎng)線的物理接口,每個(gè)終端通過這個(gè)接口獲取患者的完整信息。目前市面上也有很多USB接口的無線網(wǎng)卡,也可以無線局域網(wǎng)的形式將導(dǎo)醫(yī)終端連接到局域網(wǎng)。如果采用USB無線網(wǎng)卡的方式,則需要通過USB Hub來擴(kuò)充核心控制板上的USB接口,并移植相應(yīng)的驅(qū)動(dòng)。
2 軟件平臺構(gòu)建
    導(dǎo)醫(yī)終端的硬件平臺建立后需要構(gòu)建運(yùn)行于其上的軟件平臺,作為上層應(yīng)用程序運(yùn)行的基礎(chǔ)。由于導(dǎo)醫(yī)終端采用ARM-Linux嵌入式系統(tǒng)設(shè)計(jì),除了OEM廠商提供的軟件包外,很多其他要用到的庫都需要自己修改或移植[3-4]。
2.1 數(shù)據(jù)庫訪問
    應(yīng)用程序訪問數(shù)據(jù)庫的方式如圖3所示。在ARM硬件平臺、Linux操作系統(tǒng)下也不例外。

    本文介紹的導(dǎo)醫(yī)系統(tǒng)的數(shù)據(jù)庫是用Microsoft SQL Server建立的。SQL Server(及SyBase)使用TDS(Tabular_
Data_Stream)作為其數(shù)據(jù)庫現(xiàn)客戶端傳輸?shù)膮f(xié)議,它對應(yīng)于圖中的ODBC驅(qū)動(dòng)。Linux下有此協(xié)議的免費(fèi)版——freetds,將其移植到ARMLinux平臺作為訪問SQL Server的ODBC驅(qū)動(dòng)。ODBC可以移植unixODBC和QT自帶的ODBC庫。
2.2 ODBC庫及其驅(qū)動(dòng)移植
    系統(tǒng)中帶有相應(yīng)的ODBC驅(qū)動(dòng)和ODBC庫文件,是以O(shè)DBC方式在嵌入式系統(tǒng)中訪問SQL數(shù)據(jù)庫的必需條件。這些庫和驅(qū)動(dòng)可以通過下載相應(yīng)軟件包,經(jīng)過交叉編譯并拷貝到ARM-Linux平臺相應(yīng)目錄來實(shí)現(xiàn)移植。而在交叉編譯之前必須對其進(jìn)行重新配置,否則無法生成合適的庫或驅(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目錄下的庫lib文件夾拷貝到x86體系unixODBC目錄下,替換x86下的庫,然后make & make install。
2.2.4 QT ODBC庫的移植
    如果需要在QT下直接通過ODBC方式訪問SQL Server,則開發(fā)板中還必需含有QODBC,這需要在交叉編譯QT4的庫時(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*文件拷貝到開發(fā)板下,替換原來的文件。如果配置時(shí)添加的是 -plugin-sql-odbc 選項(xiàng),需要將plgins/Sqldrivers/目錄下的所有文件拷貝到開發(fā)板相同目錄下。
2.3 SQL Server數(shù)據(jù)庫構(gòu)建[5]
    導(dǎo)醫(yī)系統(tǒng)終端接收到病人ID號后將檢索數(shù)據(jù)庫。這個(gè)數(shù)據(jù)庫的構(gòu)建直接關(guān)系到給出的導(dǎo)醫(yī)信息是否正確。試驗(yàn)階段采用如圖4的數(shù)據(jù)庫結(jié)構(gòu)。該數(shù)據(jù)庫一共由5個(gè)表組成:(1)Patient表。記錄病人姓名,將要前往就診的科室等信息;(2)Department表。記錄醫(yī)院科室名稱及所在物理位置等信息;(3)Terminal表。記錄終端機(jī)IP地址及所在物理位置等信息;(4)Position表。表示綜合終端機(jī)與科室相對位置關(guān)系,它的表項(xiàng)直接關(guān)系到導(dǎo)醫(yī)終端給出的方向指引是否正確;(5)Information表。綜合上述所有表給出導(dǎo)醫(yī)所需的信息:病人姓名、將要去往的就診科室和相對方向(將要去往就診的科室的方向)。應(yīng)用程序只要依據(jù)病人ID檢索到information表即可獲取就醫(yī)導(dǎo)引所需的完整信息。

    SQL Server數(shù)據(jù)庫在試驗(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ù)庫服務(wù)器,并與醫(yī)院現(xiàn)有的HIS系統(tǒng)進(jìn)行連接,以共享一套病人掛號科室等其他信息。
3 應(yīng)用程序
    導(dǎo)醫(yī)終端上的應(yīng)用程序采用QT4編程實(shí)現(xiàn)[6]。QT是一個(gè)基于C++的圖形用戶界面庫。它的跨平臺特性比較好,編輯好的程序代碼幾乎不需做修改就可以編譯出運(yùn)行于其他平臺的可執(zhí)行程序。應(yīng)用程序的核心是檢測串口接收緩沖區(qū),當(dāng)串口接收緩沖區(qū)存在有效的病人ID號,即依據(jù)該ID號發(fā)起一次數(shù)據(jù)庫連接與檢索。不同于普通PC環(huán)境,在ARMLinux平臺下,需要解決三個(gè)核心問題:ARM-Linux下串口通信、漢字字符集兼容和SQL Server數(shù)據(jù)庫連接等。
3.1 ARM-Linux下串口通信
    QT下沒有提供串口通信的控件,但是提供了第三方的串口通信類qextserialport。本系統(tǒng)即是采用該類完成了ARM-Linux下的串口通信。該類繼承自QIODevice類,可分為Win_QextSerialPort和Posix_QextSerialPort,分別支持Windows和Linux兩種環(huán)境下的編譯。在Linux下需要添加 #define _TTY_POSIX_宏定義,以確保選擇正確的條件編譯。通過以下代碼即可打開串口ttySAC3,并設(shè)置波特率為9 600 Kb/s,無流控制和奇偶校驗(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è)問題可從以下兩個(gè)方面來解決:
    (1)移植freetds和unixODBC時(shí),要將配置選項(xiàng)iconv設(shè)置為disable。具體來說,unixODBC的配置選項(xiàng)中一定要有--disable-iconv,freetds的配置選項(xiàng)中一定要有--disable-libiconv。這樣做可以避免ODBC和ODBC驅(qū)動(dòng)進(jìn)行字符集的自動(dòng)轉(zhuǎn)換,從而避免出現(xiàn)無法預(yù)見的字符集不兼容問題。
    (2)QT為世界上多數(shù)語系提供廣泛支持。在編寫QT程序時(shí)一定要在主程序中添加相關(guān)代碼,定義好程序的字符編碼類型。如果希望應(yīng)用程序用UTF8編碼,可以添加如下代碼:
    QTextCodec::setCodecForLocale(QTextCodec::codecForName
("UTF8"));
    QTextCodec::setCodecForCStrings(QTextCodec::codecForName
("UTF8"));
    QTextCodec::setCodecForTr (QTextCodec::codecForName
("UTF8"));
3.3 數(shù)據(jù)庫的連接與檢索
    為了實(shí)現(xiàn)數(shù)據(jù)庫的連接,需對freetds和unixODBC進(jìn)行必要的配置。這可以通過修改freetds.conf文件、odbc.ini和odbcinst.ini文件來實(shí)現(xiàn),這些文件分別在各自的安裝目錄下。有了unixODBC和freetds的支持,通過QT的ODBC庫QODBC就可以訪問Windows XP下的SQL Server數(shù)據(jù)庫了。
    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ù)庫的連接,數(shù)據(jù)庫的檢索就相對簡單了。QSqlQuery提供了一套檢索數(shù)據(jù)庫的簡單方式。
4 實(shí)驗(yàn)與討論
    經(jīng)實(shí)驗(yàn)驗(yàn)證,該導(dǎo)醫(yī)系統(tǒng)能夠正確接收有源RFID標(biāo)簽發(fā)射的病人ID號,并以此發(fā)起數(shù)據(jù)庫檢索,檢索得到病人就醫(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)程控制閱讀器的開啟和關(guān)閉、增益設(shè)置等。實(shí)現(xiàn)方式是在導(dǎo)醫(yī)終端的后臺運(yùn)行一個(gè)服務(wù)程序。該程序一直監(jiān)聽一個(gè)socket端口,當(dāng)收到有效的RFID控制指令時(shí),將該控制指令寫入到UART發(fā)送緩沖區(qū)。RFID閱讀器上的程序收到命令后將執(zhí)行相關(guān)操作。
    該智能導(dǎo)醫(yī)系統(tǒng)整合了有源RFID技術(shù)、嵌入式系統(tǒng)和數(shù)據(jù)庫等軟硬件技術(shù),能夠?yàn)榛颊咛峁┯押玫木歪t(yī)導(dǎo)引信息,也可以間接為醫(yī)院提供信息發(fā)布平臺,有較好的實(shí)用價(jià)值。整個(gè)系統(tǒng)還處于試驗(yàn)、設(shè)計(jì)階段,應(yīng)用于實(shí)際還需要較長時(shí)間的完善與驗(yàn)證。后續(xù)的工作將集中于功能的整合、完善和儲存導(dǎo)醫(yī)信息數(shù)據(jù)庫建設(shè)。
參考文獻(xiàn)
[1] 張忠安,齊俊傳.門診排隊(duì)叫號系統(tǒng)設(shè)計(jì)[J].醫(yī)療衛(wèi)生裝備,2006(10).
[2] 李俊,高錄濤.掛號分診的方法及技巧探討[J].中國誤診學(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)用開發(fā)完全手冊[M].北京:人民郵電出版社,2009.
[5] 孫明麗.SQL Server 2005數(shù)據(jù)庫系統(tǒng)開發(fā)完全手冊(第一版)[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)載。