在线看毛片网站电影-亚洲国产欧美日韩精品一区二区三区,国产欧美乱夫不卡无乱码,国产精品欧美久久久天天影视,精品一区二区三区视频在线观看,亚洲国产精品人成乱码天天看,日韩久久久一区,91精品国产91免费

<menu id="6qfwx"><li id="6qfwx"></li></menu>
    1. <menu id="6qfwx"><dl id="6qfwx"></dl></menu>

      <label id="6qfwx"><ol id="6qfwx"></ol></label><menu id="6qfwx"></menu><object id="6qfwx"><strike id="6qfwx"><noscript id="6qfwx"></noscript></strike></object>
        1. <center id="6qfwx"><dl id="6qfwx"></dl></center>

            新聞中心

            EEPW首頁(yè) > 手機(jī)與無(wú)線通信 > 設(shè)計(jì)應(yīng)用 > 點(diǎn)對(duì)多點(diǎn)多任務(wù)無(wú)線通信

            點(diǎn)對(duì)多點(diǎn)多任務(wù)無(wú)線通信

            ——
            作者:聶光義 時(shí)間:2005-10-19 來(lái)源: 收藏


              現(xiàn)代世界是一個(gè)高速自動(dòng)化的世界,各種各樣的設(shè)備除了可以與計(jì)算機(jī)聯(lián)機(jī)外,還可以互相聯(lián)機(jī),而最簡(jiǎn)單的自動(dòng)化聯(lián)機(jī)方式就是使用串行通訊。隨著時(shí)代的進(jìn)步,它并沒(méi)有被取代,反倒是逐漸被廣泛應(yīng)用。如今,在許多的場(chǎng)合有線連接的方式已經(jīng)不能滿足科技的高速發(fā)展。技術(shù)正以一種快速的速度進(jìn)入許多產(chǎn)品,它與有線相比主要有成本低,攜帶方便,省去有線布線的煩惱。特別適用于手持設(shè)備的、電池供電設(shè)備、遙控、遙測(cè)、小型網(wǎng)絡(luò)、抄表、門(mén)禁系統(tǒng)、小區(qū)傳呼、工業(yè)數(shù)據(jù)采集系統(tǒng)、無(wú)線標(biāo)簽身份識(shí)別、非接觸RF 智能卡、小型無(wú)線數(shù)據(jù)終端、安全防火系統(tǒng)、無(wú)線遙控系統(tǒng)、生物信號(hào)采集、水文氣象監(jiān)控、機(jī)器人控制、無(wú)線232 數(shù)據(jù)、無(wú)線485/422 數(shù)據(jù)、無(wú)線數(shù)字語(yǔ)音、數(shù)字圖像傳輸、智能小區(qū)不停車(chē)收費(fèi)、銀行智能回單系統(tǒng)等。在如此多的無(wú)線系統(tǒng)應(yīng)用中,無(wú)線通信的協(xié)議自然顯得特別重要,無(wú)線通信協(xié)議的好壞直接關(guān)系到系統(tǒng)的安全性、誤碼率、以及系統(tǒng)運(yùn)行的速度。本文以上海桑博科技有限公司的STR-2無(wú)線收發(fā)模塊為例,詳細(xì)介紹無(wú)線收發(fā)模塊與各種單片機(jī)的硬件接口設(shè)計(jì),無(wú)線通信協(xié)議的數(shù)據(jù)打包格式、解包程序以及相關(guān)軟件設(shè)計(jì)。

            系統(tǒng)概述

            一.連狀系統(tǒng)

              如圖1系統(tǒng)由一臺(tái)中央監(jiān)控設(shè)備CMS (Central Monitoring System)和多臺(tái)遠(yuǎn)程終端設(shè)備MRTU(Multiple Remote Termial Unit)構(gòu)成多任務(wù)無(wú)線通信系統(tǒng)。在中央監(jiān)控設(shè)備CMS 與 遠(yuǎn)程終端RTU(Remote Termial Unit)之間用多臺(tái)中轉(zhuǎn)設(shè)備Tran作為中轉(zhuǎn)站,以便起到暫存數(shù)據(jù)和延伸距離的作用。中轉(zhuǎn)站之間,以單向通信方式進(jìn)行傳遞數(shù)據(jù)。

            1.適用范圍

            a.適用于傳輸距離遠(yuǎn)的多點(diǎn)多任務(wù)數(shù)據(jù)采集

            b.適用于條件惡劣干擾大多點(diǎn)多任務(wù)數(shù)據(jù)采集

            c.適用于對(duì)時(shí)間要求不高的各種復(fù)雜無(wú)線數(shù)傳

            d.適用于智能小區(qū)水、電、煤、暖氣集中抄表系統(tǒng),各種遠(yuǎn)程集中安防報(bào)警系統(tǒng)等。

            2.協(xié)議數(shù)據(jù)包格式

              協(xié)議的笫一件事就是能夠識(shí)別噪聲和有效數(shù)椐,噪聲是以隨機(jī)字節(jié)出現(xiàn)的,沒(méi)有明顯的結(jié)合方式,噪聲源可能產(chǎn)生任意字節(jié)的組合,在無(wú)線通信的過(guò)程中最好能通過(guò)一種協(xié)議能有效的抑制噪聲的產(chǎn)生

              通過(guò)測(cè)試和試驗(yàn),發(fā)現(xiàn)0xFF 后跟0XAA,0x55 在噪聲中不容易發(fā)生,傳輸協(xié)議應(yīng)該在數(shù)據(jù)包前加開(kāi)始字節(jié)0xFF 后跟0xAA,0x55發(fā)送協(xié)議的開(kāi)始應(yīng)該以一個(gè)任意內(nèi)容的字節(jié)(這是因?yàn)榈谝粋€(gè)字節(jié)的數(shù)椐在發(fā)送時(shí)容易丟失),然后是0xFF 后跟一個(gè)0xAA,0x55;接收協(xié)議規(guī)定只接收以0xFF 后跟0xAA,0x55 開(kāi)始的包.于是就可以很方便的把以上系統(tǒng)的數(shù)據(jù)包格式定為:

            Lead1

            Lead2

            Lead2

            Header

            Length

            HostID

            Local

            Destination

            unit

            Data1

            Data2

            ●●●

            Datan

            Checksum

             

             

             

            Lead 為引導(dǎo)字節(jié)

            Leader1=0xFF;

            Leader2=0xAA;

            Leader2=0x55;

            Header 為數(shù)據(jù)包的命令字節(jié),由此確定數(shù)據(jù)包的類(lèi)型

            Length 為數(shù)據(jù)包包含的Length字節(jié)之后的所有字節(jié)的長(zhǎng)度

            HostID 為主機(jī)地址

            Local  為本地機(jī)地址

            Destination 目標(biāo)地址

            Unit   為RTU地址字節(jié)

            Data   位數(shù)據(jù)包字節(jié)

            Checksum 校驗(yàn)字節(jié)

            二.    星狀點(diǎn)對(duì)多點(diǎn)通信


              如圖 2系統(tǒng)由一臺(tái)中央監(jiān)控設(shè)備CMS和多臺(tái)遠(yuǎn)程終端設(shè)備MRTU構(gòu)成點(diǎn)對(duì)多點(diǎn)多任務(wù)無(wú)線通信系統(tǒng)。在中央監(jiān)控設(shè)備CMS 與 每一臺(tái)遠(yuǎn)程終端RTU(Remote Termial Unit)都以雙向通信方式進(jìn)行傳遞數(shù)據(jù)。特別適用于數(shù)據(jù)量大,對(duì)時(shí)間要求較高的場(chǎng)合。

            1. 適用范圍

            a. 適用于傳輸距離較近的地方

            a.適用于條件惡劣干擾大的地方

            b.適用于對(duì)時(shí)間要求高、數(shù)據(jù)量大的場(chǎng)合

            c.適用于智能小區(qū)水、電、煤、暖氣集中抄表系統(tǒng),各種遠(yuǎn)程集中安防報(bào)警系統(tǒng)等

            d.適用于智能家用集中控制系統(tǒng)

            e.工業(yè)測(cè)控、工業(yè)數(shù)據(jù)采集

            f. 醫(yī)療器械、健身器材

            g.數(shù)據(jù)倉(cāng)庫(kù)、智能商場(chǎng)超市導(dǎo)購(gòu)

            h.餐飲無(wú)線點(diǎn)菜系統(tǒng)

            i.PDA無(wú)線數(shù)傳

            j.水紋氣象監(jiān)控

            k.生物信號(hào)采集

            l.油田環(huán)境監(jiān)控

            m.銀行智能回單系統(tǒng)等

            2.協(xié)議數(shù)據(jù)包格式

            根據(jù)圖 2可以把系統(tǒng)的數(shù)據(jù)包格式定為:

             

            Lead1

            Lead2

            Lead2

            Header

            Length

            Unit

            Data1

            Data2

            ●●●

            Datan

            Checksum

             


             

            Lead 為引導(dǎo)字節(jié)

            Leader1=0xFF;

            Leader2=0xAA;

            Leader2=0x55;

            Header 為數(shù)據(jù)包的命令字節(jié),由此確定數(shù)據(jù)包的類(lèi)型

            Length 為數(shù)據(jù)包包含的Length字節(jié)之后的所有字節(jié)的長(zhǎng)度

            Unit   為RTU地址字節(jié)

            Data   位數(shù)據(jù)包字節(jié)

            Checksum 校驗(yàn)字節(jié)

            硬件設(shè)計(jì)

             
              上海桑博電子科技有限公司STR-2 RF Module 的核心部分為nRF401,外加精心設(shè)計(jì)的內(nèi)置天線,體積為37mm x 47mm,具有體積小,功耗低的特點(diǎn),傳輸距離為200米,傳輸最大速率為20kbit/s,外圍接口電路簡(jiǎn)單,可直接與單片機(jī)的通用串行總線(UART)口連接。如圖3所示STR-2 RF Module 引腳功如下:

            VCC:正電源,接2.7~5.25V

            CS:  頻道選擇,CS=0選擇工作頻道1即433.92MHZ,CS=1選擇工作頻道2即433.33MHZ

            DOUT:    數(shù)據(jù)輸出,連接MCU串口RXD

            DIN:數(shù)據(jù)輸入,連接MCU串口TXD

            GND:      電源地

            PWR:      節(jié)能控制,PWR=1正常工作狀態(tài),PWR=0低功耗狀態(tài)

            TXN:發(fā)射接收控制,TXN=1時(shí)模塊為發(fā)射狀態(tài),TXN=0時(shí)模塊為接收狀態(tài)

            STR-2 RF Module 接口簡(jiǎn)單,本文將不作詳細(xì)的敘述,如果想要詳細(xì)的了解STR-2 RF Module, 請(qǐng)參照參考文獻(xiàn) 1。

            {{分頁(yè)}}

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

              在系統(tǒng)中所有STR-2 RF Module 均采用433.92MHZ作為系統(tǒng)工作頻率。下面以星狀點(diǎn)對(duì)多點(diǎn)通信系統(tǒng)為例,詳細(xì)介紹系統(tǒng)的軟件設(shè)計(jì)。

            1.主程序設(shè)計(jì)

              為了避免同頻干擾的問(wèn)題,系統(tǒng)采用分時(shí)TDMA(Time Division Multiple Access)技術(shù),把系統(tǒng)CMS與任意一臺(tái)RTU之間的通信采用時(shí)分的方式分開(kāi),CMS通過(guò)掃描的方式與各臺(tái)RTU設(shè)備進(jìn)行單臺(tái)通信,這樣系統(tǒng)中的CMS與RTU的通信方式就成為點(diǎn)對(duì)點(diǎn)的通信方式。整個(gè)點(diǎn)對(duì)多點(diǎn)系統(tǒng)的通信就成為若干個(gè)點(diǎn)對(duì)點(diǎn)通信的組合。程序采用C51單片機(jī)語(yǔ)言編寫(xiě),其主控程序流程圖如圖4、圖5所示。

             

            2.打包與解包

              協(xié)議將主要數(shù)據(jù)分割成一定格式的數(shù)據(jù),并增加一些額外的信息(用于糾錯(cuò)),這個(gè)過(guò)程叫打包,在接收端協(xié)議去掉這些額外信息,只留下初始信息,這個(gè)過(guò)程叫解包.

            下面是一段打包程序:

            #define MRTUC _DATAPOLL0xE1 //定義包類(lèi)型為數(shù)據(jù)包

            #define MRTUC _DATAPOLLRESPONSE    0xE2//定義包類(lèi)型為應(yīng)答數(shù)據(jù)包

            #define MRTUC _ACTIVATE 0xF1//定義包類(lèi)型為請(qǐng)求握手包

            #define MRTUC _ACTIVATEREQUEST      0xF2//定義包類(lèi)型為應(yīng)答握手包

            #define E$HostID  0x11  //定義目標(biāo)主機(jī)地址

            void SCI_Putc( unsigned char data ); //通過(guò)SCI輸出數(shù)據(jù)函數(shù)

            void SCI_Puts(unsigned char *str,unsigned char length) //輸出多數(shù)據(jù)函數(shù)

            {

               while ( length!=0 ){

                  SCI_Putc( *str++ );                        //通過(guò)SCI發(fā)送數(shù)據(jù)

                                 Length--;

            }

            }

            void CheckActiveFunc(unsigned char unit)  //請(qǐng)求握手函數(shù)

            {

               unsigned char buff[8];

              

               buff[0]=0xFF;                     //引導(dǎo)字節(jié)

               buff[1]=0xAA;                    //引導(dǎo)字節(jié)

               buff[2]=0x55;                     //引導(dǎo)字節(jié)

               buff[3] = MRTUC _ACTIVATE;      //數(shù)據(jù)包頭字節(jié)

               buff[4] = 0x03;                    //數(shù)據(jù)包長(zhǎng)度

               buff[5] = E$HostID;                //主機(jī)地址

               buff[6] = unit;                     //從機(jī)地址

               buff[7] = 1 + ~(MRTUC _ACTIVATE + 0x03 + E$HostID + unit); //校驗(yàn)字節(jié)

               SCI_Puts(buff,8);                  //發(fā)送數(shù)據(jù)包

            }

             

            void ResponseActiveRequestFunc(void)

            {

               unsigned char buff[8];

               buff[0]=0xFF;

               buff[1]=0xAA;

               buff[2]=0x55;

               buff[3] = MRTUC _ACTIVATEREQUEST;

               buff[4] = 0x03;

               buff[5] = E$HostID;

               buff[6] = unit;

               buff[7] = 1 + ~(MRTUC _ACTIVATEREQUEST + 0x03 + E$HostID + unit);

               SCI_Puts(buff,8);

            }

             

            void DataPollFunc(unsigned char unit)

            {

               unsigned char buff[8];

               buff[0]=0xFF;

               buff[1]=0xAA;

               buff[2]=0x55;

               buff[3] = MRTUC _DATAPOLL;

               buff[4] = 0x03;

               buff[5] = E$HostID;

               buff[6] = unit;

               buff[7] = 1 + ~(MRTUC _DATAPOLL + 0x03 + E$HostID + unit);

               SCI_Puts(buff,8);

            }

             

            void ResponseDataPollFunc(unsigned char unit)

            {

               unsigned char buff[8];

               buff[0]=0xFF;

               buff[1]=0xAA;

               buff[2]=0x55;

               buff[3] = MRTUC _DATAPOLLRESPONSE;

               buff[4] = 0x3;

               buff[5] = E$HostID;

               buff[6] = unit;

               buff[7] = 1 + ~(MRTUC _DATAPOLLRESPONSE + 0x3 + E$HostID + unit);

               SCI_Puts(buff,8);

            }

            {{分頁(yè)}}

            程序解包流程圖:

                解包子程序流程圖如圖6所示。

            解包程序:

            #define TOTAL_RESPONSE    5 //定義數(shù)據(jù)包的總數(shù)

            void SCI_Getc(void);                  //從SCI buffer取數(shù)據(jù)函數(shù)

            struct ResponseCodeStruct {      //定義數(shù)據(jù)包結(jié)構(gòu)體

               unsigned char Code;              // 數(shù)據(jù)包的類(lèi)型

               unsigned char Length;            // 數(shù)據(jù)包的長(zhǎng)度

            };

            const ResponseCodeStruct ResponseCodeTable[TOTAL_RESPONSE]={

               { 0, 0 },

               {MRTUC _DATAPOLL,          3},

               {MRTUC _DATAPOLLRESPONSE,   3},

               {MRTUC _ACTIVATE,           3},

               {MRTUC _ACTIVATEREQUEST,    3},

            };

            unsigned char CheckResponseCode( unsigned char code )//檢查數(shù)據(jù)包類(lèi)型函數(shù)

            {

              unsigned char i;

              

              for ( i=1; i<TOTAL_RESPONSE; i++ ) {

                 if ( ResponseCodeTable[i].Code == code )

                    return i;

              }

              return 0;

            }

            void ResetReceivingStatus( void )           //復(fù)位接收狀態(tài)

            {

               PacketStatus &= ~PC_START;          //數(shù)據(jù)包為開(kāi)始狀態(tài)

               BufferIndex = 0;                      //復(fù)位接收頭字節(jié)標(biāo)志

            }

            void SerialHandler( void )             //數(shù)據(jù)解包子程序

            {

               unsigned char char,i,j;

               unsigned char *buff;

               if ((PacketStatus & PC_READY)==0 ) { //檢查數(shù)據(jù)包狀態(tài)

                  if ( SCI_Flags & SCI_IQDIRTY ) {  //檢查SCI狀態(tài)

                     char = SCI_Getc();            //從buffer取一字節(jié)數(shù)據(jù)

                     if ( BufferIndex==0) {         // 檢查是否為頭字節(jié)

                        if ( (CodeIndex=CheckResponseCode( char ))==0   ) {

                          CodeIndex=0;      

                          ResetReceivingStatus();   //復(fù)位接收狀態(tài)

                          }

                          return;               //如果不正確返回取下一字節(jié)

                        }

                        CheckSum = 0;

                        PacketStatus |= PC_START; //定義開(kāi)始接收數(shù)據(jù)

                     }

                     else if ( BufferIndex==1 ) {          

                     if(char<3|| har>(SCI_IQMASK-1)|| (ResponseCodeTable[CodeIndex]. Length && ResponseCodeTable[CodeIndex].Length!=char) ) { //檢查長(zhǎng)度

                           CodeIndex=0;

                           ResetReceivingStatus();

                           }

                           return;

                        }

                        PacketLength = char + 2;

                     }

                     else if ( BufferIndex==2 ) {           // 檢查主機(jī)地址

                        if ( char!=E$HostID ) {

                           CodeIndex=0;

                           ResetReceivingStatus();

                            }

                            return;

                        }

                     }

                     else if ( BufferIndex==3 ) {           // 檢查從機(jī)地址

                        if ( char>MAX_UNIT || char==0 ) {

                           return;

                        }

                        else {

                          if(E$UNIT!=char){

                            CodeIndex=0;

                            ResetReceivingStatus();

                            return;

                          }

                        }

                     }

                     PacketBuffer[BufferIndex++] = char;

                     if ( BufferIndex>=2 ) {

                        if ( BufferIndex==PacketLength ) {

                           CheckSum = 1 + ~CheckSum;

                           if ( char==CheckSum ) {              //校驗(yàn)

                              PacketStatus |= PC_READY;

                           }

                           ResetReceivingStatus();

                        }

                     }

                     CheckSum += char;

                  }

                  else {

                     if ( (PacketStatus & PC_START) && TimeOut==0 ) {

                        CodeIndex=0;

                        ResetReceivingStatus();

                     }

                  }

               } }

            結(jié)束語(yǔ)
             
              本文中的無(wú)線硬件設(shè)計(jì)、軟件設(shè)計(jì)解決方案已被多次運(yùn)用于多種產(chǎn)品、多種系統(tǒng)。目前各種產(chǎn)品、系統(tǒng)運(yùn)行穩(wěn)定,無(wú)線通信誤碼率低、可靠性高、安全性好。文中的軟硬件設(shè)計(jì)方案,可適用于各種單片機(jī),對(duì)于無(wú)線通信技術(shù)在我國(guó)推廣和廣泛的運(yùn)用有著重要的參考價(jià)值。

            參考文獻(xiàn)

            1.上海桑博  STR-2無(wú)線數(shù)據(jù)收發(fā)模塊使用手冊(cè)    上海桑博電子科技有限公司   2002

            2.Nordic     nRF401 Product Specification          Nordic corporation           2000

            3. 譚浩強(qiáng)     C程序設(shè)計(jì)                        清華大學(xué)出版社            1999



            評(píng)論


            相關(guān)推薦

            技術(shù)專(zhuān)區(qū)

            關(guān)閉