肖萬彪,董培培,郭 星,唐 堅
(江蘇揚力集團股份有限公司,江蘇 揚州 225127)
現代工業自動化控制系統向智能化、網絡化和開放式結構的方向發展。利用現場總線技術,可以將符合統一標準的各種設備統一起來,進行分布式集中控制。Modbus協議作為一種標準通信協議,其重要性不言而喻[2]。
Modbus通信協議是全球第一個真正用于工業現場的總線協議,共有Modbus-RTU、Modbus-ASII和Modbus-TCP三種通信方式。其中Mod
bus-RTU通信方式物理層采用RSS32、RS485等異步串口接口標準,且具有良好的兼容性和開放性,因而被工業控制器生產廠商大量采用。本文以應用較為廣泛的三菱FX3G系列PLC為例,詳細描述如何運用三菱微型可編程控制器與帶有MODBUS-RTU通信協議的其他設備之間進行數據交換。以廣播方式和所有從站設備進行通信,但從站不響應廣播信息[3]。
三菱FX系列PLC支持的Modbus-RTU通信協議的信息幀規格如表1所示,其詳細內容介紹如下。

表1 三菱FX系列PLC Modbus-RTU數據幀規格[1]
三菱FX系列PLC可以擴展具有標準Modbus-RTU通信協議的通信適配器,其通信方式為主從通信。該通信協議將進行數據交換的雙方定義為“主站”(MASTER)和“從站”(SLAVE),一方面主站可以單獨與指定地址的從站進行通信,如主站發出查詢或寫入從站數據的請求信息,從站接收到正確信息后根據消息種類進行反饋應答;另一方面,主站也能
(1)地址字段。三菱PLC支持的Modbus-RTU的地址字段是指從站的地址信息,這個地址是從站唯一的通信地址,可設定值為1-247,0為主站向全部從站進行廣播,從站不響應。需要注意的是,247是MODBUS最大的地址編號,FX MODBUS主站可指定的地址范圍為:1-32。
(2)功能代碼。功能代碼能夠以1字節長(8位)在1-255范圍內進行設定,主站對從站指定要求的功能,從站根據要求執行相關動作。表2為三菱FX系列PLC所對應的部分常用的功能代碼,當從站向主站發生響應信息,正常結束時,被請求的功能代碼會被存儲;異常結束時,最高位會被置ON。
(3)數據。數據信息在主站向從站發生請求文本時,指存儲用于執行通過功能碼所指定功能的信息,其格式根據功能代碼的不同產生相應的變化,數據中含有字節計數器、字節數和進行讀取/寫入的內容等。當從站向主站發生響應文本時,通過功能代碼所指定功能的執行結果會被存儲;異常結束時,異常響應代碼會被存儲。
(4)錯誤效驗。為保證主從之間的通信信息準確性,主站和從站會給全部發送的文本自動添加檢查代碼,并重新計算接收文本的檢查代碼,文本異常時,取消文本。Modbus-RTU協議在信息幀中自動加入的效驗碼為CRC碼。CRC是“Cyclical Redundancy Check”(循環冗余效驗碼)的英文簡稱,CRC碼為2個字節,16位的二進制值,故又稱為CRC-16,由發生設備計算CRC值,并把它附加在信息幀的后面,接收設備在接收信息的過程中也執行類似的算法,再次計算CRC值,將計算的CRC值與接收到的CRC值進行比較,若二者不一致,即認為信息幀出錯。
三菱FX系列PLC運用Modbus-RTU通信協議進行數據交換時,硬件設置非常簡單,只需要擴展一套通信適配器和功能擴展板即可,其他通信方面的設置需要通過程序設定。需要注意的是三菱FX系列PLC在Modbus-RTU的通信設定中,必須使用特殊輔助繼電器M8411,運用將LD M8411作為接點的MOV指令,在特殊數據寄存器中設定通信參數,以通道1為例,其主站參數如表3所示。
其中,最為重要的兩個特殊數據寄存器為D 8400和D 8401,D8400為通信格式,可進行數據長度、奇偶性、波特率等參數設定,其16位定義如表4所示。
需要注意的是在RTU模式的情況下,數據長度最好設定成8位,如設成7位,有可能會破壞數據。D8401中的數據關系到選用什么通信協議,主/從站的設定等,其各數據位具體含義如表5所示。
如果運用通道2做Modbus通信,其相應的參數設定為D8420,D8421,D8429,D8430,D8431,D8432,D8435,D8436,各數據位的含義與其對應的通道1參數一樣,這里不再贅述。三菱FX系列PLC為其Modbus-RTU通信,主站讀取/寫入相應從站數據準備了一個專用指令ADPRW。ADPRW共有五個操作數,理解五個操作數的含義,按照實際需要填入相應的數據,可以非常便捷的進行數據交換。

表2 三菱FX系列PLC Modbus-RTU協議常用功能代碼[1]

表3 Modbus-RTU協議通道1主站參數[1]

表4 特殊寄存器D8400各數據位定義[1]
其中,五個操作數的含義如表6所示。

表5 特殊寄存器D8401各數據位定義[1]

表6 ADPRW操作數設定[1]
根據上述設定,本文編寫了一段通信程序,與具有標準Modbus-RTU協議的智能設備進行數據交換,其中部分代碼如下:


將上述程序下載到FX3GA型號PLC中,通過現場測試,可以通過Modbus-RTU通信協議進行主站和從站之間的數據交換,需要注意的是主站與從站的波特率、數據位、停止位、效驗等參數設定必須一致才能成功進行通信。
本文以三菱FX系列PLC為例,對底層工業控制中運用十分廣泛的Modbus通信協議進行了分析。詳細描述三菱PLC所支持的標準Modbus-RTU通信協議的參數設定、通信格式等方面各特殊寄存器的數據位的詳細含義,以及在程序編寫方面所需要注意的事項,最后給出了一段可行的基于FX3GA型號PLC的通信程序,為三菱PLC和其他智能設備通過Modbus-RTU通信協議進行數據交換提供了進一步支持。