關(guān) 閉

        新聞中心

        EEPW首頁(yè) > 工控自動(dòng)化 > 設(shè)計(jì)應(yīng)用 > MD600G的Internet無(wú)線傳感器網(wǎng)絡(luò)設(shè)計(jì)

        MD600G的Internet無(wú)線傳感器網(wǎng)絡(luò)設(shè)計(jì)

        作者: 時(shí)間:2010-11-25 來(lái)源:網(wǎng)絡(luò) 收藏

        1.3 溫度節(jié)點(diǎn)

          溫度節(jié)點(diǎn)模塊主要由溫度DS18B20組成,并將其輸出的溫度數(shù)據(jù)送往單片機(jī),然后單片機(jī)將這些數(shù)據(jù)進(jìn)行相關(guān)處理,最后再送往后續(xù)的通信設(shè)備,并將溫度數(shù)據(jù)進(jìn)行數(shù)碼管或液晶屏顯示。這里采用了實(shí)時(shí)時(shí)鐘電路DS1302來(lái)實(shí)現(xiàn)該系統(tǒng)的實(shí)時(shí)性。

        2 軟件設(shè)計(jì)

          基于MD600G和Internet的網(wǎng)的軟件包括溫度傳感器節(jié)點(diǎn)的軟件設(shè)計(jì)、MD600G與溫度傳感器節(jié)點(diǎn)的串口軟件設(shè)計(jì)、服務(wù)器mSever端與Internet網(wǎng)的數(shù)據(jù)通信軟件及mSever端溫度數(shù)據(jù)可視化程序的設(shè)計(jì)等。

        2.1 mSever端溫度數(shù)據(jù)可視化程序設(shè)計(jì)

          利用Visual C++強(qiáng)大的編譯器以及與數(shù)據(jù)庫(kù)的處理能力,開發(fā)出基于Windows平臺(tái)的32位數(shù)據(jù)可視化應(yīng)用程序。圖3是mSever端溫度數(shù)據(jù)可視化程序設(shè)計(jì)的原理圖。

        按此在新窗口瀏覽圖片
        圖3 可視化界面的設(shè)計(jì)原理圖

          以下為可視化界面模塊源碼:

        void CDemoView::OnInitialUpdate() {
          CView::OnInitialUpdate();
          CRect Rect;
          GetClientRect(Rect);
          m_Plot.Create(WS_CHILD|WS_VISIBLE,Rect,this,12000);
          m_Plot.SetSerie(0, PS_SOLID, RGB(255,0,0), 0.0, 40.0, Temperature);//窗口
          m_Plot.SetLegend(0, PS_SOLID, RGB(255,0,0), Temperature);//背景方框
          m_Plot.m_bAutoScrollX=TRUE;
          SetTimer(1,1000,NULL);//背景刷新時(shí)間
          canSize=TRUE;
        }
        void CDemoView::OnTimer(UINT nIDEvent) {
          static BOOL pros={FALSE};
          if(!pros) {
            pros=TRUE;
            CDemoDoc* pDoc=GetDocument();
            ASSERT_VALID(pDoc);
            y=pDoc->p.buffer;
            m_Plot.AddPoint(0,CTime::GetCurrentTime(),y);
            Invalidate();
            pros=FALSE;
          }
          CView::OnTimer(nIDEvent);
        }
        void CDemoView::OnSize(UINT nType, int cx, int cy) {
          CView::OnSize(nType, cx, cy);
          if(canSize) {
            CRect Rect;
            GetClientRect(Rect);
            m_Plot.MoveWindow(Rect);
          }
        }
        void CDASocket::OnReceive(int nErrorCode) { //接收數(shù)據(jù)端的程序
          char buff[64];
          int ret=0;
          ret=Receive(buff,64);//AfxMessageBox(OK);
          if(ret==ERROR)
          {TRACE(ERROR!);}
          else
          m_pDoc->Presscessding(buff);
          CAsyncSocket::OnReceive(nErrorCode);
        }

          圖4是用Visual C++開發(fā)的mSever端溫度數(shù)據(jù)可視化顯示的界面,圖中顯示的是1個(gè)節(jié)點(diǎn)的溫度變化實(shí)時(shí)曲線。

        按此在新窗口瀏覽圖片
        圖4 服務(wù)器mSever端溫度數(shù)據(jù)可視化顯示界面

        2.2 mSever端Web訪問(wèn)程序設(shè)計(jì)

          為了實(shí)現(xiàn)多個(gè)客戶端可以同時(shí)訪問(wèn)數(shù)據(jù)中心服務(wù)器,規(guī)定客戶端在打開服務(wù)器的Web頁(yè)面時(shí),首先提交客戶端的IP地址,然后服務(wù)器端把客戶端的IP地址收錄入庫(kù),再將接收到的溫度數(shù)據(jù)轉(zhuǎn)發(fā)給指定的客戶端。因此,當(dāng)有多個(gè)客戶端同時(shí)訪問(wèn)數(shù)據(jù)中心服務(wù)器時(shí),服務(wù)器端只需要將各個(gè)客戶端的IP地址收錄入庫(kù),最后再循環(huán)不斷地往各個(gè)客戶端轉(zhuǎn)發(fā)溫度數(shù)據(jù)即可。

          當(dāng)客戶端斷開與服務(wù)器端的連接時(shí),將向服務(wù)器提交斷開請(qǐng)求,從服務(wù)器端的IP地址庫(kù)中釋放掉該客戶端的IP地址,從而實(shí)現(xiàn)了服務(wù)器端IP地址庫(kù)的動(dòng)態(tài)更新。



        評(píng)論


        相關(guān)推薦

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

        關(guān)閉
        主站蜘蛛池模板: 方正县| 浪卡子县| 博爱县| 黎川县| 息烽县| 石门县| 偃师市| 西昌市| 庆云县| 祁门县| 霍州市| 囊谦县| 奉节县| 尤溪县| 井陉县| 平江县| 吕梁市| 仁化县| 红桥区| 遵义县| 东乡族自治县| 紫阳县| 沈阳市| 汶上县| 天门市| 和田县| 娱乐| 龙江县| 泰来县| 饶河县| 天台县| 鄂伦春自治旗| 永州市| 安义县| 永安市| 桃园市| 保山市| 安达市| 定兴县| 阳春市| 海盐县|