劉 洋
(南京市婦幼保健院信息中心,江蘇 南京 210001)
生命體征監(jiān)測主要是對患者血氧飽和度、心電、體溫、血壓以及呼吸等生理參數(shù)進行監(jiān)測[1]。近年來,南京市婦幼保健院為更好地貫徹落實國家三孩生育政策,積極應(yīng)對人口老齡化國家戰(zhàn)略,加強生育全程孕產(chǎn)期保健服務(wù),提高優(yōu)生優(yōu)育水平,保障母嬰安全,為孕產(chǎn)婦產(chǎn)檢提供方便快捷的一體化生命體征測量方案,購置了一批一體化生命體征測量儀。將傳統(tǒng)的體重秤、身高測量儀、血壓計、體脂儀、溫度計5種常見的孕婦生命體征采集終端整合為一臺一體化的測量儀器,極大地縮短了孕婦測量生命體征所需要的時間。但仍然需要孕婦自己記錄數(shù)值后告知護士人工錄入電子病歷系統(tǒng),易造成數(shù)據(jù)錄入錯誤,增加了孕婦不必要的就診時間和護士的工作量。使用樹莓派連接測量儀器的RS232C串口,讀取儀器返回測量數(shù)據(jù)解析后,再通過電子病歷提供的WebService接口協(xié)議,將孕婦的生命體征數(shù)值傳入電子病歷,可以有效避免數(shù)據(jù)誤差,縮短孕婦產(chǎn)檢的時間,提升孕婦對醫(yī)院的滿意度。
本項目采用樹莓派作為整個系統(tǒng)的控制核心。因為Raspberry Pi具備一個PC上面完整的功能,可以實現(xiàn)程序的編譯以及運行[2]。最新版本的Raspberry Pi 4B型擁有以1.5 GHz運行的64位四核處理器,最高支持以60 fps速度刷新的4 K分辨率的雙顯示屏,高達(dá)4 GB RAM,2.4/5.0 GHz雙頻無線LAN,藍(lán)牙5.0/BLE,真千兆以太網(wǎng),USB3.0和PoE功能。通過裝載相應(yīng)的Linux系統(tǒng)和相應(yīng)的應(yīng)用程序,樹莓派可以實現(xiàn)強大的應(yīng)用功能,具有價格低廉的優(yōu)勢,為使用者提供了一個理想的嵌入式開發(fā)平臺。
樹莓派目前支持最好的操作系統(tǒng)是Linux,Linux與Windows相比具有開源免費的優(yōu)勢,更高的代碼執(zhí)行效率,具有良好的穩(wěn)定性可以像Unix系統(tǒng)一樣常年不關(guān)而不曾宕機。程序開發(fā)語言采用C++語言,C++語言既保留了C語言的有效性、靈活性、便于移植等全部精華和特點,又添加了面向?qū)ο缶幊痰闹С郑哂袕姶蟮木幊坦δ?,可方便地?gòu)造出模擬現(xiàn)實問題的實體和操作;編寫出的程序具有結(jié)構(gòu)清晰、易于擴充等優(yōu)良特性,適合于各種應(yīng)用軟件、系統(tǒng)軟件的程序設(shè)計。用C++編寫的程序可讀性好,生成的代碼質(zhì)量高,運行效率僅比匯編語言慢10%~20%。
本系統(tǒng)硬件采用樹莓派四代B型開發(fā)板,軟件采用Linux操作系統(tǒng),使用USB轉(zhuǎn)串口線一端連接一體化生命體征測量儀的RS232C串口一端連接樹莓派的USB口,使用網(wǎng)線連接樹莓派與醫(yī)院的內(nèi)網(wǎng),系統(tǒng)組成如圖1所示。
圖1 系統(tǒng)構(gòu)成
電子病歷系統(tǒng)后端接口服務(wù)程序采用Web Service技術(shù)進行開發(fā),程序開發(fā)語言使用Java。Web Service是一個SOA(面向服務(wù)的編程)的架構(gòu),使用XML來封裝數(shù)據(jù),通過Internet進行基于http協(xié)議的在客戶端和服務(wù)端之間傳輸數(shù)據(jù)。Web Service的跨開發(fā)語言與跨平臺性,恰好滿足了本系統(tǒng)前后端程序的相互交互。
孕婦使用掃描槍掃碼獲得掛號憑條上的ID號,樹莓派通過網(wǎng)絡(luò)調(diào)用電子病歷系統(tǒng)提供的獲取孕婦基本信息的Web Service接口使用ID號作為參數(shù)將獲取到的孕婦基本信息顯示在樹莓派連接的3.5寸液晶顯示屏上。確認(rèn)無誤后,點擊屏幕上的開始測量按鈕,樹莓派通過串口向一體化生命體征測量儀傳送開始測量的命令,孕婦根據(jù)一體化生命體征測量儀的語音提示,進行體溫、血壓、身高、體重、體脂的測量。儀器測量完畢通過串口將數(shù)據(jù)發(fā)送回樹莓派,樹莓派使用分析程序?qū)⒋诓东@數(shù)據(jù)分析加工后通過網(wǎng)絡(luò)調(diào)用電子病歷系統(tǒng)提供的接收生命體征數(shù)據(jù)的Web Service接口,電子病歷后端服務(wù)根據(jù)孕婦的唯一ID將生命體征數(shù)據(jù)存入數(shù)據(jù)庫,醫(yī)生產(chǎn)檢時打開孕婦電子病歷即可查看孕婦的生命體征。
在樹莓派終端輸入命令:dmesg|grepttyS?可以顯示從系統(tǒng)啟動到現(xiàn)在串口插入拔出的設(shè)備信息,使用USB轉(zhuǎn)RS232C轉(zhuǎn)接口連接一體化生命體征測量儀端RS232C串口與樹莓派的USB口。再次輸入命令:dmesg|grepttyS?,運行結(jié)果:usb 2-2.1:pl2303 converter now attached to ttyUSB0;可以找到一體化生命體征測量儀與樹莓派的通信端口為ttyUSB0。在Linux下,所有的設(shè)備都是以文件的形式存在的。都存在在/dev目錄下。在/dev目錄下的每個文件都對應(yīng)一個設(shè)備。通過命令ls/dev/tty?最終找到硬件設(shè)備文件標(biāo)識為/dev/ttyUSB0。
串口通信主要通過ASCII碼進行傳輸,采用地線進行接收和發(fā)送,通信段在一條線路中發(fā)送信息,可在另一條線路中進行接收。其中,波特率、數(shù)據(jù)位、奇偶校驗位等參數(shù)十分關(guān)鍵[3]。
(1)波特率。這是一個衡量通信速度的參數(shù)。它表示每秒鐘傳送的bit的個數(shù)。例如300波特表示每秒鐘發(fā)送300個bit。提到時鐘周期時,就是指波特率,例如,一體化生命體征測量儀通信協(xié)議需要4 800波特率,則時鐘是4 800 Hz。
(2)數(shù)據(jù)位。這是衡量通信中實際數(shù)據(jù)位的參數(shù)。計算機發(fā)送一個信息包時,實際的數(shù)據(jù)不會是8位的,標(biāo)準(zhǔn)的值是5,7和8位。如何設(shè)置取決于想傳送的信息。一體化生命體征測量儀數(shù)據(jù)使用擴展的ASCII碼是0~255(8位),每個數(shù)據(jù)包使用8位數(shù)據(jù)。每個包是指一個字節(jié),包括開始/停止位,數(shù)據(jù)位和奇偶校驗位。
(3)停止位:用于表示單個包的最后一位。典型的值為1,1.5和2位,一體化生命體征測量儀的停止位為1。由于數(shù)據(jù)是在傳輸線上定時的,每一個設(shè)備有其自己的時鐘,很可能在通信中兩臺設(shè)備間出現(xiàn)了小小的不同步。因此,停止位不僅表示傳輸?shù)慕Y(jié)束,還提供計算機校正時鐘同步的機會。停止位的位數(shù)越多,不同時鐘同步的容忍程度越大,但是數(shù)據(jù)傳輸率同時也越慢。
串口數(shù)據(jù)解析流程如圖2所示。
圖2 數(shù)據(jù)解析流程
樹莓派接收到的儀器傳輸數(shù)據(jù)以ASCII碼方式進行編碼格式,如表1所示。
表1 一體化生命體征測量儀串口通信協(xié)議
分析現(xiàn)每一個數(shù)據(jù)都以“81$”起頭,編寫程序首先定義變量m_sMachineData保存原始字符串,類變量patient_data用于保存本次測量各種生命體征數(shù)據(jù)值,再根據(jù)圖表5的通信協(xié)議將變量m_sMachineData的原始數(shù)據(jù)進行分析,將身高、體重、低血壓、高血壓、心率、體脂、體溫數(shù)據(jù)分別保存在strHeight,strWeight,strLow,strHigh,strRate,strFat,strTemperature這些變量中,調(diào)用函數(shù)fun_analysisComDate()將得到的各個體征數(shù)據(jù)作為 參 數(shù) 生 成patient_data,最 后 調(diào) 用 函 數(shù)fun_PrintPatientData()打印出本次的測量結(jié)果。解析主要實現(xiàn)代碼如下:
WzSerialPort usb_com;
PatientData patient_data;//保存孕婦本次測量結(jié)果
int i=0;int j=0;
char m_sMachineData[1024]={0}; char strHeight[128]={0};char EmerFlag[128]={0};
char strWeight[128]={0}; char strLow[128]={0};
char strHigh[128]={0}; char strRate[128]={0};
char strFat[128]={0}; char strTemperature[128]={0};
if(usb_com.open("/dev/ttyUSB0",4800,0,8,1))
{
usb_com.send("60$",3);
cout<<"發(fā)送體重秤握手消息"<<endl;
while(true)
{
memset(m_sMachineData,0,1024);
usb_com.receive(m_sMachineData,1024);
cout<<"收到體重秤通過串口發(fā)回的數(shù)據(jù)"<<endl;
cout<<m_sMachineData; //打印出原始數(shù)據(jù)
//81$21755$00652$3$B120075069$0203 01471614055007031605085093209145252397105074290 848$T365$
}
//開始解析相關(guān)數(shù)據(jù)值
i=this->m_sMachineData.Find("81$",j);
for(;;)
{
if(i==-1)
break;
j=this->m_sMachineData.Find("$",i);
strHeight=this->m_sMachineData.Mid(i+1,j-i); //得到身高數(shù)據(jù)175.5厘米;
j=this->m_sMachineData.Find("$",i);
strWeight=this->m_sMachineData.Mid(i+1,j-i); //得到體重65.2千克;
j=this->m_sMachineData.Find("$",i+1);EmerFlag=this->m_sMachineData.Mid(i,1);if(EmerFlag=="B")
{
strLow=this->m_sMachineData.Mid(i+1,j-6-i); //得到血壓高壓120
strHigh=this->m_sMachineData.Mid(i+3,j-3-i); //得到血壓低壓75
strRate=this->m_sMachineData.Mid(i+6,3); //得到心率69
}
j=this->m_sMachineData.Find("$",i);
strFat=this->m_sMachineData.Mid(i+1,j-i); //得到脂肪數(shù)據(jù)
j=this->m_sMachineData.Find("$",i);
EmerFlag=this->m_sMachineData.Mid(i,1);
if(EmerFlag=="T")
{
strTemperature=this->m_sMachineData.Mid(i+1,ji);//得到體溫數(shù)據(jù)36.5
}
//保存本次測量結(jié)果
this->AddTestItem(strHeight,strWeight,strLow,strHigh,strRate,strFat,strTemperature,&patient_data);
i=this->m_sMachineData.Find("81$",j+1);
}
}
else
{
cout<<"打開串口失?。ⅲ?/p>
}
usb_com.close();
//分析本次測量結(jié)果
fun_analysisComDate(&patient_data);
//輸出本次測量結(jié)果
fun_PrintPatientData(&patient_data);
return 0;
數(shù)據(jù)接收程序在樹莓派上的運行結(jié)果,如圖3所示。
以上設(shè)計經(jīng)臨床實際使用,通過使用樹莓派作為一體化生命體征測量儀數(shù)據(jù)傳輸及解析平臺,在信息化條件下,采用智能控制和信息處理技術(shù),進行醫(yī)院自助服務(wù)信息化智能終端建設(shè)和自助服務(wù)平臺的優(yōu)化設(shè)計,充分利用“互聯(lián)網(wǎng)+”,打造為患者服務(wù)的高效信息化平臺[4]。該平臺避免了傳統(tǒng)的由醫(yī)護人員人工進行測量時存在操作差異性而產(chǎn)生的數(shù)據(jù)誤差,同時,也縮短了孕婦的產(chǎn)檢就診時間,為孕婦提供了方便,提升了孕婦對醫(yī)院的滿意度,具有一定的推廣價值。