黃 皎 許曉娟 陸曉春 任 姣 劉海榮
(河海大學(xué)計(jì)算機(jī)與信息學(xué)院1,江蘇 常州 213022;江蘇省輸配電裝備技術(shù)重點(diǎn)實(shí)驗(yàn)室2,江蘇 常州 213022)
電磁流量計(jì)是隨著電子技術(shù)的發(fā)展而迅速發(fā)展起來(lái)的新型流量測(cè)量?jī)x表。由于不受溫度、黏度、壓力等物理參數(shù)的影響,因此電磁流量計(jì)具有管道中無(wú)任何阻力部件、節(jié)能效果顯著等諸多優(yōu)點(diǎn),受到了國(guó)內(nèi)外眾多廠(chǎng)商的青睞,現(xiàn)已發(fā)展成為工業(yè)用四大流量計(jì)之一[1]。目前,現(xiàn)有的電磁流量計(jì)一般都是以單片機(jī)為核心控制器,采用點(diǎn)陣式液晶顯示,小容量EEPROM存儲(chǔ)數(shù)據(jù),其測(cè)量精度、人機(jī)操作、信息存儲(chǔ)等方面均存在著一定的局限性,已不能滿(mǎn)足實(shí)際工業(yè)生產(chǎn)中流量測(cè)量與控制的需要。為此,本文提出一種基于ARM-Linux嵌入式開(kāi)發(fā)平臺(tái),使用MiniGUI開(kāi)發(fā)環(huán)境進(jìn)行圖形用戶(hù)界面(graphical user interface,GUI)設(shè)計(jì)。該設(shè)計(jì)提供了友好的人機(jī)界面、大量數(shù)據(jù)存儲(chǔ)與管理以及網(wǎng)絡(luò)通信等功能,實(shí)現(xiàn)了電磁流量計(jì)的智能化、信息化與網(wǎng)絡(luò)化。
電磁流量計(jì)的總體結(jié)構(gòu)如圖1所示。流量計(jì)主要由流量測(cè)量單元、智能監(jiān)控終端和遠(yuǎn)程主機(jī)三部分組成。該儀表將嵌入式、數(shù)據(jù)庫(kù)、圖形開(kāi)發(fā)和網(wǎng)絡(luò)等技術(shù)集成到傳統(tǒng)的電磁流量計(jì)中,構(gòu)建了一個(gè)集流量測(cè)量、數(shù)據(jù)存儲(chǔ)與管理和遠(yuǎn)程監(jiān)控于一體的綜合系統(tǒng)。
圖1 電磁流量計(jì)的總體結(jié)構(gòu)圖Fig.1 General structure of the electromagnetic flowmeter
流量測(cè)量單元包括激磁電路、流量信號(hào)處理電路和存儲(chǔ)器等模塊,主要完成對(duì)流量的高精度測(cè)量,并將處理后的數(shù)據(jù)信息通過(guò)Modbus總線(xiàn)傳輸?shù)街悄鼙O(jiān)控終端。智能監(jiān)控終端運(yùn)行基于LCD觸摸屏的現(xiàn)場(chǎng)監(jiān)控軟件,并對(duì)整個(gè)電磁流量計(jì)系統(tǒng)進(jìn)行現(xiàn)場(chǎng)實(shí)時(shí)監(jiān)控,實(shí)現(xiàn)儀表參數(shù)設(shè)定、串口設(shè)置、流量和電勢(shì)標(biāo)定等多種功能,且提供友好的人機(jī)界面、數(shù)據(jù)管理和網(wǎng)絡(luò)服務(wù)。遠(yuǎn)程主機(jī)可以通過(guò)以太網(wǎng)登陸電磁流量計(jì)的遠(yuǎn)程監(jiān)控系統(tǒng),進(jìn)行流量信息的實(shí)時(shí)查看、數(shù)據(jù)查詢(xún)和用戶(hù)管理等操作。
電磁流量計(jì)智能監(jiān)控終端的硬件系統(tǒng)以基于ARM11內(nèi)核的S3C6410為核心處理器,包括電源模塊、存儲(chǔ)器模塊(64 MB~2 GB Nand Flash和128 MB SDRAM)、串行通信接口、10/100 Mbit/s以太網(wǎng)口和LCD液晶顯示屏等外圍接口。智能監(jiān)控終端硬件結(jié)構(gòu)如圖2所示。
圖2 智能監(jiān)控終端硬件結(jié)構(gòu)圖Fig.2 Hardware structure of the intelligent monitoring terminal
智能監(jiān)控終端硬件設(shè)計(jì)主要包括控制模塊、存儲(chǔ)模塊和外圍接口模塊的設(shè)計(jì)。各模塊介紹如下。
①控制模塊采用S3C6410作為MCU。S3C6410是由Samsung公司生產(chǎn)的低功耗、高集成度的32位RISC微處理器,它提供豐富的外圍模塊,集成有獨(dú)立的16 kB指令緩存、16 kB數(shù)據(jù)緩存、LCD控制器、4通道 UART、2 通道 SPI和 1 通道 IIC 等功能[2-3],可以滿(mǎn)足電磁流量計(jì)智能監(jiān)控終端所需性能要求。
②存儲(chǔ)模塊選用Samsung公司生產(chǎn)的Nand Flash芯片K9F1208U0M作為存儲(chǔ)器,用于保存啟動(dòng)代碼、Linux鏡像文件、大容量程序和數(shù)據(jù)等;選用HYnix公司生產(chǎn)的SDRAM芯片HY57V561620BT-H運(yùn)行程序、維護(hù)數(shù)據(jù)和堆棧區(qū),其單片容量為32 MB。系統(tǒng)使用兩片HY57V561620BT-H構(gòu)成32位、64 MB的SDRAM存儲(chǔ)器系統(tǒng)[4]。
③外圍接口模塊包含以太網(wǎng)接口、LCD液晶觸摸式顯示屏以及串行通信接口等。系統(tǒng)選用NEC公司生產(chǎn)的型號(hào)為NL2432HC22-22B的TFT真彩液晶屏作為顯示器,并在軟件上實(shí)現(xiàn)LCD的驅(qū)動(dòng)。S3C6410沒(méi)有集成以太網(wǎng)控制器,所以系統(tǒng)外接了以太網(wǎng)控制器DM9000A,實(shí)現(xiàn)以太網(wǎng)接入。在電路設(shè)計(jì)時(shí)需要完成DM9000A與S3C6410總線(xiàn)的連接,以及網(wǎng)絡(luò)隔離變壓器PH163539和以太網(wǎng)水晶接頭RJ45的連接[5]。
電磁流量計(jì)智能監(jiān)控終端的軟件系統(tǒng)主要由4部分組成:硬件平臺(tái)、嵌入式操作系統(tǒng)、設(shè)備驅(qū)動(dòng)層和應(yīng)用軟件層。系統(tǒng)的軟件設(shè)計(jì)主要包括嵌入式開(kāi)發(fā)平臺(tái)的建立和應(yīng)用軟件的設(shè)計(jì),其軟件結(jié)構(gòu)如圖3所示。
圖3 智能監(jiān)控終端軟件結(jié)構(gòu)圖Fig.3 Software structure of the intelligent monitoring terminal
系統(tǒng)選用嵌入式Linux操作系統(tǒng)作為智能監(jiān)控終端的軟件開(kāi)發(fā)平臺(tái),選用MiniGUI作為圖形用戶(hù)界面開(kāi)發(fā)環(huán)境。嵌入式Linux操作系統(tǒng)源碼開(kāi)放,可移植性好,可以根據(jù)用戶(hù)的需要進(jìn)行相應(yīng)的裁剪、定制,且具有強(qiáng)大的網(wǎng)絡(luò)通信功能[6]。MiniGUI具有可伸縮性強(qiáng)、占用資源少、可配置性和支持多種嵌入式操作系統(tǒng)等特點(diǎn),為嵌入式Linux系統(tǒng)提供了完整的圖形系統(tǒng)支持。MiniGUI的運(yùn)行需要一些動(dòng)態(tài)鏈接庫(kù)的支持,系統(tǒng)移植的庫(kù)文件主要有:Zlib庫(kù)、PNG庫(kù)、JPEG庫(kù)。要在目標(biāo)板上運(yùn)行MiniGUI for Linux應(yīng)用程序,首先要使用PC宿主機(jī)對(duì)MiniGUI的源代碼進(jìn)行交叉編譯,生成MiniGUI靜態(tài)鏈接庫(kù)文件;然后MiniGUI應(yīng)用程序在宿主機(jī)上進(jìn)行交叉編譯,并且與MiniGUI靜態(tài)鏈接庫(kù)和POSIX線(xiàn)程庫(kù)鏈接生成*.axf映象文件或*.bin二進(jìn)制文件;最后將MiniGUI應(yīng)用程序下載到目標(biāo)板并運(yùn)行[7]。
3.2.1 數(shù)據(jù)管理模塊設(shè)計(jì)
系統(tǒng)采用SQLite數(shù)據(jù)庫(kù)對(duì)測(cè)量數(shù)據(jù)和報(bào)警等記錄進(jìn)行存儲(chǔ)和管理。SQLite是Hipp D R于2000年開(kāi)發(fā)的一款輕型C庫(kù)實(shí)現(xiàn)的關(guān)系數(shù)據(jù)庫(kù),其設(shè)計(jì)目標(biāo)就是為嵌入式系統(tǒng)服務(wù),而且源代碼是完全公開(kāi)的[8]。SQLite數(shù)據(jù)庫(kù)提供的API函數(shù)有多個(gè),系統(tǒng)使用到的函數(shù)有sqlite3_open()、sqlite3_exec()、sqlite3_get_table()、sqlite3_close()。當(dāng)用戶(hù)需要存儲(chǔ)和管理流量信息時(shí),只需構(gòu)造對(duì)應(yīng)的SQL語(yǔ)句即可。數(shù)據(jù)庫(kù)編程如下。
3.2.2 用戶(hù)界面操作模塊設(shè)計(jì)
在MniGUI開(kāi)發(fā)的人機(jī)交互界面中,用戶(hù)可以通過(guò)操作觸摸屏操控儀表。主界面的菜單欄中包含了登錄管理、參數(shù)設(shè)置、數(shù)據(jù)管理、儀表標(biāo)定、幫助和退出六個(gè)選項(xiàng),每個(gè)選項(xiàng)又包含若干子選項(xiàng)。用戶(hù)點(diǎn)擊相應(yīng)的彈出式菜單按鈕,可進(jìn)入相應(yīng)的子窗口執(zhí)行操作。主菜單頁(yè)面中還顯示當(dāng)前的流量信息,包括流量、流速、百分比和空管比等測(cè)量值以及當(dāng)前儀表報(bào)警情況。
3.2.3 串行通信模塊設(shè)計(jì)
系統(tǒng)采用Modbus的RTU模式進(jìn)行信息傳輸,Modbus規(guī)定RTU模式中有效功能碼范圍為1~255,設(shè)計(jì)選擇67~71作為智能監(jiān)控終端(主機(jī))請(qǐng)求功能碼,196~199作為流量測(cè)量單元(從機(jī))回應(yīng)功能碼。
智能監(jiān)控終端啟動(dòng)后,首先向從機(jī)發(fā)送功能碼為67的請(qǐng)求幀,獲取流量測(cè)量單元的儀表參數(shù),然后調(diào)用check_setting(),比對(duì)消息幀的參數(shù)和智能監(jiān)控終端的參數(shù)。比對(duì)相同時(shí),系統(tǒng)采用流量測(cè)量單元的參數(shù),否則,重新發(fā)送功能碼。監(jiān)控程序正常運(yùn)行時(shí),根據(jù)設(shè)定的時(shí)間間隔向流量測(cè)量單元發(fā)送流量數(shù)據(jù)和報(bào)警數(shù)據(jù)請(qǐng)求幀,如果在設(shè)定的通信時(shí)間內(nèi)沒(méi)有響應(yīng),則通信超時(shí),主機(jī)重新發(fā)送請(qǐng)求幀。當(dāng)用戶(hù)在智能監(jiān)控終端通過(guò)GUI完成儀表的參數(shù)設(shè)定或標(biāo)定設(shè)置后,智能監(jiān)控終端發(fā)送功能碼為70或71的消息幀,把參數(shù)發(fā)送到流量測(cè)量單元,監(jiān)控程序按設(shè)定的時(shí)間間隔讀取串口數(shù)據(jù),并調(diào)用analysis_data()解析從機(jī)的應(yīng)答消息幀。解析時(shí),先獲得從機(jī)地址,然后判斷功能碼并采取不同的處理措施。解析流程圖如圖4所示。
圖4 解析函數(shù)的程序流程圖Fig.4 Program flowchart of analytic functions
3.2.4 網(wǎng)絡(luò)服務(wù)模塊的設(shè)計(jì)
在Linux下進(jìn)行網(wǎng)絡(luò)通信可以通過(guò)調(diào)用Linux內(nèi)置的TCP/IP協(xié)議提供的Socket套接字接口函數(shù)來(lái)實(shí)現(xiàn),常見(jiàn)的Socket主要有三種類(lèi)型:流式Socket、數(shù)據(jù)報(bào)Socket、原始 Socket。本系統(tǒng)選用流式 Socket,即采用C/S模式,將智能監(jiān)控終端構(gòu)建成通信服務(wù)器,以響應(yīng)監(jiān)控軟件的連接請(qǐng)求和操作。監(jiān)控軟件利用C++Builder6為開(kāi)發(fā)平臺(tái),在通信中作為客戶(hù)端發(fā)起連接請(qǐng)求,監(jiān)控電磁流量計(jì)的運(yùn)行狀態(tài)。
系統(tǒng)運(yùn)行后,主進(jìn)程首先新建一個(gè)子進(jìn)程,隨后主進(jìn)程運(yùn)行MiniGUI的圖形界面應(yīng)用程序,由該子進(jìn)程運(yùn)行Socket通信服務(wù)器程序。為了支持多個(gè)客戶(hù)端同時(shí)訪(fǎng)問(wèn)本服務(wù)器,系統(tǒng)采用多進(jìn)程技術(shù),每接收到一個(gè)連接請(qǐng)求,系統(tǒng)即創(chuàng)建一個(gè)新的子進(jìn)程,由該進(jìn)程負(fù)責(zé)與客戶(hù)端的通信。Socket通信服務(wù)器有關(guān)代碼如下。
本文結(jié)合嵌入式、數(shù)據(jù)庫(kù)、網(wǎng)絡(luò)和圖形開(kāi)發(fā)等技術(shù),設(shè)計(jì)了一種基于嵌入式技術(shù)的電磁流量計(jì)智能監(jiān)控終端。系統(tǒng)以高性能的S3C6410為核心處理器,以嵌入式Linux操作系統(tǒng)為軟件開(kāi)發(fā)平臺(tái),具有可靠性高、人機(jī)界面友好、網(wǎng)絡(luò)功能強(qiáng)大等特點(diǎn),彌補(bǔ)了傳統(tǒng)電磁流量計(jì)監(jiān)控終端設(shè)計(jì)存在的局限性。目前,該系統(tǒng)已進(jìn)入產(chǎn)品測(cè)試階段,試驗(yàn)結(jié)果表明,監(jiān)控終端運(yùn)行穩(wěn)定、可靠,滿(mǎn)足了企業(yè)的需求,具有一定的實(shí)用價(jià)值和推廣價(jià)值。
[1]張學(xué)慶.流量測(cè)量的意義及流量傳感器的現(xiàn)狀[J].石油化工自動(dòng)化,2005(5):99 -101.
[2]廖煥柱,方康玲,曹晶.基于S3C6410和WinCE6.0的12導(dǎo)聯(lián)心電圖機(jī)設(shè)計(jì)[J].計(jì)算機(jī)應(yīng)用,2010,30(1):331 -333.
[3]馮川放.基于ARM11的礦用大容量組合開(kāi)關(guān)控制系統(tǒng)的設(shè)計(jì)[J].長(zhǎng)春工程學(xué)院學(xué)報(bào),2010,11(1):41 -44.
[4]張明亮,黃靜,張波.基于嵌入式技術(shù)的水質(zhì)分析儀的研究[J].工業(yè)控制計(jì)算機(jī),2010,23(7):112 -113.
[5]唐娜.基于TMS320F2812和DM9000A以太網(wǎng)接口設(shè)計(jì)[J].計(jì)量與測(cè)試技術(shù),2010,37(11):14 -16.
[6]冼進(jìn).嵌入式Linux應(yīng)用開(kāi)發(fā)詳解[M].北京:電子工業(yè)出版社,2007.
[7]鄭端健,郭磊,魏世民.MiniGUI圖形庫(kù)在嵌入式Linux平臺(tái)上的移植與實(shí)現(xiàn)[J].儀表技術(shù),2008(10):10 -14.
[8]黃布毅,張曉華.基于ARM-Linux的SQLite嵌入式數(shù)據(jù)庫(kù)技術(shù)[J].單片機(jī)與嵌入式系統(tǒng)應(yīng)用,2005,30(4):21-24.
[9]黃皎,劉修峰,陸曉春,等.嵌入式智能磷酸根分析儀的設(shè)計(jì)[J].自動(dòng)化儀表,2011,32(1):73-75.