<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>

新聞中心

EEPW首頁(yè) > 手機與無(wú)線(xiàn)通信 > 設計應用 > 點(diǎn)對多點(diǎn)多任務(wù)無(wú)線(xiàn)通信

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

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


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

系統概述

一.連狀系統

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

1.適用范圍

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

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

c.適用于對時(shí)間要求不高的各種復雜無(wú)線(xiàn)數傳

d.適用于智能小區水、電、煤、暖氣集中抄表系統,各種遠程集中安防報警系統等。

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

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

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

Lead1

Lead2

Lead2

Header

Length

HostID

Local

Destination

unit

Data1

Data2

●●●

Datan

Checksum

 

 

 

Lead 為引導字節

Leader1=0xFF;

Leader2=0xAA;

Leader2=0x55;

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

Length 為數據包包含的Length字節之后的所有字節的長(cháng)度

HostID 為主機地址

Local  為本地機地址

Destination 目標地址

Unit   為RTU地址字節

Data   位數據包字節

Checksum 校驗字節

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


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

1. 適用范圍

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

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

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

c.適用于智能小區水、電、煤、暖氣集中抄表系統,各種遠程集中安防報警系統等

d.適用于智能家用集中控制系統

e.工業(yè)測控、工業(yè)數據采集

f. 醫療器械、健身器材

g.數據倉庫、智能商場(chǎng)超市導購

h.餐飲無(wú)線(xiàn)點(diǎn)菜系統

i.PDA無(wú)線(xiàn)數傳

j.水紋氣象監控

k.生物信號采集

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

m.銀行智能回單系統等

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

根據圖 2可以把系統的數據包格式定為:

 

Lead1

Lead2

Lead2

Header

Length

Unit

Data1

Data2

●●●

Datan

Checksum

 


 

Lead 為引導字節

Leader1=0xFF;

Leader2=0xAA;

Leader2=0x55;

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

Length 為數據包包含的Length字節之后的所有字節的長(cháng)度

Unit   為RTU地址字節

Data   位數據包字節

Checksum 校驗字節

硬件設計

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

VCC:正電源,接2.7~5.25V

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

DOUT:    數據輸出,連接MCU串口RXD

DIN:數據輸入,連接MCU串口TXD

GND:      電源地

PWR:      節能控制,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)單,本文將不作詳細的敘述,如果想要詳細的了解STR-2 RF Module, 請參照參考文獻 1。

{{分頁(yè)}}

軟件設計

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

1.主程序設計

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

 

2.打包與解包

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

下面是一段打包程序:

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

#define MRTUC _DATAPOLLRESPONSE    0xE2//定義包類(lèi)型為應答數據包

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

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

#define E$HostID  0x11  //定義目標主機地址

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

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

{

   while ( length!=0 ){

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

                     Length--;

}

}

void CheckActiveFunc(unsigned char unit)  //請求握手函數

{

   unsigned char buff[8];

  

   buff[0]=0xFF;                     //引導字節

   buff[1]=0xAA;                    //引導字節

   buff[2]=0x55;                     //引導字節

   buff[3] = MRTUC _ACTIVATE;      //數據包頭字節

   buff[4] = 0x03;                    //數據包長(cháng)度

   buff[5] = E$HostID;                //主機地址

   buff[6] = unit;                     //從機地址

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

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

}

 

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 //定義數據包的總數

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

struct ResponseCodeStruct {      //定義數據包結構體

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

   unsigned char Length;            // 數據包的長(chá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 )//檢查數據包類(lèi)型函數

{

  unsigned char i;

  

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

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

        return i;

  }

  return 0;

}

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

{

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

   BufferIndex = 0;                      //復位接收頭字節標志

}

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

{

   unsigned char char,i,j;

   unsigned char *buff;

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

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

         char = SCI_Getc();            //從buffer取一字節數據

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

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

              CodeIndex=0;      

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

              }

              return;               //如果不正確返回取下一字節

            }

            CheckSum = 0;

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

         }

         else if ( BufferIndex==1 ) {          

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

               CodeIndex=0;

               ResetReceivingStatus();

               }

               return;

            }

            PacketLength = char + 2;

         }

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

            if ( char!=E$HostID ) {

               CodeIndex=0;

               ResetReceivingStatus();

                }

                return;

            }

         }

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

            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 ) {              //校驗

                  PacketStatus |= PC_READY;

               }

               ResetReceivingStatus();

            }

         }

         CheckSum += char;

      }

      else {

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

            CodeIndex=0;

            ResetReceivingStatus();

         }

      }

   } }

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

參考文獻

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

2.Nordic     nRF401 Product Specification          Nordic corporation           2000

3. 譚浩強     C程序設計                        清華大學(xué)出版社            1999



評論


相關(guān)推薦

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

關(guān)閉
国产精品自在自线亚洲|国产精品无圣光一区二区|国产日产欧洲无码视频|久久久一本精品99久久K精品66|欧美人与动牲交片免费播放
<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>