基於ARM高速數據采集遠程監控係統的應用
薛豔等
摘要: 簡要介紹了TCP/IP協議,給出了基於北京ARM開發板 嵌入式高速數據采集裝置的遠程監控係統的實現方案。係統以下位機作為客戶端,在A~f91RM9200和嵌入式Linux搭建的軟硬件平台上運行;將上位機作為服務器端,用VB6.0開發監控平台軟件;兩者通過TCP/IP實現了采集數據和控製命令的傳輸以及服務器監控模式。
O 引言
隨著信息化的不斷發展,在工業自動化、電力設備、通信管理、智能終端、智能小區等領域,對數據采集的實時性、kekaoxingdeyaoqiuyebuduanditigao。yiwangchuantongdedanpianjijiacaijikadeshujucaijizhuangzhiyijingbunengmanzurenmenshiyongdeyaoqiu。suizhecaijikadecaijipinlvbuduanditisheng,qisuoshupingtaidegongzuopinlvyeyinggenshangshidaidebufa。tongshi,zaimouxieqingkuangxia,zhuangzhidecaokongrenyuanbukenengdaogongzuoxianchangquzhixing,suoyiyoubiyaoduicaijizhuangzhijinxingyuanchengjianchahekongzhi。zaigezhongshebeidetongxinfangshizhong,youyuyitaiwangjuyousudukuai、通用性好、擴展性強等優點,已13漸成為設備之間進行通信的主要方式。本文提出了基於ARM的(de)高(gao)速(su)數(shu)據(ju)采(cai)集(ji)裝(zhuang)置(zhi)遠(yuan)程(cheng)監(jian)控(kong)係(xi)統(tong),在(zai)實(shi)現(xian)對(dui)數(shu)據(ju)的(de)高(gao)速(su)采(cai)集(ji)的(de)同(tong)時(shi),能(neng)保(bao)證(zheng)數(shu)據(ju)的(de)可(ke)靠(kao)性(xing)和(he)實(shi)時(shi)性(xing),並(bing)對(dui)各(ge)幀(zhen)數(shu)據(ju)嵌(qian)入(ru)時(shi)間(jian)標(biao)誌(zhi)為(wei)後(hou)續(xu)數(shu)據(ju)處(chu)理(li)做(zuo)好(hao)準(zhun)備(bei),最(zui)後(hou)能(neng)將(jiang)數(shu)據(ju)及(ji)時(shi)準(zhun)確(que)地(di)存(cun)儲(chu)到(dao)移(yi)動(dong)存(cun)儲(chu)設(she)備(bei)和(he)服(fu)務(wu)器(qi)上(shang)。該(gai)裝(zhuang)置(zhi)包(bao)括(kuo)現(xian)場(chang)監(jian)控(kong)模(mo)式(shi)和(he)服(fu)務(wu)器(qi)監(jian)控(kong)模(mo)式(shi)。
1 係統簡介
本裝置由硬件和軟件兩部分組成,如圖1所示。係統硬件由高速數據采集平台和采集模塊構成。采集模塊根據設計要求,采用DMM一32一AT采集板。采集平台采用ATMEL公司A791RM9200作為主控芯片,附帶16 kB的SDRAM和128 kB的ROM。該芯片融合了ARM920T ARM Thumb處理器,當工作頻率為180 MHz時性能高達200 MIPS。帶有10/100 MB Base―T型以太網卡接口,USB 2.0全速(12 Mbps)主機/設備接口。內含內存管理單元MMU,含有調試通道的內部仿真器,便於開發調試。由於AT91RM9200具有功能全、功耗低和工業級等優點,可以使係統能運用到各種環境中。
係統的下位機軟件選擇嵌入式Linux操作係統。嵌入式Linux是將日益流行的Linux操cao作zuo係xi統tong進jin行xing裁cai剪jian修xiu改gai,使shi之zhi能neng在zai嵌qian入ru式shi計ji算suan機ji係xi統tong運yun行xing的de一yi種zhong操cao作zuo係xi統tong,它ta既ji有you無wu限xian的de開kai放fang源yuan代dai碼ma資zi源yuan,又you有you嵌qian人ren式shi操cao作zuo係xi統tong的de特te性xing。通tong過guo對dui內nei核he的de重zhong新xin配pei置zhi、編譯,即可將其移植到Aqgl RM9200中;再建立BootLoader和文件係統,形成基於ARM的嵌入式Linux操作係統,最後在此平台上開發運用程序,實現裝置的各個功能。
2 TCP/IP協議
在因特網上,TCP/IP協議每時每刻保證了數據的準確傳輸。參考開放係統互連(OSI)模型,TCP/IP通常采用一種簡化的四層模型,分別為:
① 應用層。網絡應用層要有一個定義清晰的會話過程,如通常所說的Http、Ftp、Telnet等。在本係統中,下位機係統傳遞來自Ethernet和數據終端的數據,應用層隻對大的數據報進行打包拆包處理。
② 傳輸層。傳輸層讓網絡程序通過明確定義的通道及某些特性獲取數據,如定義網絡連接的端口號等,實現該層協議的傳輸控製協議TCP和用戶數據協議UDP。TCP服務提供了數據流傳輸、可靠性、有效流控製、全雙工操作和多路複用技術等,在本係統中使用TCP數據報協議。
③ 網絡層。網絡層讓信息可以發送到相鄰的TCP/IP網絡上的任一主機上,IP協議就是該層傳送數據的機製。同時建立網絡間的互連,提供ARP地址解析協議,從而實現從IP地址到數據鏈路物理地址的映像。
④ 鏈路層。由控製同一物理網絡上的不同機器間數據傳送的底層協議組成,實現這一層的協議並屬於TCP/IP協議組。在本係統中這部分功能由ARM控製網卡芯片DM9161E實現。
在本係統中,利用TCP/IP協議中的TCP(傳輸控製協議)、IP(網絡報文協議)、ARP(地址解析協議)及簡單的應用層協議成功地實現了ARM裝置和服務端的網絡互聯。既提高了數據傳輸的速度,又保證了數據傳輸的正確性,同時也擴展了數據傳輸的有效半徑。
3 下位機的通信實現
下位機作為客戶端,它和服務器的TCP/IP通信是通過對套接字編程實現的。套接字是網絡通信的基本操作單元,最早是作為BSD規範提出來的,現已成為Linux操作係統下TCP/IP網絡編程標準。套接字提供了不同主機間進程雙向通信的端點,這些進程在通信前各自建立一個Socket,並通過對Socket的 寫操作實現網絡通信功能。下文將討論的Winsock也是一個用於Windows係列操作係統的Sockets版本 。
在Linux提供的3種套接字中,本文選擇流式套接字。流式套接字是最常用的套接字類型,其傳輸特點為:麵向鏈接、無差錯、發送先後順序一致、包長度不限和非重複的網絡信息包。TCP/IP協議簇中的TCP協議使用此類接口。下位機與服務器通信實現如圖2所示。
① Socket()函數:用於創建一個套接字描述符。
#include
#include
Socket
― ID=socket(AF_INET,SOCK_STREAM,0);
ff PF―INET OR AF―INET Intemet IP Protocal SOCK―STREAM選擇流式套接字
② Connect()函數:用於與遠端服務器建立一個TCP連接請求。
Status=connect(Socket―ID,(struc sockaddr})&Server―Addr,sizeof(struct sockaddr));
∥ 一定要指定服務器的IP地址和端口號,可帶參數運行程序時指定,也有默認的lP和端口號
if(status!= 一1)∥ 一1:連接過程出錯
{. 8943; ..}
③ Write()函數:從套接字緩衝區寫數據。
int Net― Send― SysConfig(int Conn―ID,char Cmdname)
∥向服務器反饋工作狀態即執行服務器下達的命令情況
∥Conn―ID為已經建立的套接字描述符
{
status=write(Conn―ID,sendbuff,len);
∥向服務器發送信息
}
④ Read()函數:從套接字緩衝區讀取數據
int Receive_ Command(int Conn―ID)
{ 8943;
return len=read(Conn―ID,NetBuf,REC―BUFF_SIZE);
∥成功返回實際收到的字節總數,出錯返回一1
}
⑤ Close()函數:用於關閉一個套接字描述符。
close(Socket―ID); //關閉連接下位機的開發都是在Linux環境下用交叉編譯器ARM.Linux―gcc編譯通過。
4 上位機的通信實現
服務器監控軟件是用Visual Basic 6.0來編寫的。在Visual Basic(以下簡稱VB)中,進行網絡通信開發是非常方便的。VB除了提供豐富的控件外,還提供了各種API來進行更為高級的運用程序的開發。本裝置通過Winsock控件進行網絡開發。Winsock控件對用戶是不可見的,它提供了訪問TCP和UDP網絡服務的方便途徑。在編寫客戶或服務器運用程序時,不必了解TCP的細節或低級的Win―sock API。通過設置控件的屬性並調用其方法就可連接到一個遠程客戶/服務器端,並且雙向交換數據。
在本係統中作為服務器的運用軟件,在Winsock控件的屬性設置上要注意:
① Protocol屬性。返回或設置Winsock控件所使用的協議(TCP或UDP)。
UDPFrmMain.Winsock― Server.Protocol:sckTCPProtocol
∥選擇TCP協議,提高數據傳輸的可靠性
② LocalPort屬性。返回或設置所用到的本地端口。對客戶來說,該屬性指定發送數據的本地端口;對於服務器來說,是指定偵聽的本地端口。
FrmMain.W insock― Server.LocalPort=LocalPort― ID∥服務器端口號,最好大於1 000
③ State屬性。返回控件的狀態,設計時隻讀。用在判斷監控網絡狀態,根據狀態改變各個按鍵指示
燈的狀態,提高操作安全性。其設置如下:
Connected― State=FrmMain.W insock― Server.State
Select Case Connected― State
Case 0 StatusBar1.Panels(3).Text= “關閉”
Case 1 StalusBar1.Panels(3).Text=“打開”
Case 2 StatusBar1.Panels(3).Text=“偵聽”
4.1 Winsock控件方法
Winsock控件方法主要有以下幾種:
① Listen方法。在運用程序初始化時創建套接
字並將其設置為偵聽狀態,等待客戶機的連接請求。
Private Sub Form_ Load()
FrmMain.Winsock― Server.Listen
End Sub
② Accept方法。當有新連接時就會出現ConnectionRequest
事件,處理該事件時,運用程序應該用Accept方法接收連接。
∥當遠程客戶機(AT91RM9200)發出請求連接時發生
Private Sub Winsock
―
Server
― Connecti0nRequest( ByVal
requestID As Long)
If W insock
― Server.State < > sckClosed Then W insock―
Server.Close保證Winsock控件不是處於Close狀態
W insock― ―
Server.Accept requestlD
∥服務器接收客戶機(A'I-91 RM9200)的請求
End Sub
③ SendData方法。服務器給客戶機發送控製命
令,如開始執行、停止、數據的轉存等,實現對客戶機的
遠程控製。
本函數按TCP模式按二進製方式發送數據包給
客戶機,函數成功返回true,出錯返回false。
Public Function Send― Data―
To― kehu(Winsock―Server As
Winsock,Data―
Buff()As Byte)As Boolean
On Error GoTo Er
_
Part
Send― Data― To―
kehu : False
If Connect Then //Connect是一個定義的全局變量,
保證在Winsock控件在連接狀態
W insock― . Server.Se ndData Data_ Buf
End If
Send― Data― To― kehu=True
Exit Function
Err_ Pa~:
Send― Data― To― kehu = False
MsgBox“發送數據出錯!錯誤代碼=”+CStr(Er)+
“ :”+Error,vbExclamation,“錯誤提示”
Exit Function
End Function
4.2 Winsoek控件事件
Winsock控件事件分為以下2種。
① DataArrival事件:gaishijianshitongxindehexinbufen。danggeikehuduanfasongwanminglinghou,jieshoukehuduanfanhuideminglingzhixingqingkuang,shixianduikehujiyunxingzhuangtaidejiancha。ruguoshishujuzhuancunminglingshi,haiyaowanchengjieshoukehujishangchuandecaijishujuheduishujudefuwuqicunchu,jinyibutigaoxitongdekekaoxing,qiliuchengrutu3所示。接收到FTP頭數據包後, P傳輸數據的格式定義如圖4所示。
② Error事件:隻要後台處理中出現錯誤(例如連接失敗、收發數據失敗)事件都會出現,方便我們對程序的監控和調試。
在後台處理中出現錯誤時發生:
Private Sub W insock― Server_
Eror(ByVal Number As Inte.
ger,Description As String,ByVal Se ode As Long,ByValSource As String,ByVal HelpFile As String,ByVal Help―Context As Long,CancelDisplay As Boolean
MsgBox“網絡運行出錯!代碼=”+CStr(Err)+“:”
+Error,vbCritical,“錯誤信息”
Exit Sub
End Sub
5 結束語
基於ARM的高速數據采集zhuangzhideyuanchengjiankongdesheji,congyingjianheruanjianliangfangmiankanshikexingde,shijizhibantiaoshijieguohenhaodiwanchengleyuanchengtongxinrenwu。duigongyexianchangdeyuanchengjiankongtigonglexindejiejuefangan。suizheyitaiwangderiyipuji,gaifanganyouzhehenqiangdeshijianyiyi。