陳佳暉 衷衛(wèi)聲 王文海
(南昌大學(xué)信息工程學(xué)院1,江西 南昌 330031;浙江大學(xué)信息學(xué)部2 ,浙江 杭州 310027)
水站監(jiān)控系統(tǒng)的Modbus通信協(xié)議設(shè)計
陳佳暉1衷衛(wèi)聲1王文海2
(南昌大學(xué)信息工程學(xué)院1,江西 南昌 330031;浙江大學(xué)信息學(xué)部2,浙江 杭州 310027)
針對水站監(jiān)控系統(tǒng)中存在的可擴展性、成本高等問題,將FPGA技術(shù)應(yīng)用于水站監(jiān)控系統(tǒng)。對水站監(jiān)控系統(tǒng)進行了總體結(jié)構(gòu)設(shè)計,控制器與分析儀表的通信采用Modbus協(xié)議,通過仔細(xì)分析該協(xié)議后,用FPGA的模塊化設(shè)計方法,將該協(xié)議劃分為波特率發(fā)生器模塊、接收模塊、發(fā)送模塊和CRC校驗?zāi)K,并用Verilog HDL語言完成了對各模塊的設(shè)計和功能仿真。實驗仿真結(jié)果表明,該設(shè)計滿足Modbus協(xié)議的通信要求,在工業(yè)通信領(lǐng)域具有一定的實用價值。
FPGA Modbus 通信協(xié)議 水站監(jiān)控 Verilog HDL
21世紀(jì)以來,我國的工業(yè)化水平得到了迅速提高,面對日益嚴(yán)重的水污染及水資源短缺等問題,監(jiān)測江河、湖泊、水庫等地表水的水質(zhì)成為當(dāng)今環(huán)境監(jiān)測的研究熱點[1]。隨著計算機技術(shù)及傳感器技術(shù)的快速發(fā)展,監(jiān)控技術(shù)的自動化水平越來越高,參數(shù)的測量精度也越來越高,系統(tǒng)變得更加靈活。由于水站分布在不同地域,工作環(huán)境比較惡劣,并且針對不同的水環(huán)境有不同的監(jiān)測指標(biāo),因此,控制中心與現(xiàn)場儀表之間的通信面臨著可擴展性及可靠性的問題。
現(xiàn)場可編程門陣列(field-programmable gate array,F(xiàn)PGA),已從最初的一千多個邏輯門發(fā)展到現(xiàn)在的百萬門以上[2]。用戶可通過編程將內(nèi)部的邏輯單元組成任何復(fù)雜的數(shù)字系統(tǒng),并支持動態(tài)可重構(gòu)技術(shù),應(yīng)用領(lǐng)域越來越廣,如SOPC技術(shù)、嵌入式系統(tǒng)開發(fā)、高性能數(shù)字信號處理系統(tǒng)、可重配置計算機系統(tǒng)、基于網(wǎng)絡(luò)的可從配置技術(shù)、IP核的開發(fā)和復(fù)用技術(shù)等。
Modbus以其擴展性好、兼容性強、可靠性高和免費開放等優(yōu)點得到了廣泛應(yīng)用[3]。目前主要是通過單片機或PLC實現(xiàn)Modbus協(xié)議,而本文研究了一種基于FPGA的Modbus通信協(xié)議實現(xiàn)方案。由于FPGA具備開發(fā)周期短、速度快等優(yōu)點,該方案具有很好的通用性和實用價值。
水站監(jiān)控系統(tǒng)的總體結(jié)構(gòu)如圖1所示。
圖1 水站監(jiān)控系統(tǒng)的總體結(jié)構(gòu)
取配水單元主要負(fù)責(zé)水樣的采集,并將水樣通過取樣水泵輸送至沉砂分離單元和分析儀器單元;在線監(jiān)測分析儀器單元的任務(wù)是針對不同的水質(zhì)參數(shù)檢測要求,選擇合適的水質(zhì)在線分析儀表,并將測量結(jié)果及工作狀態(tài)等信息發(fā)送給FPGA。為便于通信,這些儀器都支持Modbus通信協(xié)議[4]。GPRS模塊負(fù)責(zé)數(shù)據(jù)的遠(yuǎn)程傳輸和報警功能;遠(yuǎn)程數(shù)據(jù)管理中心負(fù)責(zé)對監(jiān)測數(shù)據(jù)進行實時顯示和存儲,為工作人員提供可視化的監(jiān)控管理平臺。
數(shù)據(jù)采集與控制單元是系統(tǒng)的核心部分,與以往的監(jiān)控系統(tǒng)相比,該系統(tǒng)以FPGA作為現(xiàn)場控制單元。它主要負(fù)責(zé)對各分析儀器的監(jiān)測數(shù)據(jù)進行采集,分析儀器與FPGA之間的通信采用Modbus協(xié)議;FPGA會將采集的數(shù)據(jù)發(fā)給GPRS模塊,以實現(xiàn)遠(yuǎn)程通信功能;現(xiàn)場設(shè)備執(zhí)行檢測、取樣及清洗等功能也是由FPGA實現(xiàn)的。本系統(tǒng)適用于地表水水域或斷面水質(zhì)的在線檢測,可供有關(guān)環(huán)境監(jiān)測部門參考和使用。
Modbus協(xié)議是當(dāng)今自動化協(xié)議中使用最普遍的一種通信協(xié)議,它是一種主從式點對點通信協(xié)議,通過該協(xié)議,控制器之間、控制器經(jīng)由網(wǎng)絡(luò)(如以太網(wǎng))和其他設(shè)備之間可以進行通信,現(xiàn)在己經(jīng)成為一種通用的工業(yè)標(biāo)準(zhǔn)通信協(xié)議。有了Modbus協(xié)議,不同廠商生產(chǎn)的控制設(shè)備可以組成工業(yè)網(wǎng)絡(luò),進行集中監(jiān)控。Modbus串行鏈路系統(tǒng)可以使用RS-485、RS-232兩種物理接口,其中RS-485兩線制接口最常用[5]。為了提高通信模塊的穩(wěn)定性和抗干擾性,接口芯片與FPGA核心模塊之間需要采用高速光耦進行隔離,并采用屏蔽雙絞線作為通信介質(zhì)。
在標(biāo)準(zhǔn)Modbus通信協(xié)議中,控制器可以使用ACSII或RTU通信模式進行通信[6]。當(dāng)控制器使用ASCII模式通信時,消息中的每個8位字節(jié)都要用2個ASCII字符發(fā)送,這種方式的主要優(yōu)點是字符間的時間間隔可以達到1 s而不會產(chǎn)生錯誤。以RTU模式通信時,消息中的每個8位字節(jié)包含2個4位的十六進制字符。該模式的優(yōu)點是,在相同的波特率下,可以比ASCII模式發(fā)送更多的數(shù)據(jù)[7]。本設(shè)計采用RTU模式進行通信,其消息幀格式如表1所示。
表1 RTU模式的消息幀格式
在RTU模式中,規(guī)定消息以至少3.5個字符靜止時間表示開始,當(dāng)確定了波特率后,很容易計算得到這個靜止時間。各區(qū)發(fā)送的字符均采用十六進制,第一個數(shù)據(jù)區(qū)是從機的地址,在同一個網(wǎng)絡(luò)中只允許有1臺主機和最多247臺從機,從機的地址編碼范圍是1~247(十進制)。當(dāng)從設(shè)備接收到第一個地址數(shù)據(jù)時,每臺設(shè)備都要立即對它解碼,以判斷是否是自己的地址;第二個數(shù)據(jù)區(qū)代表功能碼,Modbus通信協(xié)議定義了255個功能碼,但大部分功能碼用于異常應(yīng)答;第三個數(shù)據(jù)區(qū)代表數(shù)據(jù)信息,它包括各種數(shù)據(jù)地址、寄存器數(shù)量、數(shù)據(jù)信息和數(shù)據(jù)的字節(jié)數(shù);第四個是錯誤校驗碼區(qū),本系統(tǒng)采用循環(huán)冗余校驗CRC16;最后是至少3.5個字符靜止時間,代表消息的結(jié)束。整個消息必須連續(xù)發(fā)送,如果發(fā)送消息時出現(xiàn)大于1.5個字符靜止時間,則接收設(shè)備會刷新不完整的信息,重新接收消息數(shù)據(jù)。
3.1 整體功能模塊劃分
Modbus通信協(xié)議是通過FPGA來實現(xiàn)的,根據(jù)Modbus通信協(xié)議的要求,采用自頂向下的設(shè)計方法,將整個通信模塊劃分為若干個功能模塊,如果功能模塊還比較復(fù)雜就再進行細(xì)化,以實現(xiàn)模塊的功能最簡化,然后用Verilog HDL語言實現(xiàn)各模塊的功能[8]。采用模塊化的設(shè)計思想,不僅使設(shè)計更加簡單,而且使代碼維護和升級變得更加方便。Modbus通信協(xié)議的頂層模塊如圖2所示。
圖2 Modbus協(xié)議的FPGA功能模塊劃分
3.2 波特率發(fā)生器
波特率發(fā)生器其實就是一個分頻器,根據(jù)系統(tǒng)的時鐘頻率和要求的波特率算出波特率分頻因子,并以此作為分頻器的分頻數(shù),它的主要功能是控制Modbus協(xié)議的數(shù)據(jù)傳輸速率。本系統(tǒng)的FPGA控制板使用的是50 MHz的晶振,波特率采用Modbus協(xié)議推薦的19 200 bit/s,這樣就可以得到傳輸一位數(shù)據(jù)需要的時間長度為2 604個時鐘脈沖周期,半周期為1 302。波特率發(fā)生器的模塊圖如圖3所示。
圖3 波特率發(fā)生器功能模塊圖
3.3 接收模塊
接收模塊由消息幀信號檢測模塊、串并轉(zhuǎn)換模塊和數(shù)據(jù)緩存模塊組成。
① 信號檢測模塊。信號檢測模塊的功能是檢測消息幀的開始與結(jié)束。當(dāng)模塊檢測到串口至少有3.5個字符時間的停頓間隔,則置位起始信號標(biāo)志位,如果沒有就接著檢測;當(dāng)數(shù)據(jù)信息全部接收完畢,模塊又檢測到至少3.5個字符時間的停頓間隔,則置位終止信號標(biāo)志位,表示消息幀已經(jīng)結(jié)束。信號檢測模塊的功能圖如圖4所示。其中,RX是串口輸入數(shù)據(jù),CLK_BPS是數(shù)據(jù)傳輸時鐘,RST_n是復(fù)位信號,KS_EN和JS_EN分別代表起始信號和終止信號。
圖4 信號監(jiān)測功能模塊圖
② 串并轉(zhuǎn)換模塊。串并轉(zhuǎn)換模塊的功能是接收數(shù)據(jù)的串行比特流,將輸入數(shù)據(jù)轉(zhuǎn)換為8位并行數(shù)據(jù),并將并行數(shù)據(jù)發(fā)送給數(shù)據(jù)緩存模塊和CRC校驗?zāi)K[9]。該模塊的功能圖如圖5所示。CLK_BPS是波特率時鐘信號;RX是串行輸入數(shù)據(jù);當(dāng)KS_EN為1時,模塊開始工作;RX_D是8位并行輸出數(shù)據(jù);WR_EN是寫數(shù)據(jù)寄存器使能信號;當(dāng)JS_EN為1時,該模塊停止工作,表示數(shù)據(jù)轉(zhuǎn)換完畢。
圖5 串并轉(zhuǎn)換功能模塊圖
當(dāng)KS_EN為1時,該模塊開始工作,并檢測起始位0,當(dāng)串行輸入“00101100101”(首先接收最低位)時,輸出端輸出的8位并行數(shù)據(jù)為“10011010”,因此該模塊正確地完成了串并轉(zhuǎn)換功能。
③ 數(shù)據(jù)緩存模塊。數(shù)據(jù)緩存模塊是將接收端收到的數(shù)據(jù)進行緩存,并認(rèn)為緩存的第一個字節(jié)為從機地址,第二個字節(jié)為功能碼,而第三個字節(jié)及后續(xù)字節(jié)(不包括CRC校驗碼)為消息幀的數(shù)據(jù)信息。數(shù)據(jù)緩存模塊的功能圖如圖6所示,RX_D為緩存的8位并行數(shù)據(jù),WR_EN為1時該模塊開始工作,WRADDR為寫入數(shù)據(jù)的地址,Data為寫入存儲區(qū)的數(shù)據(jù)。
圖6 數(shù)據(jù)緩存功能模塊圖
3.4 發(fā)送模塊
發(fā)送模塊相當(dāng)于接收模塊的逆過程,該模塊由發(fā)送控制模塊、并串轉(zhuǎn)換模塊和讀數(shù)據(jù)模塊組成。發(fā)送控制模塊與接收模塊中的信號檢測模塊相似,它產(chǎn)生至少3.5個字符時間的停頓間隔;并串轉(zhuǎn)換是將讀取的8位并行數(shù)據(jù)轉(zhuǎn)換為串行數(shù)據(jù),并將串行數(shù)據(jù)發(fā)送給串口,由TX引腳發(fā)送出去;讀數(shù)據(jù)模塊是根據(jù)處理器的指令讀取數(shù)據(jù)緩存區(qū)的8位并行數(shù)據(jù),每取完一個字節(jié)后,數(shù)據(jù)長度寄存器加1。當(dāng)數(shù)據(jù)長度寄存器的值與數(shù)據(jù)長度字節(jié)的值相等時,就取出CRC模塊所產(chǎn)生的16位CRC值。當(dāng)CRC校驗值發(fā)送完畢,則表示整個消息幀發(fā)送完畢。由于發(fā)送模塊各子模塊與上述接收模塊相似,這里就不詳細(xì)列出了。
3.5 CRC16校驗
CRC校驗?zāi)K主要完成兩個任務(wù),一個是對主機發(fā)送給從機的消息幀進行CRC計算,并將校驗結(jié)果發(fā)給發(fā)送模塊;另一個是對從機返回給主機的消息幀進行CRC校驗。CRC校驗碼是兩個字節(jié)、16位的二進制數(shù)。CRC校驗開始時,將一個16位的CRC寄存器各位置1;然后將消息幀中的第一個8位字節(jié)與CRC寄存器的低字節(jié)進行異或運算(只有每個字符中的8位數(shù)據(jù)進行CRC計算,而起始位、停止位及校驗位不進行CRC計算);接著向最低有效位(LSB)方向移位,并用0填充最高有效位(MSB);檢查LSB的值,如果LSB=1,則與寄存器的預(yù)置值進行異或運算,如果LSB=0,則不作異或運算。重復(fù)以上處理過程,直到移位8次,當(dāng)?shù)?次移位后,將下一個8位數(shù)據(jù)與寄存器的當(dāng)前值進行異或運算,并重復(fù)上面的步驟[10]。當(dāng)整個消息幀的數(shù)據(jù)都處理完后,CRC寄存器的值就是該消息幀的CRC校驗值。
CRC校驗的模塊圖如圖7所示。其中,crc_in[7:0]是輸入數(shù)據(jù),load表示開始編碼,d_finish表示編碼結(jié)束,crc_out[15:0]是最后得到的CRC值。
圖7 CRC校驗?zāi)K圖
FPGA收到從機發(fā)來的消息幀“01,03,00,9a,00,07,e0,ef”,其中efe0為該消息幀的CRC校驗碼,因為發(fā)生時是先發(fā)低字節(jié)再發(fā)高字節(jié),因此ef是高8位,CRC模塊對該幀的計算結(jié)果為efe0,兩者相等,因此滿足CRC校驗的要求。
為了實現(xiàn)水站監(jiān)控系統(tǒng)中對各檢測儀表的數(shù)據(jù)采集,采用Modbus協(xié)議規(guī)范進行通信設(shè)計。采用Verilog HDL語言對Modbus RTU協(xié)議各個模塊進行編程和功能仿真,并提供了有關(guān)模塊的仿真結(jié)果。實踐證明,采用FPGA來設(shè)計Modbus協(xié)議與傳統(tǒng)的單片機設(shè)計相比,其傳輸速度更快、可擴展性更強,并具有一定的可行性。
[1] 肖長來,梁秀娟.水環(huán)境監(jiān)測與評價[M].北京:清華大學(xué)出版社,2008.
[2] 桂婧.基于FPGA的超聲波探傷儀信號處理系統(tǒng)分析與設(shè)計[D].廣州:華南理工大學(xué),2010.
[3] 張明龍,陳鋒,許濤濤.嵌入式水質(zhì)監(jiān)測系統(tǒng)節(jié)點間MODBUS的協(xié)議設(shè)計[J].儀表技術(shù),2013(10):1-4.
[4] 王振明.SCADA(監(jiān)控與數(shù)據(jù)采集)軟件系統(tǒng)設(shè)計與開發(fā)[M].北京:機械工業(yè)出版社,2008.
[5] 潘悅.Modbus協(xié)議研究及其實驗系統(tǒng)的設(shè)計[D].哈爾濱:哈爾濱工業(yè)大學(xué),2007.
[6] 陸晶,薛偉.基于MODBUS協(xié)議的溫度采集系統(tǒng)的設(shè)計[J].電子測量技術(shù),2009,32(12):25-27.
[7] 張飛,張云,韓彥嶺,等.基于Modbus遠(yuǎn)程監(jiān)控的水質(zhì)在線監(jiān)測系統(tǒng)的設(shè)計與實現(xiàn)[J].電子設(shè)計工程,2014(2):1-4.
[8] 王伶俐,周學(xué)功,王穎.系統(tǒng)級FPGA設(shè)計與應(yīng)用[M].北京:清華大學(xué)出版社,2012.
[9] 楊大柱.基于FPGA的UART電路設(shè)計與仿真[J].微計算機信息,2007,23(5):200,212-213.
[10] 張增波,陳仲林,肖劉.基于FPGA的內(nèi)置并行CRC校驗的UART[J].自動化與儀表,2013,28(2):30-32,40.
Design of the Modbus Communication Protocol for Water Station Monitoring System
In order to solve the problems of poor extensibility and high cost in water station monitoring systems, the FPGA technology is applied in the system. The overall structural design of water station monitoring system is achieved, in the system, the communication between controller and analytical instrument is using Modbus protocol. Through analyzing this protocol in detail, by adopting FPGA modular design method, the protocol is divided into baud rate generator module, receiving module, sending module and CRC checking module; the design and functional simulation of each module are conducted with Verilog HDL language. The results of experimental simulation indicate that the design satisfies the communication requirements of Modbus protocol, and possesses certain practical value in industrial communication field.
FPGA Modbus Communication protocol Water station monitoring Verilog HDL
國家863計劃基金資助項目(編號:2013AA040302);
陳佳暉(1990-),男,現(xiàn)為南昌大學(xué)測試計量技術(shù)及儀器專業(yè)在讀碩士研究生;主要從事嵌入式系統(tǒng)開發(fā)及信號監(jiān)測技術(shù)的研究。
TP336
A
10.16086/j.cnki.issn1000-0380.201509013
江西省科技廳科技成果重點推廣指導(dǎo)項目(編號:2011ZBBI90006)。
修改稿收到日期:2015-04-03。