栗小寬
摘 要:Modbus協(xié)議是工業(yè)現(xiàn)場(chǎng)總線的一種通用語(yǔ)言,它已經(jīng)成為一通用工業(yè)標(biāo)準(zhǔn),通過(guò)它不同廠商生產(chǎn)的控制設(shè)備可以連成工業(yè)網(wǎng)絡(luò),進(jìn)行集中監(jiān)控。此協(xié)議定義了一個(gè)控制器能認(rèn)識(shí)使用的消息結(jié)構(gòu)。此協(xié)議支持傳統(tǒng)的RS-232、RS-422、RS-485和以太網(wǎng)設(shè)備。PLC、DCS、智能儀表等都在使用Modbus協(xié)議作為他們之間的通訊標(biāo)準(zhǔn)。該文就應(yīng)用方面做一些介紹。
關(guān)鍵詞:現(xiàn)場(chǎng)總線 通信協(xié)議 Modbus RTU
中圖分類號(hào):TP273 文獻(xiàn)標(biāo)識(shí)碼:A 文章編號(hào):1674-098X(2015)02(c)-0089-01
Modbus是一種通用串行通信協(xié)議,是國(guó)際上第一個(gè)真正用于工業(yè)控制的現(xiàn)場(chǎng)總線協(xié)議,它只定義了通訊消息的結(jié)構(gòu),對(duì)端口沒有作具體規(guī)定。Modbus的數(shù)據(jù)通信采用主/從方式,它的一個(gè)信息幀包括設(shè)備地址、功能代碼、數(shù)據(jù)段、錯(cuò)誤檢測(cè)域。功能代碼表示被選中的從設(shè)備要執(zhí)行何種功能;數(shù)據(jù)段包括了從設(shè)備要執(zhí)行功能的任何附加消息;錯(cuò)誤檢測(cè)域?yàn)閺脑O(shè)備提供了一種驗(yàn)證消息內(nèi)容是否正確的方法。
1 Modbus RTU通信
Modbus系統(tǒng)中有2種傳輸模式可選擇,一種為RTU(遠(yuǎn)程終端單元)模式,一種為ASCII(美國(guó)標(biāo)準(zhǔn)信息交換代碼)模式。Modbus RTU是一種較為理想的通訊協(xié)議,常見的通訊速率為9600bps和19200bps。
要完成主從設(shè)備的通訊,主設(shè)備要發(fā)送信息給從設(shè)備,這段信息包含設(shè)備地址、功能代碼、數(shù)據(jù)段、錯(cuò)誤檢查。
(1)設(shè)備地址:每個(gè)從機(jī)都必須有唯一的地址碼,信息報(bào)文的第一個(gè)字節(jié)是設(shè)備地址碼,它表明由用戶設(shè)置地址的從機(jī)將接收由主機(jī)發(fā)送來(lái)的信息。只有符合地址碼的從機(jī)才能響應(yīng)回送;反之當(dāng)從機(jī)回送信息時(shí),回應(yīng)的地址碼表明該信息來(lái)自于何處。設(shè)備地址范圍是0~247,發(fā)送地址為0時(shí),信息能被所有從機(jī)接收到;
(2)功能碼:功能碼定義了從設(shè)備應(yīng)該執(zhí)行的命令,主機(jī)請(qǐng)求發(fā)送,通過(guò)功能碼告訴從機(jī)執(zhí)行什么動(dòng)作;從機(jī)發(fā)送的功能碼與從主機(jī)得到的功能碼一樣,并表明從機(jī)已響應(yīng)主機(jī)進(jìn)行操作。功能碼的取值范圍是1~255,有些代碼適用于所有控制器,有些代碼只能應(yīng)用于某種控制器。
(3)數(shù)據(jù)段:數(shù)據(jù)段包含需要從機(jī)執(zhí)行什么動(dòng)作或由從機(jī)采集的返送信息,這些信息可以是數(shù)值、參考地址等;對(duì)于不同的從機(jī),地址和數(shù)據(jù)信息都不相同。
(4)CRC碼:包含兩個(gè)字節(jié)的錯(cuò)誤檢測(cè)碼,由傳輸設(shè)備計(jì)算后加入到消息中,接收設(shè)備重新計(jì)算收到消息的CRC,并與接收到的CRC域中的值比較,如果兩值不同,表明有錯(cuò)誤。
典型的RTU報(bào)文幀沒有起始位,也沒有停止位,而是以至少3.5個(gè)字符的時(shí)間停頓間隔標(biāo)志一幀的開始或結(jié)束。需要注意的是,在RTU模式中,整個(gè)消息幀必須作為一個(gè)連續(xù)的數(shù)據(jù)流進(jìn)行傳輸。網(wǎng)絡(luò)設(shè)備不斷偵測(cè)網(wǎng)絡(luò)總線,即使在停頓間隔時(shí)間內(nèi)也不例外。當(dāng)?shù)谝粋€(gè)域(地址域)接收到,每個(gè)設(shè)備都進(jìn)行解碼以判斷是否發(fā)給自己的;在最后一個(gè)傳輸字符之后,一個(gè)至少3.5個(gè)字符時(shí)間的停頓標(biāo)定了消息的結(jié)束;一個(gè)新的消息可在此停頓后開始。
2 Modbus功能碼
功能碼01用于讀取開關(guān)量輸出狀態(tài);功能碼02用于讀取開關(guān)量的輸入狀態(tài);功能碼03為讀多路寄存器輸入;功能碼05為寫1路開關(guān)量輸出;功能碼16為將數(shù)值寫入多路寄存器中。
3 實(shí)現(xiàn)S7-200 PLC之間的Modbus RTU通信
3.1 Modbus協(xié)議的安裝
使用Modbus指令庫(kù)編寫程序要注意三點(diǎn)。首先使用Modbus指令庫(kù)前,必須將其安裝到STEP7-Micro/WIN V3.2或以上版本的軟件中;其次S7-200 PLC的CPU版本必須為2.00或者2.01版本;最后如果CPU端口被設(shè)為Modbus通信時(shí),該端口就無(wú)法用于其他任何用途,包括用STEP7-Micro/WIN軟件下載程序。
3.2 Modbus地址
3.2.1 主站尋址
Modbus主站指令支持下列Modbus地址:
00001~09999:離散輸出(線圈);
10001~19999:離散輸入(觸點(diǎn));
30001~39999:輸入寄存器(通常是模擬量輸入);
40001~49999:保持寄存器。
3.2.2 從站地址
Modbus從站指令支持的通信內(nèi)容及相應(yīng)地址如下:
00001~00128:實(shí)際輸出,對(duì)應(yīng)于Q0.0~Q15.7;
10001~10128:實(shí)際輸入,對(duì)應(yīng)于I0.0~I(xiàn)15.7;
30001~30032:模擬輸入寄存器,對(duì)應(yīng)于AIW0~AIW62,注意地址為偶數(shù);
40001~4xxxx:保持寄存器,對(duì)應(yīng)于V區(qū)。
3.3 Modbus通信的建立
Modbus通訊在兩個(gè)S7-200 PLC的Port0通訊口之間進(jìn)行。選擇具有兩個(gè)通訊口的CPU構(gòu)成通信系統(tǒng)較為方便,一個(gè)做通信口用,一個(gè)與計(jì)算機(jī)連接。在主站側(cè)選擇Port0或Port1作Modbus通訊口都可以。在這里Port1通訊口與PC機(jī)連接,便于實(shí)現(xiàn)程序編制、下載和在線監(jiān)控,兩個(gè)CPU的Port0通訊口通過(guò)Profibus電纜進(jìn)行連接,實(shí)現(xiàn)兩臺(tái)PLC的Modbus通信傳輸,對(duì)于Modbus通訊,主站側(cè)需要使用“MBUS_CTRL”和“MBUS_MSG”指令,從站側(cè)需要使用“MBUS_INIT”和“MBUS_SLAVE”指令。
4 結(jié)語(yǔ)
Modbus在工業(yè)中得到了廣泛的應(yīng)用,它綜合運(yùn)用了PLC技術(shù)、網(wǎng)絡(luò)技術(shù)、通信技術(shù)和自動(dòng)控制技術(shù),形成各種自動(dòng)化控制系統(tǒng),相信不久的將來(lái)Modbus會(huì)得到剛好的發(fā)展和應(yīng)用。
參考文獻(xiàn)
[1] 郭瓊.現(xiàn)場(chǎng)總線技術(shù)及其應(yīng)用[M].北京:機(jī)械工業(yè)出版社,2014.
[2] 張揚(yáng).S7-200 PLC原理與應(yīng)用系統(tǒng)設(shè)計(jì)[M].北京:機(jī)械工業(yè)出版社,2007.
[3] 楊衛(wèi)華.現(xiàn)場(chǎng)總線網(wǎng)絡(luò)[M].北京:高等教育出版社,2004.