999精品在线视频,手机成人午夜在线视频,久久不卡国产精品无码,中日无码在线观看,成人av手机在线观看,日韩精品亚洲一区中文字幕,亚洲av无码人妻,四虎国产在线观看 ?

Modbus通信協議的FPGA實現

2010-04-12 00:00:00于正林,龍,
現代電子技術 2010年11期

摘 要:Modbus協議是一個應用廣泛的工業現場總線協議,鑒于其簡單、開放、幀格式緊湊等優點,于2008年正式成為我國國家標準。介紹一種通過Cyclone系列FPGA實現Modbus RTU模式的方法,首先給出一個可以通用于Modbus主設備和從設備的協議接口單元,然后基于該接口設計了一個通用的Modbus從設備協處理器。實踐證明該方法能夠滿足工業環境的通訊要求,此外,該方法在其他FPGA上也具有一定通用性和推廣價值。

關鍵詞:Modbus; RTU; FPGA; VHDL

中圖分類號:TP316 文獻標識碼:A

文章編號:1004-373X(2010)11-0203-05

Modbus Communication Protocol Based on FPGA

YU Zheng-lin, ZHANG Long, HUANG Yong

(Changchun University of Science and Technology,Changchun 130022,China)

Abstract: Modbus protocol is a popular fieldbus, and has become one of national standards in China with easy perfor-mance, widely opening and compact frame format. A method of implementing Modbus RTU protocol based on Cyclone FPGA is introduced. A interface can be used both in Modbus server and client, a Modbus slave coprocessor was designed based on it. The test results show that the design meets the communication requirement of industry environment, and has certain value in other kinds of FPGA.

Keywords: Modbus; RTU; FPGA; VHDL

0 引 言

現場總線是一種應用于生產現場,在現場設備之間,現場設備與控制裝置之間實現雙向、串行、多節點數字通信的技術[1]。Modbus協議其節點安裝數量非常多,安裝的地區遍及世界各地。

今天的FPGA可包含內嵌乘法器、專用計算例程和片上RAM等,加上FPGA的并行性,其結果比最快的DSP芯片還要快上500倍乃至更多。隨著FPGA價格不斷下降,甚至最小的器件都足以實現一個集成可選定制I/O功能的軟處理器核。可見,FPGA對嵌入控制應用越來越具有吸引力[2]。

目前Modbus協議實現方式多為單片機和PLC,隨著FPGA的廣泛應用,研究Modbus現場總線的FPGA解決方案有很大的實用價值。

1 Modbus協議簡介[3-4]

Modbus串行鏈路系統可以使用不同的物理接口(RS 485,RS 232),最常用的是RS 485兩線制接口。為了提高通信模塊在工業應用中的抗干擾性和穩定性,接口芯片和FPGA核心模塊之間應加入高速光耦進行隔離,總線兩端處放置線路終端電阻,采用屏蔽雙絞線作為通信線等。

在串行鏈路上,Modbus RTU(Remote Terminal Unit)模式報文中每8個位字節含有兩個4位十六進制字符,這種模式的主要優點是較高的數據密度,在相同的波特率下比ASCII模式有更高的吞吐率。RTU模式每個字節(11位)的格式如圖1所示,支持奇、偶和無校驗,使用無校驗時要求2個停止位。Modbus RTU幀最大為256 B,由發送設備將Modbus報文構造為帶有已知起始和結束標記的幀,報文幀由時長至少為3.5個字符時間的空閑間隔區分,整個報文幀必須以連續的字符流發送,如果兩個字符之間的空閑間隔大于1.5個字符時間,則報文幀被認為不完整被接收節點丟棄,如圖1所示。

圖1 RTU模式位序列和報文幀

在應用層上,Modbus是一個請求/應答協議,并且提供功能碼規定的服務。有三類Modbus功能碼:公共碼、用戶定義碼和保留碼,大多數情況下只用公共碼,其主要包括比特(線圈)訪問、16 b(寄存器)訪問、文件記錄訪問、診斷和其他信息訪問。

2 Modbus RTU通信協議接口設計

2.1 接口功能及模塊劃分

Modbus RTU接口框圖及輸入、輸出引腳示意圖如圖2所示。

圖2 Modbus接口示意圖

在某一確定的主時鐘頻率、通信波特率和奇偶校驗方式下,通過設置CE_Modbus和R_Tn的狀態,可以控制該接口模塊處于接收Modbus協議幀模式、發送Modbus協議幀模式或輸入/輸出寄存器操作模式,如表1所示。

表1 操作模式控制

CE_ModbusR_Tn操作模式

11接收Modbus協議幀

10發送Modbus協議幀

0×輸入/輸出寄存器操作

典型的波特率和奇偶校驗位設置如表2、表3所示。這兩組控制信號可以從端口引出接到撥碼開關,然后可以通過調節撥碼開關來靈活控制該設備奇偶性與波特率,也可以通過寄存器配置方式控制。

表2 波特率控制

Sel_baud[2..0]波特率/(b/s)

009 600

0119 200

1038 400

11115 200

表3 奇偶校驗控制

Sel_parity [2..0]校驗方式

00偶

01奇

10或11無

2.2 接收過程

(1) 系統處于接收Modbus協議幀模式下之后,清零標志位和定時器,然后啟動定時器,如果檢測到有串口輸入數據,則清零定時器,如果沒有檢測到串口輸入數據且定時器第一次計時到3.5個字符時間,置幀起始標志;

(2) 把接收到的第一個字符放入接收緩沖寄存器的0x00地址(協議幀最長為256 B,故接收緩沖大小為256 B,地址為8 b),置已開始接收標志;

(3) 將接收到的正確字符依次放入接收緩沖寄存器中,即地址每次加1,每接收完一個字符之后清零定時器;如果在接收字符時檢查到起始錯誤(起始位沒有持續波特率所對應bit時間的一半),奇偶校驗錯誤,或者幀錯誤(停止位為0),則丟棄該字符,重新同步起始位;

(4) 如果檢測到兩個字符時間間隔大于1.5個字符時間,則重置幀起始標志,把下一個接收到的字符放入接收緩沖寄存器的0x00地址,再繼續步驟(3);

(5) 當檢測到沒有字符輸入且定時器第二次檢測到3.5個字符時間,置協議幀接收完全標志;

(6) 把接收緩沖區接收的數據作CRC校驗,如果校驗不正確,置幀起始標志,轉到步驟(3),繼續等待接收;如果是基于該接口的主Modbus協議設備,一般應設置超時時間,以避免無限等待;如果校驗正確,則Re_finish發出一個脈沖,認為接收了一個在數據鏈路層上正確的Modbus協議幀。

對于幀錯誤(停止位為0)標志FE,奇偶校驗錯誤標志PE,最后一個接收到的數據所在接收緩沖區中的位置Rebuf_end[7..0],對外并不必須,可以留出這些端口備用,所以用虛線表示。

2.3 輸入/輸出寄存器操作

接收緩沖數據寄存器和發送緩沖數據寄存器都采用雙口RAM實現,這比寄存器實現要節省很多資源。為了保證對它們的操作是原子的,即為了避免同時對相同地址執行寫操作,故要求當CE_Modbus置低時,外部才可以對輸入輸出寄存器執行寫操作,此時接口內部不會對接收/輸出寄存器執行任何讀寫操作。

2.4 發送過程

(1) 在發送模式使能之前,應先處于輸入/輸出寄存器模式,通過Trbuf_data[7..0],Trbuf_add[7..0],Trbuf_wren把待發送的不包括兩位CRC校驗的Modbus協議幀從地址0x00依次寫入發送緩沖寄存器中,然后使能Ld_TbNCE信號(一個時鐘周期),同時存入發送緩存寄存器所裝最后一個數據的地址,然后把該接口置于發送Modbus協議幀模式。

(2) 發送模塊先對發送數據緩沖寄存器中的所有數做CRC-16校驗,然后把計算所得結果按低位在前高位在后的順序依次放到用Ld_TbNCE信號鎖存的地址的下兩個地址位置處。

(3) 發送模塊從發送數據緩沖寄存器0x00開始,依次讀出數據并按所給的波特率發送出去,如果要求奇偶校驗,則發送完數據之后加上計算所得的奇偶校驗位發送出去。

(4) 當發送完最后一個數據即CRC-16的高8位數據之后,Tr_finish發出一個脈沖表示發送完畢。

3 接口模塊實現

3.1 波特率發生器

波特率發生器就是一個分頻器,根據系統時鐘分別發出位時鐘(Tx_clk)和1/16位時鐘(Rx_clk16)。由于系統的時鐘周期可能不同,為了模塊的通用性,該模塊用一個類屬(Generic)語句產生各種分頻系數。為了保證同步設計,產生的位時鐘和1/16位時鐘作為控制信號在主時鐘的驅動下控制其他模塊。

3.2 接收模塊

接收模塊組包括同步濾波模塊、接收機模塊、接收控制模塊、接收狀態寄存器模塊、時間標志產生模塊等。

Modbus網絡中設備是運行在不相關時鐘上的,為了避免亞穩態現象,要求通信信號進入FPGA時通過兩個級聯的寄存器[5-6]。異步輸入信號必須在足夠的時間內保持數據有效,從而保證被目標時鐘域檢測到,在接收端則認為最少是大于幾個脈沖寬度的信號才是應該被檢測到的信號[7-8],于是在接收端加入濾波模塊,具體算法如下:連續3次檢測到為高(或低)電平時,才往接收寄存器寫入高(或低)電平,否則保持原來檢測到的電平,不到3個脈沖寬度的信號被過濾。顯然,同步濾波模塊引入了5個時鐘的延遲,但這樣的延時對于Modbus協議來說可以忽略。

接收機模塊是一個改進的UART接收模塊,其工作流程如下[9-10]:

(1) 當檢測到起始位時,繼續讀取其他位并通過移位把它們移入接收移位寄存器RSR中;

(2) 當所有的數據位和停止位都接收完畢后,置RDR寄存器滿標志RDRF位為1;

(3) 檢測停止位和奇偶校驗位,如果發現錯誤置相關錯誤標志位;

(4) 如果所接收數據正確,RSR中數據載入到接收數據寄存器RDR中,清除錯誤標志。

從Rxd_syn上進入的比特流與本地的位時鐘不是同步的,為了避免可能在錯誤的時間讀取一些位,在每個比特時間采樣16次,在時鐘Rx_clk16的每個上升沿采樣,為了保證最大可行度,在理想情況下將在每比特時間中間進行采樣。首先判斷起始位,當檢測Rxd_syn至少連續半個位時鐘為低電平時,即從第一次檢測到低電平之后,再連續9次檢測,如果Rxd_syn為低電平的次數大于等于8次,則認為起始位到來,此時應該在起始位中間后兩個Rx_clk16處。之后每隔16個Rx_clk16時鐘周期在14,15,16個上升沿到來時分別采樣,然后對3次采樣結果取至少兩次相等的數據作為所接收到的值,以保證接收數據的準確性。8個數據位采集完畢之后,根據Sel_parity[1..0]信號判斷是否奇偶校驗,如果有校驗需求,則對第9個數據位的數據同樣做3次采樣取兩次相同值作為接收到的奇偶校驗位,同時計算奇偶校驗結果。在停止位(不包括起始位,無校驗時為第9位,有校驗時為第10位)到來時,同樣經過3次采樣,但是只要檢測到1位為高就認為停止位正確,為了減少狀態機數量,可以在停止位到來時比較計算所得奇偶校驗位和接收到的奇偶校驗位從而判定接收數據是否奇偶校驗錯誤。由于接收控制器一定會讀取前一個數據字節并清零RDRF,所以常見的UART里的超限(overrun)錯誤這里并沒有出現。圖3為用Quartus Ⅱ軟件自帶仿真器仿真結果。

圖3 接收仿真時序圖

3.3 發送模塊

發送模塊包括發送控制模塊,發送機模塊,發送狀態寄存器模塊等。

發送機模塊是基于普通UART發送原理設計,其發送過程如下[9-10]:

(1) 等待TDRE = ‘1’,即等待發送數據寄存器(TDR)為空,隨后TDR中載入一個字節數據,并把TDRE清零。

(2) 根據波特率設置Sel_baud[1..0]對TDR里的數據進行奇偶校驗計算。

(3) 把TDR里的數據放入發送移位寄存器TSR的1~8位,TSR第0位放起始位(‘0’),TSR第9位放入奇偶校驗位或者停止位(‘1’)。

(4) 通過對TSR右移,一位一位地發送出9位數據比特,最后發送停止位(‘1’)。

3.4 CRC模塊

CRC模塊包括接收CRC控制模塊,發送CRC控制模塊,CRC產生模塊三部分。

圖4 發送仿真時序圖

生成CRC的過程為[3]:

(1) 將一個16位寄存器裝入十六進制FFFF (全1),將之稱作 CRC 寄存器。

(2) 將報文的第一個8位字節與16位CRC寄存器的低字節異或,結果置于CRC寄存器。

(3) 將CRC寄存器右移1位(向LSB方向),MSB充零,提取并檢測 LSB。

(4) 如果LSB為0:重復步驟(3)(另一次移位);如果LSB為1:對CRC寄存器異或多項式值0xA001(1010000000000001)。

(5) 重復步驟(3)和(4),直到完成8次移位。當做完此操作后,將完成對8位字節的完整操作。

(6) 對報文中的下一個字節重復步驟(2)~(5),繼續此操作直至所有報文被處理完畢。

(7) CRC寄存器中的最終內容為CRC值。

這種方式計算CRC值的時間比其他方式計算CRC(比如查表法等)的時間稍微要長,但是它節省了資源,比如查表法計算CRC需要一個數組來存放所有可能的CRC結果值。圖5為對數據串“010300000001”(十六進制)CRC-16運算的仿真時序圖,時鐘周期為50 MHz,由圖可見,整個計算時間在2.5 μs內,估算一個含有240個字符的消息,CRC校驗總時間約為2.5 μs×(240/6)=100 μs,這樣長的校驗計算時間對于Modbus協議來說是完全可以接受的。

圖5 CRC-16校驗

4 基于該接口的MODBUS從站協處理器實現

協處理器框圖如圖6所示。

從站協處理器控制模塊程序控制過程如下:

(1) 置CE_Modbus為‘1’,把MAX485芯片RE/DE信號輸出置低,即控制RS 485接口芯片處于接收狀態。

(2) 等待一段延遲時間(RS 485接口芯片穩定時間),使能Modbus協議接口模塊即置CE_Modbus為‘1’,并置接收Modbus協議幀模式。

圖6 協處理器框圖

(3) 如果接收到一個完整的幀(消息),則轉到步驟(4),如果沒接收到一個完整的消息,一直處于等待狀態。

(4) 先置CE_Modbus為‘0’,再解釋接收緩沖寄存器里消息,等待消息處理完畢,如果消息不是發往該從站或者為廣播消息,則轉到步驟(2);否則把RE/DE信號輸出置高,轉到步驟(5)。

(5) 等待一段延遲時間,使能Modbus協議接口模塊即置CE_Modbus為‘1’,并置發送Modbus協議幀模式。

(6) 等待發送完成,轉到步驟(1)。

解釋模塊主要由解釋控制模塊、分析模塊、各功能碼解釋模塊、錯誤功能碼處理模塊組成。分析模塊首先分析接收消息起始兩個字節,即地址碼和功能碼。如果地址為廣播消息地址(地址為0)或者地址碼和本從站地址不相等,則不處理本消息,解釋控制模塊發出解釋完畢并置不響應信號為“1”,頂層控制模塊繼續處于等待接收消息狀態。如果功能碼為非支持功能碼,則選擇錯誤功能代碼處理模塊;如果為某一支持的功能碼,則選擇相應的功能模塊解釋接收消息,按照功能碼要求解碼(例如讀/寫某一指定寄存器或者線圈)。處理完之后把相應的異常碼響應消息或者正常響應消息寫入Modbus協議接口模塊里的發送緩沖寄存器里,完畢之后通過Ld_TbNCE信號把發送緩沖寄存器鎖存消息的末地址(不帶CRC校驗位)Trbuf_add[7..0](保證在Ld_TbNCE有效時它為末地址)存入Modbus協議接口模塊,發出解釋完畢信號,不響應信號置“0”,之后由頂層控制模塊控制接口模塊發送響應消息。對于某些功能碼,比如01碼和02碼,03碼和04碼,由于對它們的解釋差別很小,可以共用一個模塊,達到節省資源的目的。對于特定的系統,完全可以選擇某一些功能碼甚至某一個功能碼,而達到需求,故這里采用這種模塊化方式,可以很容易在不改變其他功能模塊的情況下刪除不需要的功能碼模塊或者增加新需要的功能碼模塊。

該協處理器與從設備其他部分接口僅僅為雙口RAM,從設備完全被映射為寄存器組的抽象,這比啟用寄存器直接實現要節省邏輯資源。由于這些雙口RAM是完全透明的,用戶可以根據整個Modbus系統需要自定義各個寄存器的實際含義。Modbus主設備可以在任何時候隨機地訪問這些寄存器組。Modbus從設備控制、執行模塊對這些寄存器組的訪問需要尋求一種較好的方式,由于FPGA的高速度及并行機制,一般情況下可以采取輪詢的機制即可滿足工業實時性需求。對于某些特殊情況需要更高優先級的控制方式,也可以采取中斷方式。如圖7所示,可以通過雙口RAM的地址線和寫使能信號線進行中斷檢測和沖突檢測:當從站協處理模塊對某些特定寄存器讀/寫完畢之后,產生一個中斷信號,對某些可能存在從站協處理器模塊和從設備控制執行模塊都要對其進行寫操作的寄存器,如果有寫操作同時發生,則從設備控制執行模塊應該等待從站協處理器寫完再寫,以保證寫操作是原子的。

圖7 從設備寄存器訪問抽象

圖8為03碼應答的完整仿真時序。

圖8 03碼應答仿真時序圖

圖9為示波器在通信線路上檢測到的波形,圖9(a)展現了一系列連續幀通信實況;圖9(b)展現某一應答情況,可以看出主機和從機通信電平有差異,但都在RS 485范圍之內;圖9(c)展現了某一幀的具體情況。

圖9 示波器觀測的通信線路上波形

5 結 語

該設計基于Altera公司FPGA,首先設計了一個可以通用于Modbus主設備和從設備的Modbus協議接口,然后基于該協議接口設計了一個通用的Modbus從設備協處理器,該接口也可以方便地用于主協議設備中。本設計通過了多款FPGA芯片的綜合驗證,并與WEINVIEW公司觸摸屏MT506MV和INVT公司CHF100-5R5G/7R5P變頻器成功通信。目前該設計已在某工業EPS系統和某沖擊試驗臺中穩定運行半年,可見其有一定應用前景。

參考文獻

[1]李正軍.現場總線及其應用技術[M].北京:機械工業出版社,2004.

[2]Clive ″MAX″ Maxfield. The design warrior′s guide to FPGAs[M]. Singapore: Elseier Pte Ltd., 2007.

[3]Modbus-IDA ORG.MODBUS Application Protocol Specification V1.1b[EB/OL].. http://www.Modbus-IDA.org. 28.2006.

[4]Modbus-IDA ORG.MODBUS over serial line specification and Implementation guide V1.02[EB/OL]. . http://www.Modbus-IDA.org. December 28.2006.

[5]VEENDRICK H. The behavior of flip flops used as synchronizers and prediction of their failure rates[J]. IEEE Journal of Solid State Circuits,1980,SC-15:169-176.

[6]RABAEY Jan M, CHANDRAKASAN Anantha, NIKOLI Borivoje.數字集成電路——電路、系統與設計[M].周潤德,譯.2版.北京:電子工業出版社,2004.

[7]SHANNON C E. Communication in the presence of noise[J]. Proc.IRE, 1949, 37(1): 10-12.

[8]NYQUIST H. Certain topics in telegraph transmission theory[J]. Trans.AIEE, 1928, 47: 617-644.

[9]ROTH Charles H, LIZY Kurian JohnJR. Digital systems design using VHDL[M]. 2nd ed. Binding: Cengage Learning, 2008.

[10]聶濤,許世宏.基于FPGA的UART設計[J].現代電子技術,2006,29(2):127-129.

主站蜘蛛池模板: 91在线高清视频| 日本www色视频| 国产精品99在线观看| 久久一本日韩精品中文字幕屁孩| 精品夜恋影院亚洲欧洲| 国产剧情一区二区| 日韩AV手机在线观看蜜芽| 最新午夜男女福利片视频| 国产日韩丝袜一二三区| 美女一区二区在线观看| 国产毛片高清一级国语 | 久久亚洲天堂| 成人国产精品一级毛片天堂| 欧美日韩高清| 女人18毛片久久| 亚洲av无码片一区二区三区| 国产成人91精品| 91在线激情在线观看| 国产日本一线在线观看免费| 成人亚洲视频| 狠狠色香婷婷久久亚洲精品| 在线观看网站国产| 日韩美毛片| 精品一区二区三区水蜜桃| 一区二区三区四区精品视频 | 亚洲精品欧美日本中文字幕| 伊人婷婷色香五月综合缴缴情| 秋霞午夜国产精品成人片| 91无码国产视频| 成人一区在线| 亚洲日韩Av中文字幕无码 | 国产精品视频第一专区| 亚洲国产av无码综合原创国产| 在线观看国产精美视频| 福利在线不卡| 国产精品香蕉在线| 大学生久久香蕉国产线观看 | 久久精品娱乐亚洲领先| 成人一级免费视频| 日韩无码黄色| 国产综合网站| 国产一级毛片高清完整视频版| 国产自无码视频在线观看| 91蜜芽尤物福利在线观看| 日韩大片免费观看视频播放| 国产免费精彩视频| 久久综合九九亚洲一区| 亚洲区第一页| a毛片在线播放| 日韩在线成年视频人网站观看| 亚洲人精品亚洲人成在线| 日韩成人高清无码| 日韩一区二区在线电影| 久久久四虎成人永久免费网站| 狠狠操夜夜爽| 在线播放精品一区二区啪视频| 日韩国产一区二区三区无码| 久久这里只精品国产99热8| 国产精品男人的天堂| 成人在线欧美| 亚洲AV无码乱码在线观看代蜜桃 | 日韩精品少妇无码受不了| 欧美α片免费观看| 无码又爽又刺激的高潮视频| 免费在线观看av| 特级做a爰片毛片免费69| 久久这里只有精品66| 无码有码中文字幕| 亚洲中文无码h在线观看| 丝袜美女被出水视频一区| 日本在线视频免费| 日本免费一级视频| 国内精品自在自线视频香蕉| 五月天丁香婷婷综合久久| www.91在线播放| 日韩免费毛片视频| 欧美一级色视频| 久久综合一个色综合网| 亚洲成a人片| 国产麻豆aⅴ精品无码| 色婷婷亚洲十月十月色天| 在线视频亚洲色图|