串行通訊協(xié)議的研究及應(yīng)用
2004/2/9 13:44:00
1 引言 串行接口一般包括RS232/422/485,其技術(shù)簡單成熟,性能可靠,價格低廉,所要求的軟硬件環(huán)境或條件都很低,廣泛應(yīng)用于計(jì)算機(jī)及相關(guān)領(lǐng)域,遍及調(diào)制解調(diào)器、串行打印機(jī)、各種監(jiān)控模塊、PLC、攝像頭云臺、數(shù)控機(jī)床、單片機(jī)及相關(guān)智能設(shè)備,甚至路由器也不例外(通過串口設(shè)置參數(shù))。在計(jì)算機(jī)監(jiān)控系統(tǒng)中,主控機(jī)一般采用工控機(jī),通過串口與監(jiān)控模塊相連,監(jiān)控模塊再連接相應(yīng)的傳感器和執(zhí)行器,如此形成一個簡單的雙層結(jié)構(gòu)的計(jì)算機(jī)監(jiān)控系統(tǒng)。這種結(jié)構(gòu)主要用于單獨(dú)的中小型企業(yè)或部門,如果屬于綜合型企業(yè)或部門,如電力系統(tǒng)監(jiān)控,高速公路監(jiān)控和收費(fèi)系統(tǒng),則可以此為基礎(chǔ)結(jié)構(gòu)進(jìn)行擴(kuò)充,用集線器將眾多雙層監(jiān)控系統(tǒng)連接起來,再用交換機(jī)將若干集線器連接起來,統(tǒng)一接上路由器,從而跟Internet互聯(lián)(當(dāng)然,軟件結(jié)構(gòu)也得作調(diào)整),如此即可形成一個龐大的計(jì)算機(jī)監(jiān)控網(wǎng)絡(luò)。由此可見,盡管現(xiàn)代計(jì)算機(jī)的新接口層出不窮,各種網(wǎng)絡(luò)也日新月異,其規(guī)模也越來越大,但是,其基礎(chǔ)結(jié)構(gòu)卻有不少是串行通訊系統(tǒng),串行通訊也成了其中的核心技術(shù)。 2 串行通訊難點(diǎn)及協(xié)議 串行通訊是半雙工形式,通過串口發(fā)送數(shù)據(jù)相對簡單,在時間上可以隨意控制,如果使用微軟提供的通訊控件MsComm32.OCX,只要直接給Output屬性賦值即可;使用Turbo C 2.0語言或匯編語言,也只要在一個循環(huán)之內(nèi)向串口的數(shù)據(jù)端口寫數(shù)據(jù)即可。但是,接收數(shù)據(jù)則比較麻煩,因?yàn)橹袛嘟邮諘r,數(shù)據(jù)常常不均勻流暢,其中存在空白間隔,給數(shù)據(jù)處理帶來困難。大部分監(jiān)控模塊都有串口初始化函數(shù)、數(shù)據(jù)發(fā)送和接收函數(shù),如果直接使用數(shù)據(jù)接收函數(shù)來接收數(shù)據(jù),則由于以上問題,常常接收到殘缺的數(shù)據(jù),使工作無法完成,盡管邏輯上沒有任何錯誤。在具體實(shí)現(xiàn)上,應(yīng)該在接收到第一批數(shù)據(jù)時,開始等待T時間片,將第一批數(shù)據(jù)與隨后的第二批數(shù)據(jù)相加,如此繼續(xù)循環(huán),直到新的T時間片結(jié)束而無數(shù)據(jù)到達(dá),再跳出循環(huán)。至于T時間片大小的選取,應(yīng)該根據(jù)具體的模塊或設(shè)備來調(diào)整,直到性能可靠為止,此時的時間片即為所需要的T。數(shù)據(jù)接收算法見圖1所示。 為方便行文,將與計(jì)算機(jī)(主控機(jī))串口相連的模塊或系統(tǒng)統(tǒng)稱為智能設(shè)備(有時包括工控機(jī)本身)。串行通訊的協(xié)議一般可分為兩類,即讀和寫。讀協(xié)議為讀取智能設(shè)備的數(shù)據(jù),寫協(xié)議為設(shè)置智能設(shè)備參數(shù)或發(fā)送控制命令,讀協(xié)議要求有響應(yīng),寫協(xié)議可以沒有響應(yīng)。讀寫協(xié)議描述見圖2所示(關(guān)于響應(yīng)協(xié)議略)。常見的校驗(yàn)碼有異或、累加和、CRC等。 3 通用軟件設(shè)計(jì) 目標(biāo)為設(shè)計(jì)一個通用串行通訊軟件,使運(yùn)行該軟件的計(jì)算機(jī)(在圖示中用帶陰影的文本框表示)作為主控機(jī)可以自動地測試智能設(shè)備,也可作為智能設(shè)備用來自動地測試主控機(jī)上的監(jiān)控軟件,至于臨時發(fā)送數(shù)據(jù)以代替主控機(jī)或智能設(shè)備,則是其基本功能。為了提高通用性,軟件主界面盡量簡潔,用兩個單行文本框顯示當(dāng)前接收或發(fā)送的數(shù)據(jù),其一為16進(jìn)制形式(如“41”),其二為字符形式(如“A”),用一個多行文本框顯示歷史數(shù)據(jù),包括接收和發(fā)送的數(shù)據(jù)、串口信號線的變化以及發(fā)生的時間(精確到毫秒),其它按鈕用來打開和關(guān)閉串口、發(fā)送數(shù)據(jù)、設(shè)置串口參數(shù)及系統(tǒng)參數(shù)等。用Access 2000數(shù)據(jù)庫記錄數(shù)據(jù),其中包括智能設(shè)備表、協(xié)議標(biāo)志表、歷史通訊數(shù)據(jù)記錄表等,與協(xié)議表相關(guān)的表必須包含主控機(jī)協(xié)議及智能設(shè)備協(xié)議兩個字段。采用VB6.0環(huán)境來完成此軟件,所用的主要控件包括數(shù)據(jù)控件、MsComm32.OCX、Timer等。為了靈活工作,模擬各種智能設(shè)備,需要設(shè)計(jì)一“協(xié)議生成器”,對于圖2所示的“讀協(xié)議”,協(xié)議生成器的功能為:首先選擇智能設(shè)備(由此確定協(xié)議標(biāo)志),設(shè)置地址范圍(即動態(tài)數(shù)據(jù)),則軟件在此范圍內(nèi)自動生成地址,然后計(jì)算校驗(yàn)碼,有的智能設(shè)備還需要追加協(xié)議結(jié)束標(biāo)志,如調(diào)制解調(diào)器的AT命令就需要以回車符結(jié)束方才有效。協(xié)議生成器構(gòu)造如圖3所示。 主控機(jī)與智能設(shè)備方式。充當(dāng)主控機(jī)時,可以定時向智能設(shè)備發(fā)送讀協(xié)議。充當(dāng)智能設(shè)備時,用來響應(yīng)主控機(jī),其響應(yīng)協(xié)議有兩種生成方式,靜態(tài)和動態(tài)。靜態(tài)方式時,接收到主控機(jī)的協(xié)議,查找協(xié)議表,如果能匹配主控機(jī)協(xié)議,則將該條記錄的智能設(shè)備協(xié)議發(fā)出(先讓該軟件以主控機(jī)方式工作,與實(shí)際的智能設(shè)備相連,從而記錄下智能設(shè)備的響應(yīng)協(xié)議,可參考下文的“截取通訊協(xié)議”部分);在動態(tài)方式下,找到匹配的主控機(jī)協(xié)議時,響應(yīng)協(xié)議利用協(xié)議生成器動態(tài)生成。 自動與手動是針對主控機(jī)而言。自動方式需要設(shè)置定時器,定時向智能設(shè)備發(fā)送讀協(xié)議;對于手動方式,則是通過發(fā)送按鈕來發(fā)送數(shù)據(jù),從而等待智能設(shè)備的響應(yīng)并顯示之。 軟件的總流程為:設(shè)置串口參數(shù),選擇智能設(shè)備,設(shè)置協(xié)議生成方式及動態(tài)數(shù)據(jù)范圍,設(shè)置主控機(jī)或智能設(shè)備工作方式,如果是主控機(jī),還需要設(shè)置定時器,以及是否記錄智能設(shè)備響應(yīng)的協(xié)議;如果是智能設(shè)備,應(yīng)選擇靜態(tài)響應(yīng)或動態(tài)響應(yīng)方式。主程序流程圖見圖4所示。 4 軟件的應(yīng)用 4.1 發(fā)送手機(jī)短消息 手機(jī)短消息協(xié)議如圖5所示。將軟件設(shè)置成主控機(jī)手動狀態(tài),選擇手機(jī)設(shè)備,如果想發(fā)送“OK!”,只要在單行字符文本框中直接輸入“OK!”,并點(diǎn)擊“發(fā)送”按鈕,則軟件自動填充其它數(shù)據(jù),并計(jì)算BCS校驗(yàn)碼,然后將數(shù)據(jù)發(fā)出。此協(xié)議是手機(jī)短消息協(xié)議之一,所采用的模塊來自西門子公司。 4.2 通過Modem進(jìn)行遠(yuǎn)程測試 將軟件設(shè)置成主控機(jī)手動狀態(tài),選擇Modem設(shè)備,在單行字符文本框中輸入電話號碼(如025-1234567),點(diǎn)擊發(fā)送按鈕,則軟件自動發(fā)送AT命令“ATDT025-1234567;”+回車符,完成與遠(yuǎn)程設(shè)備的連接,然后即可根據(jù)需要采用主控機(jī)或智能設(shè)備方式,自動或手動方式進(jìn)行測試(AT命令中的“;”表示撥通對方后保持連接狀態(tài))。對Modem進(jìn)行合適的設(shè)置,可以使其自動摘機(jī)。 4.3 模擬主控機(jī)用來測試智能設(shè)備的數(shù)據(jù)性能 在計(jì)算機(jī)監(jiān)控系統(tǒng)中,需要選擇或自行設(shè)計(jì)一些特殊的智能設(shè)備,但是,其數(shù)據(jù)性能如何?這可以通過模擬主控機(jī)來測試,將其設(shè)置成主控機(jī)自動工作方式,協(xié)議也采用動態(tài)生成方式,對智能設(shè)備響應(yīng)的協(xié)議進(jìn)行分析(包括協(xié)議標(biāo)志及校驗(yàn)碼),如果有錯誤,則記錄發(fā)生時間、主控機(jī)協(xié)議與智能設(shè)備的響應(yīng)協(xié)議。測試原理見圖6所示,其中協(xié)議庫中為動態(tài)生成的主控機(jī)協(xié)議,錯誤記錄即為主控機(jī)協(xié)議與對應(yīng)的智能設(shè)備響應(yīng)的錯誤協(xié)議,虛線箭頭表示協(xié)議來源(下同),實(shí)際通過主控機(jī)進(jìn)行記錄??偟臏y試報(bào)告內(nèi)容見表1所示,單位為發(fā)送或接收的次數(shù)。詳細(xì)的測試分析可以借助錯誤記錄進(jìn)行。 4.4 模擬智能設(shè)備測試主控機(jī)軟件性能 將軟件設(shè)置成智能設(shè)備動態(tài)響應(yīng)狀態(tài),充當(dāng)智能設(shè)備角色,自動應(yīng)答主控機(jī)的查詢命令。如圖7所示,當(dāng)收到主控機(jī)協(xié)議并在協(xié)議庫中找到匹配的協(xié)議時,動態(tài)生成智能設(shè)備的協(xié)議進(jìn)行響應(yīng)。這種功能可用來配合開發(fā)或調(diào)試主控機(jī)程序,特別地,當(dāng)智能設(shè)備比較昂貴數(shù)量較少,或體積龐大不便運(yùn)輸時,采用此方式可以并行異地開發(fā)和調(diào)試針對智能設(shè)備的監(jiān)控程序,既節(jié)省成本,也可極大地提高工作效率。作為一種特例,可用一臺PC機(jī)進(jìn)行模擬開發(fā)和調(diào)試,智能設(shè)備掛在COM2口,開發(fā)或調(diào)試的軟件掛于COM1口,COM1和COM2對接。單機(jī)仿真開發(fā)模型見圖8所示。 4.5 截取通訊協(xié)議 現(xiàn)假設(shè)某公司生產(chǎn)一智能設(shè)備,與該設(shè)備配套的測試軟件運(yùn)行于測試機(jī)上?,F(xiàn)欲截取測試機(jī)與智能設(shè)備之間的通訊協(xié)議,作者的軟件運(yùn)行于偵聽機(jī)上(如圖9所示)。在這里,偵聽機(jī)充當(dāng)二傳手的作用,首先通過COM1口截取測試機(jī)發(fā)來的協(xié)議,存入?yún)f(xié)議庫,隨后通過COM2口將原協(xié)議發(fā)往智能設(shè)備。偵聽機(jī)通過COM2口收到智能設(shè)備的響應(yīng)后,將協(xié)議存入?yún)f(xié)議庫(與相應(yīng)的測試機(jī)協(xié)議位于同一條記錄),隨后通過COM1口將原協(xié)議發(fā)往測試機(jī)。如此即可將測試機(jī)與智能設(shè)備之間的通訊協(xié)議全部截取并保存。 4.6 通訊協(xié)議的破譯與應(yīng)用 通訊協(xié)議一般包括功能碼、地址碼、有效數(shù)據(jù)、校驗(yàn)碼和結(jié)束標(biāo)志(可選),常用的校驗(yàn)碼有異或、累加和、CRC等。通訊協(xié)議截取后,依次分析校驗(yàn)碼、功能碼、地址碼和數(shù)據(jù)??梢阅M主控機(jī)觀察智能設(shè)備的動作響應(yīng)和信號燈變化,也可以模擬智能設(shè)備觀察主控機(jī)軟件界面的變化。如果協(xié)議沒有加密,則只要直接分析協(xié)議即可;如果協(xié)議已經(jīng)加密,可以利用密碼學(xué)中的方法去分析解密,然后再分析協(xié)議本身。有的通訊協(xié)議在數(shù)據(jù)加密的同時,還配合信號線的變化。由于軟件主界面的多行文本框顯示并記錄著串口的收發(fā)數(shù)據(jù)及信號線變化的歷史狀態(tài),包括發(fā)生時間,這給協(xié)議分析提供了重要的原始資料。 協(xié)議破譯成功后,即可自行開發(fā)軟件對智能設(shè)備進(jìn)行監(jiān)控。在文獻(xiàn)1中,作者遇到從德國進(jìn)口的大型柴油發(fā)電機(jī)組(以下簡稱油機(jī)),可利用提供的串口對其進(jìn)行監(jiān)控。但是,卻沒有該油機(jī)的合適版本的通訊協(xié)議,只有廠家配套免費(fèi)提供的簡單的油機(jī)測試軟件(運(yùn)行于主控機(jī)上)。一般情況下,都是通過人工對油機(jī)啟動或停機(jī)。在項(xiàng)目改造中,需要對油機(jī)進(jìn)行監(jiān)控,如果編寫項(xiàng)目任務(wù)書,請廠家設(shè)計(jì)監(jiān)控軟件,無疑周期較長,價格較貴。作者通過此協(xié)議截取和破譯方法,成功地破譯其通訊協(xié)議,并設(shè)計(jì)出監(jiān)控軟件。 5 結(jié)論 該研究<
提交
查看更多評論
其他資訊
PLC一體機(jī)之EK溫度修正使用技巧
S7-300CPU存儲器介紹及存儲卡使用
0.05級超高精度互感器
DC-DC轉(zhuǎn)換器(電源模塊)應(yīng)用指南——外接濾波電容選配
施羅德最小流量閥的應(yīng)用范圍及優(yōu)點(diǎn)