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

          新聞中心

          EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > 利用MODBUS提高多CPU協(xié)同開發(fā)效率

          利用MODBUS提高多CPU協(xié)同開發(fā)效率

          作者: 時(shí)間:2013-12-06 來源:網(wǎng)絡(luò) 收藏

          表1 協(xié)議中的標(biāo)準(zhǔn)功能碼

          ic72新聞中心

          由功能碼的定義可以看出,傳送的報(bào)文對(duì)象主要分為模擬量和數(shù)字量?jī)深?,由?bào)文頭的功能碼來確定報(bào)文的內(nèi)容。在實(shí)際應(yīng)用中,主要使用02、04、05和06這四種功能碼,完成對(duì)數(shù)字量和模擬量的讀取及設(shè)置。

          數(shù)據(jù)起始地址和數(shù)據(jù)量是報(bào)文的主要內(nèi)容。規(guī)定的數(shù)據(jù)量是從通信對(duì)象的器件中讀取的數(shù)據(jù)或是往通對(duì)象的器件中寫入的數(shù)據(jù)。每個(gè)通信對(duì)象器件都有自己的地址。在保護(hù)裝置的內(nèi)部通信中,指定各通信對(duì)象器件為主機(jī)板的RAM中保存的數(shù)字量和模擬量,以及EEPROM中設(shè)定的保護(hù)配置和定值。在處理通信報(bào)文時(shí),由報(bào)文的數(shù)據(jù)起始地址和對(duì)應(yīng)的數(shù)據(jù)量長(zhǎng)度進(jìn)行讀取或發(fā)送任務(wù)。當(dāng)傳送數(shù)字量時(shí),不同地址的數(shù)據(jù)值用報(bào)文中數(shù)據(jù)量不同的位來表示,這樣就能傳送更多的數(shù)據(jù)信息,從而高效地利用通信報(bào)文。由于每幀數(shù)據(jù)不定長(zhǎng),方便靈活,因而避免了固定幀長(zhǎng)造成的對(duì)CPU時(shí)間和內(nèi)存空間的浪費(fèi)。另外,通信協(xié)議規(guī)定在通信字符串中的地址比實(shí)際地址小“1”,這對(duì)數(shù)組進(jìn)行操作時(shí)是一個(gè)方便之處。

          報(bào)文末的兩個(gè)字節(jié)為校驗(yàn)字節(jié)。RTU方式通信采用CRC-16位循環(huán)碼冗余校驗(yàn),即將整個(gè)字符串(不包括最后兩個(gè)字節(jié))按規(guī)定的方式進(jìn)行位移并進(jìn)行異或計(jì)算,計(jì)算結(jié)果存在字符串的最后兩個(gè)字節(jié)內(nèi),并由接收方按同樣的計(jì)算方法進(jìn)行校驗(yàn)是否一致。這種校驗(yàn)方法對(duì)隨機(jī)或突發(fā)差錯(cuò)造成的幀破壞有很好的校驗(yàn)效果。

          3 提高通信效率的措施

          在確立硬件平臺(tái)和通信協(xié)議后的軟件設(shè)計(jì)過程中,筆者采用了很多方法提高通信的效率和可靠性。

          3.1 將通信分為接收和發(fā)送兩個(gè)獨(dú)立的任務(wù)[3]

          80C196單片機(jī)可以使用查詢和中斷兩種方法通過串行口發(fā)送和接收數(shù)據(jù)。對(duì)于中斷方式,80C196單片機(jī)提供了兩種串口中斷方式:第一種方式為一個(gè)單獨(dú)的串口中斷,由中斷屏蔽寄存器INT_MASK的D6位控制,對(duì)應(yīng)中斷向量200CH,串行口狀態(tài)寄存器SP_STAT(11H)的D5(發(fā)送完標(biāo)志TI)和D6(接收完標(biāo)志RI)置位都將觸發(fā)該中斷;第二種方式為接收、發(fā)送分別設(shè)置了中斷號(hào),使用INT_MASK1的D0位對(duì)應(yīng)發(fā)送中斷,中斷向量2030H,TI置位觸發(fā)該中斷;INT_MASK1的D1位對(duì)應(yīng)收中斷,中斷向量2032H,RI置位觸發(fā)該中斷。筆者采用了第二種通信方式。這樣每接收完或發(fā)送完一個(gè)字節(jié)后就觸發(fā)相應(yīng)的中斷,直接進(jìn)行下一輪的接收、發(fā)送任務(wù),而不必判斷串口控制/狀態(tài)寄存器SP_CON/SP_STAT(11H),使得中斷子程序更為簡(jiǎn)練、高效。

          3.2 盡量縮短中斷時(shí)間

          由于設(shè)計(jì)軟件結(jié)構(gòu)時(shí)使用了多個(gè)中斷,為了保證程序的可靠運(yùn)行,減少不同不斷間互沖突的機(jī)率,在編制軟件時(shí)盡可能簡(jiǎn)練各種中斷的任務(wù),縮短中斷執(zhí)行時(shí)間。在通信中斷子程序中,進(jìn)入中斷后執(zhí)行必要的任務(wù),如:清串行口狀態(tài)寄存器SP_STAT中相應(yīng)的狀態(tài)位,將剛接收到的字符或需要發(fā)送的字符從緩沖區(qū)內(nèi)讀出或?qū)懭刖彌_區(qū),已接收或發(fā)送字符數(shù)增1等,之后便立即退出中斷。其它任務(wù)如判斷幀的有效性、對(duì)接收幀命令(遙測(cè)、遙控命令)的應(yīng)答,準(zhǔn)備發(fā)送幀等,都放在主程序中完成。

          3.3 可靠地判斷幀結(jié)束,防止通信停滯

          利用單獨(dú)的軟件定時(shí)器,來判斷一幀接收?qǐng)?bào)文結(jié)束,可以防止若報(bào)文接收不完整,該幀通信任務(wù)無法結(jié)束而影響下一幀的接收。

          由于一幀報(bào)文中字節(jié)與字節(jié)之間的時(shí)間間隔和幀與幀之間的時(shí)間間隔相比要小得多,因此每當(dāng)接收一個(gè)新字節(jié),就啟動(dòng)軟件定時(shí)器開始計(jì)時(shí),定時(shí)器的時(shí)間設(shè)定為幀與幀的最小時(shí)間間隔。波特率不同,該時(shí)間間隔也不同。若不到預(yù)定的時(shí)間內(nèi)又接收到下一個(gè)字節(jié),則說明一幀報(bào)文未結(jié)束,定時(shí)器重新計(jì)時(shí);若定時(shí)器順利計(jì)數(shù)到預(yù)定時(shí)間,就會(huì)觸發(fā)相應(yīng)的中斷號(hào),在該定時(shí)器中斷子程序中設(shè)定幀結(jié)束標(biāo)志字節(jié),表明一幀報(bào)文接收完畢。當(dāng)主程序內(nèi)檢測(cè)到一幀報(bào)文接收完畢后,會(huì)通過核查從方地址及循環(huán)冗余校驗(yàn)字節(jié)是否正確來判斷該幀的有效性。若確定接收到的是一幀發(fā)送給已方的正確報(bào)文,則會(huì)根據(jù)報(bào)文內(nèi)的功能碼對(duì)該幀命令進(jìn)行相應(yīng)的處理,并準(zhǔn)備發(fā)送幀。

          MODBUS協(xié)議還規(guī)定了從方接收?qǐng)?bào)文不正確時(shí)發(fā)回的出錯(cuò)幀??紤]到裝置內(nèi)部通信的過程不很復(fù)雜,在實(shí)際應(yīng)用中如果從方收到的報(bào)文校驗(yàn)不正確,采取不作應(yīng)答的方式。主方若在規(guī)定時(shí)間內(nèi)未收到從方的應(yīng)答報(bào)文時(shí),將重發(fā)請(qǐng)求報(bào)文;若多次未收到從方應(yīng)答報(bào)文,則報(bào)通訊故障。

          3.4 通信速率的確定

          由于所開的裝置都在同一機(jī)箱內(nèi),模塊與模塊之間的間距很短,而MODBUS是基于RS485的長(zhǎng)距離通信,可以不考慮距離對(duì)通信波特率的影響,并且由于采用主從式通信模式,不會(huì)出現(xiàn)線路堵塞現(xiàn)象。因此,僅從通信效率來看,只要不超過模塊所使用芯片對(duì)最高波特率的限制,則設(shè)定的波特率越高,信息交互越快,通信效率也越高。但是,對(duì)于實(shí)時(shí)多任務(wù)系統(tǒng),必須注意各任務(wù)的協(xié)調(diào)。MODBUS通信協(xié)議中只對(duì)各種通信報(bào)文格式作了規(guī)定,對(duì)通信波特率和奇偶校驗(yàn)等不作硬性規(guī)定。當(dāng)一幀報(bào)文的長(zhǎng)度較長(zhǎng),而波特率又很高,會(huì)導(dǎo)致CPU忙于處理通信而可能丟失其它實(shí)時(shí)性任務(wù),如實(shí)時(shí)采樣等。因此,選擇通信波特率時(shí)必須注意與其它任務(wù)相協(xié)調(diào),而不是越高越好。在實(shí)際應(yīng)用中,將波將率設(shè)置到19200bps,系統(tǒng)調(diào)調(diào)運(yùn)作。由于設(shè)定通信雙方波特率完全一致,可以使接收端對(duì)每一個(gè)數(shù)據(jù)位的采樣都發(fā)生在位周期的中點(diǎn),實(shí)現(xiàn)可靠通信。另外,在字符傳送時(shí)不使用奇偶校驗(yàn)位,以此相對(duì)提高了有效字節(jié)傳遞的速率。

          3.5 合理的調(diào)試方法

          在開發(fā)初期,使用仿真器等工具只能對(duì)單一CPU模塊進(jìn)行實(shí)時(shí)監(jiān)測(cè),而無法同時(shí)監(jiān)測(cè)串行通信雙方,難以確定問題所在,使調(diào)試效率受到很大影響。因此先將各CPU模塊分別通過RS485/RS232數(shù)據(jù)轉(zhuǎn)換模塊與微機(jī)進(jìn)行通信測(cè)試,成功后再進(jìn)行模塊間聯(lián)調(diào),大大提高了聯(lián)調(diào)的效率。在調(diào)試各模塊與微機(jī)通信的過程中,微機(jī)使用MODBUS調(diào)試軟件,模仿主方的通信過程,主動(dòng)向從方(各CPU模塊)索要信息。整個(gè)接收、發(fā)送過程都是透明、清晰的,使得模塊中存在的絕大多數(shù)問題都能在與微機(jī)通信的過程發(fā)現(xiàn)并及時(shí)解決。CPU模塊間聯(lián)調(diào)時(shí),可以利用總線監(jiān)控軟件,觀察雙方發(fā)送的數(shù)據(jù)。當(dāng)遇到通信問題的時(shí)候,就能比較容易地確定是哪一個(gè)模塊發(fā)送數(shù)據(jù)不正確,從而確定問題所在。采用這樣的調(diào)試方法,大大增強(qiáng)了不同開發(fā)人員、不同CPU之間的協(xié)調(diào)性,提高了裝置研發(fā)的效率和進(jìn)度。


          上一頁 1 2 下一頁

          關(guān)鍵詞: MODBUS 多CPU 開發(fā)效率

          評(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); })();