<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          新聞中心

          EEPW首頁(yè) > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > 基于RS-485總線多CPU控制系統(tǒng)簡(jiǎn)化網(wǎng)絡(luò)模型及其通訊協(xié)議

          基于RS-485總線多CPU控制系統(tǒng)簡(jiǎn)化網(wǎng)絡(luò)模型及其通訊協(xié)議

          作者: 時(shí)間:2012-12-11 來(lái)源:網(wǎng)絡(luò) 收藏

          3 系統(tǒng)通信協(xié)議

          3.1 數(shù)據(jù)鏈路層協(xié)議

          關(guān)于數(shù)據(jù)幀的定義前面已經(jīng)敘述,在這不予解釋。在多CPU的控制系統(tǒng)中子控制器的地址可以通過(guò)在硬件中設(shè)置一個(gè)撥碼開關(guān),通過(guò)設(shè)置撥碼開關(guān)的值來(lái)設(shè)置子控制器的物理地址。其網(wǎng)絡(luò)地址也就是撥碼開關(guān)的“0”和“1”組合。在設(shè)置過(guò)程中其地址分配為:00H為主控制器,01H~FFH為子控制器。主控制器依次查詢子控制器的地址,當(dāng)與某個(gè)子控制器對(duì)話的時(shí)候,其他子控制器均不作應(yīng)答。

          3.2 運(yùn)輸層通信協(xié)議

          TCP/IP運(yùn)輸層有兩個(gè)主要的協(xié)議:TCP(傳輸控制協(xié)議)和UDP(用戶數(shù)據(jù)報(bào)協(xié)議)。TCP協(xié)議是面向連接的協(xié)議即發(fā)送方每發(fā)出一幀,接受方總要等待確認(rèn)幀,否則認(rèn)為出錯(cuò),因而該方式是一種可靠的通信方式。而UDP協(xié)議是無(wú)連接的協(xié)議,其發(fā)送方總是認(rèn)為接收方接收正確,從而無(wú)需等待。這種協(xié)議雖然發(fā)送過(guò)程簡(jiǎn)單,但其可靠性不高。對(duì)于多CPU的控制系統(tǒng)來(lái)說(shuō),其傳輸?shù)拿詈蛥?shù)都是非常重要的,所以選擇類似于TCP協(xié)議方式,建立連接和數(shù)據(jù)幀傳送過(guò)程如圖3和4所示。

          由圖3所示可知,當(dāng)主控制器查詢到某個(gè)子控制器時(shí),如果子控制器有指令數(shù)據(jù)幀要發(fā)送給主控制器則子控制器發(fā)送A_S_HAVE,主控制器收到后發(fā)出應(yīng)答控制字A_M_READY;如果子控制器被主控制器查詢到?jīng)]有指令數(shù)據(jù)幀要發(fā)送給主控制器,則發(fā)送A_S_OVER,告訴主控制器無(wú)數(shù)據(jù)幀發(fā)送,主控制器退出此次連接繼續(xù)查詢下一個(gè)子控制器。

          由圖4所示可知,通信連接建立以后主控制器和子控制器之間可以進(jìn)行指令數(shù)據(jù)幀傳輸。當(dāng)傳輸完一個(gè)數(shù)據(jù)幀后,接收方需要應(yīng)答相應(yīng)的連接控制字(如:“已接收一幀”即A_S_RECEIVED/A_M_RECEIVED),只有這樣才能繼續(xù)發(fā)送下一幀指令數(shù)據(jù)幀,否則認(rèn)為發(fā)送不成功。

          3.3 應(yīng)用層通信協(xié)議

          應(yīng)用層是四層簡(jiǎn)化網(wǎng)絡(luò)模型中最頂層,其主要關(guān)心具體要發(fā)送什么數(shù)據(jù)和接收到數(shù)據(jù)后執(zhí)行后續(xù)的操作等,而數(shù)據(jù)傳輸由應(yīng)用層以下的層完成。應(yīng)用層主要包含以下幾點(diǎn):

          (1)數(shù)據(jù)格式:在多CPU控制系統(tǒng)中采用兩種格式的數(shù)據(jù)。一是本地使用的數(shù)據(jù),為了編程方便和直觀,采用ASCⅡ碼來(lái)表示。二是網(wǎng)絡(luò)通信數(shù)據(jù),為了使通信程序高效、簡(jiǎn)潔,采用壓縮BCD碼。通過(guò)這兩種格式數(shù)據(jù)大大提高了網(wǎng)絡(luò)傳輸效率。

          (2)消息:在應(yīng)用層中采用WIN32操作平臺(tái)的“消息”概念來(lái)描述控制器之間的數(shù)據(jù)傳輸,其內(nèi)容與指令數(shù)據(jù)幀相同。由于本地對(duì)數(shù)據(jù)處理可能很快,而數(shù)據(jù)傳輸要等待網(wǎng)絡(luò)連接建立,這樣數(shù)據(jù)本地處理和網(wǎng)絡(luò)傳輸就不能夠同步進(jìn)行,所以就必須采用緩沖機(jī)制來(lái)協(xié)調(diào)。仿照WIN32操作平臺(tái)中對(duì)消息的處理辦法,用循環(huán)隊(duì)列數(shù)據(jù)結(jié)構(gòu)來(lái)緩沖消息(如圖5所示)。消息全部采用統(tǒng)一長(zhǎng)度,一般采用4個(gè)字節(jié),隊(duì)列中每個(gè)元素為一個(gè)數(shù)組(長(zhǎng)度為4個(gè)字節(jié)),每個(gè)隊(duì)列中共有5個(gè)元素,采用先進(jìn)先出(FIFO)原則,并且循環(huán)使用。生成或收到的消息時(shí)先放入消息數(shù)組中,并作為一個(gè)元素放入REAL指針?biāo)肝膊咳刖彌_隊(duì)列(REAL加1),進(jìn)行通信時(shí)從HEAD指針?biāo)甘撞咳〕鲎钕冗M(jìn)入隊(duì)列數(shù)據(jù)幀(HEAD加1)。同時(shí)系統(tǒng)對(duì)當(dāng)前的消息中第一個(gè)字節(jié)(控制指令)內(nèi)容進(jìn)行判斷,從而進(jìn)入相應(yīng)的消息處理程序。

          4 通信軟件的抗干擾措施

          4.1 在協(xié)議中增加差錯(cuò)控制措施

          當(dāng)主控制器發(fā)送呼叫幀后,如果在規(guī)定的時(shí)間內(nèi)沒(méi)有收到子控制器的應(yīng)答幀或沒(méi)有得到正確應(yīng)答幀,則認(rèn)為通信失敗。只有等到下次再與該子控制器建立連接時(shí),重新完成上次未交換的數(shù)據(jù)幀。同時(shí)采用累加校驗(yàn)字段來(lái)判斷數(shù)據(jù)是否正確,通過(guò)以上措施可以有效的防止通信錯(cuò)誤發(fā)生。

          4.2 在軟件設(shè)計(jì)中適當(dāng)增加延時(shí)

          當(dāng)主控制器或子控制器有一種狀態(tài)轉(zhuǎn)到另一種狀態(tài)時(shí),插入一定延時(shí)(一般為幾十毫秒),其可以大大提高總線穩(wěn)定性,從而可提高數(shù)據(jù)傳輸可靠性。

          5 結(jié)束語(yǔ)

          由RS-485網(wǎng)絡(luò)的多CPU控制系統(tǒng)的特點(diǎn),并參照ISO七層網(wǎng)絡(luò)模型和TCP/IP協(xié)議設(shè)計(jì)思想,提出了適用于該系統(tǒng)的四層簡(jiǎn)化網(wǎng)絡(luò)模型、各層的通信協(xié)議和數(shù)據(jù)幀的格式。在實(shí)際應(yīng)用中,根據(jù)四層簡(jiǎn)化網(wǎng)絡(luò)模型及其通信協(xié)議編制的通信軟件在實(shí)際應(yīng)用中效果良好、通信速度和可靠性得到大大的提高。


          上一頁(yè) 1 2 下一頁(yè)

          評(píng)論


          相關(guān)推薦

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

          關(guān)閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();