基于MODBUS協(xié)議的質(zhì)量流量計(jì)與PLC的通信實(shí)現(xiàn)
摘 要:闡述了MODBUS協(xié)議RTU模式的通訊機(jī)制,并詳細(xì)介紹了CRC16校驗(yàn)碼的生成步驟。利用三菱Q系列PLC豐富的編程功能和串行通信智能模塊,通過RS485總線與MT-51流量顯示儀進(jìn)行通訊,實(shí)現(xiàn)對(duì)多路質(zhì)量流量計(jì)可靠控制。
關(guān)鍵字:
1 Modbus協(xié)議簡介
Modbus協(xié)議是應(yīng)用于電子控制器上的一種通用語言。通過此協(xié)議,控制器相互之間、控制器經(jīng)由網(wǎng)絡(luò)和其它設(shè)備之間可以通信。它已經(jīng)成為一通用工業(yè)標(biāo)準(zhǔn),有了它,不同廠商生產(chǎn)的控制設(shè)備可以連成工業(yè)網(wǎng)絡(luò),進(jìn)行集中監(jiān)控。
在Modbus網(wǎng)絡(luò)上,當(dāng)控制器設(shè)為以RTU(遠(yuǎn)程終端單元)模式通信,在消息中的每8位的字節(jié)包含兩個(gè)4位的十六進(jìn)制字符。這種方式的主要優(yōu)點(diǎn)是:在同樣的波特率下,可比ASCII方式傳送更多的數(shù)據(jù)。
在RTU模式下每個(gè)字節(jié)的格式:
·8位二進(jìn)制,以十六進(jìn)制數(shù)0...9,A...F來表示。
每個(gè)字節(jié)的位
·1個(gè)起始位
·8個(gè)數(shù)據(jù)位,最低的有效位先發(fā)送
·1個(gè)奇偶校驗(yàn)位,無校驗(yàn)則無
·1個(gè)停止位(有校驗(yàn)時(shí)),2個(gè)Bit(無校驗(yàn)時(shí))
·CRC(循環(huán)冗長校驗(yàn))
使用RTU模式,消息發(fā)送至少要以3.5個(gè)字符時(shí)間的停頓間隔開始。傳輸?shù)牡谝粋€(gè)域是設(shè)備地址。網(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 質(zhì)量流量計(jì)
本項(xiàng)目應(yīng)用中,采用的是匯博隆公司MT-51流量顯示儀,通過RS485接口與PLC通訊。實(shí)現(xiàn)對(duì)5臺(tái)AE公司的質(zhì)量流量計(jì)的監(jiān)控。通訊設(shè)定如表1所示。
RS-485是面向網(wǎng)絡(luò)的一種接口標(biāo)準(zhǔn),一對(duì)傳輸線上可以接多至32個(gè)接收器。在此網(wǎng)絡(luò)上,PLC作為主控制器,發(fā)送查詢命令,而MT-51流量顯示儀作為從控制器,當(dāng)從控制器接收到主控制器的查詢消息,它將建立一從控制器回應(yīng)格式并返回給發(fā)送的主控制器,以回應(yīng)PLC的查詢。例如:
PLC讀取設(shè)備號(hào)為1的質(zhì)量流量計(jì)瞬時(shí)流量值,PLC發(fā)送查詢命令01030010000185CF(16進(jìn)制數(shù)據(jù)流)。01-設(shè)備號(hào);03-功能代碼(讀命令);0010-寄存器起始地址;0001-字長;85CF-CRC16校驗(yàn)碼。
MT-51流量顯示儀將回應(yīng)查詢,返回0103020064B9AF(16進(jìn)制數(shù)據(jù)流)。01-設(shè)備號(hào);03-功能代碼(讀命令);02-字節(jié)數(shù);0064-是用0000~0FFF(十六進(jìn)制)表示的瞬時(shí)值,0000表示關(guān)閉,0FFF表示滿度流量;B9AF-CRC16校驗(yàn)碼。
3 CRC16校驗(yàn)[1]
使用Modbus協(xié)議RTU模式,消息包括了一基于CRC16算法的錯(cuò)誤檢測(cè)域。CRC16域檢測(cè)了整個(gè)消息的內(nèi)容。CRC16域是兩個(gè)字節(jié),包含一16位的二進(jìn)制值。它由發(fā)送控制器計(jì)算后加入到消息中。接收控制器重新計(jì)算收到消息的CRC16校驗(yàn)碼,并與接收到的CRC16域中的值比較,如果兩值不同,則有誤。
計(jì)算CRC16校驗(yàn)碼的步驟為:
1)預(yù)置16位的寄存器為16進(jìn)制的FFFF(即全為1),稱此寄存器為CRC16寄存器;
2)將第一個(gè)8位數(shù)據(jù)與16位CRC16寄存器的低位相異或,把結(jié)果存放在CRC16寄存器;
3)并把寄存器的內(nèi)容右移一位(朝低位),用0填補(bǔ)最高位,檢查移出的最低位的值;
4)如果值為1,將CRC16寄存器的內(nèi)容與16進(jìn)制常量A0001相異或,并把結(jié)果存放在CRC16寄存器;
5)重復(fù)步驟3和4,直至右移8次,整個(gè)8位數(shù)據(jù)全部處理完;
6)重復(fù)步驟2到步驟5,進(jìn)行下一個(gè)8位數(shù)據(jù)的處理;
7)當(dāng)所有數(shù)據(jù)處理完成后,最終得到的CRC16寄存器的值就是CRC16校驗(yàn)碼。
4 PLC參數(shù)設(shè)置與軟件實(shí)現(xiàn)
在本項(xiàng)目應(yīng)用中,利用三菱Q系列高性能PLC[2][3]的QJ71C24-R4串行通信智能模塊通過RS485總線與MT-51流量顯示儀進(jìn)行通訊,實(shí)現(xiàn)對(duì)AE公司質(zhì)量流量計(jì)數(shù)據(jù)的采集和控制量輸出。
4.1 開關(guān)設(shè)置[4][5]
如圖1開關(guān)設(shè)置所示:開關(guān)1和開關(guān)2是QJ71C24-R4串行通信智能模塊的通道1的參數(shù)設(shè)定;開關(guān)3和開關(guān)4是通道2的參數(shù)設(shè)置。兩個(gè)通道參數(shù)設(shè)置相同,任意一個(gè)都可以進(jìn)行通訊,可在監(jiān)控PC上通過更改端口號(hào)來切換。
圖1 開關(guān)設(shè)置
開關(guān)1/開關(guān)3的高8位(05)表示通訊波特率為9600;低8位(C2)表示傳輸設(shè)置-8個(gè)數(shù)據(jù)位,無奇偶校驗(yàn),1個(gè)停止位;開關(guān)2/開關(guān)4(0006)表示采用無順序協(xié)議通訊。
圖2 程序流程圖
4.2 軟件實(shí)現(xiàn)
在GXDeveloper[6]編程中,編寫SEND子程序來完成16進(jìn)制查詢命令的生成和數(shù)據(jù)的發(fā)送;RECV子程序完成接收到的數(shù)據(jù)的處理;CRC子程序完成發(fā)送數(shù)據(jù)和接收數(shù)據(jù)的校驗(yàn)碼生成。整個(gè)順控程序流程圖如圖2所示。
SEND子程序調(diào)用指令格式為-[ECALLP“SEND”P700W30W35W3A]。ECALLP是子程序調(diào)用指令;“SEND”是子程序名稱;P700是公用指針號(hào);鏈接寄存器W30、W35和W3A是子程序的傳遞參數(shù),分別表示設(shè)備號(hào)、功能代碼和數(shù)據(jù)。例如:鏈接寄存器W30、W35和W3A的值分別為1、5和64(16進(jìn)制),則表示設(shè)定設(shè)備號(hào)為1的質(zhì)量流量計(jì)的流量輸出值為100sccm,QJ71C24-R4將發(fā)送16進(jìn)制查詢命令010600110064D824。
由于MT-51流量顯示儀返回的數(shù)據(jù)長度根據(jù)接收到的查詢指令不同而不同,所以在SEND子程序里發(fā)送查詢指令時(shí),要根據(jù)查詢命令的內(nèi)容更改QJ71C24-R4接受數(shù)據(jù)的長度。為防止QJ71C24-R4的OS緩存區(qū)溢出錯(cuò)誤,在每次調(diào)用SEND子程序之前,使用ZP.CSET指令來清除OS緩存區(qū)。
查詢命令發(fā)送完成后,PLC將延時(shí)等待QJ71C24-R4的回應(yīng)信號(hào)。如果等待延時(shí)時(shí)間到,回應(yīng)信號(hào)一直為OFF,則表明無回應(yīng),對(duì)應(yīng)該設(shè)備號(hào)的通訊錯(cuò)誤計(jì)數(shù)器將累加,PLC將返回執(zhí)行下一條查詢命令;如果在等待時(shí)間內(nèi),回應(yīng)信號(hào)變?yōu)镺N,則表示接收到MT-51流量顯示儀的回應(yīng)。PLC將通過G.INPUT指令將接收到的數(shù)據(jù)從QJ71C24-R4的OS緩存區(qū)讀取到PLC內(nèi)存,并調(diào)用RECV(調(diào)用指令格式為-[ECALLP“RECV”P800])子程序進(jìn)行接收數(shù)據(jù)的校驗(yàn)。如果校驗(yàn)正確,將更新PLC相應(yīng)的數(shù)據(jù)存儲(chǔ)區(qū),并復(fù)位對(duì)應(yīng)該設(shè)備號(hào)的通訊錯(cuò)誤計(jì)數(shù)器;如果校驗(yàn)錯(cuò)誤,對(duì)應(yīng)該設(shè)備號(hào)的出錯(cuò)計(jì)數(shù)器將累加,計(jì)數(shù)器累積到閥值后,系統(tǒng)將報(bào)警輸出該設(shè)備號(hào)的質(zhì)量流量計(jì)通訊錯(cuò)誤。
5 應(yīng)用效果
在本項(xiàng)目應(yīng)用中,PLC可可靠的實(shí)現(xiàn)對(duì)5臺(tái)質(zhì)量流量計(jì)的數(shù)據(jù)采集和輸出控制,很好的滿足了系統(tǒng)要求。但由于受MT-51流量顯示儀通訊波特率的限制,存在一定的時(shí)間延遲,延遲時(shí)間在1s以內(nèi)。
參考文獻(xiàn)
[1]ModiconModbusProtocolReferenceGuide.MODICON,Inc.,IndustrialAutomationSystems,June1996
[2]QCPU(功能解說)用戶手冊(cè).三菱電機(jī),2007.10
[3]QCPU(Q模式)/QnACPU編程手冊(cè)(公共指令篇).三菱電機(jī),2007.11
[4]Q系列串行口通信模塊用戶參考冊(cè)(基礎(chǔ)篇).三菱電機(jī),2001.11
[5]Q系列串行口通信模塊用戶參考手冊(cè)(應(yīng)用篇).三菱電機(jī),2001.6
[6]GXDeveloperVersion8操作手冊(cè).三菱電機(jī),2005.8
- 上一篇:質(zhì)量流量計(jì)在氣體計(jì)量上的應(yīng)用 2015/12/2
- 下一篇:ABB質(zhì)量流量計(jì)FCM2000的數(shù)據(jù)采集 2015/12/1
