張海江 黎海文 吳一輝 于正林
(長春理工大學(xué)機電工程學(xué)院1,吉林 長春 130028;中國科學(xué)院長春光學(xué)精密機械與物理研究所2,吉林 長春 130033)
生化分析儀是一種集光、機、電、液于一體的大型檢驗設(shè)備,主要用于檢驗人體體液的各項生化指標。目前,關(guān)于這方面的研究主要集中在兩個方面:一是采用較低檔次處理器(單片機)的小型產(chǎn)品,這類產(chǎn)品成本低,但硬件結(jié)構(gòu)復(fù)雜、測試速度慢、人機交互性能差;二是搭配PC上位機的大型產(chǎn)品,這類產(chǎn)品的數(shù)據(jù)存貯和查詢方便,人機交互界面友好,但系統(tǒng)成本較高、體積大、運動控制實時性差[1-3]。針對以上問題,提出基于ARM-雙單片機系統(tǒng)的小型全自動生化分析儀。該方案采用S3C2440A(ARM)為上位機、C8051F060單片機為下位機的雙系統(tǒng)架構(gòu),可實時多任務(wù)并行處理。采用該方案設(shè)計的產(chǎn)品具有成本低、體積小、處理速度快等優(yōu)點,適用于小型全自動生化分析系統(tǒng)。
系統(tǒng)框架如圖1所示。
圖1 系統(tǒng)結(jié)構(gòu)框圖Fig.1 Structure of the system
由圖1可知,系統(tǒng)由上位機模塊和下位機模塊兩部分組成。
上位機模塊主要負責(zé)數(shù)據(jù)的分析處理、病人信息的存儲查詢、人機交互和向下位機發(fā)送命令等工作;下位機模塊主要負責(zé)加樣、混合、數(shù)據(jù)采集、轉(zhuǎn)盤轉(zhuǎn)動、清洗系統(tǒng)的控制和接收上位機的命令等工作。上位機模塊與下位機模塊之間采用異步串行通信。為實現(xiàn)多任務(wù)并行處理,下位機模塊采用雙單片機結(jié)構(gòu)。
系統(tǒng)上位機模塊的核心是三星公司推出的基于ARM920T架構(gòu)的S3C2440A處理器。這是一款專門針對低價格、低功耗、高性能應(yīng)用推出的32位RISC指令集處理器,其最高主頻可達400 MHz,并具有加強的ARM體系內(nèi)存管理單元(memory management unit,MMU),用于支持 WinCE、EPOC32和嵌入式 Linux系統(tǒng)、三通道UART、兩端口USB主機、LCD控制器等豐富的資源。S3C2440A共有130個I/O口和24路外部中斷,足以滿足小型全自動生化分析儀上位機的要求[4]。
系統(tǒng)下位機模塊的核心采用美國Silab公司的C8051F060單片機。該單片機內(nèi)核采用流水線結(jié)構(gòu),速度比普通的51系列單片機快10倍,其指令和標準系列51單片機兼容,芯片支持在線調(diào)試。片上有64 kB的Flash、4352 B內(nèi)部RAM、59個I/O口;片內(nèi)集成有兩個UART、一個SM(兼容I2C)和一個SPI等豐富的資源,完全滿足下位機的要求[5]。
為快速完成復(fù)雜的測試動作并縮短測試時間,提出了雙單片機系統(tǒng)的設(shè)計方案。該方案將復(fù)雜的測試動作分配給兩個單片機,其中一個單片機負責(zé)轉(zhuǎn)盤定位和數(shù)據(jù)采集等工作,另一個單片機負責(zé)加樣臂旋轉(zhuǎn)、樣品加樣混合和清洗系統(tǒng)控制等工作。該方案大大提高了測試速度,減輕了單片機的工作任務(wù)。
下位機采用C8051F060單片機的優(yōu)點主要有以下幾點:單片機實時性好;速度比普通的單片機快,大大提高了測試速度;采用雙單片機結(jié)構(gòu)(兩個下位機),可實現(xiàn)多任務(wù)并行處理,提高了工作效率;上位機與下位機之間采用串口通信傳輸指令與數(shù)據(jù),提高了系統(tǒng)的抗干擾能力。
系統(tǒng)上位機模塊與下位機模塊之間、下位機模塊中兩個單片機之間都采用異步串行通信。在異步通信中,數(shù)據(jù)是以字符為單位組成字符幀進行傳送的。發(fā)送端與接收端分別按字符幀規(guī)定的格式和波特率來協(xié)調(diào)數(shù)據(jù)的發(fā)送和接收。字符幀和波特率可由用戶根據(jù)實際情況選擇。字符幀由起始位、數(shù)據(jù)位、停止位和空閑位四部分組成[6-7]。
ARM與單片機之間的串口通信電氣連接如圖2所示。ARM與單片機之間使用MAX3232SOP芯片,提高了系統(tǒng)的抗干擾能力和穩(wěn)定性。
圖2 串口通信電氣連接圖Fig.2 Electrical connections of the serial communications
系統(tǒng)軟件分為上位機程序和下位機程序兩部分。上位機程序部分采用模塊化設(shè)計,由主程序、顯示子程序、數(shù)據(jù)處理子程序和命令發(fā)送接收子程序等部分組成。
下位機程序部分主要負責(zé)接收上位機命令、加樣、混合、轉(zhuǎn)盤的轉(zhuǎn)動、控制微型光譜儀采集數(shù)據(jù)以及將數(shù)據(jù)發(fā)回給上位機等工作。
該系統(tǒng)的軟件流程如圖3所示。
在系統(tǒng)中,上位機與下位機之間主要通過串口傳送數(shù)據(jù)與命令。因此,串口通信是系統(tǒng)的核心。本系統(tǒng)以嵌入式Linux系統(tǒng)為應(yīng)用平臺,這是由于嵌入式Linux具有內(nèi)核精悍、運行穩(wěn)定所需資源少及支持硬件數(shù)量龐大等優(yōu)點[8]。在嵌入Linux系統(tǒng)中添加串口通信,首先將串口的設(shè)備驅(qū)動程序添加進內(nèi)核,然后編寫測試程序。
編譯串口設(shè)備文件的內(nèi)核,其主要步驟如下。
① 將串口驅(qū)動保存為 serial.c,并保存在目錄linux-2.6.32.2/drivers/char下。
② 在 linux-2.6.32.2/drivers/char目錄下,打開Kconfig文件,在文件中添加以下語句:
③ 在 linux-2.6.32.2/目錄下執(zhí)行 make menuconfig命令。在出現(xiàn)的界面中,將光標下調(diào)至Device Drivers,按回車鍵進入另一界面。在這個界面中,將光標下調(diào)至Character Devices,按回車鍵進入另一界面。最后用方向鍵選中"Support for Serial(new)",并按空格鍵使該行最前面的符號變?yōu)椋? >(<M>表示為編譯成Module形式,默認<* >為編譯入內(nèi)核)。配置完成后,退出并保存。
④ 在 linux-2.6.32.2/drivers/char目錄下,修改Makefile文件,添加如下語句并保存。
obj-$(SERIAL_NAME)+=serial.o
⑤最后執(zhí)行命令make zImage生成內(nèi)核文件。
編寫串口測試程序,其主要步驟如下。
①使用open()函數(shù)打開串口設(shè)備文件。CommFd=open(DeviceName,O_RDWR,0),其中DeviceName為串口設(shè)備名。
②設(shè)置串口,TryATttr為存儲串口設(shè)置參數(shù)的結(jié)構(gòu)體名稱,設(shè)置波特率、數(shù)據(jù)位、停止位、奇偶校驗位等相關(guān)參數(shù),然后使用下面的函數(shù)進行設(shè)置:tcsetattr(CommFd,TCSANOW,&TtyAttr)。
③ 使用read()、write()函數(shù)對串口進行讀寫。
④最后關(guān)閉串口設(shè)備文件,與關(guān)閉其他設(shè)備文件相同,使用close()函數(shù),close(CommFd)。
至此,上位機模塊中含有串口驅(qū)動的內(nèi)核以及測試程序全部完成。
友好的人機交互界面簡化了復(fù)雜的操作,降低了操作人員的工作強度,提高了自動化水平。上位機系統(tǒng)軟件結(jié)構(gòu)如圖4所示。
圖4 上位機系統(tǒng)軟件結(jié)構(gòu)圖Fig.4 Software structure of the host computer system
系統(tǒng)采用嵌入式Linux作為操作系統(tǒng),管理軟硬件資源;采用QT/E來完成對圖形化界面和應(yīng)用程序的開發(fā)。QT/E是挪威Trolltech公司專門為嵌入式系統(tǒng)開發(fā)的基于C++的應(yīng)用框架和窗口系統(tǒng),它可在含有ARM處理器的嵌入式Linux操作系統(tǒng)跨平臺運行,且支持多線程編程[9]。
該應(yīng)用程序主要分為參數(shù)的讀取與設(shè)置、命令的發(fā)送與接收、數(shù)據(jù)接收與處理、結(jié)果的顯示與查詢四大部分。首先使用 QT Creator界面,然后遵循 Qt/Embedded編程一般規(guī)則編寫代碼,最后編譯并通過網(wǎng)絡(luò)文件系統(tǒng)(network file system,NFS)進行板上測試。
由于圖形用戶界面應(yīng)用程序都只有一個執(zhí)行線程,且一次只執(zhí)行一個操作。而系統(tǒng)中的數(shù)據(jù)處理或串口通信都是較耗時的操作。當這些操作被執(zhí)行時,雖然實際上該操作正在進行,但用戶界面通常會被凍結(jié)而不再響應(yīng)。在QT/E應(yīng)用程序中,子類化QThread并重新實現(xiàn)它的run()函數(shù),實現(xiàn)多線程,從而解決以上問題[10]。根據(jù)系統(tǒng)要求,創(chuàng)建兩個新的線程類,分別用于與兩個下位機進行通信。創(chuàng)建語句如下。
class Thread_master_SCM:public QThread;
class Thread_slave_SCM:public QThread;
兩個線程類在主界面類MainWindow類中創(chuàng)建對象,線程創(chuàng)建后通過QThread::run()函數(shù)開始執(zhí)行。要實現(xiàn)兩個不同的線程對共有數(shù)據(jù)的互斥訪問,還需使用互斥鎖QMutex mutex來進行線程間的協(xié)調(diào)與同步工作。
針對小型全自動生化分析儀產(chǎn)品體積小、處理速度快以及人機交互友好等需求,提出了基于ARM-雙單片機系統(tǒng)的設(shè)計方法。該系統(tǒng)采用以ARM為上位機、單片機為下位機的雙系統(tǒng)架構(gòu),提高了測試速度與測試效率。在上下位機之間使用串口傳送數(shù)據(jù)與命令,增強了系統(tǒng)的抗干擾能力。上位機系統(tǒng)模塊采用嵌入式Linux系統(tǒng)為操作系統(tǒng),應(yīng)用程序使用QT/E開發(fā),并使用液晶觸摸屏使人機交互更加方便快捷。試驗結(jié)果表明,控制系統(tǒng)人機交互方便快捷、運動控制實時性好、運算處理能力強、性能穩(wěn)定可靠。
[1]錢超.全自動生化分析儀機械系統(tǒng)研究[D].哈爾濱:哈爾濱工業(yè)大學(xué),2009.
[2]陳東.基于嵌入式Linux的全自動生化分析儀的研究與設(shè)計[D].長沙:湖南大學(xué),2006.
[3]吳海波.全自動生化分析儀電子控制系統(tǒng)的設(shè)計與實現(xiàn)[D].沈陽:東北大學(xué),2006.
[4]侯冬晴.基于ARM9的指紋識別器的設(shè)計[J].自動化儀表,2007,28(11):29 -31.
[5]潘琢金,施國君.C8051FXXX高速SOC單片機原理及應(yīng)用[M].北京:北京航空航天大學(xué)出版社,2002.
[6]張洪輝,黎海文,高春海,等.面向小型全自動生化分析儀的同步可靠的 UART 通信[J].電子技術(shù)應(yīng)用,2010,36(1):128-131.
[7]莫易敏,覃君愷.應(yīng)用ARM920T的S3C2410A與PC間的異步串行通信設(shè)計[J].現(xiàn)代制造工程,2008(6):96-98.
[8]陳佳男,李欣,張海燕.基于ARM+Linux的異步串行通信設(shè)計[J].微計算機信息,2009,25(3):139 -140.
[9]岑海洪,楊艷娟.基于ARM和Linux的注塑機上位控制器設(shè)計[J].工業(yè)儀表與自動化裝置,2010(6):23-26.
[10]Jasmin Blanchette,Mark Summerfield++GUI Programming with QT 4[M].2nd edition.閆鋒欣,譯.北京:電子工業(yè)出版社,2008:255-269.