陳佳暉 衷衛聲 王文海
(南昌大學信息工程學院1,江西 南昌 330031;浙江大學信息學部2 ,浙江 杭州 310027)
水站監控系統的Modbus通信協議設計
陳佳暉1衷衛聲1王文海2
(南昌大學信息工程學院1,江西 南昌 330031;浙江大學信息學部2,浙江 杭州 310027)
針對水站監控系統中存在的可擴展性、成本高等問題,將FPGA技術應用于水站監控系統。對水站監控系統進行了總體結構設計,控制器與分析儀表的通信采用Modbus協議,通過仔細分析該協議后,用FPGA的模塊化設計方法,將該協議劃分為波特率發生器模塊、接收模塊、發送模塊和CRC校驗模塊,并用Verilog HDL語言完成了對各模塊的設計和功能仿真。實驗仿真結果表明,該設計滿足Modbus協議的通信要求,在工業通信領域具有一定的實用價值。
FPGA Modbus 通信協議 水站監控 Verilog HDL
21世紀以來,我國的工業化水平得到了迅速提高,面對日益嚴重的水污染及水資源短缺等問題,監測江河、湖泊、水庫等地表水的水質成為當今環境監測的研究熱點[1]。隨著計算機技術及傳感器技術的快速發展,監控技術的自動化水平越來越高,參數的測量精度也越來越高,系統變得更加靈活。由于水站分布在不同地域,工作環境比較惡劣,并且針對不同的水環境有不同的監測指標,因此,控制中心與現場儀表之間的通信面臨著可擴展性及可靠性的問題。
現場可編程門陣列(field-programmable gate array,FPGA),已從最初的一千多個邏輯門發展到現在的百萬門以上[2]。用戶可通過編程將內部的邏輯單元組成任何復雜的數字系統,并支持動態可重構技術,應用領域越來越廣,如SOPC技術、嵌入式系統開發、高性能數字信號處理系統、可重配置計算機系統、基于網絡的可從配置技術、IP核的開發和復用技術等。
Modbus以其擴展性好、兼容性強、可靠性高和免費開放等優點得到了廣泛應用[3]。目前主要是通過單片機或PLC實現Modbus協議,而本文研究了一種基于FPGA的Modbus通信協議實現方案。由于FPGA具備開發周期短、速度快等優點,該方案具有很好的通用性和實用價值。
水站監控系統的總體結構如圖1所示。

圖1 水站監控系統的總體結構
取配水單元主要負責水樣的采集,并將水樣通過取樣水泵輸送至沉砂分離單元和分析儀器單元;在線監測分析儀器單元的任務是針對不同的水質參數檢測要求,選擇合適的水質在線分析儀表,并將測量結果及工作狀態等信息發送給FPGA。為便于通信,這些儀器都支持Modbus通信協議[4]。GPRS模塊負責數據的遠程傳輸和報警功能;遠程數據管理中心負責對監測數據進行實時顯示和存儲,為工作人員提供可視化的監控管理平臺。
數據采集與控制單元是系統的核心部分,與以往的監控系統相比,該系統以FPGA作為現場控制單元。它主要負責對各分析儀器的監測數據進行采集,分析儀器與FPGA之間的通信采用Modbus協議;FPGA會將采集的數據發給GPRS模塊,以實現遠程通信功能;現場設備執行檢測、取樣及清洗等功能也是由FPGA實現的。本系統適用于地表水水域或斷面水質的在線檢測,可供有關環境監測部門參考和使用。
Modbus協議是當今自動化協議中使用最普遍的一種通信協議,它是一種主從式點對點通信協議,通過該協議,控制器之間、控制器經由網絡(如以太網)和其他設備之間可以進行通信,現在己經成為一種通用的工業標準通信協議。有了Modbus協議,不同廠商生產的控制設備可以組成工業網絡,進行集中監控。Modbus串行鏈路系統可以使用RS-485、RS-232兩種物理接口,其中RS-485兩線制接口最常用[5]。為了提高通信模塊的穩定性和抗干擾性,接口芯片與FPGA核心模塊之間需要采用高速光耦進行隔離,并采用屏蔽雙絞線作為通信介質。
在標準Modbus通信協議中,控制器可以使用ACSII或RTU通信模式進行通信[6]。當控制器使用ASCII模式通信時,消息中的每個8位字節都要用2個ASCII字符發送,這種方式的主要優點是字符間的時間間隔可以達到1 s而不會產生錯誤。以RTU模式通信時,消息中的每個8位字節包含2個4位的十六進制字符。該模式的優點是,在相同的波特率下,可以比ASCII模式發送更多的數據[7]。本設計采用RTU模式進行通信,其消息幀格式如表1所示。

表1 RTU模式的消息幀格式
在RTU模式中,規定消息以至少3.5個字符靜止時間表示開始,當確定了波特率后,很容易計算得到這個靜止時間。各區發送的字符均采用十六進制,第一個數據區是從機的地址,在同一個網絡中只允許有1臺主機和最多247臺從機,從機的地址編碼范圍是1~247(十進制)。當從設備接收到第一個地址數據時,每臺設備都要立即對它解碼,以判斷是否是自己的地址;第二個數據區代表功能碼,Modbus通信協議定義了255個功能碼,但大部分功能碼用于異常應答;第三個數據區代表數據信息,它包括各種數據地址、寄存器數量、數據信息和數據的字節數;第四個是錯誤校驗碼區,本系統采用循環冗余校驗CRC16;最后是至少3.5個字符靜止時間,代表消息的結束。整個消息必須連續發送,如果發送消息時出現大于1.5個字符靜止時間,則接收設備會刷新不完整的信息,重新接收消息數據。
3.1 整體功能模塊劃分
Modbus通信協議是通過FPGA來實現的,根據Modbus通信協議的要求,采用自頂向下的設計方法,將整個通信模塊劃分為若干個功能模塊,如果功能模塊還比較復雜就再進行細化,以實現模塊的功能最簡化,然后用Verilog HDL語言實現各模塊的功能[8]。采用模塊化的設計思想,不僅使設計更加簡單,而且使代碼維護和升級變得更加方便。Modbus通信協議的頂層模塊如圖2所示。

圖2 Modbus協議的FPGA功能模塊劃分
3.2 波特率發生器
波特率發生器其實就是一個分頻器,根據系統的時鐘頻率和要求的波特率算出波特率分頻因子,并以此作為分頻器的分頻數,它的主要功能是控制Modbus協議的數據傳輸速率。本系統的FPGA控制板使用的是50 MHz的晶振,波特率采用Modbus協議推薦的19 200 bit/s,這樣就可以得到傳輸一位數據需要的時間長度為2 604個時鐘脈沖周期,半周期為1 302。波特率發生器的模塊圖如圖3所示。

圖3 波特率發生器功能模塊圖
3.3 接收模塊
接收模塊由消息幀信號檢測模塊、串并轉換模塊和數據緩存模塊組成。
① 信號檢測模塊。信號檢測模塊的功能是檢測消息幀的開始與結束。當模塊檢測到串口至少有3.5個字符時間的停頓間隔,則置位起始信號標志位,如果沒有就接著檢測;當數據信息全部接收完畢,模塊又檢測到至少3.5個字符時間的停頓間隔,則置位終止信號標志位,表示消息幀已經結束。信號檢測模塊的功能圖如圖4所示。其中,RX是串口輸入數據,CLK_BPS是數據傳輸時鐘,RST_n是復位信號,KS_EN和JS_EN分別代表起始信號和終止信號。

圖4 信號監測功能模塊圖
② 串并轉換模塊。串并轉換模塊的功能是接收數據的串行比特流,將輸入數據轉換為8位并行數據,并將并行數據發送給數據緩存模塊和CRC校驗模塊[9]。該模塊的功能圖如圖5所示。CLK_BPS是波特率時鐘信號;RX是串行輸入數據;當KS_EN為1時,模塊開始工作;RX_D是8位并行輸出數據;WR_EN是寫數據寄存器使能信號;當JS_EN為1時,該模塊停止工作,表示數據轉換完畢。

圖5 串并轉換功能模塊圖
當KS_EN為1時,該模塊開始工作,并檢測起始位0,當串行輸入“00101100101”(首先接收最低位)時,輸出端輸出的8位并行數據為“10011010”,因此該模塊正確地完成了串并轉換功能。
③ 數據緩存模塊。數據緩存模塊是將接收端收到的數據進行緩存,并認為緩存的第一個字節為從機地址,第二個字節為功能碼,而第三個字節及后續字節(不包括CRC校驗碼)為消息幀的數據信息。數據緩存模塊的功能圖如圖6所示,RX_D為緩存的8位并行數據,WR_EN為1時該模塊開始工作,WRADDR為寫入數據的地址,Data為寫入存儲區的數據。

圖6 數據緩存功能模塊圖
3.4 發送模塊
發送模塊相當于接收模塊的逆過程,該模塊由發送控制模塊、并串轉換模塊和讀數據模塊組成。發送控制模塊與接收模塊中的信號檢測模塊相似,它產生至少3.5個字符時間的停頓間隔;并串轉換是將讀取的8位并行數據轉換為串行數據,并將串行數據發送給串口,由TX引腳發送出去;讀數據模塊是根據處理器的指令讀取數據緩存區的8位并行數據,每取完一個字節后,數據長度寄存器加1。當數據長度寄存器的值與數據長度字節的值相等時,就取出CRC模塊所產生的16位CRC值。當CRC校驗值發送完畢,則表示整個消息幀發送完畢。由于發送模塊各子模塊與上述接收模塊相似,這里就不詳細列出了。
3.5 CRC16校驗
CRC校驗模塊主要完成兩個任務,一個是對主機發送給從機的消息幀進行CRC計算,并將校驗結果發給發送模塊;另一個是對從機返回給主機的消息幀進行CRC校驗。CRC校驗碼是兩個字節、16位的二進制數。CRC校驗開始時,將一個16位的CRC寄存器各位置1;然后將消息幀中的第一個8位字節與CRC寄存器的低字節進行異或運算(只有每個字符中的8位數據進行CRC計算,而起始位、停止位及校驗位不進行CRC計算);接著向最低有效位(LSB)方向移位,并用0填充最高有效位(MSB);檢查LSB的值,如果LSB=1,則與寄存器的預置值進行異或運算,如果LSB=0,則不作異或運算。重復以上處理過程,直到移位8次,當第8次移位后,將下一個8位數據與寄存器的當前值進行異或運算,并重復上面的步驟[10]。當整個消息幀的數據都處理完后,CRC寄存器的值就是該消息幀的CRC校驗值。
CRC校驗的模塊圖如圖7所示。其中,crc_in[7:0]是輸入數據,load表示開始編碼,d_finish表示編碼結束,crc_out[15:0]是最后得到的CRC值。

圖7 CRC校驗模塊圖
FPGA收到從機發來的消息幀“01,03,00,9a,00,07,e0,ef”,其中efe0為該消息幀的CRC校驗碼,因為發生時是先發低字節再發高字節,因此ef是高8位,CRC模塊對該幀的計算結果為efe0,兩者相等,因此滿足CRC校驗的要求。
為了實現水站監控系統中對各檢測儀表的數據采集,采用Modbus協議規范進行通信設計。采用Verilog HDL語言對Modbus RTU協議各個模塊進行編程和功能仿真,并提供了有關模塊的仿真結果。實踐證明,采用FPGA來設計Modbus協議與傳統的單片機設計相比,其傳輸速度更快、可擴展性更強,并具有一定的可行性。
[1] 肖長來,梁秀娟.水環境監測與評價[M].北京:清華大學出版社,2008.
[2] 桂婧.基于FPGA的超聲波探傷儀信號處理系統分析與設計[D].廣州:華南理工大學,2010.
[3] 張明龍,陳鋒,許濤濤.嵌入式水質監測系統節點間MODBUS的協議設計[J].儀表技術,2013(10):1-4.
[4] 王振明.SCADA(監控與數據采集)軟件系統設計與開發[M].北京:機械工業出版社,2008.
[5] 潘悅.Modbus協議研究及其實驗系統的設計[D].哈爾濱:哈爾濱工業大學,2007.
[6] 陸晶,薛偉.基于MODBUS協議的溫度采集系統的設計[J].電子測量技術,2009,32(12):25-27.
[7] 張飛,張云,韓彥嶺,等.基于Modbus遠程監控的水質在線監測系統的設計與實現[J].電子設計工程,2014(2):1-4.
[8] 王伶俐,周學功,王穎.系統級FPGA設計與應用[M].北京:清華大學出版社,2012.
[9] 楊大柱.基于FPGA的UART電路設計與仿真[J].微計算機信息,2007,23(5):200,212-213.
[10] 張增波,陳仲林,肖劉.基于FPGA的內置并行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-),男,現為南昌大學測試計量技術及儀器專業在讀碩士研究生;主要從事嵌入式系統開發及信號監測技術的研究。
TP336
A
10.16086/j.cnki.issn1000-0380.201509013
江西省科技廳科技成果重點推廣指導項目(編號:2011ZBBI90006)。
修改稿收到日期:2015-04-03。