摘 要:本文提出了一種在單片機(jī)系統(tǒng)中實(shí)施基于HTTP協(xié)議的數(shù)據(jù)采集的方案,利用嵌入式網(wǎng)絡(luò)模塊實(shí)現(xiàn)串口到以太網(wǎng)數(shù)據(jù)的轉(zhuǎn)換,使用采集板將數(shù)據(jù)封裝成HTTP包.該方案靈活方便,實(shí)現(xiàn)簡(jiǎn)單;采用分布式結(jié)構(gòu),采集效率高,可適用于大量數(shù)據(jù)的采集,而且可以方便擴(kuò)展為基于Internet的遠(yuǎn)程數(shù)據(jù)采集.
關(guān)鍵詞:超文本傳輸協(xié)議;嵌入式網(wǎng)絡(luò)模塊;以太網(wǎng);數(shù)據(jù)采集;因特網(wǎng)
1 前言
隨著工業(yè)以太網(wǎng)的發(fā)展,由于傳輸速度、傳輸可靠性及可擴(kuò)展性等綜合性能方面的優(yōu)越性,越來(lái)越多的數(shù)據(jù)采集系統(tǒng)都是基于以太網(wǎng)接口,并且越來(lái)越多的儀器儀表設(shè)備也提供了以太網(wǎng)接口.但是很多企業(yè)都有早期投入的設(shè)備儀表,一般使用串口進(jìn)行數(shù)據(jù)通信,因此需要一種簡(jiǎn)單、高效、易于擴(kuò)充的集成方案,實(shí)現(xiàn)對(duì)原有設(shè)備儀表的數(shù)據(jù)采集,并且可以方便的集成到現(xiàn)有的以太網(wǎng)工業(yè)控制系統(tǒng)中.本文提出一種數(shù)據(jù)采集方案,除了滿足前面要求外,由于其采用HTTP協(xié)議,可以方便擴(kuò)展為基于Internet的遠(yuǎn)程數(shù)據(jù)采集.HTTP協(xié)議可以利用嵌入式系統(tǒng)(WinCE、Linux等)基于其自帶的TCP/IP協(xié)議棧實(shí)現(xiàn)或者直接使用嵌入式Web服務(wù)器[1~4],在計(jì)算機(jī)系統(tǒng)中也可以利用高級(jí)語(yǔ)言直接使用Web客戶端使用HTTP協(xié)議或者利用Winsock網(wǎng)絡(luò)編程,實(shí)現(xiàn)基于HTTP的數(shù)據(jù)交互,但都會(huì)增加系統(tǒng)的開(kāi)發(fā)成本,本文提出一種基于嵌入式網(wǎng)絡(luò)模塊在單片機(jī)系統(tǒng)中實(shí)現(xiàn)簡(jiǎn)單HTTP協(xié)議的方法,并基于此方法構(gòu)建數(shù)據(jù)采集方案.
2 系統(tǒng)結(jié)構(gòu)
HTTP協(xié)議是一種基于TCP實(shí)現(xiàn)的應(yīng)用層協(xié)議,它是因特網(wǎng)可靠的交換數(shù)據(jù)的重要基礎(chǔ).如果要實(shí)現(xiàn)HTTP協(xié)議 ,必須以TCP/IP協(xié)議棧為基礎(chǔ),利用嵌入式網(wǎng)絡(luò)模塊即可方便的實(shí)現(xiàn)TCP/IP協(xié)議棧的功能.圖1為一個(gè)利用嵌入式網(wǎng)絡(luò)模塊實(shí)現(xiàn)的基于HTTP協(xié)議的數(shù)據(jù)采集方案.
圖1 系統(tǒng)結(jié)構(gòu)
圖1中,最關(guān)鍵部分是采集板和網(wǎng)絡(luò)模塊.當(dāng)今儀器儀表最常用的通訊接口是485串行接口,采集板和儀表設(shè)備一般通過(guò)485總線連接,采集板利用單片機(jī)開(kāi)發(fā),實(shí)現(xiàn)下位機(jī)和設(shè)備儀表的通信,采用主從方式采集所需要的數(shù)據(jù),再通過(guò)485總線發(fā)送給網(wǎng)絡(luò)模塊,網(wǎng)絡(luò)模塊收到采集板數(shù)據(jù)發(fā)出的串行數(shù)據(jù),利用內(nèi)嵌的TCP/IP協(xié)議棧實(shí)現(xiàn)串行數(shù)據(jù)到以太網(wǎng)數(shù)據(jù)的轉(zhuǎn)換,網(wǎng)絡(luò)模塊通過(guò)網(wǎng)線、交換機(jī)和采集服務(wù)器連接.采集板是實(shí)現(xiàn)HTTP應(yīng)用層協(xié)議的地方,只要采集板發(fā)出的數(shù)據(jù)符合HTTP協(xié)議,經(jīng)由網(wǎng)絡(luò)模塊轉(zhuǎn)化后成為合法的HTTP請(qǐng)求,則Web服務(wù)器可使用任何的服務(wù)器端動(dòng)態(tài)網(wǎng)頁(yè)技術(shù)(CGI、ASP、JSP、PHP、ASP.Net等)實(shí)現(xiàn)數(shù)據(jù)的處理和保存.
3 系統(tǒng)實(shí)現(xiàn)
3.1 采集板
采集板和儀表進(jìn)行主從通訊采集數(shù)據(jù)以外,最主要的任務(wù)就是把采集的數(shù)據(jù)封裝為HTTP協(xié)議的數(shù)據(jù)包,也就是要在單片機(jī)中實(shí)現(xiàn)簡(jiǎn)化的HTTP協(xié)議,能夠完成基本的數(shù)據(jù)交互功能即可.在國(guó)際標(biāo)準(zhǔn)中,有兩個(gè)HTTP協(xié)議的標(biāo)準(zhǔn)文檔:RFC1945和RFC2616[5].這兩個(gè)文檔分別描述了HTTP/1.0和HTTP/1.1的實(shí)現(xiàn)標(biāo)準(zhǔn).這兩個(gè)版本的HTTP協(xié)議最大區(qū)別在于前者不支持保持連接,規(guī)定每次的HTTP請(qǐng)求和響應(yīng)后都要關(guān)閉TCP連接,而后者支持持久連接,這意味著可以打開(kāi)一次TCP連接進(jìn)行多次請(qǐng)求/響應(yīng),大大提高了性能.為了提高性能,本文中將實(shí)現(xiàn)基本的HTTP1.1協(xié)議.經(jīng)過(guò)分析研究,找出了一種比較簡(jiǎn)單且有效的實(shí)現(xiàn).下面通過(guò) 一個(gè)具體例子說(shuō)明實(shí)現(xiàn)的HTTP協(xié)議包格式.
GET /com2http/test.aspx HTTP/1.1CRLF
Host: 127.0.0.1CRLF
Content-Length: 86CRLF
Connection: Keep-AliveCRLF
CRLF
000000C8420000C8420000C8420000C8420000C8420000C8420000C8420000C8420000C8420000C84251AD
通過(guò)工具截獲的數(shù)據(jù)以16進(jìn)制顯示如下:
00000000:47 45 54 20 2F 63 6F 6D 32 68 74 74 70 2F 74 65 GET /com2http/te
00000010:73 74 2E 61 73 70 78 20 48 54 54 50 2F 31 2E 31 st.aspx HTTP/1.1
00000020:0D 0A 48 6F 73 74 3A 20 31 32 37 2E 30 2E 30 2E ..Host: 127.0.0.
00000030:31 0D 0A 43 6F 6E 74 65 6E 74 2D 4C 65 6E 67 74 1..Content-Lengt
00000040:68 3A 20 38 36 0D 0A 43 6F 6E 6E 65 63 74 69 6F h: 86..Connectio
00000050:6E 3A 20 4B 65 65 70 2D 41 6C 69 76 65 0D 0A 0D n: Keep-Alive...
00000060:0A 30 30 30 30 30 30 43 38 34 32 30 30 30 30 43 .000000C8420000C
00000070:38 34 32 30 30 30 30 43 38 34 32 30 30 30 30 43 8420000C8420000C
00000080:38 34 32 30 30 30 30 43 38 34 32 30 30 30 30 43 8420000C8420000C
00000090:38 34 32 30 30 30 30 43 38 34 32 30 30 30 30 43 8420000C8420000C
000000A0:38 34 32 30 30 30 30 43 38 34 32 30 30 30 30 43 8420000C8420000C
000000B0:38 34 32 35 31 41 44 84251AD
上面顯示的便是一個(gè)合法的HTTP協(xié)議的數(shù)據(jù)包實(shí)例,從0x61開(kāi)始為真正的有效數(shù)據(jù)信息,數(shù)據(jù)包括一個(gè)字節(jié)的采集站地址,本例中為“00”,10個(gè)符合IEEE-754標(biāo)準(zhǔn)的單精度四字節(jié)浮點(diǎn)數(shù),本例中為10個(gè)100.0(16進(jìn)制表示為0000C842),和2個(gè)字節(jié)的CRC16的循環(huán)檢驗(yàn)碼,本例中為“51AD”.HTTP協(xié)議傳送的數(shù)據(jù)一般都是文本格式,所以總共43字節(jié)二進(jìn)制數(shù)據(jù)經(jīng)過(guò)轉(zhuǎn)化成為86字節(jié)的16進(jìn)制字符串?dāng)?shù)據(jù).在HTTP包的封裝中,除了數(shù)據(jù)域以外,0x4開(kāi)始的“/com2http/test.aspx”和0x43開(kāi)始86會(huì)根據(jù)實(shí)際需要在下位機(jī)中由程序自動(dòng)設(shè)置,分別表示處理該數(shù)據(jù)的處理頁(yè)面和提交的有效數(shù)據(jù)字節(jié)數(shù).由此可以看出,只要在有效數(shù)據(jù)的前面加上HTTP請(qǐng)求頭,就可以實(shí)現(xiàn)簡(jiǎn)單的HTTP1.1協(xié)議,在單片機(jī)系統(tǒng)中實(shí)現(xiàn)這種功能和寫(xiě)普通的串口發(fā)送程序一樣簡(jiǎn)單.
3.2 網(wǎng)絡(luò)模塊
該模塊在該系統(tǒng)中起著承上啟下的作用,實(shí)現(xiàn)了TCP/IP協(xié)議棧,完成把485線上串行傳送的HTTP包數(shù)據(jù)轉(zhuǎn)化為在交換式以太網(wǎng)中的以太網(wǎng)幀,真正向Web服務(wù)器發(fā)出HTTP請(qǐng)求.
3.3 Web Server And Real Database
網(wǎng)絡(luò)模塊轉(zhuǎn)化后的HTTP請(qǐng)求最終到達(dá)Web服務(wù)器,可用任何服務(wù)器端動(dòng)態(tài)網(wǎng)頁(yè)技術(shù)實(shí)現(xiàn)數(shù)據(jù)的處理和保存,實(shí)驗(yàn)方案采用微軟最新的動(dòng)態(tài)網(wǎng)頁(yè)技術(shù)ASP.Net.通過(guò)編寫(xiě)程序獲取有效數(shù)據(jù),轉(zhuǎn)化為原始二進(jìn)制數(shù)據(jù)形式,驗(yàn)證校驗(yàn)碼,如果無(wú)誤根據(jù)數(shù)據(jù)的對(duì)應(yīng)寫(xiě)入實(shí)時(shí)數(shù)據(jù)庫(kù),如果實(shí)時(shí)性要求不高以及數(shù)據(jù)存儲(chǔ)量不大,可以使用ACCESS數(shù)據(jù)庫(kù),不然可以使用專用的數(shù)據(jù)庫(kù)服務(wù)器,如Oracle和SQL Server.
4 優(yōu)點(diǎn)
本文中數(shù)據(jù)采集方案有以下優(yōu)點(diǎn):
?。?)可以很方便的集成現(xiàn)有設(shè)備和儀表的數(shù)據(jù)采集.只要知道儀表設(shè)備的通訊協(xié)議,在下位機(jī)實(shí)現(xiàn)數(shù)據(jù)通訊,把采集到的數(shù)據(jù)封裝為HTTP協(xié)議包通過(guò)串口發(fā)出即可.
?。?)采用工業(yè)交換以太網(wǎng),基于HTTP協(xié)議,同時(shí)滿足局域和遠(yuǎn)程采集的需要.可以把該系統(tǒng)連至Internet,Web Server And Real Database和采集系統(tǒng)不在同一地理位置,而且服務(wù)器可以同時(shí)處理多個(gè)不同地理位置的數(shù)據(jù),方便實(shí)現(xiàn)數(shù)據(jù)集中,能更好的管理和使用數(shù)據(jù).
?。?)方便維護(hù)和升級(jí),方便增加采樣點(diǎn).可以根據(jù)需要隨意增加下位機(jī),做到需要幾個(gè)模塊調(diào)試增加幾個(gè)模塊.
?。?)不同于傳統(tǒng)的專用采集服務(wù)器采集數(shù)據(jù)模式,上位機(jī)服務(wù)器的功能由Web服務(wù)提供,不需要編寫(xiě)專門(mén)的數(shù)據(jù)接收程序和采集程序,只要編寫(xiě)完成數(shù)據(jù)的處理和保存的代碼.真正同儀表的通訊由下位機(jī)完成,形成分布式數(shù)據(jù)采集,Web服務(wù)是多線程體系結(jié)構(gòu),可并發(fā)處理多個(gè)下位機(jī)模塊發(fā)送的數(shù)據(jù),使得整個(gè)系統(tǒng)支持更多的數(shù)據(jù)點(diǎn)采集,提高整個(gè)系統(tǒng)的采集效率.
5 實(shí)驗(yàn)
?。?)下位機(jī)實(shí)現(xiàn):同普通的下位機(jī)系統(tǒng)設(shè)計(jì)和實(shí)現(xiàn),只是在數(shù)據(jù)發(fā)送時(shí)需要加上HTTP協(xié)議包的包頭,可參考3.1.
?。?)網(wǎng)絡(luò)模塊:實(shí)驗(yàn)選用了廣州周立功單片機(jī)發(fā)展有限公司開(kāi)發(fā)的一款嵌入式網(wǎng)絡(luò)模塊-ZNE-100T,它內(nèi)部集成了TCP/IP 協(xié)議棧,利用它可以輕松完成嵌入式設(shè)備的網(wǎng)絡(luò)功能,另外為了測(cè)試方便直接使用了ZNE-100T的評(píng)估板.通過(guò)周立功公司提供的配置軟件可以輕松設(shè)置網(wǎng)絡(luò)模塊的參數(shù),需要設(shè)置的參數(shù)包括IP地址、子網(wǎng)掩碼、網(wǎng)關(guān)、串口的波特率設(shè)置、端口工作模式、目標(biāo)IP 地址和目標(biāo)端口等,特別說(shuō)明的是端口工作模式,由于HTTP協(xié)議是基于TCP的,所以該方案中模式設(shè)為T(mén)CP Client模式,目標(biāo)端口一般默認(rèn)設(shè)置為80.
?。?)Web服務(wù)器使用聯(lián)想萬(wàn)全520服務(wù)器,Windows Server2003操作系統(tǒng),IIS6.0,數(shù)據(jù)庫(kù)采用SQL Server 2005,使用ASP.Net技術(shù)編程實(shí)現(xiàn)數(shù)據(jù)處理和保存. 下面給出用C#實(shí)現(xiàn)的數(shù)據(jù)處理核心代碼實(shí)例:
byte []a;
a=this.Request.BinaryRead ( this.Request.ContentLength) ;//獲取提交的數(shù)據(jù)
System.Text.ASCIIEncoding ascii=new System.Text.ASCIIEncoding ();
string c=ascii.GetString (a);
if (!CheckValidChr (c))//檢查是否有非法字符
return ;
byte []b=new byte [a.Length /2];
for (int i=0;i
b[i/2]=Convert.ToByte (c.Substring (i,2) ,16);
if (!CheckCRC(b))//驗(yàn)證CRC
return ;
for (int i=5;i
{
if ( (i-1) % 4 ==0 )
?。?
float t=BitConverter.ToSingle (b,i-4);//把字節(jié)數(shù)據(jù)轉(zhuǎn)化為浮點(diǎn)數(shù)
SaveData(b[0],(i-1)/4,t);//根據(jù)下位機(jī)站地址以及數(shù)據(jù)位置保存數(shù)據(jù)
?。?
?。?
6 結(jié)束語(yǔ)
經(jīng)過(guò)實(shí)驗(yàn)證明,基于本文方案可以快速有效的部署一個(gè)數(shù)據(jù)采集系統(tǒng),比傳統(tǒng)的串口數(shù)據(jù)采集方法有很多優(yōu)越性,擴(kuò)展維護(hù)方便,由于上位機(jī)基于動(dòng)態(tài)網(wǎng)頁(yè)技術(shù),只需編寫(xiě)數(shù)據(jù)處理和保存程序,使得系統(tǒng)的開(kāi)發(fā)工作主要放在下位機(jī)和儀表的通信上.需要說(shuō)明的是,該方案中使用ZNE-100T評(píng)估板和下位機(jī)通過(guò)485串行總線相連,下位機(jī)向網(wǎng)絡(luò)模塊發(fā)送的有效數(shù)據(jù)需要加入CRC校驗(yàn),防止在485總線上數(shù)據(jù)出現(xiàn)錯(cuò)誤引起Web服務(wù)器采集到錯(cuò)誤數(shù)據(jù).另外一個(gè)解決方案是把ZNE-100T模塊集成在下位機(jī),這樣可以取消校驗(yàn).不過(guò)前者有個(gè)優(yōu)點(diǎn)就是如果下位機(jī)距離交換機(jī)很遠(yuǎn),可以近距離用網(wǎng)線把交換機(jī)和網(wǎng)絡(luò)模塊連接,用485線把網(wǎng)絡(luò)模塊和下位機(jī)連接,實(shí)現(xiàn)了長(zhǎng)距離數(shù)據(jù)傳輸.由此可出看出,利用嵌入式網(wǎng)絡(luò)模塊實(shí)現(xiàn)基于HTTP協(xié)議的數(shù)據(jù)采集系統(tǒng)確是一個(gè)非常靈活的方案.
參考文獻(xiàn)
[1] 楊健.基于嵌入式系統(tǒng)的數(shù)據(jù)采集系統(tǒng)網(wǎng)絡(luò)接入的設(shè)計(jì)與實(shí)現(xiàn)[J].儀器儀表學(xué)報(bào),26(8)增刊:290-292.
[2] 劉凱.基于嵌入式Linux系統(tǒng)的遠(yuǎn)程數(shù)據(jù)采集[J].計(jì)算機(jī)應(yīng)用,26(B06):264-265.
[3] 游雪峰. 以太網(wǎng)分布式數(shù)據(jù)采集同步和實(shí)時(shí)傳輸研究[J].儀器儀表學(xué)報(bào),27(4):384-387.
[4] 張曦煌. 基于嵌入式Web的遠(yuǎn)程儀表接口[J].微計(jì)算機(jī)信息,2006(01S): 147-149.
[5] Internet RFC/STD/FYI/BCP Archives. RFC 2616 - Hypertext Transfer Protocol —— HTTP/1.1[EB/OL]. http://www.faqs.org/rfcs/rfc2616.html.
[6] Harvy M.Deitel.C#大學(xué)教程[M].電子工業(yè)出版社,2004.1.