本文提出了一種在單片機系統中實施基于HTTP協議的數據采集的方案,利用嵌入式網絡模塊實現串口到以太網數據的轉換,使用采集板將數據封裝成HTTP包。
該方案靈活方便,實現簡單;采用分布式結構,采集效率高,可適用于大量數據的采集,而且可以方便擴展為基于Internet的遠程數據采集。
1、前言
隨著工業以太網的發展,由于傳輸速度、傳輸可靠性及可擴展性等綜合性能方面的優越性,越來越多的數據采集系統都是基于以太網接口,并且越來越多的儀器儀表設備也提供了以太網接口。但是很多企業都有早期投入的設備儀表,一般使用串口進行數據通信,因此需要一種簡單、高效、易于擴充的集成方案,實現對原有設備儀表的數據采集,并且可以方便的集成到現有的以太網工業控制系統中。本文提出一種數據采集方案,除了滿足前面要求外,由于其采用HTTP協議,可以方便擴展為基于Internet的遠程數據采集.HTTP協議可以利用嵌入式系統(WinCE、Linux等)基于其自帶的TCP/IP協議棧實現或者直接使用嵌入式Web服務器,在計算機系統中也可以利用高級語言直接使用Web客戶端使用HTTP協議或者利用Winsock網絡編程,實現基于HTTP的數據交互,但都會增加系統的開發成本,本文提出一種基于嵌入式網絡模塊在單片機系統中實現簡單HTTP協議的方法,并基于此方法構建數據采集方案。
2、系統結構
HTTP協議是一種基于TCP實現的應用層協議,它是因特網可靠的交換數據的重要基礎。如果要實現HTTP協議,必須以TCP/IP協議棧為基礎,利用嵌入式網絡模塊即可方便的實現TCP/IP協議棧的功能。圖1為一個利用嵌入式網絡模塊實現的基于HTTP協議的數據采集方案。
圖1中,最關鍵部分是采集板和網絡模塊。當今儀器儀表最常用的通訊接口是485串行接口,采集板和儀表設備一般通過485總線連接,采集板利用單片機開發,實現下位機和設備儀表的通信,采用主從方式采集所需要的數據,再通過485總線發送給網絡模塊,網絡模塊收到采集板數據發出的串行數據,利用內嵌的TCP/IP協議棧實現串行數據到以太網數據的轉換,網絡模塊通過網線、交換機和采集服務器連接。采集板是實現HTTP應用層協議的地方,只要采集板發出的數據符合HTTP協議,經由網絡模塊轉化后成為合法的HTTP請求,則Web服務器可使用任何的服務器端動態網頁技術(CGI、ASP、JSP、PHP、ASP.Net等)實現數據的處理和保存。
3.1 采集板
采集板和儀表進行主從通訊采集數據以外,最主要的任務就是把采集的數據封裝為HTTP協議的數據包,也就是要在單片機中實現簡化的HTTP協議,能夠完成基本的數據交互功能即可。在國際標準中,有兩個HTTP協議的標準文檔:RFC1945和RFC2616。這兩個文檔分別描述了HTTP/1.0和HTTP/1.1的實現標準。這兩個版本的HTTP協議最大區別在于前者不支持保持連接,規定每次的HTTP請求和響應后都要關閉TCP連接,而后者支持持久連接,這意味著可以打開一次TCP連接進行多次請求/響應,大大提高了性能。為了提高性能,本文中將實現基本的HTTP1.1協議。經過分析研究,找出了一種比較簡單且有效的實現。下面通過一個具體例子說明實現的HTTP協議包格式。
GET /com2http/test.aspx HTTP/1.1CRLF
Host: 127.0.0.1CRLF
Content-Length: 86CRLF
Connection: Keep-AliveCRLF
CRLF
000000C8420000C8420000C8420000C8420000C8420000C8420000C842000
0C8420000C8420000C84251AD
通過工具截獲的數據以16進制顯示如下:
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 438420000C8420000C
000000B0:38 34 32 35 31 41 44 84251AD
上面顯示的便是一個合法的HTTP協議的數據包實例,從0x61開始為真正的有效數據信息,數據包括一個字節的采集站地址,本例中為“00”,10個符合IEEE-754標準的單精度四字節浮點數,本例中為10個100.0(16進制表示為0000C842),和2個字節的CRC16的循環檢驗碼,本例中為“51AD”.HTTP協議傳送的數據一般都是文本格式,所以總共43字節二進制數據經過轉化成為86字節的16進制字符串數據。在HTTP包的封裝中,除了數據域以外,0x4開始的“/com2http/test.aspx”和0x43開始86會根據實際需要在下位機中由程序自動設置,分別表示處理該數據的處理頁面和提交的有效數據字節數。由此可以看出,只要在有效數據的前面加上HTTP請求頭,就可以實現簡單的HTTP1.1協議,在單片機系統中實現這種功能和寫普通的串口發送程序一樣簡單。
3.2 網絡模塊
該模塊在該系統中起著承上啟下的作用,實現了TCP/IP協議棧,完成把485線上串行傳送的HTTP包數據轉化為在交換式以太網中的以太網幀,真正向Web服務器發出HTTP請求。
3.3 Web Server And Real Database
網絡模塊轉化后的HTTP請求最終到達Web服務器,可用任何服務器端動態網頁技術實現數據的處理和保存,實驗方案采用微軟最新的動態網頁技術ASP.Net.通過編寫程序獲取有效數據,轉化為原始二進制數據形式,驗證校驗碼,如果無誤根據數據的對應寫入實時數據庫,如果實時性要求不高以及數據存儲量不大,可以使用ACCESS數據庫,不然可以使用專用的數據庫服務器,如Oracle和SQL Server.
4、優點
本文中數據采集方案有以下優點:
(1)可以很方便的集成現有設備和儀表的數據采集。只要知道儀表設備的通訊協議,在下位機實現數據通訊,把采集到的數據封裝為HTTP協議包通過串口發出即可。
(2)采用工業交換以太網,基于HTTP協議,同時滿足局域和遠程采集的需要。可以把該系統連至Internet,Web Server And Real Database和采集系統不在同一地理位置,而且服務器可以同時處理多個不同地理位置的數據,方便實現數據集中,能更好的管理和使用數據。
(3)方便維護和升級,方便增加采樣點。可以根據需要隨意增加下位機,做到需要幾個模塊調試增加幾個模塊。
(4)不同于傳統的專用采集服務器采集數據模式,上位機服務器的功能由Web服務提供,不需要編寫專門的數據接收程序和采集程序,只要編寫完成數據的處理和保存的代碼。真正同儀表的通訊由下位機完成,形成分布式數據采集,Web服務是多線程體系結構,可并發處理多個下位機模塊發送的數據,使得整個系統支持更多的數據點采集,提高整個系統的采集效率。
5、實驗
(1)下位機實現:同普通的下位機系統設計和實現,只是在數據發送時需要加上HTTP協議包的包頭,可參考3.1.
(2)網絡模塊:實驗選用了廣州周立功單片機發展有限公司開發的一款嵌入式網絡模塊-ZNE-100T,它內部集成了TCP/IP 協議棧,利用它可以輕松完成嵌入式設備的網絡功能,另外為了測試方便直接使用了ZNE-100T的評估板。通過周立功公司提供的配置軟件可以輕松設置網絡模塊的參數,需要設置的參數包括IP地址、子網掩碼、網關、串口的波特率設置、端口工作模式、目標IP 地址和目標端口等,特別說明的是端口工作模式,由于HTTP協議是基于TCP的,所以該方案中模式設為TCP Client模式,目標端口一般默認設置為80.
(3)Web服務器使用聯想萬全520服務器,Windows Server2003操作系統,IIS6.0,數據庫采用SQL Server 2005,使用ASP.Net技術編程實現數據處理和保存。 下面給出用C#實現的數據處理核心代碼實例:
byte []a;
a=this.Request.BinaryRead ( this.Request.ContentLength) ;//獲取提交的數據
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))//驗證CRC
return ;
for (int i=5;i
{
if ( (i-1) % 4 ==0 )
{
float t=BitConverter.ToSingle (b,i-4);//把字節數據轉化為浮點數
SaveData(b[0],(i-1)/4,t);//根據下位機站地址以及數據位置保存數據
}
}
6、結束語
經過實驗證明,基于本文方案可以快速有效的部署一個數據采集系統,比傳統的串口數據采集方法有很多優越性,擴展維護方便,由于上位機基于動態網頁技術,只需編寫數據處理和保存程序,使得系統的開發工作主要放在下位機和儀表的通信上。需要說明的是,該方案中使用ZNE-100T評估板和下位機通過485串行總線相連,下位機向網絡模塊發送的有效數據需要加入CRC校驗,防止在485總線上數據出現錯誤引起Web服務器采集到錯誤數據。另外一個解決方案是把ZNE-100T模塊集成在下位機,這樣可以取消校驗。不過前者有個優點就是如果下位機距離交換機很遠,可以近距離用網線把交換機和網絡模塊連接,用485線把網絡模塊和下位機連接,實現了長距離數據傳輸。由此可出看出,利用嵌入式網絡模塊實現基于HTTP協議的數據采集系統確是一個非常靈活的方案。
責任編輯:gt
評論
查看更多