肖萬彪,董培培,郭 星,唐 堅(jiān)
(江蘇揚(yáng)力集團(tuán)股份有限公司,江蘇 揚(yáng)州 225127)
現(xiàn)代工業(yè)自動(dòng)化控制系統(tǒng)向智能化、網(wǎng)絡(luò)化和開放式結(jié)構(gòu)的方向發(fā)展。利用現(xiàn)場(chǎng)總線技術(shù),可以將符合統(tǒng)一標(biāo)準(zhǔn)的各種設(shè)備統(tǒng)一起來,進(jìn)行分布式集中控制。Modbus協(xié)議作為一種標(biāo)準(zhǔn)通信協(xié)議,其重要性不言而喻[2]。
Modbus通信協(xié)議是全球第一個(gè)真正用于工業(yè)現(xiàn)場(chǎng)的總線協(xié)議,共有Modbus-RTU、Modbus-ASII和Modbus-TCP三種通信方式。其中Mod
bus-RTU通信方式物理層采用RSS32、RS485等異步串口接口標(biāo)準(zhǔn),且具有良好的兼容性和開放性,因而被工業(yè)控制器生產(chǎn)廠商大量采用。本文以應(yīng)用較為廣泛的三菱FX3G系列PLC為例,詳細(xì)描述如何運(yùn)用三菱微型可編程控制器與帶有MODBUS-RTU通信協(xié)議的其他設(shè)備之間進(jìn)行數(shù)據(jù)交換。以廣播方式和所有從站設(shè)備進(jìn)行通信,但從站不響應(yīng)廣播信息[3]。
三菱FX系列PLC支持的Modbus-RTU通信協(xié)議的信息幀規(guī)格如表1所示,其詳細(xì)內(nèi)容介紹如下。
表1 三菱FX系列PLC Modbus-RTU數(shù)據(jù)幀規(guī)格[1]
三菱FX系列PLC可以擴(kuò)展具有標(biāo)準(zhǔn)Modbus-RTU通信協(xié)議的通信適配器,其通信方式為主從通信。該通信協(xié)議將進(jìn)行數(shù)據(jù)交換的雙方定義為“主站”(MASTER)和“從站”(SLAVE),一方面主站可以單獨(dú)與指定地址的從站進(jìn)行通信,如主站發(fā)出查詢或?qū)懭霃恼緮?shù)據(jù)的請(qǐng)求信息,從站接收到正確信息后根據(jù)消息種類進(jìn)行反饋應(yīng)答;另一方面,主站也能
(1)地址字段。三菱PLC支持的Modbus-RTU的地址字段是指從站的地址信息,這個(gè)地址是從站唯一的通信地址,可設(shè)定值為1-247,0為主站向全部從站進(jìn)行廣播,從站不響應(yīng)。需要注意的是,247是MODBUS最大的地址編號(hào),F(xiàn)X MODBUS主站可指定的地址范圍為:1-32。
(2)功能代碼。功能代碼能夠以1字節(jié)長(8位)在1-255范圍內(nèi)進(jìn)行設(shè)定,主站對(duì)從站指定要求的功能,從站根據(jù)要求執(zhí)行相關(guān)動(dòng)作。表2為三菱FX系列PLC所對(duì)應(yīng)的部分常用的功能代碼,當(dāng)從站向主站發(fā)生響應(yīng)信息,正常結(jié)束時(shí),被請(qǐng)求的功能代碼會(huì)被存儲(chǔ);異常結(jié)束時(shí),最高位會(huì)被置ON。
(3)數(shù)據(jù)。數(shù)據(jù)信息在主站向從站發(fā)生請(qǐng)求文本時(shí),指存儲(chǔ)用于執(zhí)行通過功能碼所指定功能的信息,其格式根據(jù)功能代碼的不同產(chǎn)生相應(yīng)的變化,數(shù)據(jù)中含有字節(jié)計(jì)數(shù)器、字節(jié)數(shù)和進(jìn)行讀取/寫入的內(nèi)容等。當(dāng)從站向主站發(fā)生響應(yīng)文本時(shí),通過功能代碼所指定功能的執(zhí)行結(jié)果會(huì)被存儲(chǔ);異常結(jié)束時(shí),異常響應(yīng)代碼會(huì)被存儲(chǔ)。
(4)錯(cuò)誤效驗(yàn)。為保證主從之間的通信信息準(zhǔn)確性,主站和從站會(huì)給全部發(fā)送的文本自動(dòng)添加檢查代碼,并重新計(jì)算接收文本的檢查代碼,文本異常時(shí),取消文本。Modbus-RTU協(xié)議在信息幀中自動(dòng)加入的效驗(yàn)碼為CRC碼。CRC是“Cyclical Redundancy Check”(循環(huán)冗余效驗(yàn)碼)的英文簡(jiǎn)稱,CRC碼為2個(gè)字節(jié),16位的二進(jìn)制值,故又稱為CRC-16,由發(fā)生設(shè)備計(jì)算CRC值,并把它附加在信息幀的后面,接收設(shè)備在接收信息的過程中也執(zhí)行類似的算法,再次計(jì)算CRC值,將計(jì)算的CRC值與接收到的CRC值進(jìn)行比較,若二者不一致,即認(rèn)為信息幀出錯(cuò)。
三菱FX系列PLC運(yùn)用Modbus-RTU通信協(xié)議進(jìn)行數(shù)據(jù)交換時(shí),硬件設(shè)置非常簡(jiǎn)單,只需要擴(kuò)展一套通信適配器和功能擴(kuò)展板即可,其他通信方面的設(shè)置需要通過程序設(shè)定。需要注意的是三菱FX系列PLC在Modbus-RTU的通信設(shè)定中,必須使用特殊輔助繼電器M8411,運(yùn)用將LD M8411作為接點(diǎn)的MOV指令,在特殊數(shù)據(jù)寄存器中設(shè)定通信參數(shù),以通道1為例,其主站參數(shù)如表3所示。
其中,最為重要的兩個(gè)特殊數(shù)據(jù)寄存器為D 8400和D 8401,D8400為通信格式,可進(jìn)行數(shù)據(jù)長度、奇偶性、波特率等參數(shù)設(shè)定,其16位定義如表4所示。
需要注意的是在RTU模式的情況下,數(shù)據(jù)長度最好設(shè)定成8位,如設(shè)成7位,有可能會(huì)破壞數(shù)據(jù)。D8401中的數(shù)據(jù)關(guān)系到選用什么通信協(xié)議,主/從站的設(shè)定等,其各數(shù)據(jù)位具體含義如表5所示。
如果運(yùn)用通道2做Modbus通信,其相應(yīng)的參數(shù)設(shè)定為D8420,D8421,D8429,D8430,D8431,D8432,D8435,D8436,各數(shù)據(jù)位的含義與其對(duì)應(yīng)的通道1參數(shù)一樣,這里不再贅述。三菱FX系列PLC為其Modbus-RTU通信,主站讀取/寫入相應(yīng)從站數(shù)據(jù)準(zhǔn)備了一個(gè)專用指令A(yù)DPRW。ADPRW共有五個(gè)操作數(shù),理解五個(gè)操作數(shù)的含義,按照實(shí)際需要填入相應(yīng)的數(shù)據(jù),可以非常便捷的進(jìn)行數(shù)據(jù)交換。
表2 三菱FX系列PLC Modbus-RTU協(xié)議常用功能代碼[1]
表3 Modbus-RTU協(xié)議通道1主站參數(shù)[1]
表4 特殊寄存器D8400各數(shù)據(jù)位定義[1]
其中,五個(gè)操作數(shù)的含義如表6所示。
表5 特殊寄存器D8401各數(shù)據(jù)位定義[1]
表6 ADPRW操作數(shù)設(shè)定[1]
根據(jù)上述設(shè)定,本文編寫了一段通信程序,與具有標(biāo)準(zhǔn)Modbus-RTU協(xié)議的智能設(shè)備進(jìn)行數(shù)據(jù)交換,其中部分代碼如下:
將上述程序下載到FX3GA型號(hào)PLC中,通過現(xiàn)場(chǎng)測(cè)試,可以通過Modbus-RTU通信協(xié)議進(jìn)行主站和從站之間的數(shù)據(jù)交換,需要注意的是主站與從站的波特率、數(shù)據(jù)位、停止位、效驗(yàn)等參數(shù)設(shè)定必須一致才能成功進(jìn)行通信。
本文以三菱FX系列PLC為例,對(duì)底層工業(yè)控制中運(yùn)用十分廣泛的Modbus通信協(xié)議進(jìn)行了分析。詳細(xì)描述三菱PLC所支持的標(biāo)準(zhǔn)Modbus-RTU通信協(xié)議的參數(shù)設(shè)定、通信格式等方面各特殊寄存器的數(shù)據(jù)位的詳細(xì)含義,以及在程序編寫方面所需要注意的事項(xiàng),最后給出了一段可行的基于FX3GA型號(hào)PLC的通信程序,為三菱PLC和其他智能設(shè)備通過Modbus-RTU通信協(xié)議進(jìn)行數(shù)據(jù)交換提供了進(jìn)一步支持。