基于A(yíng)RM的城市供水站分布式監控系統
下位機ARM擴展了網(wǎng)絡(luò )RJ-45網(wǎng)絡(luò )接口,使上下位機之間實(shí)現TCP/IP通信變得更加簡(jiǎn)單。
每個(gè)供水站的下位機在將數據處理完畢之后,通過(guò)RJ-45網(wǎng)絡(luò )接口與上位機相連,多處下位機通過(guò)路由器接入網(wǎng)絡(luò ),然后再與上位機進(jìn)行通信。其結構圖如圖1。
2 供水站分布式監控系統的軟件設計
供水站分布式監控系統的軟件設計包括下位機地址映射、下位機數據處理及顯示、數據通信以及上位機程序的實(shí)現。
2.1 下位機地址映射與實(shí)現
下位機搭載WinCE操作系統,ARM數據采集是通過(guò)GPIO來(lái)操作相應的寄存器,WinCE系統則將GPIO的實(shí)地址映射到虛擬地址空間,通過(guò)對虛擬地址空間的操作來(lái)完成對GPIO及其他片內資源的控制。要在WinCE中操作ARM中的GPIO,就必須按照BSP中的基地址找到相應的虛擬地址。這就需要對其進(jìn)行地址映射。圖3為地址映射原理圖。本文引用地址:http://dyxdggzs.com/article/151721.htm
地址映射的方法有2種:一是流驅動(dòng)方法,即在流驅動(dòng)中將物理地址進(jìn)行相應地映射,將流驅動(dòng)添加到底層映像中來(lái)實(shí)現。另一種方法是在外部WinCE程序中將物理地址與虛擬地址進(jìn)行相應地映射,只需對外部程序進(jìn)行操作,對內核沒(méi)有影響,由于下位機數據采集部分并不復雜,所以采用第二種方法進(jìn)行實(shí)現。
要實(shí)現地址映射,首先將所用到底層驅動(dòng)中的寄存器作為一個(gè)類(lèi)定義到WinCE嵌入式程序中去。然后把物理地址與虛擬地址用VirtualAlloc和VirtualCopy函數進(jìn)行映射操作。VirtualAlloc函數用于在當前進(jìn)程的虛擬地址空間中保留或者提交空間,在保留時(shí)以64 KB為單位,提交時(shí)以4 KB為單位。VirtualCopy函數則用來(lái)綁定物理地址到靜態(tài)映射虛擬地址。VirtuaAlloc+VirtualCopy就可以將內核到當前進(jìn)程進(jìn)行映射,讓當前程序找到對應的虛擬地址[5-6]。
把映射后的地址作為一個(gè)新類(lèi)進(jìn)行定義,就可對寄存器進(jìn)行操作,如圖3。
2.2 下位機數據處理及顯示
下位機采集數據后采用數字模塊進(jìn)行顯示,當數據超出上下限的時(shí)候,下位機中的蜂鳴器就會(huì )進(jìn)行報警,通知現場(chǎng)操作人員。
數字顯示模塊采用重繪的形式,預先定義好相應的數字顯示值,在接收到數據后對數字顯示模塊進(jìn)行相應地重繪。數字顯示模塊作為一個(gè)插件加入到WinCE程序中,在主函數中調用模塊中的顯示函數來(lái)實(shí)現數字的顯示。
下位機報警功能采用ARM擴展的蜂鳴器實(shí)現,蜂鳴器由PWM進(jìn)行控制。在S3C2440A中GPB0為控制PWM的寄存器,通過(guò)地址映射的方法對相應的寄存器進(jìn)行操作。
首先設置端口GPB0為T(mén)OUT0功能,然后設置預分頻和分割值,計數器的輸入時(shí)鐘(CCLK)頻率為:PCLK/(預分頻+1)/分割值。預分頻值和分割值分別由TCFG0、TCFG1來(lái)確定。接著(zhù)設定初始值TCMPB3和TCNTB,由于計數器的輸入時(shí)鐘為PCLK/16/8;而rTCNTB0=(PCLK>>7)/freq;并且計數計到最大值的一半時(shí)發(fā)生翻轉。因為計數的基值是由rTCMPB0設定為最大計數值的50%。最后是定時(shí)控制器的設定rTCON,TOUT0就產(chǎn)生頻率是rTCNTB0,占空比是50%的方波,蜂鳴器就可以被驅動(dòng)。當數據超限時(shí)就調用此函數進(jìn)行蜂鳴器報警。
2.3 TCP/IP通信的實(shí)現
上下位機之間采用客戶(hù)機/服務(wù)器(C/S)形式,下位機作為客戶(hù)機上位機作為服務(wù)器進(jìn)行通信,TCP/IP通信通過(guò)套接字(socket)來(lái)實(shí)現[7-8]。
下位機利用套接字socket的connect函數向上位機(server)發(fā)送連接請求,當連接成功之后,用send函數向上位機發(fā)送相應的數據,通信完成后關(guān)閉套接字。
上位機通信部分則與下位機相互對應,用套接字socket的bind函數將套接字綁定到本地地址和端口上,并將套接字設置為監聽(tīng)模式,用listen函數來(lái)準備接收client的請求,當用accept函數接收到連接請求后,調用recv函數來(lái)接收相應的數據,其流程如圖4所示。
評論