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

一種高效的串行通信協(xié)議的制定及實(shí)現(xiàn)

2010-08-08 00:51:56宋兵躍吳軍輝楊學(xué)軍

宋兵躍 ,吳軍輝 ,楊學(xué)軍 ,黃 斌

(1.同濟(jì)大學(xué) 現(xiàn)代農(nóng)業(yè)科學(xué)與工程研究院,上海 200092;2.教育部設(shè)施農(nóng)業(yè)網(wǎng)上合作中心,上海 200092)

1 串行通信介紹

串行通信是將數(shù)據(jù)分成若干二進(jìn)制位(bit),然后通過(guò)一條線路或一個(gè)通信信道,按照規(guī)定的規(guī)程逐位依次進(jìn)行傳輸,實(shí)現(xiàn)計(jì)算機(jī)與計(jì)算機(jī)或計(jì)算機(jī)與外部設(shè)備之間的通信(數(shù)據(jù)交換)。串行通信具有占用硬件資源少、可大幅度降低通信線路成本、簡(jiǎn)化通信設(shè)備、應(yīng)用靈活、易維護(hù)等諸多優(yōu)點(diǎn),在工業(yè)控制、電力通信、智能儀表等領(lǐng)域得到了廣泛應(yīng)用[1]。

EIA-RS232、EIA-RS485、電流環(huán)、CAN 等串行通信方式是通信領(lǐng)域中應(yīng)用廣泛的串行接口。EIA-RS232是全雙工的通信模式,可保證短距離點(diǎn)對(duì)點(diǎn)的高速傳輸,EIA-RS485實(shí)現(xiàn)了較長(zhǎng)距離下的多點(diǎn)互聯(lián)通信。CAN屬于現(xiàn)場(chǎng)總線的范疇,采用了多主機(jī)制,改善了在集散控制系統(tǒng)下的主從通信模式[2]。隨著應(yīng)用需求的復(fù)雜化,對(duì)串行通信的性能、通信效率的提升需求越來(lái)越明顯。如何制定一套切實(shí)可行、簡(jiǎn)單易用,又能大幅度提高串行通信效率的通信協(xié)議;如何在PC端、嵌入式系統(tǒng)端構(gòu)建一個(gè)高效的串行數(shù)據(jù)處理的應(yīng)用程序,是串行通信協(xié)議中等待解決的問(wèn)題。本文將以加油站信息管理系統(tǒng)為例,介紹串行通信協(xié)議的制定以及高效通信數(shù)據(jù)處理的實(shí)現(xiàn)。

2 串行通信協(xié)議的設(shè)計(jì)

2.1 系統(tǒng)總體結(jié)構(gòu)

圖1 集散控制系統(tǒng)結(jié)構(gòu)圖

加油站信息管理系統(tǒng)的結(jié)構(gòu)如圖1所示,每臺(tái)加油機(jī)為一個(gè)應(yīng)用節(jié)點(diǎn)(即圖1中的控制點(diǎn)),通過(guò)半雙工RS-485總線連接至通信控制器,在RS-485網(wǎng)絡(luò)中,通信控制器為主機(jī)(Master),各加油機(jī)為從機(jī)(Slave),構(gòu)成一個(gè)主從通信的網(wǎng)絡(luò)架構(gòu)。在多種串行接口標(biāo)準(zhǔn)中,RS-485接口結(jié)構(gòu)簡(jiǎn)單、通信速率高、傳輸距離遠(yuǎn)、使用傳輸線較少,長(zhǎng)距離通信較經(jīng)濟(jì),在集散式控制裝置中得到了廣泛應(yīng)用。RS-485采用差分電平傳輸,只需2根信號(hào)線,即可以方便地增加控制節(jié)點(diǎn)數(shù)目[3]。

通信控制器通過(guò)全雙工RS-232總線與管理PC進(jìn)行數(shù)據(jù)交互,管理PC和通信控制器層面的數(shù)據(jù)交互,保證了實(shí)時(shí)性和高效性,采用互為主機(jī)的通信方式,以此構(gòu)成集散控制系統(tǒng)[4]。

2.2 通信協(xié)議格式的定義

2.2.1 協(xié)議幀格式

(1)主機(jī)(Master)下發(fā)數(shù)據(jù)幀格式

起始標(biāo)志數(shù)據(jù)(5AH+A5H)+長(zhǎng)度(從命令字開(kāi)始到校驗(yàn)和為止的字節(jié)數(shù))+命令字 HIGH+命令字 LOW+機(jī)號(hào)+參數(shù)+一個(gè)字節(jié)校驗(yàn)和(從命令字開(kāi)始到校驗(yàn)碼前一個(gè)字節(jié)的邏輯“異或”和)。

(2)從機(jī)(Slave)上傳數(shù)據(jù)幀格式

起始標(biāo)志數(shù)據(jù)(9BH+B9H)+長(zhǎng)度(從命令字開(kāi)始到校驗(yàn)和為止的字節(jié)數(shù))+命令字HIGH+命令字LOW+機(jī)號(hào)+參數(shù)+一個(gè)字節(jié)校驗(yàn)和 (從命令字開(kāi)始到校驗(yàn)碼前一個(gè)字節(jié)的邏輯“異或”和)[5-6]。

2.2.2 協(xié)議幀解釋

起始標(biāo)志數(shù)據(jù):采用1個(gè)字節(jié)或多字節(jié)作為幀起始標(biāo)志,該部分的字節(jié)定義應(yīng)盡量與幀數(shù)據(jù)的其他部分完全不一樣。接收方在接收數(shù)據(jù)時(shí)總是先尋找?guī)^。幀頭的排他性將有利于提高各通信節(jié)點(diǎn)的接收效率。

長(zhǎng)度:應(yīng)盡量采用短幀,以避免各種干擾因素對(duì)通信效率的影響。可根據(jù)實(shí)際應(yīng)用情況,在“長(zhǎng)度”后增加“長(zhǎng)度反碼”或“長(zhǎng)度補(bǔ)碼”等校驗(yàn)數(shù)據(jù)對(duì)長(zhǎng)度進(jìn)行更為嚴(yán)格的校驗(yàn)。

命令字:根據(jù)實(shí)際通信應(yīng)用需求,可應(yīng)用1~2字節(jié)的通信命令字。

機(jī)號(hào):該幀所需接收方的地址識(shí)別號(hào),可根據(jù)實(shí)際應(yīng)用需求對(duì)其進(jìn)行修改,如增加源地址、目的地址等。

參數(shù):該幀的應(yīng)用數(shù)據(jù),針對(duì)不同的應(yīng)用,考慮到數(shù)據(jù)的安全性,可對(duì)該部分的數(shù)據(jù)進(jìn)行加密處理。

校驗(yàn)和:該幀的數(shù)據(jù)校驗(yàn),可根據(jù)應(yīng)用需求選擇不同的校驗(yàn)方式。

3 高效串行通信方式的實(shí)現(xiàn)

3.1 PC端軟件發(fā)送數(shù)據(jù)的處理機(jī)制

PC端的軟件首先判斷最高優(yōu)先級(jí)的命令字是否需要發(fā)送,如果需要,則進(jìn)入該命令字的發(fā)送流程;如果沒(méi)有,接著判斷次高級(jí)優(yōu)先級(jí)的命令字是否需要發(fā)送,如果需要,則進(jìn)入發(fā)送流程。根據(jù)命令字的優(yōu)先級(jí)由高到低的順序依次判斷要發(fā)送的命令字,當(dāng)沒(méi)有通信數(shù)據(jù)命令字發(fā)送時(shí),PC端軟件將發(fā)送輪詢命令字。此外,在發(fā)送完一幀數(shù)據(jù)后,PC端軟件會(huì)開(kāi)啟接收超時(shí)定時(shí)器T,如果PC端軟件在超時(shí)時(shí)間內(nèi)收到應(yīng)答命令數(shù)據(jù)幀則進(jìn)入相應(yīng)數(shù)據(jù)處理流程,同時(shí)關(guān)閉接收超時(shí)定時(shí)器T;如果系統(tǒng)定時(shí)時(shí)間內(nèi)未收到應(yīng)答命令數(shù)據(jù)幀,則重新發(fā)送該命令字的幀數(shù)據(jù),并記錄發(fā)送該命令字的次數(shù),當(dāng)發(fā)送命令字的幀超過(guò)10次未收到相應(yīng)應(yīng)答命令,即視為該命令字和控制點(diǎn)的通信失敗,將通信流程重新調(diào)整到輪詢命令字狀態(tài)下。

3.2 PC端軟件接收數(shù)據(jù)的處理機(jī)制

在PC軟件端的接收程序部分,按字節(jié)來(lái)處理接收到的每幀數(shù)據(jù),而不是按幀來(lái)處理。為此,應(yīng)用程序?qū)⒋诘慕邮罩袛嗟捻憫?yīng)字節(jié)閾值設(shè)為1,即當(dāng)接收緩沖區(qū)有多于1個(gè)數(shù)據(jù)便進(jìn)入接收數(shù)據(jù)處理流程。

當(dāng)開(kāi)始接收一幀數(shù)據(jù)時(shí),首先找到幀頭,其次應(yīng)根據(jù)接收數(shù)據(jù)緩沖區(qū)中的有效數(shù)據(jù)長(zhǎng)度和幀長(zhǎng)度的關(guān)系來(lái)分類處理。因?yàn)閃indows對(duì)串口的封裝(開(kāi)發(fā)平臺(tái)為VC++6.0),使得應(yīng)用程序無(wú)法來(lái)設(shè)定軟件,根據(jù)接收數(shù)據(jù)緩沖區(qū)的數(shù)據(jù)閾值來(lái)響應(yīng)串行中斷。所以在通信過(guò)程中當(dāng)PC產(chǎn)生串行中斷時(shí),應(yīng)根據(jù)串行中斷當(dāng)前數(shù)據(jù)接收緩沖區(qū)的有效數(shù)據(jù)長(zhǎng)度來(lái)做分類處理[7]。

首先,把接收緩沖區(qū)ReceBuffer[M]的數(shù)據(jù)取出來(lái),放到待處理緩沖區(qū)DealBuffer[M]中(為了防止該幀數(shù)據(jù)還沒(méi)有處理完畢,未處理的數(shù)據(jù)會(huì)被新來(lái)的數(shù)據(jù)覆蓋掉,造成系統(tǒng)的數(shù)據(jù)丟失)。其次,要確定接收數(shù)據(jù)的幀頭,方法就是逐字節(jié)查找,一般幀頭在接收緩沖區(qū)中出現(xiàn)的位置有3種情況,如圖2所示,每一個(gè)方格代表一個(gè)字節(jié)。

圖2 接收幀頭出現(xiàn)在數(shù)據(jù)緩沖區(qū)中的位置

如果幀頭就是接收緩沖區(qū)的前兩個(gè)字節(jié)(如圖2(a)所示),則按照通信協(xié)議依次處理剩下的接收緩沖區(qū)的有效數(shù)據(jù)。用全局變量表示接收緩沖區(qū)處理步驟S,正確接收到2個(gè)幀頭后P賦值為2。

如果幀頭在接收數(shù)據(jù)緩沖區(qū)的不連續(xù)字節(jié)內(nèi)(如圖2(b)所示),應(yīng)把從第2個(gè)幀頭開(kāi)始的有效數(shù)據(jù)移到第 1個(gè)幀頭后,如圖3所示,使得待處理緩沖區(qū)的數(shù)據(jù)形成連續(xù)的一幀數(shù)據(jù)來(lái)繼續(xù)下一步的處理。

如果幀頭分散在兩個(gè)數(shù)據(jù)幀中(如圖 2(c)所示),即PC響應(yīng)串行中斷第1次接收到第1個(gè)幀頭,第2次響應(yīng)或者第n次響應(yīng)串行中斷接收到第2個(gè)幀頭。當(dāng)接收到第1個(gè)幀頭后,S賦值為1。當(dāng)下次響應(yīng)串行中斷時(shí),判斷S的值,如果是1,表示第 1個(gè)幀頭已經(jīng)找到,開(kāi)始在接收到的幀數(shù)據(jù)中尋找第2個(gè)幀頭;如果找到,S賦值為2,并把從第2個(gè)幀頭開(kāi)始的有效數(shù)據(jù)移到第1個(gè)幀頭后,使待處理緩沖區(qū)的數(shù)據(jù)形成連續(xù)的一幀數(shù)據(jù)來(lái)處理。

圖3 數(shù)據(jù)緩沖區(qū)移位前后示意圖

判斷命令字是否為協(xié)議中規(guī)定的合法命令字。如果是,將根據(jù)命令字所對(duì)應(yīng)的長(zhǎng)度來(lái)判斷該幀數(shù)據(jù)的合法性,因?yàn)樵谥贫ㄍㄐ艆f(xié)議時(shí),規(guī)定了特定命令字所對(duì)應(yīng)的數(shù)據(jù)長(zhǎng)度,這兩點(diǎn)約束條件可以保證接收數(shù)據(jù)的合法性,從而提高了系統(tǒng)的穩(wěn)定性。如果命令字和其對(duì)應(yīng)的長(zhǎng)度值合法則將S賦值為3,進(jìn)入下一步的數(shù)據(jù)處理步驟。

最后,關(guān)閉發(fā)送定時(shí)器,防止處理的過(guò)程中有新的接收數(shù)據(jù)影響處理有效數(shù)據(jù)的過(guò)程。處理完畢,打開(kāi)發(fā)送定時(shí)器,根據(jù)處理過(guò)程中標(biāo)志位的改變情況繼續(xù)與控制點(diǎn)進(jìn)行相應(yīng)的數(shù)據(jù)通信。在處理接收數(shù)據(jù)的步驟中,如果任何一個(gè)步驟出現(xiàn)非法數(shù)據(jù),則清空ReceBuffer[M]和DealBuffer[M],認(rèn)為該幀數(shù)據(jù)傳輸出錯(cuò),丟棄該幀數(shù)據(jù),并初始化接收變量,重新設(shè)定接收超時(shí)定時(shí)器,接收下一次通信數(shù)據(jù)。

本文通過(guò)完整的串行通信協(xié)議的設(shè)計(jì),在PC軟件發(fā)送端始終處于通信狀態(tài),能以很快的速度響應(yīng)系統(tǒng)協(xié)議規(guī)定的命令字及其數(shù)據(jù)的發(fā)送。同時(shí),在PC軟件接收端,采用逐字節(jié)處理的方式,通過(guò)設(shè)定全局變量來(lái)確定處理接收數(shù)據(jù)幀的步驟,細(xì)化了處理接收數(shù)據(jù)的過(guò)程,保證了數(shù)據(jù)高效可靠的傳輸。本系統(tǒng)已經(jīng)應(yīng)用在上海寶鋼集團(tuán)加油站信息管理系統(tǒng)中,實(shí)驗(yàn)結(jié)果證明,此協(xié)議的通信數(shù)據(jù)準(zhǔn)確、通信效率高效可靠、自適應(yīng)能力強(qiáng),具有在相關(guān)領(lǐng)域推廣的價(jià)值和意義。

[1]胡新華,鄧元勇,王先平.多種通信網(wǎng)絡(luò)及接口轉(zhuǎn)換模塊的研制[J].計(jì)算機(jī)工程,2009(6):1-3.

[2]徐勇,賀建民,王景玉.計(jì)算機(jī)硬件技術(shù)基礎(chǔ)[M].北京:北京交通大學(xué)出版社,北京:清華大學(xué)出版,2004.

[3]謝瑞和.串行技術(shù)大全 [M].北京:清華大學(xué)出版社,2003.

[4]王常力,羅安.分布式控制系統(tǒng)(DCS)設(shè)計(jì)與應(yīng)用實(shí)例[M].北京:電子工業(yè)出版,2005.

[5]吳濤.PLC與上位機(jī)的高速通信實(shí)現(xiàn)[J].微計(jì)算機(jī)信息,2007,12(1):52-54.

[6]REED K D.協(xié)議分析[M].孫坦,張學(xué)鋒,譯.北京:電子工業(yè)出版社,2004.

[7]李現(xiàn)勇.Visual C++串口通信技術(shù)與工程實(shí)踐[M].北京:人民郵電出版社,2002.

主站蜘蛛池模板: 亚洲国产理论片在线播放| 欧美日韩国产在线播放| 亚洲熟妇AV日韩熟妇在线| 国产第一页免费浮力影院| 日韩福利在线视频| 亚亚洲乱码一二三四区| 日本高清在线看免费观看| a毛片免费在线观看| 色婷婷丁香| 久久精品无码中文字幕| 91免费国产在线观看尤物| 欧美成人影院亚洲综合图| 国语少妇高潮| 国产手机在线ΑⅤ片无码观看| 国产精品午夜电影| 亚洲精品va| 成人精品午夜福利在线播放| 韩日无码在线不卡| 91在线日韩在线播放| 国产日本欧美在线观看| 国产无码精品在线| 中文字幕在线看| 色视频久久| 欧美激情第一区| 国产永久在线观看| 国产欧美日韩精品综合在线| 毛片大全免费观看| 国产va在线观看| 91久久偷偷做嫩草影院免费看| 色综合手机在线| 2020久久国产综合精品swag| 免费一级大毛片a一观看不卡| 性色在线视频精品| 五月天在线网站| 一本色道久久88| 久久这里只精品国产99热8| 国产成人一区在线播放| 亚洲国产精品无码久久一线| 免费看av在线网站网址| 国产网站免费| 亚洲人成亚洲精品| 精品欧美日韩国产日漫一区不卡| 激情六月丁香婷婷四房播| 亚洲人人视频| 99精品免费在线| 色九九视频| 毛片视频网址| 国产精品美女网站| 日本亚洲欧美在线| 91在线视频福利| 欧美日韩在线亚洲国产人| 久久久久无码精品| 亚洲女同一区二区| 五月婷婷欧美| 亚洲制服中文字幕一区二区| 国产精品福利一区二区久久| 国产一区二区三区免费| 黄色三级网站免费| 日韩高清中文字幕| 最新国产在线| 久久精品一卡日本电影| 国产午夜一级毛片| 日韩国产一区二区三区无码| 毛片一级在线| 欧美精品v日韩精品v国产精品| 毛片基地美国正在播放亚洲 | 亚洲精品在线观看91| 国产精品hd在线播放| 最新国产精品第1页| 国产亚洲高清视频| 国产爽歪歪免费视频在线观看 | 久久久久久午夜精品| 国产亚洲高清在线精品99| 国产乱子伦精品视频| 国产成人啪视频一区二区三区 | 成年av福利永久免费观看| 久久久久中文字幕精品视频| 久久免费视频6| 国产高清精品在线91| 亚洲男人的天堂在线观看| 国产成人久久综合777777麻豆| 毛片久久久|