新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > ModBus協議在工業控制系統中的應用

        ModBus協議在工業控制系統中的應用

        作者: 時間:2012-06-19 來源:網絡 收藏

          3.2 系統的軟件設計

          本系統的軟件設計是基于軟件開發平臺μC/OS-II,它是由Labrosse先生編寫的一個開放式內核,最主要的特點就是源碼公開,清晰明了。在單片機系統中嵌入μC/OS-II將增強系統的可靠性,并使得調試程序變得簡單起來。但由于它沒有功能強大的軟件包,基于具體應用需要自己編寫驅動程序,對內核進行擴充。為使其能夠正常工作,要根據具體的硬件平臺完成相應的移植工作。μC/OS-II是一個占先式的內核,即已經準備就緒的高優先級任務可以剝奪正在運行的低優先級任務的CPU使用權。這個特點使得它的實時性比非占先式的內核要好。根據要實現的功能,我將系統劃分為如下6個任務:按鍵處理、LCD顯示、串行通信、輸出任務、控制運算、信號采集處理。這里只介紹和ModBus總線協議相關的部分。

          當選用的是ModBus的RTU模式時,一幀報文中字節與字節之間的時間間隔比幀與幀之間的時間間隔小得多,因此主要的難點在于如何判斷一幀報文接收結束與否,這可以利用單片機內置的定時器來進行判斷。若實際實現時,我們選擇了19200的傳輸速率,那么空閑間隔時間T≥1/19200*8*3.5=1.5ms。每當接收到一個新的字節,就啟動定時器開始計時,定時器的時間設定為幀與幀之間的最小時間間隔(上面提到的例子中是1.5ms)。波特率不同,該時間的間隔也不同。若不到預定時間又接收到下一個字節,則說明一幀報文尚未結束,定時器重新開始計數;若定時器順利計數到預定時間,就會觸發相應的中斷,在該定時中斷服務程序中設定幀結束標志字節,表明一幀報文接收完畢。這樣就可以防止報文接收不完整,導致該幀通訊任務無法結束而影響下一幀的接收。

          如圖3所示,在一個幀開始接收時判斷接收的第一個字節是否為本機地址,如果是則保存到接收緩沖區中,不是則繼續等待下一幀報文的到來,這樣節省了保存數據的時間,接收中斷服務程序只是保存數據而不處理數據,只是在一幀新的報文接收結束后,通知系統(通過發出信號量來實現);還規定了從方接收報文不正確時發問的出錯幀。考慮到裝置內部通信的過程不是很復雜,在實際應用中如果從方收到的報文校驗不正確,采取不作應答的方式。主方若在規定時間內未收到從方的應答報文時,將重發請求報文;若多次末收到從方應答報文,則報通訊故障。上面的措施大大縮短了中斷服務程序的執行時間,防止了系統資源的無謂浪費。

          在數據處理方面設計了一個環形的緩沖區,用來存放接收到的數據,這個緩沖區是一個兩維數組。假設一個幀不超過12個字節,可以定義了一個5*12的二維數組。數組的第一個元素是標志位,前四位用來表示數據是否已經處理,后四位存放接收的數據的個數;每接收一個幀的數據,數組下移一個。當接收的數據要覆蓋未處理數據時系統報警,這種情況一般不會發生,因為數據處理程序在本系統中被設成優先級最高。

          在中另外一個問題就是CRC校驗和的計算問題,一般情況下它是由硬件電路直接產生的,這樣速度比較快,系統負載小;但是在本文中介紹的單片機中沒有這種專用電路,而且一般的中低端的單片機一般也不具有這種專用電路。這里我們只有充分利用現有的資源,如果直接計算的話,單片機負載很大,而且浪費了大量的系統時間,影響系統的實時性,考慮到我所使用的MCU的Flash ROM比較大,可以存儲大量的常量線性表數據,利用查表方式可以非常方便的計算出CRC校驗碼。

        四、結束語

          在本文中比較詳細地介紹了ModBus總線協議,并最終設計了一個實現多點溫度測量和控制的使用系統,希望本系統對類似的通訊應用有所幫助。

        參考資料

          1. Modicon ModBus Protocol Reference Guide.PI一MBUS一300 Rev. J

          2. Mark Nelson著.串行通訊開發指南. 北京:中國水利水電出版社,2000

          3. 王田苗主編.嵌入式系統設計與實例開發. 北京:清華大學出版社,2002


        上一頁 1 2 3 下一頁

        評論


        相關推薦

        技術專區

        關閉
        主站蜘蛛池模板: 汉源县| 横峰县| 泗水县| 南乐县| 台东县| 浮梁县| 乃东县| 焦作市| 旺苍县| 桐梓县| 宝坻区| 定兴县| 罗山县| 雷山县| 宾川县| 荔浦县| 漯河市| 黄浦区| 潞城市| 同心县| 宾川县| 荔浦县| 阿拉善盟| 张家口市| 凤翔县| 舟山市| 斗六市| 云梦县| 凌海市| 加查县| 东宁县| 商丘市| 海淀区| 南靖县| 冷水江市| 普兰县| 客服| 唐山市| 太仆寺旗| 多伦县| 高尔夫|