0 引言
現場總線技術是在工業自動化領域中解決工業現場的智能化儀器儀表、控制器、執行機構等現場設備間的數字通信以及這些現場控制設備和高級控制系統之間的信息傳遞問題,是工業設備自動化和信息化的基礎。然而,由于歷史原因,現場總線的通信協議卻種類繁多,根據IEC61158第四版國際標準,已有20種現場總線協議成為國際標準[1]。常用的現場總線協議有西門子的MPI和PPI Rockwell的DF1、松下的MEWTOCOL-COM以及絕大多數設備廠商都遵循的MODBUS協議等。由于不同設備商支持的協議標準不同,導致不同設備商的設備之間不能直接互聯互通,這就造成了生產制造單位在擴大生產線或設計產品線時,無法做到資源的合理規劃和充分利用,老舊產線無法順利接入智能網絡等困境。
目前,針對不同的工業協議之間的相互轉換,最常見的方式有基于嵌入式系統實現協議轉換、基于專用芯片實現協議轉換和基于FPGA實現協議轉換[2]。表1是對這三種常用方式的優缺點的比較。
本文針對松下電工的私有協議 MEWTOCOL-COM 和標準串行協議 MODBUS RTU進行了深入的研究,并設計和實現了一種 MEWTOCOL-COM 與 MODBUS RTU協議快速轉換的電路方案,不但解決了 MEWTOCOL-COM 標準設備與 MODBUS RTU標準設備集成在一個現場總線網絡中進行互聯互通、數據交換的問題,而且完成了兩個協議快速轉換,轉換前后的數據報文時延小于2 ms。
1 MEWTOCOL-COM與MODBUS通信原理
1.1 MEWTOCOL-COM通信原理
MEWTOCOL-COM是松下電工FP系列PLC與PLC、計算機或者HMI觸摸屏之間采用的一種專用的通信協議。該協議采用主從應答模式,數據傳送采用的是ASCII碼編碼形式,每次通信的開始,都由主站(主PLC、計算機或者HMI觸摸屏)發送指令,從站(從PLC)接受到指令后,自動進行相應的響應,主站根據從站的響應,可以得知從設備是否正確執行了剛剛發送的指令,這樣就構成了一個交互式的操作。圖1是完成主從通信模型的示意圖。
1.2 MEWTOCOL-COM基本幀格式
MEWTOCOL-COM協議中規定了基本幀格式,基本幀格式有控制代碼,包含了幀頭、命令、正常響應、錯誤響應、結束等字符,如表2所示。MEWTOCOL-COM的每次通信都先由主站發起,主站發起命令幀,命令幀內容除了包含控制代碼外,還包括一些特殊標志碼、PLC站號和呼號字符等[3]。表3是基本幀的格式。命令幀在文本區域中填寫命令代碼和操作地址,命令代碼含義如表4所示。
1.3 MODBUS RTU工作原理
自1979年來,MODBUS已經成為工業領域通信協議的業界標準,通過MODBUS連接著百萬臺自動化設備之間的通信。在OSI模型中,MODBUS位于第7層,是一種應用層報文傳輸協議。
MODBUS在串行通信模式下,通信幀格式有兩種:一種是主機發起的查詢和命令從設備的格式,另一種是從設備收到主機命令后的應答格式[4]。通信原理是采用請求/應答的方式進行主從通信,其工作原理如圖2所示。MODBUS主站通過向相應物理地址的從站發送相應的控制信息進行總線數據的交互,一般采用的是一對多的物理連接方式,其通信的實質是主從一對一的請求/應答模式的通信過程[5]。
當物理層為RS422或RS485的串行通信方式下,MODBUS通信協議有兩種數據的收發模式,一種是RTU(Remote Terminal Unit)模式,另外一種是ASCII模式。與ASCII模式不同的是,RTU模式下的報文內容是按十六進制的字節方式進行收發,沒有報文的開始和結束標記。MODBUS協議規定,在工業總線上的所有設備,都必須支持RTU模式,而ASCII通信模式作為可選項,而非必選項。本文以RTU模式為研究對象,建立MEWTOCOL-COM與MODBUS RTU報文的命令、地址映射關系,從而實現兩種不同的總線協議的相互轉換。
在MODBUS RTU協議中,主機設備通常通過不同的功能碼實現對位、字進行操作,這里的功能碼就是對應MEWTOCOL-COM中的命令。
1.4 命令映射表
為了實現MEWTOCOL-COM 協議與MODBUS 協議的相互轉換,首先創建命令對應表,如表5所示。
1.5 地址映射表
MODBUS的地址編碼是從1開始,并且分不同的地址段,MEWTOCOL-COM的地址是從0開始,要進行兩者相互之間的轉換,MODBUS的地址是MEWTOCOL-COM的地址+1。轉換關系如表6所示。
2 FPGA實現設計
本文結合實際協議網關項目驗證了一種基于FPGA的高速協議轉換的設計方案,它以Altera公司Cyclone系列FPGA芯片為核心,采用原理圖和Verilog HDL語言編程實現[4-8]。采用友晶提供的DE0-Nano開發板,配合開發軟件Quartus II 13.0,設計了一個驗證系統,系統采用固定波特率115 200 b/s,接收MEWTOCOL-COM協議數據,使用8 bit數據位,1 bit停止位,無奇偶校驗位。
轉換后的MODBUS RTU協議報文,按照8 bit數據位,1 bit停止位的發送。
FPGA從串行端口接收一幀MEWTOCOL-COM協議數據%10#RDD011050110757cr,表明讀取站號為10的寄存器地址1105-1107三個字的內容,轉換為MODBUS RTU報文后,為0A 03 04 52 00 03 A4 51。
2.1 頂層設計
圖3是驗證系統的頂層RTL視圖,頂層一共有三個輸入端口:clk,rst_n和rxd信號,分別表示FPGA的外部時鐘輸入,復位信號的輸入(低電平有效)和串口接收信號。頂層的兩個輸出端口,分別是數據輸出有效信號d_valid和串口發送信號txd。
頂層一共例化了4個獨立模塊,分別是pll,uart_receiver,cov_fp_mod和uart_transfer模塊。
2.2 各模塊說明
(1)時鐘模塊PLL
PLL模塊采用Altera公司提供的基礎鎖相環IP,輸入時鐘clk是50 MHz,通過PLL后,輸出信號c0是波特率的采樣時鐘,本例中采用固定波特率115 200 b/s,因此,采用頻率為波特率115 200的16倍,即1.843 2 MHz。
采樣時鐘c0作為模塊的運行時鐘,分別送到串行端口的收發數據模塊。
(2)串口接收數據模塊uart_receiver
uart_receiver模塊是從串行端口rxd信號中接收串行數據,并轉換成8 bit并行數據后從dout端口輸出,同時模塊將給出data_ready指示信號,表明串并轉換完成1個字節的有效數據。
(3)協議轉換模塊cov_fp_mod
cov_fp_mod模塊是從串口接收數據模塊中接收并行的8 bit數據,同時按照MEWTOCOL-COM協議幀轉換為MODBUS RTU協議幀的方式,將重新組裝數據,并實時地發送到串口發送數據模塊。
(4)串口發送數據模塊uart_transfer
串口發送數據模塊是將協議轉換模塊輸出的協議幀數據,進行并串轉換,并發送到串行接口線路上。
2.3 SignalTap信號抓取
圖4是通過Altera(現為Intel)公司的Quartus II軟件信號抓取工具SignalTap,實時獲得的FPGA的內部信號數據,其中rxd和txd為FPGA的串口輸入和輸出信號,i_data_d是來自MEWTOCOL-COM協議的做了同步處理后的并行數據,send_en是轉換模塊進行轉換后使能數據輸出的指示信號;o_data信號是協議轉換模塊的MODBUS RTU協議報文的輸出并行數據;silent_interval_done信號是根據MODBUS RTU協議,發送數據報文前后至少要保持3.5個字符時間以內,串口總線保持寂靜,對于波特率為115 200 b/s時,要求這個時間為1 750 μs。當總線上不滿足寂靜時間時,信號silent_interval_done為低電平,否則為高電平,表示數據可以從串行端口上進行發送。信號t35_cnt是串口總線寂靜時間的累加寄存器值,當MODBUS RTU協議的數據從串行端口上發送結束后,信號t35_cnt便開始從0計時,直到計滿1 750 μs后,silent_interval_done信號才為高電平有效,表示串口發送總線上可以進行數據的傳送了。
SignalTap的采樣時鐘使用16x波特率的時鐘,即1.843 2 MHz,每個時鐘周期為0.542 5 μs。從接收到MEWTOCOL-COM協議的數據到轉換為MODBUS RTU的數據并發送,通過將SignalTap的數據導出為csv格式,得到從rxd信號接收開始有效計算到協議轉換發送txd信號有效輸出,兩者之間的時間差2 212個時間單位,每個時間單位為0.542 5 μs,則協議轉換并開始發送的時間為0.542 5×2 212=1 200.01 μs。因此,協議轉換時間很短,而且不需要完全接收完整的一個MEWTOCOL-COM協議的報文才開始轉換,硬件電路上可以在適當的時間內開始進行轉換,大大節省了協議收發的時間延時(協議轉換的CRC計算為組合邏輯,時延為納秒級,不影響整個轉換時延)。
3 測試
假設PC按MEWTOCOL-COM協議從站號(設備地址)為10號(范圍是1~32)的保持寄存器DT1105號開始讀取數據,直到讀到寄存器1107號,命令幀:%10#RDD011050110757cr。
其中57是數據幀的BCC校驗字段,cr是結束符。
3.1 命令轉換
根據命令對應關系,在讀取保持寄存器,MEWTOCOL-COM的RD命令對應MDOBUS RTU的03功能碼。
3.2 地址轉換
首先是站號的進制轉換,MEWTOCOL-COM協議中是ASCII通信,站號為10,對應到MODBUS RTU的十六進制格式就是0x0a。
其次是訪問的寄存器地址轉換,在MEWTOCOL-COM協議中,訪問的是數據保持寄存器DT1105~DT1107,起始寄存器地址是1105,結束地址是1107,一共3個寄存器。在MODBUS RTU協議中,需要起始地址和訪問的寄存器數量,因此,根據表4,MOBUS RTU的地址是MEWTOCOL-COM的地址+1,DT1105的地址映射到MODBUS RTU地址,16位的十六進制就是0x0452。
最后是不同協議中地址字段的轉換映射關系。MEWTOCOL-COM協議字段使用了起始地址和結束地址,而MODBUS RTU協議中使用的是寄存器的起始地址和被訪問的寄存器的數量,因此,還要計算出實際的訪問寄存器的數量,1 107-1 105+1=3,轉成16位的十六進制數據是0x0003,并填入MODBUS RTU協議字段中。
3.3 轉換前后通信幀
經過上述命令、地址和數據的轉換和映射關系,由PC發出的MEWTOCOL-COM協議的通信幀命令%10#RDD011050110757cr,經過FPGA電路轉換到從站號25號接收到的MODBUS RTU協議通信幀是(hex格式):0A 03 04 52 00 03 A4 51。
4 結論
本文在深入分析了MEWTOCOL-COM和MODBUS RTU兩種現場總線通信協議的基礎上, 提出了基于FPGA架構的協議轉換方法的硬件方案,方便快捷地實現了不同現場總線網絡的互聯互通,并能快速進行協議轉換和收發,兩者延時時間約1 200 μs,FPGA的資源占用也比較小,圖5是綜合后的實際邏輯數量,綜合代碼已經包含了兩者協議的相互轉換邏輯,實驗驗證了基于FPGA實現MEWTOCOL-COM與MODBUS RTU協議轉換,達到了快速轉換和收發的特點,為現場總線網關的設計提供了一個很好的解決方案。
參考文獻
[1] 梅恪,沈璞。關于總線國際標準IEC61158的研究報告[J]。儀器儀表標準化與計量,2003(2):30-34.
[2] 王治靈。基于FPGA的多協議轉換系統的研究與設計[D]。成都:電子科技大學,2018.
[3] 高偉增,徐君鵬。松下PLC編程與應用(第二版)[M]。北京:機械工業出版社,2015.
[4] 于楓.ALTERA可編程邏輯器件應用技術[M]。北京:科學出版社,2004.
[5] 李洪偉,袁斯華。基于Quartus II的FPGA/CPLD設計[M]。北京:電子工業出版社,2006.
[6] 吳志杰,王新霞,孔凡敏,等。多路隔離的Modbus協議轉換器的設計[J]。電子技術應用,2016,42(10):77-79.
[7] 吳繼華,王誠.Altera FPGA/CPLD設計[M]。北京:人民郵電出版社,2005.
[8] 夏宇聞.Verilog數字系統設計教程[M]。北京:北京航空航天大學出版社,2003.
評論
查看更多