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