<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          新聞中心

          EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計應(yīng)用 > 基于ARM的城市供水站分布式監(jiān)控系統(tǒng)

          基于ARM的城市供水站分布式監(jiān)控系統(tǒng)

          作者: 時間:2010-07-20 來源:網(wǎng)絡(luò) 收藏

          下位機(jī)擴(kuò)展了網(wǎng)絡(luò)RJ-45網(wǎng)絡(luò)接口,使上下位機(jī)之間實現(xiàn)TCP/IP通信變得更加簡單。
          每個站的下位機(jī)在將數(shù)據(jù)處理完畢之后,通過RJ-45網(wǎng)絡(luò)接口與上位機(jī)相連,多處下位機(jī)通過路由器接入網(wǎng)絡(luò),然后再與上位機(jī)進(jìn)行通信。其結(jié)構(gòu)圖如圖1。
          2 的軟件設(shè)計
          的軟件設(shè)計包括下位機(jī)地址映射、下位機(jī)數(shù)據(jù)處理及顯示、數(shù)據(jù)通信以及上位機(jī)程序的實現(xiàn)。
          2.1 下位機(jī)地址映射與實現(xiàn)
          下位機(jī)搭載WinCE操作系統(tǒng),數(shù)據(jù)采集是通過GPIO來操作相應(yīng)的寄存器,WinCE系統(tǒng)則將GPIO的實地址映射到虛擬地址空間,通過對虛擬地址空間的操作來完成對GPIO及其他片內(nèi)資源的控制。要在WinCE中操作中的GPIO,就必須按照BSP中的基地址找到相應(yīng)的虛擬地址。這就需要對其進(jìn)行地址映射。圖3為地址映射原理圖。

          本文引用地址:http://www.ex-cimer.com/article/151721.htm

          地址映射的方法有2種:一是流驅(qū)動方法,即在流驅(qū)動中將物理地址進(jìn)行相應(yīng)地映射,將流驅(qū)動添加到底層映像中來實現(xiàn)。另一種方法是在外部WinCE程序中將物理地址與虛擬地址進(jìn)行相應(yīng)地映射,只需對外部程序進(jìn)行操作,對內(nèi)核沒有影響,由于下位機(jī)數(shù)據(jù)采集部分并不復(fù)雜,所以采用第二種方法進(jìn)行實現(xiàn)。
          要實現(xiàn)地址映射,首先將所用到底層驅(qū)動中的寄存器作為一個類定義到WinCE嵌入式程序中去。然后把物理地址與虛擬地址用VirtualAlloc和VirtualCopy函數(shù)進(jìn)行映射操作。VirtualAlloc函數(shù)用于在當(dāng)前進(jìn)程的虛擬地址空間中保留或者提交空間,在保留時以64 KB為單位,提交時以4 KB為單位。VirtualCopy函數(shù)則用來綁定物理地址到靜態(tài)映射虛擬地址。VirtuaAlloc+VirtualCopy就可以將內(nèi)核到當(dāng)前進(jìn)程進(jìn)行映射,讓當(dāng)前程序找到對應(yīng)的虛擬地址[5-6]。
          把映射后的地址作為一個新類進(jìn)行定義,就可對寄存器進(jìn)行操作,如圖3。
          2.2 下位機(jī)數(shù)據(jù)處理及顯示
          下位機(jī)采集數(shù)據(jù)后采用數(shù)字模塊進(jìn)行顯示,當(dāng)數(shù)據(jù)超出上下限的時候,下位機(jī)中的蜂鳴器就會進(jìn)行報警,通知現(xiàn)場操作人員。
          數(shù)字顯示模塊采用重繪的形式,預(yù)先定義好相應(yīng)的數(shù)字顯示值,在接收到數(shù)據(jù)后對數(shù)字顯示模塊進(jìn)行相應(yīng)地重繪。數(shù)字顯示模塊作為一個插件加入到WinCE程序中,在主函數(shù)中調(diào)用模塊中的顯示函數(shù)來實現(xiàn)數(shù)字的顯示。
          下位機(jī)報警功能采用ARM擴(kuò)展的蜂鳴器實現(xiàn),蜂鳴器由PWM進(jìn)行控制。在S3C2440A中GPB0為控制PWM的寄存器,通過地址映射的方法對相應(yīng)的寄存器進(jìn)行操作。
          首先設(shè)置端口GPB0為TOUT0功能,然后設(shè)置預(yù)分頻和分割值,計數(shù)器的輸入時鐘(CCLK)頻率為:PCLK/(預(yù)分頻+1)/分割值。預(yù)分頻值和分割值分別由TCFG0、TCFG1來確定。接著設(shè)定初始值TCMPB3和TCNTB,由于計數(shù)器的輸入時鐘為PCLK/16/8;而rTCNTB0=(PCLK>>7)/freq;并且計數(shù)計到最大值的一半時發(fā)生翻轉(zhuǎn)。因為計數(shù)的基值是由rTCMPB0設(shè)定為最大計數(shù)值的50%。最后是定時控制器的設(shè)定rTCON,TOUT0就產(chǎn)生頻率是rTCNTB0,占空比是50%的方波,蜂鳴器就可以被驅(qū)動。當(dāng)數(shù)據(jù)超限時就調(diào)用此函數(shù)進(jìn)行蜂鳴器報警。
          2.3 TCP/IP通信的實現(xiàn)
          上下位機(jī)之間采用客戶機(jī)/服務(wù)器(C/S)形式,下位機(jī)作為客戶機(jī)上位機(jī)作為服務(wù)器進(jìn)行通信,TCP/IP通信通過套接字(socket)來實現(xiàn)[7-8]。
          下位機(jī)利用套接字socket的connect函數(shù)向上位機(jī)(server)發(fā)送連接請求,當(dāng)連接成功之后,用send函數(shù)向上位機(jī)發(fā)送相應(yīng)的數(shù)據(jù),通信完成后關(guān)閉套接字。
          上位機(jī)通信部分則與下位機(jī)相互對應(yīng),用套接字socket的bind函數(shù)將套接字綁定到本地地址和端口上,并將套接字設(shè)置為監(jiān)聽模式,用listen函數(shù)來準(zhǔn)備接收client的請求,當(dāng)用accept函數(shù)接收到連接請求后,調(diào)用recv函數(shù)來接收相應(yīng)的數(shù)據(jù),其流程如圖4所示。



          評論


          相關(guān)推薦

          技術(shù)專區(qū)

          關(guān)閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();