日本黄色一级经典视频|伊人久久精品视频|亚洲黄色色周成人视频九九九|av免费网址黄色小短片|黄色Av无码亚洲成年人|亚洲1区2区3区无码|真人黄片免费观看|无码一级小说欧美日免费三级|日韩中文字幕91在线看|精品久久久无码中文字幕边打电话

當(dāng)前位置:首頁 > 通信技術(shù) > 通信技術(shù)
[導(dǎo)讀]摘要:為解決串口通信中的數(shù)據(jù)傳輸容易出錯(cuò)、可靠性差、安全性不高且容錯(cuò)能力低等問題,設(shè)計(jì)并實(shí)現(xiàn)了一種基于狀態(tài)機(jī)的串口通信協(xié)議,并將此協(xié)議應(yīng)用到稱重儀表的上位機(jī)通信中。本文介紹了串口通信協(xié)議的數(shù)據(jù)包格式以

摘要:為解決串口通信中的數(shù)據(jù)傳輸容易出錯(cuò)、可靠性差、安全性不高且容錯(cuò)能力低等問題,設(shè)計(jì)并實(shí)現(xiàn)了一種基于狀態(tài)機(jī)串口通信協(xié)議,并將此協(xié)議應(yīng)用到稱重儀表的上位機(jī)通信中。本文介紹了串口通信協(xié)議的數(shù)據(jù)包格式以及其通信狀態(tài)機(jī),并給出了協(xié)議實(shí)現(xiàn)的部分示例代碼及算法流程圖。在數(shù)據(jù)包格式定義中通過設(shè)置起始標(biāo)志、數(shù)據(jù)長(zhǎng)度、校驗(yàn)、結(jié)束標(biāo)志等字段,保證數(shù)據(jù)傳輸?shù)恼_性;并在數(shù)據(jù)包接收過程中引入狀態(tài)機(jī)方法,簡(jiǎn)化編程模型的同時(shí),提高了通信過程的可靠性、安全性以及數(shù)據(jù)傳輸?shù)娜蒎e(cuò)能力。
關(guān)鍵詞:狀態(tài)機(jī);串口;通信協(xié)議;ATmega168;線程

    串行通信接口(如RS232、RS485等)作為計(jì)算機(jī)與單片機(jī)交互數(shù)據(jù)的主要接口,廣泛用于各類儀器儀表、工業(yè)監(jiān)測(cè)及自動(dòng)控制領(lǐng)域中。通信協(xié)議是需要通信的雙方所達(dá)成的一種約定,它對(duì)包括數(shù)據(jù)格式、同步方式、傳送速度、傳送步驟、檢糾錯(cuò)方式以及控制字符定義等問題作出統(tǒng)一規(guī)定,在雙方的通信中必須共同遵守。在實(shí)際應(yīng)用系統(tǒng)中,如果缺少一個(gè)嚴(yán)格、合理、規(guī)范的串口通信協(xié)議,將無法保證數(shù)據(jù)傳輸?shù)恼_性及通信的可靠性。因此,文中提出一種基于狀態(tài)機(jī)串口通信協(xié)議的設(shè)計(jì)方法:通過合理地設(shè)置數(shù)據(jù)包格式來保證了數(shù)據(jù)傳輸?shù)恼_性:引入了狀態(tài)機(jī)方法,簡(jiǎn)化了協(xié)議的實(shí)現(xiàn)難度,提高了通信的可靠性,同時(shí)使通信過程具有較高的容錯(cuò)能力。

1 定義數(shù)據(jù)包格式
    串口通信中最小的的信息單元是數(shù)據(jù)幀。一個(gè)數(shù)據(jù)幀通常包括起始位、數(shù)據(jù)位、結(jié)束位,另外還可以包含用于檢測(cè)傳輸錯(cuò)誤的“奇偶校驗(yàn)位”,每個(gè)數(shù)據(jù)幀中傳輸?shù)臄?shù)據(jù)位可以有5、6、7、8或9個(gè)。
    實(shí)際通信過程中,數(shù)據(jù)的發(fā)送是一幀一幀地進(jìn)行,當(dāng)被傳輸?shù)臄?shù)據(jù)超過一幀時(shí)(例如浮點(diǎn)型數(shù)據(jù)),如果沒有對(duì)數(shù)據(jù)幀進(jìn)行必要的打包,發(fā)送出去的數(shù)據(jù)將會(huì)很難被數(shù)據(jù)接收方解釋與分析,進(jìn)而造成數(shù)據(jù)傳輸混亂與錯(cuò)誤。因此,在一般應(yīng)用中有必要將數(shù)據(jù)幀組裝成數(shù)據(jù)包再發(fā)送。為了保證數(shù)據(jù)傳輸?shù)恼_性,將數(shù)據(jù)包定義為如圖1所示。


    1)起始標(biāo)志表示開始接收一個(gè)新的數(shù)據(jù)包,本協(xié)議中規(guī)定為0x55。
    2)數(shù)據(jù)長(zhǎng)度命令和附加數(shù)據(jù)共占的字節(jié)數(shù)。設(shè)置此字段,可方便接收方識(shí)別數(shù)據(jù)包的長(zhǎng)度并能夠準(zhǔn)確地接收數(shù)據(jù)包。
    3)命令用來說明數(shù)據(jù)包的用途。
    4)附加數(shù)據(jù) 當(dāng)命令不同時(shí),含義不同。例如,當(dāng)命令表示數(shù)據(jù)包的用途為質(zhì)量時(shí),附加數(shù)據(jù)用來保存質(zhì)量數(shù)據(jù)。
    5)校驗(yàn)是對(duì)命令字段與附加數(shù)據(jù)字段的所有字節(jié)數(shù)據(jù)的異或校驗(yàn)。
    6)結(jié)束標(biāo)志表示該數(shù)據(jù)包結(jié)束,本協(xié)議中規(guī)定為0x56。
    另外,在多機(jī)通信中,數(shù)據(jù)包中還應(yīng)增加源地址與設(shè)備地址等字段。這里主要介紹上位機(jī)與下位機(jī)之間的通信,因此無需設(shè)置源地址與設(shè)備地址等字段。

2 通信狀態(tài)機(jī)
2.1 狀態(tài)機(jī)簡(jiǎn)介
    狀態(tài)機(jī)由事物所處的狀態(tài)及引發(fā)狀態(tài)變化的外部事件兩部分組成。在軟件編程中,事物所處的狀態(tài)可以描述為某個(gè)程序片斷或函數(shù),而引發(fā)狀態(tài)變化的處部條件可以理解為條件判斷語句,當(dāng)條件為真時(shí),事物的狀態(tài)發(fā)生變化。事物發(fā)生變化前的狀態(tài)稱為現(xiàn)態(tài),變化后的狀態(tài)稱為次態(tài),程序中可以通過不同的數(shù)字對(duì)不同的狀態(tài)進(jìn)行編號(hào)。現(xiàn)態(tài)到次態(tài)的變化可以通過狀態(tài)變量值的改變來描述。
    本協(xié)議中需要傳輸?shù)幕拘畔卧菙?shù)據(jù)包,數(shù)據(jù)包一般包含多個(gè)數(shù)據(jù)幀。實(shí)際傳輸過程中,數(shù)據(jù)的傳輸通常是一幀一幀地進(jìn)行,數(shù)據(jù)包是被拆分成若干幀數(shù)據(jù)后再進(jìn)行傳輸,數(shù)據(jù)接受方也是分幀接受一個(gè)數(shù)據(jù)包。數(shù)據(jù)接受方在解釋與分析數(shù)據(jù)包時(shí)可能存在兩個(gè)問題:
    1)識(shí)別并接收完整的數(shù)據(jù)包
    對(duì)于數(shù)據(jù)接收方,一個(gè)數(shù)據(jù)包是分若干批到來,在識(shí)別包頭與包尾時(shí),也就是幀同步問題,具體編程時(shí)存在難度,特別對(duì)于已接收部分與未接收部分以及數(shù)據(jù)接收的進(jìn)度及狀態(tài)的處理。
    2)數(shù)據(jù)傳輸時(shí)的容錯(cuò)能力
    數(shù)據(jù)傳輸過程中已經(jīng)出現(xiàn)錯(cuò)誤時(shí),系統(tǒng)應(yīng)該具有擺脫錯(cuò)誤狀態(tài),恢復(fù)到正常狀態(tài)的能力。例如,當(dāng)一個(gè)數(shù)據(jù)包只傳輸完一部分時(shí),因?yàn)槲粗收?,下一個(gè)數(shù)據(jù)包就開始傳輸,系統(tǒng)應(yīng)該能識(shí)別出傳輸錯(cuò)誤,拋棄前一個(gè)出錯(cuò)的數(shù)據(jù)包,并且能正確接收下一個(gè)數(shù)據(jù)包。實(shí)際編程時(shí)處理這種問題難度較大,結(jié)果很可能會(huì)出現(xiàn)將第一個(gè)數(shù)據(jù)包的前一部分與第二個(gè)數(shù)據(jù)包的前一部分拼裝成一個(gè)新的數(shù)據(jù)包的情況,這就損失了兩個(gè)數(shù)據(jù)包,最嚴(yán)重的結(jié)果可能是系統(tǒng)無法從錯(cuò)誤中恢復(fù),這就嚴(yán)重降低了系統(tǒng)的安全性與可靠性。
    為解決上面提出的兩個(gè)問題,本協(xié)議引入了狀態(tài)機(jī)。在狀態(tài)機(jī)中,狀態(tài)的變化依賴于外部觸發(fā)條件,當(dāng)條件滿足時(shí),狀態(tài)將發(fā)生變化。本協(xié)議中將數(shù)據(jù)包接收的各個(gè)階段定義為不同的狀態(tài),將接收一幀新的數(shù)據(jù)或數(shù)據(jù)處理的結(jié)果作為外部觸發(fā)條件,從而達(dá)到狀態(tài)改變的目的,最終完成一個(gè)數(shù)據(jù)包的接收與校驗(yàn)。
2.2 串口通信狀態(tài)圖
    串口通信協(xié)議中,發(fā)送數(shù)據(jù)包時(shí)一般不需引入狀態(tài)機(jī),這主要是為提高發(fā)送速率和簡(jiǎn)化編程模型而考慮的。本協(xié)議中主要針對(duì)數(shù)據(jù)接收過程建立狀態(tài)機(jī)。數(shù)據(jù)接收狀態(tài)圖如圖2所示。


    串口通信的數(shù)據(jù)接收過程如下:當(dāng)未開始接收數(shù)據(jù)包或發(fā)現(xiàn)數(shù)據(jù)傳輸出錯(cuò)時(shí),系統(tǒng)進(jìn)入空閑狀態(tài);當(dāng)數(shù)接收到數(shù)據(jù)包0x55(起始標(biāo)志)時(shí),變?yōu)槭盏狡鹗紭?biāo)志狀態(tài),如果收到的數(shù)據(jù)不為0x55,系統(tǒng)繼續(xù)保持空閑狀態(tài);進(jìn)入收到起始標(biāo)志狀態(tài)后,新接收到的任何數(shù)據(jù)將被當(dāng)作數(shù)據(jù)包中命令與附加數(shù)據(jù)的總字節(jié)數(shù)(記為L(zhǎng)EN),系統(tǒng)進(jìn)入收到數(shù)據(jù)長(zhǎng)度狀態(tài);繼續(xù)接收新的數(shù)據(jù),直至接到新收到的數(shù)據(jù)總字節(jié)數(shù)達(dá)到LEN +2,進(jìn)入檢驗(yàn)結(jié)束標(biāo)志狀態(tài);這時(shí)可以檢驗(yàn)結(jié)束標(biāo)志是否為0x56,如果是,說明傳輸正確,否則傳輸出錯(cuò),出錯(cuò)后應(yīng)查找接收緩沖區(qū)中本數(shù)據(jù)包的起始標(biāo)志后有無其它起始標(biāo)志,如果沒有發(fā)現(xiàn)起始標(biāo)志,系統(tǒng)應(yīng)進(jìn)入空閑狀態(tài),否則應(yīng)直接進(jìn)入接收到起始標(biāo)志狀態(tài),這樣可提高系統(tǒng)容錯(cuò)能力,方便系統(tǒng)從錯(cuò)誤中恢復(fù)。檢驗(yàn)結(jié)柬標(biāo)志正確后,進(jìn)入數(shù)據(jù)校驗(yàn)狀態(tài);校驗(yàn)結(jié)果如果正確,數(shù)據(jù)包接收完成,否則說明傳輸出錯(cuò),系統(tǒng)進(jìn)入空閑狀態(tài)。

3 協(xié)議實(shí)現(xiàn)
    下位機(jī)采用ATMEL公司的AVR系列單片機(jī)ATmega168作為其核心控制單元;上位機(jī)軟件采用Delphi 7.0編寫,Delphi 7.0是Borland公司開發(fā)的基于Windows平臺(tái)的面向?qū)ο蟮目焖賾?yīng)用程序開發(fā)工具。本協(xié)議上位機(jī)程序采用Delphi開發(fā),主要考慮到Delphi易于實(shí)現(xiàn)多線程編程。另外,Delphi開發(fā)程序的簡(jiǎn)單、高效,也是上位機(jī)軟件選擇其作為開發(fā)工具的重要原因。
    串口通信協(xié)議包括發(fā)送與接收兩部分。在本系統(tǒng)中,下位機(jī)負(fù)責(zé)發(fā)送數(shù)據(jù),上位機(jī)負(fù)責(zé)接收數(shù)據(jù),而另一種情況:下位機(jī)接收、上位機(jī)發(fā)送,其處理方法與前面一種相似。因此,這里僅介紹下位機(jī)發(fā)送數(shù)據(jù)、上位機(jī)負(fù)責(zé)接收數(shù)據(jù)的實(shí)現(xiàn)。
    下位機(jī)串口通信發(fā)送程序由于不考慮狀態(tài)機(jī),實(shí)現(xiàn)較為簡(jiǎn)單,其示例代碼如下:
   
   
    上位機(jī)軟件中,當(dāng)接收到數(shù)據(jù)時(shí),串口控件會(huì)觸發(fā)一個(gè)事件,在事件處理代碼中應(yīng)及時(shí)將收到的數(shù)據(jù)存入接收沖區(qū),同時(shí)不應(yīng)該把串口通信協(xié)議接收部分的代碼放置在此事件中,否則后面到來的數(shù)據(jù)可能因?yàn)榍懊嫦鹊降臄?shù)據(jù)沒有及時(shí)處理完畢而被沖掉,導(dǎo)致數(shù)據(jù)丟失。因此,在上位機(jī)軟件運(yùn)行時(shí),應(yīng)該啟動(dòng)一個(gè)Windows線程,用于不斷檢測(cè)接收緩沖區(qū)是否為空,不為空時(shí)則對(duì)緩沖中的數(shù)據(jù)進(jìn)行處理,創(chuàng)建一個(gè)名為TBufferThread的線程類:
   
   
    線程類創(chuàng)建好后,應(yīng)具體編寫TBufferThread線程類成員函數(shù)Execute的處理過程,其算法流程圖如圖3所示。


    依據(jù)流程圖,編寫代碼如下:
   
   
   
    數(shù)據(jù)包的接收進(jìn)度依據(jù)于狀態(tài)指示變量sp。當(dāng)數(shù)據(jù)接收順利時(shí),sp的變化將會(huì)引導(dǎo)完成一個(gè)數(shù)據(jù)包的接收過程,這樣處理可以簡(jiǎn)化編程的模型,使協(xié)議易于實(shí)現(xiàn);數(shù)據(jù)包接收過程中,一旦發(fā)現(xiàn)數(shù)據(jù)傳輸出錯(cuò),立即將sp置為0(空閑狀態(tài)),也就是狀態(tài)復(fù)位,使系統(tǒng)進(jìn)入準(zhǔn)備接收下一個(gè)數(shù)據(jù)包的狀態(tài),這樣可提高通信過程的可靠性及容錯(cuò)能力。


    為檢驗(yàn)測(cè)試串通信協(xié)議的合理性及可靠性,將其應(yīng)用到某稱重儀表的上位機(jī)通信中,其上位機(jī)程序主界面如圖4所示。程序主界面的點(diǎn)陣字體顯示的是由下位機(jī)傳送的質(zhì)量數(shù)據(jù),而正中間顯示的是由下位機(jī)上傳的A/D數(shù)據(jù)形成的曲線,最下方顯示的是對(duì)接收的數(shù)據(jù)處理的狀態(tài)指示。經(jīng)過大量測(cè)試表明,本串口通信協(xié)議設(shè)計(jì)合理,可靠性較高。

4 結(jié)論
    文中主要介紹串口通信協(xié)議的設(shè)計(jì)與實(shí)現(xiàn),其中包括數(shù)據(jù)包格式的定義、通信狀態(tài)機(jī)的設(shè)計(jì)以及協(xié)議的實(shí)現(xiàn),并將此協(xié)議應(yīng)用到某稱重儀表的上位機(jī)通信中。串口通信中引入狀態(tài)機(jī)方法,便于解決幀同步問題,使協(xié)議易于實(shí)現(xiàn),同時(shí)增加了系統(tǒng)的穩(wěn)定性與可靠性。因此,可廣泛用于各類儀器儀表、工業(yè)控制領(lǐng)域中,具有一定的實(shí)用價(jià)值。

本站聲明: 本文章由作者或相關(guān)機(jī)構(gòu)授權(quán)發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點(diǎn),本站亦不保證或承諾內(nèi)容真實(shí)性等。需要轉(zhuǎn)載請(qǐng)聯(lián)系該專欄作者,如若文章內(nèi)容侵犯您的權(quán)益,請(qǐng)及時(shí)聯(lián)系本站刪除。
換一批
延伸閱讀

LED驅(qū)動(dòng)電源的輸入包括高壓工頻交流(即市電)、低壓直流、高壓直流、低壓高頻交流(如電子變壓器的輸出)等。

關(guān)鍵字: 驅(qū)動(dòng)電源

在工業(yè)自動(dòng)化蓬勃發(fā)展的當(dāng)下,工業(yè)電機(jī)作為核心動(dòng)力設(shè)備,其驅(qū)動(dòng)電源的性能直接關(guān)系到整個(gè)系統(tǒng)的穩(wěn)定性和可靠性。其中,反電動(dòng)勢(shì)抑制與過流保護(hù)是驅(qū)動(dòng)電源設(shè)計(jì)中至關(guān)重要的兩個(gè)環(huán)節(jié),集成化方案的設(shè)計(jì)成為提升電機(jī)驅(qū)動(dòng)性能的關(guān)鍵。

關(guān)鍵字: 工業(yè)電機(jī) 驅(qū)動(dòng)電源

LED 驅(qū)動(dòng)電源作為 LED 照明系統(tǒng)的 “心臟”,其穩(wěn)定性直接決定了整個(gè)照明設(shè)備的使用壽命。然而,在實(shí)際應(yīng)用中,LED 驅(qū)動(dòng)電源易損壞的問題卻十分常見,不僅增加了維護(hù)成本,還影響了用戶體驗(yàn)。要解決這一問題,需從設(shè)計(jì)、生...

關(guān)鍵字: 驅(qū)動(dòng)電源 照明系統(tǒng) 散熱

根據(jù)LED驅(qū)動(dòng)電源的公式,電感內(nèi)電流波動(dòng)大小和電感值成反比,輸出紋波和輸出電容值成反比。所以加大電感值和輸出電容值可以減小紋波。

關(guān)鍵字: LED 設(shè)計(jì) 驅(qū)動(dòng)電源

電動(dòng)汽車(EV)作為新能源汽車的重要代表,正逐漸成為全球汽車產(chǎn)業(yè)的重要發(fā)展方向。電動(dòng)汽車的核心技術(shù)之一是電機(jī)驅(qū)動(dòng)控制系統(tǒng),而絕緣柵雙極型晶體管(IGBT)作為電機(jī)驅(qū)動(dòng)系統(tǒng)中的關(guān)鍵元件,其性能直接影響到電動(dòng)汽車的動(dòng)力性能和...

關(guān)鍵字: 電動(dòng)汽車 新能源 驅(qū)動(dòng)電源

在現(xiàn)代城市建設(shè)中,街道及停車場(chǎng)照明作為基礎(chǔ)設(shè)施的重要組成部分,其質(zhì)量和效率直接關(guān)系到城市的公共安全、居民生活質(zhì)量和能源利用效率。隨著科技的進(jìn)步,高亮度白光發(fā)光二極管(LED)因其獨(dú)特的優(yōu)勢(shì)逐漸取代傳統(tǒng)光源,成為大功率區(qū)域...

關(guān)鍵字: 發(fā)光二極管 驅(qū)動(dòng)電源 LED

LED通用照明設(shè)計(jì)工程師會(huì)遇到許多挑戰(zhàn),如功率密度、功率因數(shù)校正(PFC)、空間受限和可靠性等。

關(guān)鍵字: LED 驅(qū)動(dòng)電源 功率因數(shù)校正

在LED照明技術(shù)日益普及的今天,LED驅(qū)動(dòng)電源的電磁干擾(EMI)問題成為了一個(gè)不可忽視的挑戰(zhàn)。電磁干擾不僅會(huì)影響LED燈具的正常工作,還可能對(duì)周圍電子設(shè)備造成不利影響,甚至引發(fā)系統(tǒng)故障。因此,采取有效的硬件措施來解決L...

關(guān)鍵字: LED照明技術(shù) 電磁干擾 驅(qū)動(dòng)電源

開關(guān)電源具有效率高的特性,而且開關(guān)電源的變壓器體積比串聯(lián)穩(wěn)壓型電源的要小得多,電源電路比較整潔,整機(jī)重量也有所下降,所以,現(xiàn)在的LED驅(qū)動(dòng)電源

關(guān)鍵字: LED 驅(qū)動(dòng)電源 開關(guān)電源

LED驅(qū)動(dòng)電源是把電源供應(yīng)轉(zhuǎn)換為特定的電壓電流以驅(qū)動(dòng)LED發(fā)光的電壓轉(zhuǎn)換器,通常情況下:LED驅(qū)動(dòng)電源的輸入包括高壓工頻交流(即市電)、低壓直流、高壓直流、低壓高頻交流(如電子變壓器的輸出)等。

關(guān)鍵字: LED 隧道燈 驅(qū)動(dòng)電源
關(guān)閉