王新,王鳳翔,王燕,郭學亮
(中煤科工集團唐山研究院有限公司,河北 唐山 063012)
工業自動化程度越來越高,Modbus 串行通信協議以其先進性、開放性、成熟性的特點得到了廣泛應用,當前PLC(可編程邏輯控制器)及組態軟件都支持此協議。智能儀表作為自動化控制的源頭,支持此協議,將大大降低自動化工程設計人員的開發難度。
Modbus 協議是定義在OSI 網絡模型第7 層(應用層)的報文發送協議,它可以在不同類型的總線或網絡上連接的設備之間進行“客戶端/服務器”式的通信,它是主從式的串行通信協議。Modbus 協議利用RS485 或RS232 總線進行數據傳輸,同一條總線上只允許1 臺主機,從機數量從1 臺最多至247 臺,并且從機的地址是唯一的。Modbus 協議由主機發送命令及從機返回數據組成,有兩種傳輸模式:Modbus-RTU模式及Modbus-ASCII 模式。
數據以數值型式傳輸,其幀格式如下:
主機發送命令(表1)。

表1
從機返回數據(表2)。
數據以16 進制數值再轉換為ASCII 碼型式傳輸,傳輸為字符‘0’~‘9’及字符‘A’~‘F’(即實際數據為16進制0x30~0x39 及0x41~0x46),其幀格式如下:

表2

表3

表4
主機發送命令(表3)。
從機返回數據(表4)。
Modbus 數據幀通過RS485 或RS232 總線進行串行通信,數據以字節型式傳輸,傳輸時低位在前,高位在后,串行通信采用固定波特率進行數據傳輸,常用波特率為2400bps、4800bps、9600bps、19200bps 等,本例中波特率采用最常用的9600bps(即每秒傳輸9600 位,每位傳輸時間約為104.167μs),8 位數據位,無校驗位,1 位停止位,則每個字節數據為10 位,每秒傳輸960 個字節。
本例所用的智能儀表主芯片為TI 公司生產的MSP430F5438 超低功耗Flash 型單片機,擁有4 路USCI_A 型模塊可進行UART 串行通信,本例為了同時實現RTU 通信及ASCII 通信,使用USCI_A1 模塊進行RTU 模式編程,USCI_A3 模塊進行ASCII 模式編程,系統主時鐘采用12MHz晶振,其優點是通信波特率在(600~19200)bps 范圍內,時鐘分頻為整數,不需要做步進調整,不會產生誤碼。數據接收采用中斷方式,接收完畢后,單片機對接收數據進行處理,判斷是否為本機命令(由從機地址碼區分),進行校驗驗證數據準確性,數據正確則根據命令返回相應數據,否則丟棄準備下一次接收。
在編程中應當注意以下幾點:
(1)Modbus 的寄存器地址為1~9999,但實際發送數據為起始地址減1,例如從起始地址1 開始返回數據,則發送數據為0x00、0x00(ASCII 為0x30、0x30、0x30、0x30)。
(2)Modbus 協議規定16 位數據采用高字節優先傳輸,以本文的儀表通信為例,主機向地址為1的從機發送命令讀取起始地址為1 開始連續2 個寄存器數據,則發送命令為:
RTU 模 式:0x01 0x03 0x00 0x00 0x00 0x02 0xC4 0x0B(8 字節)
返回數據:0x01 0x03 0x04 0x81 0x0A 0x43 0x34 0xC2 0xEA(9 字節)
返回的四字節數據為float 型,由于Modbus 協議高字節先傳輸,所以數據實際為0x4334810A,即為浮點數180.504059。
ASCII 模 式:0x3A 0x30 0x31 0x30 0x33 0x30 0x30 0x30 0x30 0x30 0x30 0x30 0x32 0x46 0x41 0x0D 0x0A(17 字節)
返回數據:0x3A 0x30 0x31 0x30 0x33 0x30 0x38 0x38 0x31 0x30 0x41 0x34 0x33 0x33 0x34 0x46 0x32 0x0D 0x0A(19 字節)
返回的8 個字節數據代表一個float 型數據,數據需先進行16 進制處理為0x81 0x0A 0x43 0x34,再進行高低字節調換為0x4334810A,即浮點數180.504059。
(3)以上為正常的4 字節數據處理方式,還有一種數據傳輸方式稱為互換模式,即將存儲器中存儲的4 字節數據完全按照從最高字節到最低字節輸出,例如,內存中的數據為0x0A(最低位)0x81 0x34 0x43(最高位),則輸出為0x43 0x34 0x81 0x0A。某些智能儀表采用此種方式傳輸數據。
(4)Modbus 協議規定幀與幀之間的時間間隔應>3.5個位周期,數據傳輸位間隔應<1.5 個位周期,以9600bps通信速率為例,則幀間隔應>364.585μs,位間隔<165.25μs。編程時應充分考慮數據處理所占時間,必要時增加延時。
本例中以PC 機為主機,采用Modscan32 這款成熟的Modbus 通信測試軟件進行數據收發,智能儀表作為從機接收PC 機命令,根據命令返回相應數據,PC 機和智能儀表之間通過RS485 總線連接。部分調試界面,見圖1、圖2。

圖2 Modbus-ASCII 通信界面
通過以上調試界面,實現了PC 機和智能儀表之間的modbus 通信,說明單片機嵌入式程序編寫是正確的。
Modbus 協議是工業控制領域中最通用、最開放的通信協議之一,得到了眾多廠商的支持。通過Modbus 協議,不同廠商的設備可以方便地連成工業網絡,進行相互通信。Modbus 的兩種傳輸模式相比,ASCII 方式更直觀,但傳輸相同數據需要的字節數更多,效率低;RTU 模式傳輸字節數少,效率更高,更適用于測控系統中數據的實時傳輸。