基于RS-485總線多CPU控制系統(tǒng)簡化網(wǎng)絡(luò)模型及其通訊協(xié)議
3 系統(tǒng)通信協(xié)議
3.1 數(shù)據(jù)鏈路層協(xié)議
關(guān)于數(shù)據(jù)幀的定義前面已經(jīng)敘述,在這不予解釋。在多CPU的控制系統(tǒng)中子控制器的地址可以通過在硬件中設(shè)置一個撥碼開關(guān),通過設(shè)置撥碼開關(guān)的值來設(shè)置子控制器的物理地址。其網(wǎng)絡(luò)地址也就是撥碼開關(guān)的“0”和“1”組合。在設(shè)置過程中其地址分配為:00H為主控制器,01H~FFH為子控制器。主控制器依次查詢子控制器的地址,當與某個子控制器對話的時候,其他子控制器均不作應(yīng)答。
3.2 運輸層通信協(xié)議
TCP/IP運輸層有兩個主要的協(xié)議:TCP(傳輸控制協(xié)議)和UDP(用戶數(shù)據(jù)報協(xié)議)。TCP協(xié)議是面向連接的協(xié)議即發(fā)送方每發(fā)出一幀,接受方總要等待確認幀,否則認為出錯,因而該方式是一種可靠的通信方式。而UDP協(xié)議是無連接的協(xié)議,其發(fā)送方總是認為接收方接收正確,從而無需等待。這種協(xié)議雖然發(fā)送過程簡單,但其可靠性不高。對于多CPU的控制系統(tǒng)來說,其傳輸?shù)拿詈蛥?shù)都是非常重要的,所以選擇類似于TCP協(xié)議方式,建立連接和數(shù)據(jù)幀傳送過程如圖3和4所示。
由圖3所示可知,當主控制器查詢到某個子控制器時,如果子控制器有指令數(shù)據(jù)幀要發(fā)送給主控制器則子控制器發(fā)送A_S_HAVE,主控制器收到后發(fā)出應(yīng)答控制字A_M_READY;如果子控制器被主控制器查詢到?jīng)]有指令數(shù)據(jù)幀要發(fā)送給主控制器,則發(fā)送A_S_OVER,告訴主控制器無數(shù)據(jù)幀發(fā)送,主控制器退出此次連接繼續(xù)查詢下一個子控制器。
由圖4所示可知,通信連接建立以后主控制器和子控制器之間可以進行指令數(shù)據(jù)幀傳輸。當傳輸完一個數(shù)據(jù)幀后,接收方需要應(yīng)答相應(yīng)的連接控制字(如:“已接收一幀”即A_S_RECEIVED/A_M_RECEIVED),只有這樣才能繼續(xù)發(fā)送下一幀指令數(shù)據(jù)幀,否則認為發(fā)送不成功。
3.3 應(yīng)用層通信協(xié)議
應(yīng)用層是四層簡化網(wǎng)絡(luò)模型中最頂層,其主要關(guān)心具體要發(fā)送什么數(shù)據(jù)和接收到數(shù)據(jù)后執(zhí)行后續(xù)的操作等,而數(shù)據(jù)傳輸由應(yīng)用層以下的層完成。應(yīng)用層主要包含以下幾點:
(1)數(shù)據(jù)格式:在多CPU控制系統(tǒng)中采用兩種格式的數(shù)據(jù)。一是本地使用的數(shù)據(jù),為了編程方便和直觀,采用ASCⅡ碼來表示。二是網(wǎng)絡(luò)通信數(shù)據(jù),為了使通信程序高效、簡潔,采用壓縮BCD碼。通過這兩種格式數(shù)據(jù)大大提高了網(wǎng)絡(luò)傳輸效率。
(2)消息:在應(yīng)用層中采用WIN32操作平臺的“消息”概念來描述控制器之間的數(shù)據(jù)傳輸,其內(nèi)容與指令數(shù)據(jù)幀相同。由于本地對數(shù)據(jù)處理可能很快,而數(shù)據(jù)傳輸要等待網(wǎng)絡(luò)連接建立,這樣數(shù)據(jù)本地處理和網(wǎng)絡(luò)傳輸就不能夠同步進行,所以就必須采用緩沖機制來協(xié)調(diào)。仿照WIN32操作平臺中對消息的處理辦法,用循環(huán)隊列數(shù)據(jù)結(jié)構(gòu)來緩沖消息(如圖5所示)。消息全部采用統(tǒng)一長度,一般采用4個字節(jié),隊列中每個元素為一個數(shù)組(長度為4個字節(jié)),每個隊列中共有5個元素,采用先進先出(FIFO)原則,并且循環(huán)使用。生成或收到的消息時先放入消息數(shù)組中,并作為一個元素放入REAL指針所指尾部入緩沖隊列(REAL加1),進行通信時從HEAD指針所指首部取出最先進入隊列數(shù)據(jù)幀(HEAD加1)。同時系統(tǒng)對當前的消息中第一個字節(jié)(控制指令)內(nèi)容進行判斷,從而進入相應(yīng)的消息處理程序。
4 通信軟件的抗干擾措施
4.1 在協(xié)議中增加差錯控制措施
當主控制器發(fā)送呼叫幀后,如果在規(guī)定的時間內(nèi)沒有收到子控制器的應(yīng)答幀或沒有得到正確應(yīng)答幀,則認為通信失敗。只有等到下次再與該子控制器建立連接時,重新完成上次未交換的數(shù)據(jù)幀。同時采用累加校驗字段來判斷數(shù)據(jù)是否正確,通過以上措施可以有效的防止通信錯誤發(fā)生。
4.2 在軟件設(shè)計中適當增加延時
當主控制器或子控制器有一種狀態(tài)轉(zhuǎn)到另一種狀態(tài)時,插入一定延時(一般為幾十毫秒),其可以大大提高總線穩(wěn)定性,從而可提高數(shù)據(jù)傳輸可靠性。
5 結(jié)束語
由RS-485網(wǎng)絡(luò)的多CPU控制系統(tǒng)的特點,并參照ISO七層網(wǎng)絡(luò)模型和TCP/IP協(xié)議設(shè)計思想,提出了適用于該系統(tǒng)的四層簡化網(wǎng)絡(luò)模型、各層的通信協(xié)議和數(shù)據(jù)幀的格式。在實際應(yīng)用中,根據(jù)四層簡化網(wǎng)絡(luò)模型及其通信協(xié)議編制的通信軟件在實際應(yīng)用中效果良好、通信速度和可靠性得到大大的提高。
評論