一種大容量移動存儲的網(wǎng)絡(luò)訪問方案設(shè)計
引言
在工業(yè)測井系統(tǒng)中,終端的數(shù)據(jù)存儲、數(shù)據(jù)轉(zhuǎn)移一直是工作的重要環(huán)節(jié)。傳統(tǒng)工業(yè)測井系統(tǒng)的數(shù)據(jù)存儲采用不掉電靜態(tài)RAM、EEPROM存儲模塊,數(shù)據(jù)轉(zhuǎn)移通常是計算機通過RS232串行口讀取。
隨著USB技術(shù)的發(fā)展,計算機的移動存儲介質(zhì)普遍采用U盤或移動硬盤。U盤相對于工業(yè)測井系統(tǒng)終端原來的存儲模塊來說是海量存儲,所有存儲數(shù)據(jù)無需進(jìn)行壓縮處理,可以在文件級與計算機兼容。與此同時,嵌入式Internet技術(shù)的發(fā)展又使得互聯(lián)網(wǎng)技術(shù)能夠輕松地嵌入到工業(yè)測井系統(tǒng)中,通過以太網(wǎng)控制芯片將測井系統(tǒng)終端接入互聯(lián)網(wǎng)后,編制測井系統(tǒng)終端控制器和網(wǎng)絡(luò)服務(wù)器之間的通信協(xié)議,便可以輕松實現(xiàn)通過數(shù)據(jù)中心網(wǎng)站來控制測井終端的數(shù)據(jù)采集,而進(jìn)行數(shù)據(jù)訪問,也無需反復(fù)插拔USB接口存儲器,僅通過已接入互聯(lián)網(wǎng)的PC機或其他具有上網(wǎng)功能的移動終端即可實現(xiàn)遠(yuǎn)程控制海量測井?dāng)?shù)據(jù)的采集、存儲及訪問。綜上所述,具有USB接口的存儲設(shè)備能實現(xiàn)互聯(lián)網(wǎng)遠(yuǎn)程控制、訪問USB存儲設(shè)備的設(shè)計方案,對于希望獲取海量測井?dāng)?shù)據(jù)的用戶來說意義重大。
1 系統(tǒng)設(shè)計
系統(tǒng)框圖如圖1所示,主要是以STC15F2K60S2單片機為核心。單片機收集測井系統(tǒng)中各路傳感器采集到的數(shù)據(jù)信息,通過USB接口芯片存儲在大容量U盤中,另外使用以太網(wǎng)控制芯片ENC28J60將系統(tǒng)接入互聯(lián)網(wǎng),通過PC機或其他具有上網(wǎng)功能的移動終端遠(yuǎn)程控制并且訪問U盤中的測井?dāng)?shù)據(jù)。
1.1 USB接口芯片CH376模塊設(shè)計
1.1.1 CH376硬件電路搭建
USB接口芯片CH376模塊硬件電路設(shè)計如圖2所示,單片機與CH376采用的是硬件總線8位并口連接方式。CH376通過8位被動并行接口的D0~D7、RD#、WR#、PCS#、A0直接連接到STC15F2K60S2單片機的系統(tǒng)總線上,其中D0~D7連接STC15F2K60S2的數(shù)據(jù)總線P0.0~P0.7引腳,RD#、WR#引腳與STC15F2K60S2的對應(yīng)引腳相連,INT#引腳連到STC15F2K60S2的外部中斷INT0上(采用中斷方式處理USB數(shù)據(jù)傳輸),PCS#連接STC15F2K60S2的P2.6引腳來控制CH376的使能,A0連接到STC15F2K60S2的P2.0引腳,因此,CH376命令寄存器的地址可選為BDF1H,數(shù)據(jù)寄存器的地址可選為BCF0H。
1.1.2 CH376軟件設(shè)計
系統(tǒng)需要將各路傳感器收集到的數(shù)據(jù)信息存入大容量的U盤中,CH376能讀寫大容量U盤,故可以在U盤中創(chuàng)建文件,將采集到的數(shù)據(jù)寫入該文件中,創(chuàng)建一個EXCEL文件用于存放采集到的數(shù)據(jù)。
軟件操作的具體步驟是:單片機首先發(fā)送CMD_SET_USB_MODE命令設(shè)置CH376工作在主機模式下,然后調(diào)用沁恒公司提供的FILE_SYS文件系統(tǒng)庫中的CH376DiskConnect函數(shù)等待U盤連接,U盤連接成功后,在進(jìn)行操作之前必須由單片機發(fā)送CMD_DISK_MOUNT進(jìn)行初始化,并檢測磁盤是否準(zhǔn)備就緒,確認(rèn)磁盤準(zhǔn)備就緒后,調(diào)用文件系統(tǒng)庫函數(shù)CH376 File Open打開磁盤中已經(jīng)創(chuàng)建好的文件。當(dāng)文件創(chuàng)建成功后,為方便向文件中添加數(shù)據(jù),還需要將該文件移動到U盤中所有已有文件的末尾??烧{(diào)用文件系統(tǒng)庫函數(shù)CH376ByteLocate設(shè)定參數(shù)為0xFFFF FFFF,即可移動該文件至所有文件之后,以上一切準(zhǔn)備就緒后就可以向文件中寫入數(shù)據(jù)了,最后要保存文件并更新文件長度,涉及到的文件庫函數(shù)是CH376 GetFileSize。在U盤中創(chuàng)建EXCEL文件的軟件流程圖如圖3所示。
1.2 以太網(wǎng)控制芯片ENC28J60模塊設(shè)計
1.2.1 ENC28J60硬件電路搭建
以太網(wǎng)控制芯片ENC28J60模塊硬件電路如圖4所示。單片機與ENC28J60采用SPI總線方式連接,由于STC15F2K60S2內(nèi)部集成了硬件SPI,為了提高網(wǎng)絡(luò)通信速率,采用硬件SPI方式驅(qū)動ENC28J60。STC15F2K60S2內(nèi)部與SPI總線驅(qū)動相關(guān)的寄存器有SPI控制寄存器SPCTL、SPI狀態(tài)寄存器SPSTAT、SPI數(shù)據(jù)寄存器SPDAT、SPI功能切換寄存器AUXR1。配置好相關(guān)寄存器后,將SPI接口的4個引腳(SCKL/P1.5、MISO/P1.4、MOSI/P1.3、SS/P1.2)分別與ENC28J60相應(yīng)引腳相連,以太網(wǎng)接口采用自帶網(wǎng)絡(luò)變壓器和網(wǎng)絡(luò)通信指示燈的專用網(wǎng)絡(luò)接口HR911105A。
1.2.2 EN028J60軟件設(shè)計及嵌入式μIP協(xié)議棧移植
(1)ENC28J60的驅(qū)動及網(wǎng)絡(luò)數(shù)據(jù)的收發(fā) ENC28J60的驅(qū)動程序主要分3部分:第一是配置相關(guān)寄存器,第二是芯片初始化,第三是收發(fā)數(shù)
據(jù)包,其中最核心的是收發(fā)數(shù)據(jù)包。在收發(fā)數(shù)據(jù)包時有以下幾點值得關(guān)注:首先ENC28J60具有一個接收過濾器,可以丟棄或接收具有組播、廣播或單播目標(biāo)地址的數(shù)據(jù)包;其次,在數(shù)據(jù)字段處,以太網(wǎng)數(shù)據(jù)字段的長度可以在0~1500字節(jié)之間變換,超過這一范圍的數(shù)據(jù)包是違反以太網(wǎng)標(biāo)準(zhǔn)的,將會被大多數(shù)以太網(wǎng)節(jié)點丟棄。
(2)嵌入式μIP協(xié)議棧移植
μIP是由瑞典計算機科學(xué)學(xué)院(網(wǎng)絡(luò)嵌入式系統(tǒng)小組)的Adam Dunkels開發(fā)的,是專門為8位和16位單片機設(shè)計的一個非常小的TCP/IP協(xié)議棧。μIP完全用C語言編寫,可以很方便地移植到各種不同結(jié)構(gòu)的單片機和操作系統(tǒng)上。μIP協(xié)議棧去掉了完整的TCP/IP協(xié)議中不常用的功能,簡化了通信流程,設(shè)計重點放在IP/TCP/ICMP/UDP/ARP這些網(wǎng)絡(luò)層和傳輸協(xié)議上,保證了其代碼的通用性和結(jié)構(gòu)的穩(wěn)定性,而且其占用資源非常少,協(xié)議棧代碼不到6 KB,RAM只占用幾百字節(jié)。在設(shè)計上μIP采用硬件處理層、協(xié)議棧層、應(yīng)用層共用一個全局緩沖區(qū),不存在數(shù)據(jù)拷貝問題,其發(fā)送和接收數(shù)據(jù)包都是依靠這個緩沖區(qū),極大地節(jié)省了空間和時間。另外μIP源代碼提供一套實例程序,包括Web服務(wù)器、Web客戶端、電子郵件發(fā)送、Telnet服務(wù)器、DNS主機名解析等。μIP協(xié)議棧與系統(tǒng)底層和高層應(yīng)用之間的關(guān)系如圖5所示。
μIP相當(dāng)于一個代碼庫,通過一系列的函數(shù)實現(xiàn)與底層硬件和高層應(yīng)用程序的通信,對于整個系統(tǒng)來說它的內(nèi)部協(xié)議組是透明的,從而增強了協(xié)議的通用性。從圖5可以看出μIP協(xié)議棧主要提供了3個函數(shù)供系統(tǒng)底層調(diào)用,即uip_init()、uip_input()和uip_periodic(),其與應(yīng)用程序的主要接口是UIP_APPCALL()。
移植μIP協(xié)議棧至8位單片機,關(guān)鍵步驟包括以下幾點:
①仔細(xì)閱讀μIP協(xié)議源碼,了解μIP主循環(huán)的代碼結(jié)構(gòu)。
根據(jù)實際使用的網(wǎng)卡芯片編寫驅(qū)動網(wǎng)卡函數(shù),比如本方案選用的網(wǎng)卡芯片為ENC28J60,則需根據(jù)相關(guān)數(shù)據(jù)手冊編寫驅(qū)動。
②使用單片機的一個定時器為μIP協(xié)議棧中的TCP和ARP作定時服務(wù)。
③根據(jù)需要修改配置文件uipopt.h/uip—config.h中本地IP地址、網(wǎng)關(guān)地址、MAC地址、全局緩沖區(qū)的大小、支持的最大連接數(shù)、偵聽數(shù)、ARP表大小等。
④根據(jù)實際應(yīng)用的需要修改、編寫UIP_APPCALL這個宏定義,如果應(yīng)用程序需要實現(xiàn)TCP服務(wù)器則將這個宏定義改為#“define UIP_APP CALL tcp_server_appcall”,并編寫具體的TCP應(yīng)用函數(shù);如果應(yīng)用程序需要實現(xiàn)Web服務(wù)器,則將這個宏定義改為“#define UIP_APPCALL httpd_appcall”,并編寫具體的Web服務(wù)器應(yīng)用函數(shù)。
(3)μiP協(xié)議的Web服務(wù)器的實現(xiàn)
基于UIP協(xié)議的Web服務(wù)器主程序采用中斷加輪詢的方式,輪詢有無網(wǎng)絡(luò)數(shù)據(jù)包輸入,如有則調(diào)用μIP的相關(guān)處理函數(shù),如無則檢測定時輪詢中斷是否發(fā)生。這里將STC15F2K60S2單片機的T1定時器設(shè)為μIP的定時輪詢計數(shù)器,在T1中斷中設(shè)置輪詢標(biāo)志,一旦主程序檢測到這一標(biāo)志,就調(diào)用μip_periodic()輪詢各連接。Web服務(wù)器首先打開80端口的監(jiān)聽,一旦有客戶機要求連上,μIP內(nèi)部會給它分配一個連接項等,收到客戶機IE瀏覽器發(fā)出的GET HTTP請求后,就會生成一幅新的網(wǎng)頁發(fā)給客戶機。老用戶關(guān)閉了瀏覽器,μIP會自動檢測到這一事件并且釋放掉這個連接項?;?mu;IP協(xié)議棧的Web服務(wù)器程序流程圖如圖6所示。
2 系統(tǒng)測試結(jié)果
為了驗證系統(tǒng)能否在測井過程中將傳感器收集到的海量數(shù)據(jù)存入U盤并實現(xiàn)互聯(lián)網(wǎng)遠(yuǎn)程訪問,采用RTC時鐘芯片、A/D轉(zhuǎn)換芯片以及LM75A溫度傳感器芯片,模擬測井過程中的各路傳感器進(jìn)行測試。系統(tǒng)上電后通過網(wǎng)線及路由器接入互聯(lián)網(wǎng),插上U盤至目標(biāo)板,打開PC機的IE瀏覽器,在地址欄輸入http://10.10.217.222,回車即可看到彈出一個新的界面(如圖7左側(cè)所示),單擊界面中的“開始采集”連接,可以看到目標(biāo)板上U盤指示燈不停閃爍,表示數(shù)據(jù)正在采集,一段時間過后單擊界面中的“停止采集”,即可看到U盤指示燈停止閃爍,表示數(shù)據(jù)采集結(jié)束,再次單擊“查看已采集的數(shù)據(jù)”連接,彈出一個新的界面顯示采集到的數(shù)據(jù)信息,如圖7右側(cè)所示。
結(jié)語
本文提出的海量測井?dāng)?shù)據(jù)的以太網(wǎng)訪問方案,彌補了傳統(tǒng)測井系統(tǒng)數(shù)據(jù)采集存儲容量不夠大、設(shè)備移動性不夠靈活等不足,使得一些工作在惡劣環(huán)境下的測井系統(tǒng)能在無人值守的條件下安全地進(jìn)行海量數(shù)據(jù)采集工作,避免了測井人員在惡劣環(huán)境中工作時的安全隱患,具有一定的實用價值。