《電子技術應用》
您所在的位置:首頁 > 通信與網絡 > 業界動態 > 利用MODBUS提高多CPU系統協同開發的效率

利用MODBUS提高多CPU系統協同開發的效率

2009-04-22
作者:李璇華 唐曉泉 黃益莊 張 楠

??? 摘? 要: 提出利用MODBUS協議實現多CPU系統中信息交互的方案,分析了軟硬件通信機制的設計和系統協同開發的方法,以及各種提高通信效率的措施。?

??? 關鍵詞: MODBUS通信協議? 多CPU系統? 通信

?

??? 在電力系統微機綜合保護和自控裝置以及其它工業自動化控制領域,微控制器的應用越來越廣泛,其裝置的復雜性也越來越高。為了解決其開發對象實時多任務性的要求,單CPU、單人開發的模式正在被多個、多類型CPU和多人協同開發的模式所代替。在這新的開發模式中,面臨一個新問題——在實施信息交互的過程中如何將實現CPU之間信息交互的軟硬件標準化,這是關系到該模式能否成功實施的關鍵。在眾多的通信方式中,基于UART的RS-485串行通信模式以其連線簡捷、可靠性高和可帶動多CPU、多設備級連的能力而被廣泛采用。在軟件通信協議的選擇上,MODBUS協議由于其通用、成熟的第三方標準測試軟件,為用戶使用提供了諸多優勢。因此,在開發新型電動機綜合保護裝置TH21-4M的過程中,采用RS-485串行通信方式和MODBUS通信協議,實現了多CPU之間的數據和控制命令的信息交互。為了增強串行通信的高效、協調性,筆者在通信機制的軟硬件結構上采取了很多措施,并取得了很好的效果。在調試系統通信階段,使用了各CPU模塊先與MODBUS標準測試軟件通信,之后再互相聯調的方法,大大提高了協同開發的效率。實踐證明,該設計思想簡化了系統的結構,大大提高了裝置的運行效率和可靠性。本文將結合TH21-4M的設計思路,從硬件設計和軟件規劃兩方面,介紹如何利用MODBUS通信協議,實現多CPU結構的協同開發。?

1 TH21-4M電動機綜合保護裝置的特點?

??? TH21-4M電動機綜合保護裝置除綜合保護功能以外,兼有測量、遠動和通信的功能;大屏幕的漢字液晶顯示,可以實現友好的人機界面;利用CAN總線,與監控主機進行通信,從而構成分級分散式的變電站綜合自動化系統的子系統。?

??? 在設計上,由于裝置需要實現多任務,為了優化系統功能,采用了多CPU的系統結構。其中一個CPU負責定時采樣脈沖發送;主CPU模塊負責數據處理、電量計算、故障判斷和開關操作;面板模塊上的CPU負責人機交互,并實現與主保護模塊和監控主機的通信任務。各個CPU模塊有明確的任務分工,研制時也容易實現多人協同開發。在整個結構中,串行通信溝通了主CPU和面板CPU,使人機交互成為可能,因而占有重要的地位。建立合理的通信機制則是串行通信部分的核心所在,它決定著通信的協調性和系統開發后期調試的效率。?

2 通信機制介紹?

2.1 通信機制硬件設計原理?

??? 本系統通信機制的提出以高效、可靠為目的。RS-485為半雙工結構,現場中比全雙工往往更接近于實用,在此采用只有2條信號線的最簡型連接。系統接口電路圖由圖1所示。主保護模塊上的80C196單片機輸出的TTL邏輯電平通過光電隔離后,由MAX485芯片轉換為RS-485電平,再由面板模塊上的MAX485芯片轉換為TTL邏輯電平,由80C31單片機讀取;反之亦然。在80C196單片機一側,使用并行輸入輸出口2 (IO_PORT2)的一位P2.7對MAX輸入使能端 RE、輸出使能端DE進行控制。由圖1可知,當P2.7輸出高電平時,RE使能,單片機一側接收數據;當P2.7輸出低電平時,DE使能,單片機一側發送數據。這樣,避免了盲目發送造成的數據疊加丟失現象,通信質量高,通信速度也能得到保證。?

?

?

2.2? 通信協議介紹?

??? 為了保證保護裝置中兩個模塊之間能夠正確地傳遞數據,必須有一套關于信息傳輸的模式、數據格式和內容等的規定,即規約[1]或通信協議。雖然保護裝置內部的通信相對簡單,兩個模塊之間傳遞的數據也不是很多,但是自定義內部通信協議的弊端是很明顯的。首先,自定義通信協議很難在時序、任務的協調上配合得很好,數據傳送的可靠性也難以保證;其次,由于沒有現成的較成熟的調試軟件,主CPU模塊基本是黑匣子,系統聯調時的困難較多且難以克服。因此,采用了當前流行的MODBUS通信協議,并結合本裝置的特點加以簡化,從而實現了模塊間的通信,事實證明效果很好。?

??? MODBUS的通信方式為主從方式[2]。主方首先向從方發送通信請求指令,從方根據請求指令中的功能碼向主方發回數據。每個從方都有自己獨立的地址。主方所發的請求幀和從方所發的應答幀都是以從方地址開頭的。從方只讀發給自己的指令,對以其他從方地址開頭的報文不作應答。這種一問一答的通信模式,大大提高了通信的正確率。但對于微機保護來說,該主從方式也存在著弊端,即當保護主模塊進行保護動作后,無法立刻向上位機傳送故障信息,只能由上位機不斷向保護主模塊詢問保護是否動作,若有,則再進一步要求具體故障信息。?

??? MODBUS有RTU(Remote Terminal Unit)和ASCII兩種傳送方式。為了保證較高的通信速度,采用了RTU方式,數據字節無奇偶校驗位,加上起始、終止位后字節長度為10bit,數據間隔在24bit以內,采用循環冗余檢驗方式對報文進行校驗。?

??? MODBUS典型的報文格式如下:?

???

??? 一個通信報文的具體內容取決于該指令字符串的功能碼,MODBUS中定義的標準功能碼如表1所示。?

?

?

??? 由功能碼的定義可以看出,傳送的報文對象主要分為模擬量和數字量兩類,由報文頭的功能碼來確定報文的內容。在實際應用中,主要使用02、04、05和06這四種功能碼,完成對數字量和模擬量的讀取及設置。?

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

??? 報文末的兩個字節為校驗字節。RTU方式通信采用CRC-16位循環碼冗余校驗,即將整個字符串(不包括最后兩個字節)按規定的方式進行位移并進行異或計算,計算結果存于字符串的最后兩個字節內,并由接收方按同樣的計算方法進行校驗是否一致。這種校驗方法對隨機或突發差錯造成的幀破壞有很好的校驗效果。?

3 提高通信效率的措施?

??? 在確立硬件平臺和通信協議后的軟件設計過程中,筆者采用了很多方法提高通信的效率和可靠性。?

3.1 將通信分為接收和發送兩個獨立的任務[3] ?

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

3.2 盡量縮短中斷時間?

??? 由于設計軟件結構時使用了多個中斷,為了保證程序的可靠運行,減少不同中斷間相互沖突的機率,在編制軟件時盡可能簡練各種中斷的任務,縮短中斷執行時間。在通信中斷子程序中,進入中斷后執行必要的任務,如:清串行口狀態寄存器SP_STAT中相應的狀態位,將剛接收到的字符或需要發送的字符從緩沖區內讀出或寫入緩沖區,已接收或發送字符數增1等,之后便立即退出中斷。其它任務如判斷幀的有效性、對接收幀命令(遙測、遙控命令)的應答,準備發送幀等,都放在主程序中完成。?

3.3 可靠地判斷幀結束,防止通信停滯?

??? 利用單獨的軟件定時器,來判斷一幀接收報文結束,可以防止若報文接收不完整,該幀通信任務無法結束而影響下一幀的接收。?

??? 由于一幀報文中字節與字節之間的時間間隔和幀與幀之間的時間間隔相比要小得多,因此每當接收到一個新字節,就啟動軟件定時器開始計時,定時器的時間設定為幀與幀的最小時間間隔。波特率不同,該時間間隔也不同。若不到預定的時間內又接收到下一個字節,則說明一幀報文未結束,定時器重新計時;若定時器順利計數到預定時間,就會觸發相應的中斷號,在該定時器中斷子程序中設定幀結束標志字節,表明一幀報文接收完畢。當主程序內檢測到一幀報文接收完畢后,會通過核查從方地址及循環冗余校驗字節是否正確來判斷該幀的有效性。若確定接收到的是一幀發送給己方的正確報文,則會根據報文內的功能碼對該幀命令進行相應的處理,并準備發送幀。?

??? MODBUS協議還規定了從方接收報文不正確時發回的出錯幀??紤]到裝置內部通信的過程不是很復雜,在實際應用中如果從方收到的報文校驗不正確,采取不作應答的方式。主方若在規定時間內未收到從方的應答報文時,將重發請求報文;若多次未收到從方應答報文,則報通訊故障。?

3.4 通信速率的確定?

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

3.5 合理的調試方法?

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

參考文獻?

1 黃益莊.變電站綜合自動化技術. 北京:中國電力出版社,2000;3?

2 鄭亞平.分散型控制系統與子系統的通訊連接(II). 石油化工自動化,1999;2:21~27?

3 Intel. 8XC196KC/8XC196KD User's Manual. 1992

本站內容除特別聲明的原創文章之外,轉載內容只為傳遞更多信息,并不代表本網站贊同其觀點。轉載的所有的文章、圖片、音/視頻文件等資料的版權歸版權所有權人所有。本站采用的非本站原創文章及圖片等內容無法一一聯系確認版權者。如涉及作品內容、版權和其它問題,請及時通過電子郵件或電話通知我們,以便迅速采取適當措施,避免給雙方造成不必要的經濟損失。聯系電話:010-82306118;郵箱:[email protected]
主站蜘蛛池模板: 特级a欧美做爰片毛片 | 极品的亚洲 | 国产精品手机在线观看 | 亚洲视频免费观看 | 黄色w站| 国产女人一区二区 | 亚洲在线天堂 | 久久国产三级 | 日本三级特黄 | 国产在线观看午夜不卡 | 538prom精品视频在放免费 | 欧美日韩免费一区二区三区 | 欧美透逼视频 | 九色porny真实丨国产18 | 亚洲欧美一区二区三区在线 | 9久9久女女热精品视频免费观看 | 成人在免费视频手机观看网站 | 亚洲精品一区二区手机在线 | 国产自愉自愉全免费高清 | 久久精品免费i 国产 | 久久国产精彩视频 | 婷婷在线成人免费观看搜索 | 成年女人毛片 | 国产欧美在线观看不卡 | 免费观看女人一摸全是水 | 免费一级特黄 欧美大片 | 怡红院免费播放全部视频 | xxx国产老太婆视频 xxx欧美老熟 | 国产亚洲精品高清在线 | 久久三级毛片 | 欧美另类精品 | 国产成人性色视频 | 精品国产欧美一区二区三区成人 | 国产成人女人视频在线观看 | 欧美成人观看视频在线 | 成人亚洲欧美日韩中文字幕 | 国产精品久久久久久爽爽爽 | 精品久久久久久国产 | 色一级片| 污美女网站www在线观看 | 视频一区色眯眯视频在线 |