施俏春
南京揚(yáng)子醫(yī)院 信息科,江蘇 南京210048
COBAS生化分析儀接口打印程序的研制
施俏春
南京揚(yáng)子醫(yī)院 信息科,江蘇 南京210048
開發(fā)COBAS生化分析儀接口打印軟件,實現(xiàn)計算機(jī)串口與生化分析儀的COM口連接。軟件的處理模塊對計算機(jī)串口傳過來的生化儀檢驗數(shù)據(jù)進(jìn)行分析,提取有效字段寫入數(shù)據(jù)庫,并與數(shù)據(jù)庫中患者信息關(guān)聯(lián),實現(xiàn)查詢、打印功能。該軟件的應(yīng)用彌補(bǔ)了醫(yī)院缺乏實驗室信息系統(tǒng)(LIS)或在LIS出現(xiàn)故障的情況下生化檢驗報告不能及時發(fā)出的問題。
生化分析儀;實驗室信息系統(tǒng);計算機(jī)串口;醫(yī)院數(shù)字化
COBAS生化分析儀是被廣泛使用的一種全自動生化分析儀器,其自帶的打印系統(tǒng)為純英文界面,使用并不方便。為了解決這一不足,筆者開發(fā)了中文打印程序,并且增加數(shù)據(jù)導(dǎo)出功能以便于后期的數(shù)據(jù)分析。
(1)系統(tǒng)設(shè)計思想:采用RS232數(shù)據(jù)線連接計算機(jī)和生化儀的COM口,獲取生化儀實時產(chǎn)生的原始數(shù)據(jù),對原始數(shù)據(jù)進(jìn)行分析,提取有效字段寫入數(shù)據(jù)庫,與數(shù)據(jù)庫的患者信息關(guān)聯(lián)后進(jìn)行查詢、打印。
(2)系統(tǒng)開發(fā)環(huán)境:以Microsoft Visual Studio 2005為開發(fā)環(huán)境,采用Vb.net為開發(fā)工具;數(shù)據(jù)庫采用Access2003。
(3)系統(tǒng)硬件:采用RS232 九針數(shù)據(jù)線,其2、3腳數(shù)據(jù)線交叉,5腳直連[1]。
(1)系統(tǒng)的主要功能模塊:①標(biāo)本信息錄入模塊:錄入患者的相關(guān)信息、樣本接收時間及自動分配樣本號;②端口設(shè)置模塊:對串口的端口號進(jìn)行設(shè)置保存;③通道配置模塊:設(shè)置維護(hù)COBAS生化儀的通道號及對應(yīng)的項目名稱;④數(shù)據(jù)接收處理模塊;⑤查詢、打印及數(shù)據(jù)導(dǎo)出模塊。
(2)數(shù)據(jù)庫設(shè)計:建數(shù)據(jù)庫(名稱為cobas1.mdb),設(shè)計3張數(shù)據(jù)庫表:①病人信息表(BRXXK),用于存放接收樣本的病人信息,為防止樣本號在分配過程中出錯,每天采用自動分配樣本號的方式分配樣本號,并給予修改功能;②數(shù)據(jù)接收表(MIDDLETEXT),用于接收生化儀傳過來的原始數(shù)據(jù);③通道配置表(PASSBY1),用于對應(yīng)通道號和項目名稱。
3.1 數(shù)據(jù)接收處理模塊的軟件設(shè)計
利用VB.NET工具箱中的serialport[2]控件,對計算機(jī)串口傳過來的數(shù)據(jù)進(jìn)行接收。Serialport控件的串口配置代碼如下:
Sub portstart()
Serialport1.portname= COM1 ‘計算機(jī)串口號設(shè)置為COM1
Serialport1.BaudRate = 9600 ‘波特率設(shè)置
Serialport1.DataBit =8 ‘ 數(shù)據(jù)位設(shè)置
Serialport1.StopBits = StopBits.One ‘停止位設(shè)置
Serialport1.Parity = None ‘奇偶校驗無
End sub
增加定時器控件TIMER[3],interval設(shè)置為30000。如果在串口打開的情況下,獲取接收緩沖區(qū)中數(shù)據(jù)的字節(jié)數(shù),否則彈出窗口提示串口未打開。在緩沖區(qū)有字節(jié)數(shù)的情況下,設(shè)置線程暫停100 ms,讀取緩沖區(qū)中的數(shù)據(jù)。從工具箱添加文本框receivebox作為數(shù)據(jù)接收池,將儀器數(shù)據(jù)讀至數(shù)據(jù)接收池之中。然后對receivebox中的字符進(jìn)行整理,找出其中的有用字段。
(1)用InSt()函數(shù)找出receivebox中第一個正文開始符號STX(start of text)[4]及第一個正文結(jié)束符號ETX(end of text)的字符位置,當(dāng)首字符位置不存在時,跳出搜尋。第一個正文開始符號位置:strpos_STX = InStr(1, receivebox. Text, “┓”);第一個正文結(jié)束符號位置:strpos_ETX = InStr(2, receivebox.Text, “┗”)。這兩個符號必須同時存在,這兩個符號之間的內(nèi)容代表一個樣本號的數(shù)據(jù),否則程序跳出處理過程。將第一段樣本用mid()函數(shù)取出后放入文本框TextBox2中進(jìn)行處理。
TextBox2.Text = Mid(receivebox.Text, strpos_STX, strpos_ ETX)。獲取第一段樣本字符后,用剩余字符覆蓋receivebox里的字符以除去第一段樣本字符。
receivebox.Text = Mid(receivebox.Text, strpos_ETX),用從strpos_ETX位置到文本結(jié)束長度的字符進(jìn)行覆蓋。
(2)提取TextBox2中的有用字符,其方法如下:
根據(jù)定位符找出樣本號:定位符號"|"的位置:strpos_1 = InStr(90, TextBox2.Text, "|");定位符號"^"的位置:strpos_j = InStr(90, TextBox2.Text, "^")。取出樣本號值賦給變量xh :xh = Mid(TextBox2.Text, strpos_1 + 1, strpos_j - strpos_1 - 1)。
找出檢測時間:定位符號"F"的位置:strpos_time1 = InStr(90, TextBox2.Text, "F")。取出檢測時間值賦給變量timer :timer = Mid(TextBox2.Text, strpos_time1 - 17, 14);用剩余字符覆蓋TextBox2以去除已經(jīng)獲取的樣本號和檢測時間字符:TextBox2.Text = Mid(TextBox2.Text, strpos_time1)。
根據(jù)定位符找出每一條檢測項目的開始符號“R”與結(jié)束符號“N”并將它們之間的字符存入TextBox3。
定位符號"R"的位置:strpos_r = InStr(1, Trim(TextBox2. Text), "R");定位符號"N"的位置:strpos_p = InStr(1, Trim(TextBox2.Text), "N")。將"R"和"N"之間的字符取出放入TextBox3中:TextBox3.Text = Mid(Trim(TextBox2.Text), strpos_r, strpos_p - strpos_r + 1)。
找出通道號的定位符后取出通道號并用剩余字符覆蓋TextBox3。
定位符號"^"的位置:strpos_j = InStr(1, TextBox3.Text, "^");定位"/"的位置:strpos_xie = InStr(strpos_j, TextBox3. Text, "/")。取出通道號賦值給變量samplename:samplename = Mid(TextBox3.Text, strpos_j + 3, strpos_xie -(strpos_j)- 3)。用TextBox3的剩余字符覆蓋TextBox3:TextBox3.Text = Mid(TextBox3.Text, strpos_xie + 2, strpos_p - strpos_xie + 1)。
(3)找出檢測結(jié)果的定位符,取出檢測結(jié)果并用剩余字符覆蓋TextBox3:定位符號"|"的位置:strpos_1 = InStr(1, TextBox3.Text, "|")。取出結(jié)果值賦值給變量result :result = Mid(TextBox3.Text, 1, strpos_1 - 1)。用TextBox3的剩余字符覆蓋TextBox3:TextBox3.Text = Mid(TextBox3.Text, strpos_1 + 1, strpos_p - strpos_1 + 1)。
(4)找出計量單位的定位符,取出計量單位并進(jìn)入下一條項目的讀?。憾ㄎ环?|"的位置:strpos_1 = InStr(1, TextBox3.Text, "|")。取出計量單位值賦值給變量unit :unit = Mid(TextBox3.Text, 1, strpos_1 - 1)。將TextBox2的剩余字符覆蓋TextBox2:TextBox2.Text = Mid(TextBox2.Text, strpos_ p + 10, Len(TextBox2.Text))。
(5)將數(shù)據(jù)存入數(shù)據(jù)庫表中:Me.MiddletextTableAdapter. InsertQuery(xh, samplename, timer, result, unit)。
這樣一個樣本讀取完畢,進(jìn)入循環(huán)讀剩余樣本。處理過程猶如貪吃蛇游戲里的蛇,一段一段的消化儀器傳過來的字符。全部讀取完畢后通過表格控件DataGridView顯示表格控件界圖。
3.2 標(biāo)本信息錄入模塊的設(shè)計
為了保證不同的病人在同一天樣本號的唯一性,減少錄入錯誤,樣本號采用自動分配原則,先求出當(dāng)日最大的樣本號,加1后分配給新錄入者。
3.2.1 串口設(shè)置模塊的軟件設(shè)計
不同的計算機(jī),串口號也不盡相同,所以本研究提供了一個可以設(shè)置端口的界面。將設(shè)置好的端口號寫入文本port.txt中以備下次開機(jī)時讀取[5],這樣只要設(shè)置一次就可以。如要重新配置端口,則先刪除以往文本,再添加新文本port.txt,最后寫入端口號,保存。在程序加載時,執(zhí)行以下代碼讀取端口號:
f = New System.IO.FileStream("port.txt", IO.FileMode. Open,IO.FileAccess.Read);r = New System.IO.StreamReader(f);r.Read(mybuffer, 0, 5);Me.SerialPort1.PortName = mybuffer’將端口號賦值給串口。
3.2.2 通道配置模塊的軟件設(shè)計
生化儀的每一通道對應(yīng)相關(guān)的生化項目,傳到計算機(jī)上的原始數(shù)據(jù)里只有通道號,因而需要事前做好項目通道號的對應(yīng)工作(圖1)。
圖1 通道與項目對應(yīng)關(guān)系圖
3.2.3 報告查詢及打印模塊的軟件設(shè)計
用控件datetimepicker做時間t選擇器,將datetimepicker的FORMAT屬性設(shè)置為Custom。Custom format,屬性設(shè)置為:yyy-MM-dd。這樣datetimepicker.text輸出短日期。添加查詢按鈕,輸入代碼:Me.DataTable1TableAdapter. FillBysearch(Me.Cobas1DataSet1.DataTable1, Me.DateTime Picker11.Value, Me.DateTimePicker12.Value);查詢結(jié)果填充:DataGridView2。打印分單條打印及批量打印。單條打印通過雙擊所選條目獲取ID號后打印結(jié)果,批量打印則采用輸入起始ID號和結(jié)束ID號的方式獲取打印結(jié)果。用控件ReportViewer報表設(shè)計器[6]設(shè)計顯示報表。在ReportViewer屬性里點擊“設(shè)計新報表”,產(chǎn)生一個RDLC文件。從工具箱選擇列表list,將屬性datasetname設(shè)置為cobas1DataSet1_DataTable1。打開數(shù)據(jù)源,將相關(guān)字段拉入列表list相應(yīng)位置,再往list列表中添加表table,在表table中設(shè)置“項目名稱”、“化驗結(jié)果”、“單位”字段。這樣打印報表就設(shè)計好了,在預(yù)覽界面可以方便的以EXCEL或PDF格式對相關(guān)結(jié)果進(jìn)行保存和導(dǎo)出[7-8]。
該系統(tǒng)操作簡單,每隔30 s自動接收、處理數(shù)據(jù),在工作過程中無需人員過問。此軟件既適用于無LIS系統(tǒng)的醫(yī)院,同時也是對醫(yī)院在LIS系統(tǒng)故障情況下的很好應(yīng)用補(bǔ)充。
[1]李麗萍,魏權(quán)利.NET中SerialPort類在短信收發(fā)軟件中的應(yīng)用[J].微型機(jī)與應(yīng)用,2012,31(21):11-13.
[2]劉東.基于VB.NET的串口通信方法設(shè)計[J].電腦知識與技術(shù),2012,8(34):8304-8307.
[3]崔淼,劉瑞新.Visual Basic.Net程序設(shè)計教程[M].2版.北京:機(jī)械工業(yè)出版社,2009.
[4]范逸之,陳立元.Visual Basic與RS-232串行通信控制[M].北京:清華大學(xué)出版社,2005.
[5]李江全,張茜,李偉,等.Visual Basic.Net串口通信及測控應(yīng)用典型實例[M].北京:電子工業(yè)出版社,2007.
[6]唐學(xué)軍,甄廷忠,張琪.RDLC圖表報表寬度自適應(yīng)和多個報表切換顯示的實現(xiàn)方法[J].電腦編程技巧與維護(hù),2013,24(10):30-32.
[7]邱李華,曹青,郭志強(qiáng).Visual Basic.NET程序設(shè)計教程[M].北京:機(jī)械工業(yè)出版社,2014.
[8]楊燕紅,馬玉桂.基于H IS的靜脈輸液瓶貼與巡視卡打印程序的設(shè)計與實現(xiàn)[J].中國醫(yī)療設(shè)備,2015,30(1):80-81,89.
落,將其焊好后,啟動輸液泵,故障排除。
輸液泵作為專用醫(yī)療設(shè)備會對醫(yī)療過程和醫(yī)療結(jié)果產(chǎn)生一定的影響,本文講述的校準(zhǔn)方法既能讓我們掌握輸液泵的性能,又能對輸液泵進(jìn)行現(xiàn)場校準(zhǔn),可以消除醫(yī)護(hù)人員采用量筒標(biāo)定帶來的讀數(shù)誤差。本文總結(jié)的輸液泵常見故障處理方法可以使醫(yī)護(hù)人員和維修人員及時有效地排除故障,提高對患者的救治率。
[參考文獻(xiàn)]
[1]陳玲.醫(yī)用輸液泵校準(zhǔn)方法和測量結(jié)果不確定度評定[J].檢測與測試,2008,6(1):68-70.
[2]商洪濤,徐濤,唐輝.輸液泵和注射泵檢測技術(shù)探討[J].中國醫(yī)學(xué)裝備,2013,10(8):42-44.
[3]楊陽,胡生偉.淺談注射泵計量校準(zhǔn)時常見問題與校準(zhǔn)經(jīng)驗[J].計量與檢測技術(shù),2014,41(10):46-47.
[4]商洪濤,徐濤,唐輝.輸液泵和注射泵檢測技術(shù)探討[J].中國醫(yī)學(xué)裝備,2013,10(8):42-44.
[5]楊虎,楊國忠,胡逸民.臨床醫(yī)學(xué)工程教程[M].北京:人民教育出版社,2007:513-516.
[6]程起元,李廣義,李遠(yuǎn)洋,等.TE-112型輸液泵故障分析[J].中國醫(yī)療設(shè)備,2014,29(7):159-159,182.
[7]王功華,趙偉,袁園.ATOMP-600輸液泵常見故障及檢修[J].設(shè)備運(yùn)行與保障,2011,26(4):112-116.
Research and Development of a Printing Software for Interface w ith COBAS Biochem ical Analyzer
SHI Qiao-chun
Department o f Information, Nan jing Yangzi Hospital, Nanjing Jiangsu 210048, China
A printing software was developed to interface w ith COBAS biochem ical analyzer, which realized the connection between the computer serial port and biochem ical analyzer COM port. The processing module of the software was used to analyze the test data of the computer serial port, extract the effective field to w rite into the database and connect w ith the patients’ information in the database so as to realize functions of query and printing. Application of the software made up for the lack of laboratory information system(LIS)or the failure to issue the LIS biochemical test report in a timely manner.
biochem ical analyzer;laboratory information system ;serial port;hospital digitalization
TP311.52
A
10.3969/j.issn.1674-1633.2015.11.030
1674-1633(2015)11-0095-03
2015-03-16
2015-07-13
作者郵箱:13952044797@139.com