伍習(xí)東 豐 韋 陳 凱
(安徽理工大學(xué)機械工程學(xué)院,安徽 淮南232001)
傳統(tǒng)的醫(yī)療技術(shù)服務(wù)中,在對人體生理指標進行監(jiān)測的環(huán)節(jié)中,常常存在著這樣一種情形:醫(yī)療工作人員在對人體的生理指標值進行記錄時,往往是通過護士在病人的床前進行手動記錄。這種記錄方法具有繁瑣、低效的缺點,當在短時間內(nèi)需要對大量病人進行生命特征狀態(tài)監(jiān)測時,完成對人體生理指標值的監(jiān)測、記錄將成為一件極具工作量的任務(wù)。而伴隨著計算機科學(xué)技術(shù)和電子科學(xué)技術(shù)的不斷發(fā)展,基于嵌入式的醫(yī)療監(jiān)測技術(shù)得到了良好的發(fā)展。在該項技術(shù)下,醫(yī)療設(shè)備通過分析病人的身體數(shù)據(jù),可以實現(xiàn)構(gòu)建一個更加高效和便利的智能醫(yī)療服務(wù)體系[1],提高醫(yī)療技術(shù)服務(wù)的效率。許多嵌入式系統(tǒng)板載有以太網(wǎng)接口,在硬件層上可實現(xiàn)接入到Internet,通過在嵌入式linux 系統(tǒng)中移植Web 服務(wù)器,可在軟件層上實現(xiàn)Web 服務(wù)器的構(gòu)建。通過軟硬件層的支持,實現(xiàn)PC 端與嵌入式實物端的數(shù)據(jù)交互。通過瀏覽器的Web 頁面發(fā)出HTTP 服務(wù)請求,嵌入式系統(tǒng)在接收到請求報文后作出應(yīng)答,向瀏覽器端發(fā)出響應(yīng)報文,從而在Web 頁面上顯示出人體的各項生理指標值。通過在醫(yī)院或診所中接入Interner,即可實現(xiàn)醫(yī)生或護士非臨床監(jiān)測病人的各項生理指標值,幫助醫(yī)護人員更好地了解病人的生命體征狀態(tài)。
在本監(jiān)測系統(tǒng)中的Web 服務(wù)器不同于常規(guī)互聯(lián)網(wǎng)平臺的服務(wù)器,作為一種嵌入式Web 服務(wù)器,應(yīng)當滿足可移植、穩(wěn)定性良好、代碼占用空間較小、響應(yīng)速度快等特點。目前在嵌入式產(chǎn)品開發(fā)中比較流行的Web 服務(wù)器主要包括GoA-head,BOA 以及thttpd 等[2],其中BOA 服務(wù)器具有占有系統(tǒng)資源少,在局域網(wǎng)通信服務(wù)中實時性高、響應(yīng)時間短等優(yōu)點。故本系統(tǒng)軟件設(shè)計選用BOA 服務(wù)器作為系統(tǒng)的Web 服務(wù)器。
在進行服務(wù)器移植時需要修改BOA 服務(wù)器源碼中的Makefile 文件,為確保BOA 服務(wù)器在具體的嵌入式環(huán)境中能夠成功運行,文件中的編譯變量要修改為符合嵌入式環(huán)境的變量名。以使用arm-linux-gcc 交叉編譯器的情形為例,要修改的變量值見表1。
表1 Makefile 文件修改對照
移植BOA 服務(wù)器時出現(xiàn)錯誤的原因大部分為boa.conf 配置文件配置錯誤,表2 列出來關(guān)于此配置文件中重要參數(shù)的說明以及常用值。
表2 BOA 服務(wù)器配置文件說明
移植BOA 服務(wù)器的過程主要包括以下幾個步驟:步驟1:在PC 中安裝UBUNTU 系統(tǒng),系統(tǒng)中安裝適用于嵌入式系統(tǒng)中處理器類別的交叉編譯工具。步驟2:在網(wǎng)上下載并解壓BOA 服務(wù)器源碼,修改源碼文件、相關(guān)配置文件以及Makefile 文件。步驟3:在linux 終端中執(zhí)行make 命令編譯BOA 服務(wù)器源碼,生成BOA 服務(wù)器的可執(zhí)行程序文件。步驟4:在嵌入式系統(tǒng)目標機中建立相關(guān)工作目錄,通過NFS 或TFTP 服務(wù)將可執(zhí)行文件以及BOA 服務(wù)器的配置文件boa.conf 拷貝到系統(tǒng)的工作目錄下。步驟5:運行啟動BOA 服務(wù)器。在執(zhí)行make 編譯命令得到了可執(zhí)行文件boa 后,還可以對文件進行瘦身處理。在終端下通過執(zhí)行arm-linux-strip boa 命令后,可執(zhí)行文件的占用空間將縮小至約為原來的三分之一,很好地實現(xiàn)了精簡BOA 服務(wù)器的占用空間。BOA 服務(wù)器移植成功過后,需要編寫CGI(Common Gateway Interface,公用網(wǎng)關(guān)接口)程序,CGI 程序是一種使Web瀏覽器與客戶端完成數(shù)據(jù)交互的工具,需要在BOA 服務(wù)器上運行[3]。將CGI 程序經(jīng)交叉編譯工具編譯后即可得到CGI 程序可執(zhí)行文件??截怌GI 文件到BOA 服務(wù)器的工作目錄下,在啟動BOA 服務(wù)器后,就能在嵌入式系統(tǒng)上對HTTP 請求作出應(yīng)答,實現(xiàn)在Web 頁面上顯示嵌入式外圍硬件設(shè)備監(jiān)測到的各項生理指標值(圖1)。
圖1 HTTP 請求及響應(yīng)架構(gòu)
外部CGI 程序與BOA 服務(wù)器進行通信、傳遞有關(guān)參數(shù)和處理結(jié)果是通過環(huán)境變量、命令行參數(shù)和標準輸入來進行的。服務(wù)器提供了客戶端(瀏覽器)與CGI 程序之間的信息交換的通道。CGI 的標準輸入是服務(wù)器的標準輸出,而CGI 的標準輸出是服務(wù)器的標準輸入。
CGIC 是一種基于C 語言標準庫文件設(shè)計的被廣泛使用的免費開源代碼,并支持Linux、Unix、和Windows 等多種操作系統(tǒng),它能夠?qū)W(wǎng)頁閱讀器發(fā)來有缺陷的數(shù)據(jù)做對應(yīng)數(shù)據(jù)解析,并可以自動校正,實現(xiàn)更為高效地完成CGI 程序設(shè)計任務(wù)[4]。在網(wǎng)上下載到CGIC 源碼壓縮包文件后,將其拷貝至UBUNTU 系統(tǒng)下,解壓后可見其中附帶著庫文件設(shè)計者所給出的cgitest.c文件,在進行基于CGIC 庫文件的CGI 程序開發(fā)時,可充分研究作者所給出的使用范例。在設(shè)計基于CGIC 庫的CGI 程序設(shè)計時,工程目錄中應(yīng)當包含cgic.c 以及cgic.h 這兩個文件,同時在Makefile 文件內(nèi)指定的依賴文件中,需要將這兩個文件添加進去。與進行普通CGI 程序設(shè)計不同的是,此時的CGI 程序不是在main()函數(shù)中完成編寫的,而是在cgiMain()函數(shù)中編寫的。在cgic.c 源文件的main()函數(shù)中會自動完成對cgiMain()函數(shù)的調(diào)用。在編寫對應(yīng)的CGI 源程序文件中還應(yīng)當包含cgic.h 這一頭文件。
當有數(shù)據(jù)從客戶端瀏覽器傳到Web 服務(wù)器后,web 服務(wù)器會根據(jù)傳送的類型(基本有二類:GET/POST),將接收到的數(shù)據(jù)傳入QUERY_STRING 或其他變量中,CGI 程序可以通過標準輸入,在程序中接收web 服務(wù)器接收的數(shù)據(jù)。當要向瀏覽器發(fā)送信息時,只要向Web 服務(wù)器發(fā)送特定的文件頭信息,即可通過標準輸出將信息發(fā)往Web 服務(wù)器,Web 服務(wù)器處理完由CGI 程序發(fā)來的信息后就會將信息發(fā)送給瀏覽器。瀏覽器端對數(shù)據(jù)進行解析,即完成Web 頁面的顯示。
用GET 方式接收到的數(shù)據(jù)保存在Web 服務(wù)器的QUERY_STRING 變量里,而通過POST 方式接收到的數(shù)據(jù)是保存在Web 服務(wù)器中的變量里。兩種數(shù)據(jù)接收方式的區(qū)別是:以GET 方式接收的數(shù)據(jù)是有長度限制,而用POST 方式接收的數(shù)據(jù)是沒有長度限制的;以GET 方式發(fā)送數(shù)據(jù),可以通過在瀏覽器中填充URL 數(shù)據(jù)的形式來發(fā)送,但POST 方式發(fā)送的數(shù)據(jù)必須要通過form 形式才能發(fā)送。CGIC 庫主要函數(shù)說明:cgiFormResultType cgiFormString ( char *name, char *result, int max)用于從輸入域中copy 字符串。將域名max-1 字節(jié)中的字符拷貝到緩沖區(qū)result。若域不存在,則拷貝一個空串到result 緩沖區(qū)。在此函數(shù)中所有的新行由換行符代表。void cgiHeaderContentType(char *mimeType)用于告知瀏覽器返回的是什么類型的文檔。該函數(shù)需要在向瀏覽器輸出之前被調(diào)用,否則將出錯或瀏覽器不能識別。用于處理選擇框的函數(shù):cgiFormResultType cgiFormSelectSingle ( char *name, char**choicesText, int choicesTotal, int *result, int defaultV) 函數(shù)把選擇的名字拷貝到choicesText,把選擇的個數(shù)拷貝到choicesTotal,把當前的選擇拷貝到result。cgiFormResultType cgiFormSelectMultiple ( char *name, char **choicesText, int choicesTotal, int *result, int *invalid) 函數(shù)與cgiFormSelectSingle類似,指向整型數(shù)組的result 代表了選擇的項。 若復(fù)選框被選中,則cgiFormResultType cgiFormCheckboxSingle( char *name)函數(shù)返回cgiFormSuccess,否則返回cgiFormNotFound。
數(shù)字輸入函數(shù):cgiFormDoubleBounded ( char *name, double*result, double min, double max, double defaultV) 若輸入域中的浮點數(shù)在界限內(nèi)則取出并放入result 中。
在基于互聯(lián)網(wǎng)技術(shù)下的Web 開發(fā)設(shè)計中,一般都會將Web頁面的顯示設(shè)計和在后臺進行數(shù)據(jù)處理的服務(wù)器程序設(shè)計進行分離。Web 界面的顯示設(shè)計一般在美工和前端程序員的共同努力下完成,在本次系統(tǒng)設(shè)計中,無需追求過于炫麗的顯示界面,只需要使系統(tǒng)的內(nèi)容顯示具有清晰簡潔的特點即可。HTML(Hyper Text Markup Language)是一種具有標識性的超文本標記語言,它使用標記標簽來描述網(wǎng)頁。標簽一般是成對出現(xiàn)的由尖括號包圍的關(guān)鍵詞,結(jié)束標簽比開始標簽多一個/符號。以html 文件中十分重要的表單標簽為例:。當瀏覽器向服務(wù)器發(fā)出POST 請求時,表單標簽內(nèi)包含的元素名及元素值就會傳送到服務(wù)器端。
在HTML 中表單是一個包含表單元素(比如:文本域、下拉列表、單選框、復(fù)選框等)的區(qū)域。通常分為兩個部分:HTML 表單格式和處理數(shù)據(jù)的腳本,處理程序由標簽的ACTION 屬性指定,每個輸入?yún)^(qū)都有一個NAME 屬性用來稱呼表單元素,當表單數(shù)據(jù)被遞交給ACTION 中定義的處理程序時,NAME 和其輸入內(nèi)容被以數(shù)字或字符的形式保存在環(huán)境變量中,腳本程序再通過讀取環(huán)境變量的方式獲得用戶輸入,根據(jù)編程語言的不同獲取環(huán)境變量的方式也不同,C 語言中可以通過stdlib 庫函數(shù)getenv()來獲得環(huán)境變量。
表單從瀏覽器發(fā)給服務(wù)器有兩種方法(即METHOD 屬性):GET 和POST。 GET 方法將數(shù)據(jù)打包放在環(huán)境變量QUERY_STRING 中作為URL 整體的一部分傳遞給服務(wù)器。POST 做很多類似GET 的事情,但是它是分離地傳遞數(shù)據(jù)給腳本的,程序要通過標準輸入獲得數(shù)據(jù)時,POST 方式不會改變數(shù)據(jù),也就是說同樣的數(shù)據(jù)可以多次提交而不必重新輸入。需要注意的是當數(shù)據(jù)量超過1024 個字節(jié)時只能使用POST 來傳遞,由于GET 將數(shù)據(jù)直接放到URL 中,數(shù)據(jù)的傳輸也就變得很不安全。
在CGI 程序中通過將要顯示的文本數(shù)據(jù)經(jīng)組合設(shè)計后編寫為HTML 文本傳送給BOA 服務(wù)器,BOA 服務(wù)器再將響應(yīng)報文傳送到瀏覽器端,就實現(xiàn)了在Web 瀏覽器上顯示系統(tǒng)界面及對系統(tǒng)各項監(jiān)測值的顯示和提示。
系統(tǒng)設(shè)計有用戶登錄界面和醫(yī)療監(jiān)測系統(tǒng)主界面,在系統(tǒng)輸入正確的登陸賬號及密碼后,即可成功進入監(jiān)測界面,界面設(shè)計有監(jiān)測人體的五項生理指標,分別為血壓、體溫、心率、呼吸率以及血氧飽和度。當系統(tǒng)監(jiān)測的各項指標值處于非危險區(qū)間時,系統(tǒng)不對各項指標值作提示;當各項指標值處于危險區(qū)間內(nèi)時,在對應(yīng)的指標后面會有對應(yīng)的紅色警告文字提示。
本設(shè)計在UBUNTU 16 和Microsoft Edge 瀏覽器上進行測試,實現(xiàn)了用戶登錄、監(jiān)測界面顯示以及對監(jiān)測指標值的判斷處理。BOA 服務(wù)器搭建完成以后,將CGI 程序放到BOA 服務(wù)器的工作目錄下,然后在linux 終端中輸入./boa 命令啟動BOA 服務(wù)器。在瀏覽器中輸入URL 地址:http://192.168.1.103/login.html,實現(xiàn)跳轉(zhuǎn)到登錄界面,在輸入正確的登錄名稱和登錄密碼后跳轉(zhuǎn)到監(jiān)測系統(tǒng)主界面。通過在CGI 程序中模擬各項指標值為危險值后,系統(tǒng)將在各項指標值后顯示警告信息(圖2)。
圖2 測試界面
本次監(jiān)測系統(tǒng)響應(yīng)速度快,適用范圍廣,可用于醫(yī)院的各個科室,為醫(yī)療監(jiān)測項目設(shè)計提供了良好的參考方案。
本項目主要介紹了在嵌入式環(huán)境下搭建Web 服務(wù)器的方法,設(shè)計了醫(yī)療監(jiān)測系統(tǒng)界面,實現(xiàn)了BOA 服務(wù)器在linux 系統(tǒng)下的編譯運行,結(jié)合CGI 程序?qū)崿F(xiàn)了BOA 服務(wù)器與Web 瀏覽器的數(shù)據(jù)交互,對設(shè)計基于嵌入式技術(shù)的醫(yī)療產(chǎn)品具有一定的參考價值。