ModBus協(xié)議在工業(yè)控制系統中的應用
3.2 系統的軟件設計
本系統的軟件設計是基于軟件開(kāi)發(fā)平臺μC/OS-II,它是由Labrosse先生編寫(xiě)的一個(gè)開(kāi)放式內核,最主要的特點(diǎn)就是源碼公開(kāi),清晰明了。在單片機系統中嵌入μC/OS-II將增強系統的可靠性,并使得調試程序變得簡(jiǎn)單起來(lái)。但由于它沒(méi)有功能強大的軟件包,基于具體應用需要自己編寫(xiě)驅動(dòng)程序,對內核進(jìn)行擴充。為使其能夠正常工作,要根據具體的硬件平臺完成相應的移植工作。μC/OS-II是一個(gè)占先式的內核,即已經(jīng)準備就緒的高優(yōu)先級任務(wù)可以剝奪正在運行的低優(yōu)先級任務(wù)的CPU使用權。這個(gè)特點(diǎn)使得它的實(shí)時(shí)性比非占先式的內核要好。根據要實(shí)現的功能,我將系統劃分為如下6個(gè)任務(wù):按鍵處理、LCD顯示、串行通信、輸出任務(wù)、控制運算、信號采集處理。這里只介紹和ModBus總線(xiàn)協(xié)議相關(guān)的部分。
當選用的是ModBus的RTU模式時(shí),一幀報文中字節與字節之間的時(shí)間間隔比幀與幀之間的時(shí)間間隔小得多,因此主要的難點(diǎn)在于如何判斷一幀報文接收結束與否,這可以利用單片機內置的定時(shí)器來(lái)進(jìn)行判斷。若實(shí)際實(shí)現時(shí),我們選擇了19200的傳輸速率,那么空閑間隔時(shí)間T≥1/19200*8*3.5=1.5ms。每當接收到一個(gè)新的字節,就啟動(dòng)定時(shí)器開(kāi)始計時(shí),定時(shí)器的時(shí)間設定為幀與幀之間的最小時(shí)間間隔(上面提到的例子中是1.5ms)。波特率不同,該時(shí)間的間隔也不同。若不到預定時(shí)間又接收到下一個(gè)字節,則說(shuō)明一幀報文尚未結束,定時(shí)器重新開(kāi)始計數;若定時(shí)器順利計數到預定時(shí)間,就會(huì )觸發(fā)相應的中斷,在該定時(shí)中斷服務(wù)程序中設定幀結束標志字節,表明一幀報文接收完畢。這樣就可以防止報文接收不完整,導致該幀通訊任務(wù)無(wú)法結束而影響下一幀的接收。
如圖3所示,在一個(gè)幀開(kāi)始接收時(shí)判斷接收的第一個(gè)字節是否為本機地址,如果是則保存到接收緩沖區中,不是則繼續等待下一幀報文的到來(lái),這樣節省了保存數據的時(shí)間,接收中斷服務(wù)程序只是保存數據而不處理數據,只是在一幀新的報文接收結束后,通知系統(通過(guò)發(fā)出信號量來(lái)實(shí)現);ModBus協(xié)議還規定了從方接收報文不正確時(shí)發(fā)問(wèn)的出錯幀??紤]到裝置內部通信的過(guò)程不是很復雜,在實(shí)際應用中如果從方收到的報文校驗不正確,采取不作應答的方式。主方若在規定時(shí)間內未收到從方的應答報文時(shí),將重發(fā)請求報文;若多次末收到從方應答報文,則報通訊故障。上面的措施大大縮短了中斷服務(wù)程序的執行時(shí)間,防止了系統資源的無(wú)謂浪費。
在數據處理方面設計了一個(gè)環(huán)形的緩沖區,用來(lái)存放接收到的數據,這個(gè)緩沖區是一個(gè)兩維數組。假設一個(gè)幀不超過(guò)12個(gè)字節,可以定義了一個(gè)5*12的二維數組。數組的第一個(gè)元素是標志位,前四位用來(lái)表示數據是否已經(jīng)處理,后四位存放接收的數據的個(gè)數;每接收一個(gè)幀的數據,數組下移一個(gè)。當接收的數據要覆蓋未處理數據時(shí)系統報警,這種情況一般不會(huì )發(fā)生,因為數據處理程序在本系統中被設成優(yōu)先級最高。
在ModBus協(xié)議中另外一個(gè)問(wèn)題就是CRC校驗和的計算問(wèn)題,一般情況下它是由硬件電路直接產(chǎn)生的,這樣速度比較快,系統負載小;但是在本文中介紹的單片機中沒(méi)有這種專(zhuān)用電路,而且一般的中低端的單片機一般也不具有這種專(zhuān)用電路。這里我們只有充分利用現有的資源,如果直接計算的話(huà),單片機負載很大,而且浪費了大量的系統時(shí)間,影響系統的實(shí)時(shí)性,考慮到我所使用的MCU的Flash ROM比較大,可以存儲大量的常量線(xiàn)性表數據,利用查表方式可以非常方便的計算出CRC校驗碼。
四、結束語(yǔ)
在本文中比較詳細地介紹了ModBus總線(xiàn)協(xié)議,并最終設計了一個(gè)實(shí)現多點(diǎn)溫度測量和控制的使用系統,希望本系統對類(lèi)似的通訊應用有所幫助。
參考資料
1. Modicon ModBus Protocol Reference Guide.PI一MBUS一300 Rev. J
2. Mark Nelson著(zhù).串行通訊開(kāi)發(fā)指南. 北京:中國水利水電出版社,2000
3. 王田苗主編.嵌入式系統設計與實(shí)例開(kāi)發(fā). 北京:清華大學(xué)出版社,2002
評論