關(guān) 閉

新聞中心

EEPW首頁 > 安全與國防 > 設(shè)計應(yīng)用 > 串行通信中滑動窗過濾器的多協(xié)議自動識別

串行通信中滑動窗過濾器的多協(xié)議自動識別

——
作者:湖北咸寧學(xué)院 張紅兵 時間:2007-01-26 來源:《單片機(jī)與嵌入式系統(tǒng)應(yīng)用》 收藏


在室內(nèi)型和室外型云臺及一體化智能高速球型攝像機(jī)中,解碼器通過rs-485總線接收來自監(jiān)控中心由控制鍵盤或dvr發(fā)送的命令,對命令進(jìn)行解析后發(fā)出相應(yīng)的控制指令,從而控制云臺的上下左右運(yùn)動以及攝像機(jī)的光圈、聚焦和變倍等調(diào)整動作。

本文引用地址:http://butianyuan.cn/article/21237.htm

1 通信協(xié)議介紹

一個控制命令就是一個通過串行總線傳輸?shù)南?,消息由多個字節(jié)組成,每個字節(jié)的傳輸格式一般都是1個起始位、8個數(shù)據(jù)位、1個停止位、沒有奇偶校驗位。下面介紹消息的基本結(jié)構(gòu),第一個字節(jié)往往是同步字節(jié)或稱特征字節(jié),可以是aah或55h等,它的作為是讓總線上的每個終端作好接收后續(xù)字節(jié)的準(zhǔn)備。第二個字節(jié)是地址,即指明接收該命令的終端地址,響應(yīng)該消息的可能是一個,也可能是一組或全部的終端。每個終端有自己獨(dú)一無二的地址信息,只有當(dāng)接收到的信息中的地址與自己的地址吻合時,才執(zhí)行該命令,因為地址字節(jié)只有8位,因此同一系統(tǒng)中最多只能識別256個不同的終端。在串行通信中,除了單個字節(jié)的傳輸有時需要奇偶校驗外,接收到的消息還要做整體的數(shù)據(jù)塊校驗,通常采取的是將數(shù)據(jù)塊進(jìn)行簡單的累加或者是異或后得到一個校驗字節(jié)(check-byte),將該校驗字節(jié)附加在消息的最后發(fā)出。終端接收后,首先要對接收到的數(shù)據(jù)塊進(jìn)行校驗以判斷數(shù)據(jù)是否可靠。表1是pelco-d協(xié)議的一個完整消息的結(jié)構(gòu)。


不同的公司采用不同的協(xié)議,消息的結(jié)構(gòu)完全不同。表2顯示4種常見傳輸協(xié)議的基本格式。

由于協(xié)議之間完全不兼容,因此云臺解碼器往往只使用其中一種傳輸協(xié)議,造成產(chǎn)品的適用范圍不廣,一種兼容多種協(xié)議的解決方法是采用硬件設(shè)定的方法,即在解碼器上設(shè)計一個多位撥碼開關(guān),當(dāng)使用不同協(xié)議時,撥碼開關(guān)的選擇狀態(tài)不同,單片機(jī)讀取該設(shè)定參數(shù)后就知道當(dāng)前是什么樣的傳輸協(xié)議,然后采取相應(yīng)的解碼措施,在串行口中,當(dāng)接收到對應(yīng)協(xié)議中每個消息的特征字節(jié)時,就開始接收相應(yīng)長度的后續(xù)字節(jié),否則放棄該字節(jié)不予判斷,這樣設(shè)計的缺陷在于,首先必須非常明確當(dāng)前的傳輸協(xié)議,其次是當(dāng)更換不同的協(xié)議時必須重新設(shè)定拔碼開關(guān)的狀態(tài),在使用過程中不靈活不方便,而且這種方法容易造成誤判,因為一種協(xié)議中的特征字節(jié)也很可能會在其他協(xié)議的命令中以非特征字節(jié)的形式出現(xiàn)。僅僅依靠特征字節(jié)來決定是否接收后續(xù)字節(jié)是很容易丟碼或產(chǎn)生誤碼的。

2 滑動窗和過濾器

本文提出采用滑動窗過濾器的方式進(jìn)行多協(xié)議的自動識別,而不會造成誤碼或漏碼。在單片機(jī)的ram中建立一個數(shù)組r_buf[n],他是對串口數(shù)據(jù)流進(jìn)行過濾的窗口,窗體的大小即數(shù)組的大小n,取各種協(xié)議中的一個消息所包含的字節(jié)最多的長度,例如取samsung協(xié)議的長度為9。串口接收到的任何一個字節(jié)都按照先入先出的順序通過該窗口,而不論該字節(jié)是否是特征字節(jié),串口接收的數(shù)據(jù)碼流依次流經(jīng)該數(shù)組,因此該數(shù)組像一個窗口。始終保留碼流中的最后一幅數(shù)據(jù)的圖像,如圖1所示。

各種協(xié)議以其不同的特征字節(jié)、消息長度和校驗字節(jié)的規(guī)律而構(gòu)成過濾器。每從串口中接收到一個新的字節(jié),滑動窗的內(nèi)容就刷新一次,同時將窗口內(nèi)容與過濾器中的數(shù)據(jù)結(jié)構(gòu)對比一次,這樣做得好處在于,接收到的串行數(shù)據(jù),無論其是什么協(xié)議,什么長度以及什么特征字節(jié),都會被過濾一次,滑動窗在數(shù)據(jù)碼流中從頭往后搜索,不放過任何一個符合某個協(xié)議的有效消息。只要落入滑動窗口內(nèi)的那些數(shù)據(jù)符合任何一種協(xié)議的數(shù)據(jù)格式,該數(shù)據(jù)就被認(rèn)為是一個有效的消息,因此不會產(chǎn)生漏碼或誤碼的現(xiàn)象。

3 軟件設(shè)計

過濾過程包括3個階段:第一個階段是特征字節(jié)過濾;第二個階段是校驗字節(jié)過濾;第三個階段是地址過濾,即判斷消息的目的地址與該解碼器設(shè)備的地址是否吻合。只有在這三個階段的過濾過程中均符合要求的消息才是有效命令,然后才開始對命令進(jìn)行解析和執(zhí)行,因為是自動識別,因此r_buf[0]中內(nèi)容每刷新一次就必須開始一次過濾過程。

下面以8051系列兼容單片機(jī)為例,用keil c51語言來描述窗體的形成以及過濾方法。整個過程都是在串口中斷服務(wù)程序中完成的。

4 結(jié)論

采用滑動窗和過濾器的方式可以自動識別不同的傳輸而無需通過硬件的方式進(jìn)行協(xié)議設(shè)定,采用該方法編程簡單方便,對碼流的識別速度快、效率高、實際應(yīng)用表明沒有漏碼和誤碼現(xiàn)象發(fā)生,但是這種方法也有缺陷:一是只能識別那些每個消息的字節(jié)數(shù)確定的協(xié)議,而對那些消息長度不確定的協(xié)議不適合,因為滑動窗的大小是固定的,而過濾器的大小無法確定;二是需要自動識別協(xié)議的傳輸波特率都必須相同,否則無法正確識別,這是因為消息的內(nèi)容是可以自動識別的,而波特率卻不是。



關(guān)鍵詞:

評論


相關(guān)推薦

技術(shù)專區(qū)

關(guān)閉