日本在线观看不卡,国产成人免费观看,国产gaysex男同视频chinese,欧美一级www

SCI期刊 | 網(wǎng)站地圖 周一至周日 8:00-22:30
你的位置:首頁 >  通信技術(shù) ? 正文

基于狀態(tài)機的遠程控制技術(shù)

2021-4-9 | 通信技術(shù)

 

0引言

 

遠程通訊系統(tǒng)一般要求通信距離在30公里以上,所以通常情況下通信環(huán)境比較復(fù)雜,在較長距離下的電磁干擾和信號衰弱對通訊系統(tǒng)的穩(wěn)定性都提出了較高的要求。串口是常用的計算機與外部設(shè)備之間的數(shù)據(jù)傳輸通道[1],由于使用其通信方便易行,且能實現(xiàn)數(shù)據(jù)的遠距離傳輸,故可采用串口通信作為遠程通信的渠道。同時要利用合理的通信幀定義模式進而實現(xiàn)遠程通信協(xié)議的同步性問題,目前較為常用的方法有逐次比較法[2]、基于FIFO隊列同步法[3]、狀態(tài)機消息同步法[4]。實驗表明狀態(tài)機消息同步法最大限度地減少了系統(tǒng)的冗余運算和中斷后數(shù)據(jù)丟失的問題,保證了控制站第一時間獲得被控設(shè)備是否接受指令開始運行的信息,實現(xiàn)了控制的可視性,進而保證了系統(tǒng)的穩(wěn)定運行。

 

1通訊設(shè)備配置

 

系統(tǒng)采用串口通訊的方式實現(xiàn)PC機與外部設(shè)備的連接,利用VC++編寫的控制軟件和指令接收軟件實現(xiàn)系統(tǒng)指令的發(fā)送和執(zhí)行。外部設(shè)備采用PDL35數(shù)傳電臺,這種電臺能夠?qū)崿F(xiàn)最大19200比特每秒的傳輸速度,并且具有低功耗和前向糾錯的能力,提高了抗干擾性和覆蓋性。控制設(shè)備通過電臺向工作設(shè)備發(fā)送標(biāo)準(zhǔn)化指令,雙方基于特定頻率的無線電互相訪問。連接成功后進入設(shè)置主界面后可查看電臺類型、頻率范圍、固定版號等信息。主要在”RadioLink”選項卡下設(shè)置通訊頻率、波特率與通信靈敏度。特別需要注意的是通信頻率和通信靈敏度需要基站和移動站完全一致。

 

2通訊幀格式定義

 

對于遠程通訊系統(tǒng),需要完成多個不同的工作,并且實時返回工作狀態(tài)以保證遠程控制的可靠性。這就需要對通信協(xié)議進行特殊的定義以進行解析同步,進而完成各項工作。本系統(tǒng)中定義通信協(xié)議幀結(jié)構(gòu)如圖2所示。幀頭用于同步[5],一般為一個或兩個ASCII字符,本系統(tǒng)中使用一個字節(jié)0xFF表示,系統(tǒng)接收此字符后開始接收中斷。幀發(fā)送方用1字節(jié)表示,分別用0x01表示1號基站發(fā)送的命令,同時也意味著任何接收設(shè)備會向此基站反饋設(shè)備是否正常運行。幀接收方表示方法與發(fā)送方相同,0x01表示命令是發(fā)送給1號設(shè)備的,其他設(shè)備在接受此命令時不工作。幀類型定義了系統(tǒng)命令表征的不同功能,幀內(nèi)容主要包含了指導(dǎo)接收設(shè)備如何執(zhí)行功能的具體信息,而幀內(nèi)容長度則作為幀內(nèi)容的校驗信息指導(dǎo)接收設(shè)備提取接收信息。在本系統(tǒng)采用一個字節(jié)的0xFE作為結(jié)束碼,當(dāng)系統(tǒng)檢測到此數(shù)據(jù)段的時候跳出系統(tǒng)中斷。表1為通信協(xié)議中幀內(nèi)容的詳細格式。

 

3串口通信數(shù)據(jù)解析及處理

 

3.1逐次比較法

 

這是一種比較基本的方法,首先等待串口數(shù)據(jù),在串口接收中斷服務(wù)程序中每收到一個數(shù)據(jù)就與已知的命令數(shù)據(jù)串進行比較[6],如果不一致則等待新數(shù)據(jù)直到接收的數(shù)據(jù)與包頭信息的第1個數(shù)據(jù)相同。第1個字節(jié)的數(shù)據(jù)比較正確后將收到的第2個字節(jié)與已知數(shù)據(jù)串信息的第2個字節(jié)進行比較,如果不正確則退出此中斷。程序流程如圖3所示。此種方法代碼量小、編程簡單,可用于在主程序中數(shù)據(jù)量較小并且格式相對固定的程序。但是這種方法浪費了大量的中斷進程,并且在每個中斷過程中執(zhí)行命令操作需要消耗較多的機器周期,無法滿足串口數(shù)據(jù)量較大且傳輸較快的情況。

 

3.2基于數(shù)組的FIFO隊列法

 

也有人提出對上述方法的改進,首先定義一個固定長度的全局?jǐn)?shù)組,并將數(shù)組看做是一個先入先出的FIFO隊列[8]。在串口接收中斷中,每接收一個數(shù)據(jù)就保存在此數(shù)組中,將得到的數(shù)據(jù)與已知的命令格式串進行比較,如果正確則將數(shù)組中的所有數(shù)據(jù)向前移動一個字節(jié),串口接收到的新字節(jié)存入數(shù)組末字節(jié)中,將整個數(shù)組與協(xié)議中的包頭信息比較如果正確則置位已同步標(biāo)志位然后開始接收存儲有用數(shù)據(jù)[8],否則繼續(xù)等待同步。其流程圖如圖4所示。此種方法與逐次比較的幀同步方法相比能夠比較快速正確地檢測出同步包頭,但是對數(shù)據(jù)格式要求相對固定,特別是幀內(nèi)容形式比較復(fù)雜的時候難以對數(shù)組的長度進行限制,在提取相關(guān)的信息的時候會浪費大量的時間。

 

3.3基于字符串的狀態(tài)機消息相應(yīng)機制

 

鑒于以上兩種方法的缺點,在本系統(tǒng)中采用基于字符串的狀態(tài)消息響應(yīng)機制,首先將命令轉(zhuǎn)化為字符串的格式,以十六機制代碼發(fā)送給電臺進行傳輸。在接收方,首先檢測同步字符,當(dāng)檢測到同步字符時,響應(yīng)狀態(tài)機消息機制,同時將此字符串依次存入緩存中。由于傳輸距離比較遠,一般存在字符串命令不能在一個機器周期內(nèi)到達的情況,則指定系統(tǒng)一直處于寫緩存狀態(tài)中。當(dāng)?shù)谝粋€機器周期沒有檢測到結(jié)束碼,則將緩存內(nèi)容寫給一個過渡變量,同時清空緩存以完成下一步寫緩存操作。依次進行以上操作,在每一次機器周期結(jié)束后將緩存中的數(shù)據(jù)累加到過渡變量中,直到系統(tǒng)檢測到接收數(shù)據(jù)的最后一個字節(jié)變量為結(jié)束碼,此時將緩存中的變量賦值給消息效應(yīng)命令,開始狀態(tài)機響應(yīng)環(huán)節(jié)。狀態(tài)機狀態(tài)轉(zhuǎn)移圖如圖5所示。當(dāng)

 

數(shù)據(jù)完成初始檢測校驗,即檢測到結(jié)束碼0xFE之后,系統(tǒng)開始狀態(tài)消息響應(yīng)循環(huán),否則超過一定時間沒有結(jié)束校驗,則默認此次命令消息發(fā)送失敗,系統(tǒng)緩存清空,跳出串口中斷。在消息響應(yīng)循環(huán)中,系統(tǒng)會根據(jù)預(yù)先設(shè)定的字符串格式和所檢測到的字符串標(biāo)志位信息,對接收到的有效數(shù)據(jù)進行提取,并賦值給相應(yīng)的變量做下一步的操作。指令操作結(jié)束后,工作設(shè)備將自動返回“命令接受正確”指令,向基站確認此次操作成功。否則任何一步出現(xiàn)錯誤,系統(tǒng)將自動跳出中斷,并返回“命令格式錯誤”指令,提示基站重新發(fā)送命令。工作設(shè)備示例程序段如下:BYTEdata[1024];CStringstr;if(m_MSComm1.GetCommEvent()==2){m_input1=m_MSComm1.GetInput(;m_input2=m_input1;length=m_input2.GetOneDimSize();for(i=0;i<length;i++){m_input2.GetElement(&i,data+i);}m_receivedata.Empty();for(i=0;i<length;i++){chara=*(char*)(data+i);str.Format("%c",a);m_receivedata+=str;//串口消息獲得}guodu+=m_receivedata;guodujieshu=m_receivedata.Mid(length-2,2);if(guodujieshu=="FE"){receivefasongfang=m_receivedata.Mid(2,1);receivejieshu=guodu.Mid(guodu.GetLength()-2,2);}}////////////////////數(shù)據(jù)接收本系統(tǒng)的設(shè)計思路由于采用了基于字符串的狀態(tài)機消息響應(yīng)機制,快速有效地實現(xiàn)了串口通信的同步,而且程序結(jié)構(gòu)清晰、便于維護、也方便日后通訊系統(tǒng)功能升級。并且串口中斷服務(wù)子程序中將有效數(shù)據(jù)提取為不同的字符串變量,方便操作的同時也減少了完成消息響應(yīng)循環(huán)所需要的周期。

Top