文獻標識碼: B
文章編號: 0258-7998(2011)08-0039-04
隨著醫(yī)院規(guī)模的逐漸擴大,醫(yī)院的建筑結構越來越復雜。本文介紹的患者就醫(yī)導引系統(tǒng),以嵌入式SQL和有源RFID技術為基礎,能夠在患者就醫(yī)的整個過程中提供就醫(yī)路線的導引,使患者就醫(yī)的體驗更人性化,同時可以提高醫(yī)生工作效率和各科室的協(xié)作化程度?,F階段綜合性醫(yī)院普遍使用的分診叫號系統(tǒng)[1-2]只能對科室內部的就診患者進行分流。
智能導醫(yī)系統(tǒng)由導醫(yī)終端(圖1中終端控制核心、RFID閱讀器和LCD顯示器三部分)、局域網、服務器三部分組成。導醫(yī)終端配置若干個,分別安放于醫(yī)院走廊、過道、電梯、樓梯間等位置。整個系統(tǒng)的示意圖如圖1所示。
構建導醫(yī)系統(tǒng)的關鍵在于導醫(yī)終端的搭建和服務器上數據庫的建立,而系統(tǒng)的網絡則可以依靠醫(yī)院原有的有線或無線局域網。就醫(yī)導引系統(tǒng)(以下簡稱導醫(yī)系統(tǒng))的基本工作原理如下:
病人掛號時領取一張有源射頻卡(閱讀距離大于1 m),該卡周期性發(fā)射病人ID號。掛號的過程中,將病人ID號與所要就診的科室等信息在數據庫中進行關聯。當病人行進到導醫(yī)終端附近時,連接在導醫(yī)終端的射頻卡閱讀器將接收到病人ID號。導醫(yī)終端依據接收到的ID號發(fā)起數據庫檢索,檢索出病人掛號時建立的數據庫表項,如就診科室等相關信息。最后,綜合檢索到的信息將就醫(yī)導引信息顯示在LCD屏幕上。
1 硬件平臺構建
導醫(yī)系統(tǒng)終端硬件平臺包括四個主要部分:終端控制核心、RFID閱讀器、LCD顯示模塊和電源。其硬件框圖如圖2所示。
終端控制核心采用廣州友善之臂的mini6410開發(fā)板,處理器內核為ARM11。該處理器性能強勁,能處理較低分辨率的視頻。如果每個導醫(yī)系統(tǒng)終端控制核心都用PC機實現,雖然能夠換取更高的性能,但意味著每個終端的制作成本將大大增加。這將導致醫(yī)院的運作成本和患者就醫(yī)成本增加。
導醫(yī)終端采用臺式PC用的普通17英寸LCD作為顯示器,屏幕較大,用戶體驗良好。由于終端的控制核心只有并行的LCD數據線,所以需要LCD轉VGA模塊將視頻信號轉成VGA接口模式。這個模塊采用的是友善之臂提供的方案。
RFID閱讀器模塊和病人攜帶的RFID標簽是自行設計的一套有源RFID系統(tǒng),閱讀距離1 m~5 m可調。有源RFID閱讀器與導醫(yī)系統(tǒng)終端控制核心采用UART串口連接。
另外,直流電源采用普通的5 V開關電源。USB接口可以在單獨調試每個導醫(yī)終端上的程序時,外接USB鍵盤或鼠標。RJ45是外接網線的物理接口,每個終端通過這個接口獲取患者的完整信息。目前市面上也有很多USB接口的無線網卡,也可以無線局域網的形式將導醫(yī)終端連接到局域網。如果采用USB無線網卡的方式,則需要通過USB Hub來擴充核心控制板上的USB接口,并移植相應的驅動。
2 軟件平臺構建
導醫(yī)終端的硬件平臺建立后需要構建運行于其上的軟件平臺,作為上層應用程序運行的基礎。由于導醫(yī)終端采用ARM-Linux嵌入式系統(tǒng)設計,除了OEM廠商提供的軟件包外,很多其他要用到的庫都需要自己修改或移植[3-4]。
2.1 數據庫訪問
應用程序訪問數據庫的方式如圖3所示。在ARM硬件平臺、Linux操作系統(tǒng)下也不例外。
本文介紹的導醫(yī)系統(tǒng)的數據庫是用Microsoft SQL Server建立的。SQL Server(及SyBase)使用TDS(Tabular_
Data_Stream)作為其數據庫現客戶端傳輸的協(xié)議,它對應于圖中的ODBC驅動。Linux下有此協(xié)議的免費版——freetds,將其移植到ARMLinux平臺作為訪問SQL Server的ODBC驅動。ODBC可以移植unixODBC和QT自帶的ODBC庫。
2.2 ODBC庫及其驅動移植
系統(tǒng)中帶有相應的ODBC驅動和ODBC庫文件,是以ODBC方式在嵌入式系統(tǒng)中訪問SQL數據庫的必需條件。這些庫和驅動可以通過下載相應軟件包,經過交叉編譯并拷貝到ARM-Linux平臺相應目錄來實現移植。而在交叉編譯之前必須對其進行重新配置,否則無法生成合適的庫或驅動。
2.2.1 unixODBC-2.2.12的交叉編譯(arm體系)
配置選項如下:(--prefix選項指定把編譯好的包釋放到什么地方)
./configure --host=arm-linux --prefix=/usr/local/arm/unixODBC-arm-iconv-2.2.12 --disable-gui --enable-iconv --enable-static
然后make & make install。
另外還要編譯一個x86體系的unixODBC-2.2.12,因為交叉編譯freetds-0.82時要用到。
2.2.2 unixODBC-2.2.12的x86體系編譯
配置選項如下:(與上面不同的是去掉了--host=arm-linux 選項)
./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
配置選項如下:
./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的庫時候加上配置選項-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ā)板下,替換原來的文件。如果配置時添加的是 -plugin-sql-odbc 選項,需要將plgins/Sqldrivers/目錄下的所有文件拷貝到開發(fā)板相同目錄下。
2.3 SQL Server數據庫構建[5]
導醫(yī)系統(tǒng)終端接收到病人ID號后將檢索數據庫。這個數據庫的構建直接關系到給出的導醫(yī)信息是否正確。試驗階段采用如圖4的數據庫結構。該數據庫一共由5個表組成:(1)Patient表。記錄病人姓名,將要前往就診的科室等信息;(2)Department表。記錄醫(yī)院科室名稱及所在物理位置等信息;(3)Terminal表。記錄終端機IP地址及所在物理位置等信息;(4)Position表。表示綜合終端機與科室相對位置關系,它的表項直接關系到導醫(yī)終端給出的方向指引是否正確;(5)Information表。綜合上述所有表給出導醫(yī)所需的信息:病人姓名、將要去往的就診科室和相對方向(將要去往就診的科室的方向)。應用程序只要依據病人ID檢索到information表即可獲取就醫(yī)導引所需的完整信息。
SQL Server數據庫在試驗階段能夠比較完整地實現系統(tǒng)功能,實際使用時需要依據每個醫(yī)院的實際情況進行調整。導醫(yī)系統(tǒng)應用于實際醫(yī)院時可能需要另外構建一個數據庫服務器,并與醫(yī)院現有的HIS系統(tǒng)進行連接,以共享一套病人掛號科室等其他信息。
3 應用程序
導醫(yī)終端上的應用程序采用QT4編程實現[6]。QT是一個基于C++的圖形用戶界面庫。它的跨平臺特性比較好,編輯好的程序代碼幾乎不需做修改就可以編譯出運行于其他平臺的可執(zhí)行程序。應用程序的核心是檢測串口接收緩沖區(qū),當串口接收緩沖區(qū)存在有效的病人ID號,即依據該ID號發(fā)起一次數據庫連接與檢索。不同于普通PC環(huán)境,在ARMLinux平臺下,需要解決三個核心問題:ARM-Linux下串口通信、漢字字符集兼容和SQL Server數據庫連接等。
3.1 ARM-Linux下串口通信
QT下沒有提供串口通信的控件,但是提供了第三方的串口通信類qextserialport。本系統(tǒng)即是采用該類完成了ARM-Linux下的串口通信。該類繼承自QIODevice類,可分為Win_QextSerialPort和Posix_QextSerialPort,分別支持Windows和Linux兩種環(huán)境下的編譯。在Linux下需要添加 #define _TTY_POSIX_宏定義,以確保選擇正確的條件編譯。通過以下代碼即可打開串口ttySAC3,并設置波特率為9 600 Kb/s,無流控制和奇偶校驗, 8位數據位,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 字符集的轉換
Linux系統(tǒng)下漢字一般采用Unicode編碼,而Windows系統(tǒng)下漢字一般采用GBK編碼。如果將檢索的結果做了不正確的轉化,則顯示的漢字將出現亂碼。這個問題可從以下兩個方面來解決:
(1)移植freetds和unixODBC時,要將配置選項iconv設置為disable。具體來說,unixODBC的配置選項中一定要有--disable-iconv,freetds的配置選項中一定要有--disable-libiconv。這樣做可以避免ODBC和ODBC驅動進行字符集的自動轉換,從而避免出現無法預見的字符集不兼容問題。
(2)QT為世界上多數語系提供廣泛支持。在編寫QT程序時一定要在主程序中添加相關代碼,定義好程序的字符編碼類型。如果希望應用程序用UTF8編碼,可以添加如下代碼:
QTextCodec::setCodecForLocale(QTextCodec::codecForName
("UTF8"));
QTextCodec::setCodecForCStrings(QTextCodec::codecForName
("UTF8"));
QTextCodec::setCodecForTr (QTextCodec::codecForName
("UTF8"));
3.3 數據庫的連接與檢索
為了實現數據庫的連接,需對freetds和unixODBC進行必要的配置。這可以通過修改freetds.conf文件、odbc.ini和odbcinst.ini文件來實現,這些文件分別在各自的安裝目錄下。有了unixODBC和freetds的支持,通過QT的ODBC庫QODBC就可以訪問Windows XP下的SQL Server數據庫了。
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會自動調用unixODBC和freetds的配置文件,所以不用調用setHostName()函數單獨設置數據主機名。實現了數據庫的連接,數據庫的檢索就相對簡單了。QSqlQuery提供了一套檢索數據庫的簡單方式。
4 實驗與討論
經實驗驗證,該導醫(yī)系統(tǒng)能夠正確接收有源RFID標簽發(fā)射的病人ID號,并以此發(fā)起數據庫檢索,檢索得到病人就醫(yī)的相關信息后在終端上顯示導引信息。
該導醫(yī)系統(tǒng)不僅可以完成就醫(yī)導引的任務,還可以擴展其他功能。例如,可以修改終端程序,使系統(tǒng)空閑時插播藥品廣告,這可以進一步減小系統(tǒng)成本。
另外,可以修改導醫(yī)系統(tǒng)終端上的應用程序,使RFID閱讀器實現遠程控制。例如遠程控制閱讀器的開啟和關閉、增益設置等。實現方式是在導醫(yī)終端的后臺運行一個服務程序。該程序一直監(jiān)聽一個socket端口,當收到有效的RFID控制指令時,將該控制指令寫入到UART發(fā)送緩沖區(qū)。RFID閱讀器上的程序收到命令后將執(zhí)行相關操作。
該智能導醫(yī)系統(tǒng)整合了有源RFID技術、嵌入式系統(tǒng)和數據庫等軟硬件技術,能夠為患者提供友好的就醫(yī)導引信息,也可以間接為醫(yī)院提供信息發(fā)布平臺,有較好的實用價值。整個系統(tǒng)還處于試驗、設計階段,應用于實際還需要較長時間的完善與驗證。后續(xù)的工作將集中于功能的整合、完善和儲存導醫(yī)信息數據庫建設。
參考文獻
[1] 張忠安,齊俊傳.門診排隊叫號系統(tǒng)設計[J].醫(yī)療衛(wèi)生裝備,2006(10).
[2] 李俊,高錄濤.掛號分診的方法及技巧探討[J].中國誤診學雜志,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應用開發(fā)完全手冊[M].北京:人民郵電出版社,2009.
[5] 孫明麗.SQL Server 2005數據庫系統(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.