工控網(wǎng)首頁
>

應(yīng)用設(shè)計(jì)

>

串行通訊協(xié)議的研究及應(yīng)用

串行通訊協(xié)議的研究及應(yīng)用

2004/2/9 13:44:00
1 引言   串行接口一般包括RS232/422/485,其技術(shù)簡單成熟,性能可靠,價(jià)格低廉,所要求的軟硬件環(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í)行器,如此形成一個(gè)簡單的雙層結(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)整),如此即可形成一個(gè)龐大的計(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ù)相對簡單,在時(shí)間上可以隨意控制,如果使用微軟提供的通訊控件MsComm32.OCX,只要直接給Output屬性賦值即可;使用Turbo C 2.0語言或匯編語言,也只要在一個(gè)循環(huán)之內(nèi)向串口的數(shù)據(jù)端口寫數(shù)據(jù)即可。但是,接收數(shù)據(jù)則比較麻煩,因?yàn)橹袛嘟邮諘r(shí),數(shù)據(jù)常常不均勻流暢,其中存在空白間隔,給數(shù)據(jù)處理帶來困難。大部分監(jiān)控模塊都有串口初始化函數(shù)、數(shù)據(jù)發(fā)送和接收函數(shù),如果直接使用數(shù)據(jù)接收函數(shù)來接收數(shù)據(jù),則由于以上問題,常常接收到殘缺的數(shù)據(jù),使工作無法完成,盡管邏輯上沒有任何錯(cuò)誤。在具體實(shí)現(xiàn)上,應(yīng)該在接收到第一批數(shù)據(jù)時(shí),開始等待T時(shí)間片,將第一批數(shù)據(jù)與隨后的第二批數(shù)據(jù)相加,如此繼續(xù)循環(huán),直到新的T時(shí)間片結(jié)束而無數(shù)據(jù)到達(dá),再跳出循環(huán)。至于T時(shí)間片大小的選取,應(yīng)該根據(jù)具體的模塊或設(shè)備來調(diào)整,直到性能可靠為止,此時(shí)的時(shí)間片即為所需要的T。數(shù)據(jù)接收算法見圖1所示。
  為方便行文,將與計(jì)算機(jī)(主控機(jī))串口相連的模塊或系統(tǒng)統(tǒng)稱為智能設(shè)備(有時(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ì)一個(gè)通用串行通訊軟件,使運(yùn)行該軟件的計(jì)算機(jī)(在圖示中用帶陰影的文本框表示)作為主控機(jī)可以自動(dòng)地測試智能設(shè)備,也可作為智能設(shè)備用來自動(dòng)地測試主控機(jī)上的監(jiān)控軟件,至于臨時(shí)發(fā)送數(shù)據(jù)以代替主控機(jī)或智能設(shè)備,則是其基本功能。為了提高通用性,軟件主界面盡量簡潔,用兩個(gè)單行文本框顯示當(dāng)前接收或發(fā)送的數(shù)據(jù),其一為16進(jìn)制形式(如“41”),其二為字符形式(如“A”),用一個(gè)多行文本框顯示歷史數(shù)據(jù),包括接收和發(fā)送的數(shù)據(jù)、串口信號線的變化以及發(fā)生的時(shí)間(精確到毫秒),其它按鈕用來打開和關(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é)議兩個(gè)字段。采用VB6.0環(huán)境來完成此軟件,所用的主要控件包括數(shù)據(jù)控件、MsComm32.OCX、Timer等。為了靈活工作,模擬各種智能設(shè)備,需要設(shè)計(jì)一“協(xié)議生成器”,對于圖2所示的“讀協(xié)議”,協(xié)議生成器的功能為:首先選擇智能設(shè)備(由此確定協(xié)議標(biāo)志),設(shè)置地址范圍(即動(dòng)態(tài)數(shù)據(jù)),則軟件在此范圍內(nèi)自動(dòng)生成地址,然后計(jì)算校驗(yàn)碼,有的智能設(shè)備還需要追加協(xié)議結(jié)束標(biāo)志,如調(diào)制解調(diào)器的AT命令就需要以回車符結(jié)束方才有效。協(xié)議生成器構(gòu)造如圖3所示。
  主控機(jī)與智能設(shè)備方式。充當(dāng)主控機(jī)時(shí),可以定時(shí)向智能設(shè)備發(fā)送讀協(xié)議。充當(dāng)智能設(shè)備時(shí),用來響應(yīng)主控機(jī),其響應(yīng)協(xié)議有兩種生成方式,靜態(tài)和動(dòng)態(tài)。靜態(tài)方式時(shí),接收到主控機(jī)的協(xié)議,查找協(xié)議表,如果能匹配主控機(jī)協(xié)議,則將該條記錄的智能設(shè)備協(xié)議發(fā)出(先讓該軟件以主控機(jī)方式工作,與實(shí)際的智能設(shè)備相連,從而記錄下智能設(shè)備的響應(yīng)協(xié)議,可參考下文的“截取通訊協(xié)議”部分);在動(dòng)態(tài)方式下,找到匹配的主控機(jī)協(xié)議時(shí),響應(yīng)協(xié)議利用協(xié)議生成器動(dòng)態(tài)生成。   自動(dòng)與手動(dòng)是針對主控機(jī)而言。自動(dòng)方式需要設(shè)置定時(shí)器,定時(shí)向智能設(shè)備發(fā)送讀協(xié)議;對于手動(dòng)方式,則是通過發(fā)送按鈕來發(fā)送數(shù)據(jù),從而等待智能設(shè)備的響應(yīng)并顯示之。 軟件的總流程為:設(shè)置串口參數(shù),選擇智能設(shè)備,設(shè)置協(xié)議生成方式及動(dòng)態(tài)數(shù)據(jù)范圍,設(shè)置主控機(jī)或智能設(shè)備工作方式,如果是主控機(jī),還需要設(shè)置定時(shí)器,以及是否記錄智能設(shè)備響應(yīng)的協(xié)議;如果是智能設(shè)備,應(yīng)選擇靜態(tài)響應(yīng)或動(dòng)態(tài)響應(yīng)方式。主程序流程圖見圖4所示。
4 軟件的應(yīng)用 4.1 發(fā)送手機(jī)短消息   手機(jī)短消息協(xié)議如圖5所示。將軟件設(shè)置成主控機(jī)手動(dòng)狀態(tài),選擇手機(jī)設(shè)備,如果想發(fā)送“OK!”,只要在單行字符文本框中直接輸入“OK!”,并點(diǎn)擊“發(fā)送”按鈕,則軟件自動(dòng)填充其它數(shù)據(jù),并計(jì)算BCS校驗(yàn)碼,然后將數(shù)據(jù)發(fā)出。此協(xié)議是手機(jī)短消息協(xié)議之一,所采用的模塊來自西門子公司。
4.2 通過Modem進(jìn)行遠(yuǎn)程測試   將軟件設(shè)置成主控機(jī)手動(dòng)狀態(tài),選擇Modem設(shè)備,在單行字符文本框中輸入電話號碼(如025-1234567),點(diǎn)擊發(fā)送按鈕,則軟件自動(dòng)發(fā)送AT命令“ATDT025-1234567;”+回車符,完成與遠(yuǎn)程設(shè)備的連接,然后即可根據(jù)需要采用主控機(jī)或智能設(shè)備方式,自動(dòng)或手動(dòng)方式進(jìn)行測試(AT命令中的“;”表示撥通對方后保持連接狀態(tài))。對Modem進(jìn)行合適的設(shè)置,可以使其自動(dòng)摘機(jī)。 4.3 模擬主控機(jī)用來測試智能設(shè)備的數(shù)據(jù)性能   在計(jì)算機(jī)監(jiān)控系統(tǒng)中,需要選擇或自行設(shè)計(jì)一些特殊的智能設(shè)備,但是,其數(shù)據(jù)性能如何?這可以通過模擬主控機(jī)來測試,將其設(shè)置成主控機(jī)自動(dòng)工作方式,協(xié)議也采用動(dòng)態(tài)生成方式,對智能設(shè)備響應(yīng)的協(xié)議進(jìn)行分析(包括協(xié)議標(biāo)志及校驗(yàn)碼),如果有錯(cuò)誤,則記錄發(fā)生時(shí)間、主控機(jī)協(xié)議與智能設(shè)備的響應(yīng)協(xié)議。測試原理見圖6所示,其中協(xié)議庫中為動(dòng)態(tài)生成的主控機(jī)協(xié)議,錯(cuò)誤記錄即為主控機(jī)協(xié)議與對應(yīng)的智能設(shè)備響應(yīng)的錯(cuò)誤協(xié)議,虛線箭頭表示協(xié)議來源(下同),實(shí)際通過主控機(jī)進(jìn)行記錄。總的測試報(bào)告內(nèi)容見表1所示,單位為發(fā)送或接收的次數(shù)。詳細(xì)的測試分析可以借助錯(cuò)誤記錄進(jìn)行。
4.4 模擬智能設(shè)備測試主控機(jī)軟件性能   將軟件設(shè)置成智能設(shè)備動(dòng)態(tài)響應(yīng)狀態(tài),充當(dāng)智能設(shè)備角色,自動(dòng)應(yīng)答主控機(jī)的查詢命令。如圖7所示,當(dāng)收到主控機(jī)協(xié)議并在協(xié)議庫中找到匹配的協(xié)議時(shí),動(dòng)態(tài)生成智能設(shè)備的協(xié)議進(jìn)行響應(yīng)。這種功能可用來配合開發(fā)或調(diào)試主控機(jī)程序,特別地,當(dāng)智能設(shè)備比較昂貴數(shù)量較少,或體積龐大不便運(yùn)輸時(shí),采用此方式可以并行異地開發(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ù)。可以模擬主控機(jī)觀察智能設(shè)備的動(dòng)作響應(yīng)和信號燈變化,也可以模擬智能設(shè)備觀察主控機(jī)軟件界面的變化。如果協(xié)議沒有加密,則只要直接分析協(xié)議即可;如果協(xié)議已經(jīng)加密,可以利用密碼學(xué)中的方法去分析解密,然后再分析協(xié)議本身。有的通訊協(xié)議在數(shù)據(jù)加密的同時(shí),還配合信號線的變化。由于軟件主界面的多行文本框顯示并記錄著串口的收發(fā)數(shù)據(jù)及信號線變化的歷史狀態(tài),包括發(fā)生時(shí)間,這給協(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ī)啟動(dòng)或停機(jī)。在項(xiàng)目改造中,需要對油機(jī)進(jìn)行監(jiān)控,如果編寫項(xiàng)目任務(wù)書,請廠家設(shè)計(jì)監(jiān)控軟件,無疑周期較長,價(jià)格較貴。作者通過此協(xié)議截取和破譯方法,成功地破譯其通訊協(xié)議,并設(shè)計(jì)出監(jiān)控軟件。 5 結(jié)論   該研究<
投訴建議

提交

查看更多評論
其他資訊

查看更多

PLC一體機(jī)之EK溫度修正使用技巧

S7-300CPU存儲(chǔ)器介紹及存儲(chǔ)卡使用

0.05級超高精度互感器

DC-DC轉(zhuǎn)換器(電源模塊)應(yīng)用指南——外接濾波電容選配

施羅德最小流量閥的應(yīng)用范圍及優(yōu)點(diǎn)