999精品在线视频,手机成人午夜在线视频,久久不卡国产精品无码,中日无码在线观看,成人av手机在线观看,日韩精品亚洲一区中文字幕,亚洲av无码人妻,四虎国产在线观看 ?

一種基于狀態(tài)機(jī)的串口通信協(xié)議的設(shè)計與實現(xiàn)

2012-09-26 02:26:42瑩,
電子設(shè)計工程 2012年7期

李 瑩, 賈 彬

(1.太原理工大學(xué) 信息工程學(xué)院,山西 太原 030024;2.山西省萬立科技有限公司 山西 太原 030032)

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

1 定義數(shù)據(jù)包格式

串口通信中最小的的信息單元是數(shù)據(jù)幀。一個數(shù)據(jù)幀通常包括起始位、數(shù)據(jù)位、結(jié)束位,另外還可以包含用于檢測傳輸錯誤的“奇偶校驗位”,每個數(shù)據(jù)幀中傳輸?shù)臄?shù)據(jù)位可以有5、6、7、8 或 9 個[2]。

實際通信過程中,數(shù)據(jù)的發(fā)送是一幀一幀地進(jìn)行,當(dāng)被傳輸?shù)臄?shù)據(jù)超過一幀時(例如浮點型數(shù)據(jù)),如果沒有對數(shù)據(jù)幀進(jìn)行必要的打包,發(fā)送出去的數(shù)據(jù)將會很難被數(shù)據(jù)接收方解釋與分析,進(jìn)而造成數(shù)據(jù)傳輸混亂與錯誤。因此,在一般應(yīng)用中有必要將數(shù)據(jù)幀組裝成數(shù)據(jù)包再發(fā)送。為了保證數(shù)據(jù)傳輸?shù)恼_性,將數(shù)據(jù)包定義為如圖1所示。

圖1 串口通信數(shù)據(jù)包格式Fig.1 Data packet format of serial communication

1)起始標(biāo)志 表示開始接收一個新的數(shù)據(jù)包,本協(xié)議中規(guī)定為0x55。

2)數(shù)據(jù)長度 命令和附加數(shù)據(jù)共占的字節(jié)數(shù)。設(shè)置此字段,可方便接收方識別數(shù)據(jù)包的長度并能夠準(zhǔn)確地接收數(shù)據(jù)包。

3)命令 用來說明數(shù)據(jù)包的用途。

4)附加數(shù)據(jù) 當(dāng)命令不同時,含義不同。例如,當(dāng)命令表示數(shù)據(jù)包的用途為質(zhì)量時,附加數(shù)據(jù)用來保存質(zhì)量數(shù)據(jù)。

5)校驗 是對命令字段與附加數(shù)據(jù)字段的所有字節(jié)數(shù)據(jù)的異或校驗。

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ī)簡介

狀態(tài)機(jī)由事物所處的狀態(tài)及引發(fā)狀態(tài)變化的外部事件兩部分組成。在軟件編程中,事物所處的狀態(tài)可以描述為某個程序片斷或函數(shù),而引發(fā)狀態(tài)變化的處部條件可以理解為條件判斷語句,當(dāng)條件為真時,事物的狀態(tài)發(fā)生變化。事物發(fā)生變化前的狀態(tài)稱為現(xiàn)態(tài),變化后的狀態(tài)稱為次態(tài),程序中可以通過不同的數(shù)字對不同的狀態(tài)進(jìn)行編號?,F(xiàn)態(tài)到次態(tài)的變化可以通過狀態(tài)變量值的改變來描述。

本協(xié)議中需要傳輸?shù)幕拘畔卧菙?shù)據(jù)包,數(shù)據(jù)包一般包含多個數(shù)據(jù)幀。實際傳輸過程中,數(shù)據(jù)的傳輸通常是一幀一幀地進(jìn)行,數(shù)據(jù)包是被拆分成若干幀數(shù)據(jù)后再進(jìn)行傳輸,數(shù)據(jù)接受方也是分幀接受一個數(shù)據(jù)包。數(shù)據(jù)接受方在解釋與分析數(shù)據(jù)包時可能存在兩個問題:

1)識別并接收完整的數(shù)據(jù)包

對于數(shù)據(jù)接收方,一個數(shù)據(jù)包是分若干批到來,在識別包頭與包尾時,也就是幀同步問題,具體編程時存在難度,特別對于已接收部分與未接收部分以及數(shù)據(jù)接收的進(jìn)度及狀態(tài)的處理。

2)數(shù)據(jù)傳輸時的容錯能力

數(shù)據(jù)傳輸過程中已經(jīng)出現(xiàn)錯誤時,系統(tǒng)應(yīng)該具有擺脫錯誤狀態(tài),恢復(fù)到正常狀態(tài)的能力。例如,當(dāng)一個數(shù)據(jù)包只傳輸完一部分時,因為未知故障,下一個數(shù)據(jù)包就開始傳輸,系統(tǒng)應(yīng)該能識別出傳輸錯誤,拋棄前一個出錯的數(shù)據(jù)包,并且能正確接收下一個數(shù)據(jù)包。實際編程時處理這種問題難度較大,結(jié)果很可能會出現(xiàn)將第一個數(shù)據(jù)包的前一部分與第二個數(shù)據(jù)包的前一部分拼裝成一個新的數(shù)據(jù)包的情況,這就損失了兩個數(shù)據(jù)包,最嚴(yán)重的結(jié)果可能是系統(tǒng)無法從錯誤中恢復(fù),這就嚴(yán)重降低了系統(tǒng)的安全性與可靠性。

為解決上面提出的兩個問題,本協(xié)議引入了狀態(tài)機(jī)。在狀態(tài)機(jī)中,狀態(tài)的變化依賴于外部觸發(fā)條件,當(dāng)條件滿足時,狀態(tài)將發(fā)生變化。本協(xié)議中將數(shù)據(jù)包接收的各個階段定義為不同的狀態(tài),將接收一幀新的數(shù)據(jù)或數(shù)據(jù)處理的結(jié)果作為外部觸發(fā)條件,從而達(dá)到狀態(tài)改變的目的,最終完成一個數(shù)據(jù)包的接收與校驗。

2.2 串口通信狀態(tài)圖

串口通信協(xié)議中,發(fā)送數(shù)據(jù)包時一般不需引入狀態(tài)機(jī),這主要是為提高發(fā)送速率和簡化編程模型而考慮的。本協(xié)議中主要針對數(shù)據(jù)接收過程建立狀態(tài)機(jī)。數(shù)據(jù)接收狀態(tài)圖如圖2所示。

圖2 串口通信數(shù)據(jù)接收狀態(tài)圖Fig.2 Sate diagram of data receiving for serial communication

串口通信的數(shù)據(jù)接收過程如下:當(dāng)未開始接收數(shù)據(jù)包或發(fā)現(xiàn)數(shù)據(jù)傳輸出錯時,系統(tǒng)進(jìn)入空閑狀態(tài);當(dāng)數(shù)接收到數(shù)據(jù)包0x55(起始標(biāo)志)時,變?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ù)(記為LEN),系統(tǒng)進(jìn)入收到數(shù)據(jù)長度狀態(tài);繼續(xù)接收新的數(shù)據(jù),直至接到新收到的數(shù)據(jù)總字節(jié)數(shù)達(dá)到LEN+2,進(jìn)入檢驗結(jié)束標(biāo)志狀態(tài);這時可以檢驗結(jié)束標(biāo)志是否為0x56,如果是,說明傳輸正確,否則傳輸出錯,出錯后應(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)容錯能力,方便系統(tǒng)從錯誤中恢復(fù)。檢驗結(jié)束標(biāo)志正確后,進(jìn)入數(shù)據(jù)校驗狀態(tài);校驗結(jié)果如果正確,數(shù)據(jù)包接收完成,否則說明傳輸出錯,系統(tǒng)進(jìn)入空閑狀態(tài)。

3 協(xié)議實現(xiàn)

下位機(jī)采用ATMEL公司的AVR系列單片機(jī)ATmega168作為其核心控制單元;上位機(jī)軟件采用Delphi 7.0編寫,Delphi 7.0是Borland公司開發(fā)的基于Windows平臺的面向?qū)ο蟮目焖賾?yīng)用程序開發(fā)工具。本協(xié)議上位機(jī)程序采用Delphi開發(fā),主要考慮到Delphi易于實現(xiàn)多線程編程。另外,Delphi開發(fā)程序的簡單、高效,也是上位機(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ù)的實現(xiàn)。

下位機(jī)串口通信發(fā)送程序由于不考慮狀態(tài)機(jī),實現(xiàn)較為簡單,其示例代碼如下:

上位機(jī)軟件中,當(dāng)接收到數(shù)據(jù)時,串口控件會觸發(fā)一個事件,在事件處理代碼中應(yīng)及時將收到的數(shù)據(jù)存入接收沖區(qū),同時不應(yīng)該把串口通信協(xié)議接收部分的代碼放置在此事件中,否則后面到來的數(shù)據(jù)可能因為前面先到的數(shù)據(jù)沒有及時處理完畢而被沖掉,導(dǎo)致數(shù)據(jù)丟失。因此,在上位機(jī)軟件運行時,應(yīng)該啟動一個Windows線程,用于不斷檢測接收緩沖區(qū)是否為空,不為空時則對緩沖中的數(shù)據(jù)進(jìn)行處理,創(chuàng)建一個名為TBufferThread的線程類:

線程類創(chuàng)建好后,應(yīng)具體編寫TBufferThread線程類成員函數(shù)Execute的處理過程,其算法流程圖如圖3所示。

圖3 串口通信數(shù)據(jù)接收算法流程圖Fig.3 Flow chart of data receiving for serial communication

依據(jù)流程圖,編寫代碼如下:

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

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

圖4 程序主界面Fig.4 Main interface of the program

4 結(jié) 論

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

[1]謝春生,宋坦路,石成.串口通信協(xié)議的制定方法[J].黑龍江科技信息,2009(33):83.

XIE Chun-sheng,SONG Tan-lu,SHI Cheng.The methods of formulating serial port communication protocol[J].Heilongjiang Science and Technology Information,2009(33):83.

[2]江海波,王卓然,耿德根.深入淺出AVR單片機(jī)—從ATmega 48/88/168開始[M].1版.北京:中國電力出版社,2008.

[3]張敏,張純偉.基于RS-232標(biāo)準(zhǔn)的一種實用串行通信協(xié)議的設(shè)計與實現(xiàn)[J].電腦知識與技術(shù),2009,5(6):1369-1371.

ZHANG Min,ZHANG Chun-wei.The design and implementation of the utility serial port communication protocol based on RS-232 standard[J].Computer Knowledge and Technology,2009,5(6):1369-1371.

[4]林雪梅,彭佳紅,姚志成.單片機(jī)多機(jī)通信協(xié)議的設(shè)計[J].微計算機(jī)信息,2006,22(2-2):24-26,125.

LIN Xue-mei,PENG Jia-hong,YAO Zhi-cheng.The design of many of single-chip microcomputer communication protocl[J].Control and Automation,2006,22(2-2):24-26,125.

[5]王麗,雷秀,余建國.基于PC機(jī)與單片機(jī)AT89C52的串行通信協(xié)議設(shè)計[J].機(jī)電工程技術(shù),2006,35(2):19-21.

WANG Li,LEI Xiu,YU Jian-guo.The design of serial port communication protocol based on personal computer and AT89C52[J].Mechanical and Electrical Engineering Technology,2006,35(2):19-21.

[6]五承君.自定義串口數(shù)據(jù)通信協(xié)義的分析與設(shè)計[J].計算機(jī)工程,2004,30(24):192-194.

WU Cheng-jun.The analysis and design of user-defined serial communication protocol[J].Computer Engineering,2004,30(24):192-194.

主站蜘蛛池模板: av一区二区三区在线观看| 福利一区三区| 在线免费亚洲无码视频| 免费可以看的无遮挡av无码| 五月天久久综合| 国产精品美人久久久久久AV| 青青网在线国产| 2021天堂在线亚洲精品专区| 精品福利视频网| 2022国产无码在线| 久久精品嫩草研究院| 国产在线八区| 欧美α片免费观看| 97狠狠操| 久久亚洲日本不卡一区二区| 精品一区二区三区自慰喷水| 国产精品极品美女自在线网站| 狠狠色狠狠综合久久| 亚洲大尺码专区影院| 成人国产一区二区三区| 毛片一区二区在线看| 国产人妖视频一区在线观看| 亚洲美女视频一区| 久久香蕉欧美精品| 国产婬乱a一级毛片多女| 亚洲综合色在线| 日韩欧美色综合| 色综合久久88| 亚洲va在线观看| 91小视频在线| 中国一级特黄大片在线观看| 国产成人综合亚洲欧美在| 伊人久久大香线蕉aⅴ色| 狠狠色噜噜狠狠狠狠色综合久 | 欧洲一区二区三区无码| 亚洲 欧美 偷自乱 图片 | 手机精品视频在线观看免费| 亚洲中文字幕在线精品一区| 国产成人精品免费av| 免费人成网站在线高清| 丰满人妻中出白浆| 国产第四页| 国产欧美自拍视频| 乱人伦视频中文字幕在线| 爆乳熟妇一区二区三区| 五月天婷婷网亚洲综合在线| 亚洲AV永久无码精品古装片| 国产美女自慰在线观看| 欧美成人影院亚洲综合图| 国产精品真实对白精彩久久| 亚洲欧洲国产成人综合不卡| 亚洲国模精品一区| 国产激爽大片高清在线观看| 国产精品成人一区二区不卡| 超清无码熟妇人妻AV在线绿巨人| 欧美日韩一区二区在线播放| 国产精品性| 中日韩欧亚无码视频| 干中文字幕| 亚洲乱码在线视频| 国产高清无码麻豆精品| 亚洲精品天堂在线观看| 免费一极毛片| 日本免费a视频| 国产精品无码AⅤ在线观看播放| 国产精品免费露脸视频| 久久香蕉国产线看观看精品蕉| 亚洲中文字幕在线精品一区| 白丝美女办公室高潮喷水视频| 亚洲一区二区约美女探花| 久久久噜噜噜| 国产精品美女免费视频大全 | 内射人妻无套中出无码| 亚洲精品无码日韩国产不卡| 成人一区在线| 又黄又湿又爽的视频| 久草青青在线视频| 午夜久久影院| 欧美成人影院亚洲综合图| 99热国产这里只有精品9九 | 国产午夜福利亚洲第一| 亚洲男人天堂网址|