0 引言
現(xiàn)場(chǎng)總線技術(shù)是在工業(yè)自動(dòng)化領(lǐng)域中解決工業(yè)現(xiàn)場(chǎng)的智能化儀器儀表、控制器、執(zhí)行機(jī)構(gòu)等現(xiàn)場(chǎng)設(shè)備間的數(shù)字通信以及這些現(xiàn)場(chǎng)控制設(shè)備和高級(jí)控制系統(tǒng)之間的信息傳遞問題,是工業(yè)設(shè)備自動(dòng)化和信息化的基礎(chǔ)。然而,由于歷史原因,現(xiàn)場(chǎng)總線的通信協(xié)議卻種類繁多,根據(jù)IEC61158第四版國際標(biāo)準(zhǔn),已有20種現(xiàn)場(chǎng)總線協(xié)議成為國際標(biāo)準(zhǔn)[1]。常用的現(xiàn)場(chǎng)總線協(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ò)等困境。
目前,針對(duì)不同的工業(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是對(duì)這三種常用方式的優(yōu)缺點(diǎn)的比較。
本文針對(duì)松下電工的私有協(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è)備集成在一個(gè)現(xiàn)場(chǎng)總線網(wǎng)絡(luò)中進(jìn)行互聯(lián)互通、數(shù)據(jù)交換的問題,而且完成了兩個(gè)協(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)接受到指令后,自動(dòng)進(jìn)行相應(yīng)的響應(yīng),主站根據(jù)從站的響應(yīng),可以得知從設(shè)備是否正確執(zhí)行了剛剛發(fā)送的指令,這樣就構(gòu)成了一個(gè)交互式的操作。圖1是完成主從通信模型的示意圖。
1.2 MEWTOCOL-COM基本幀格式
MEWTOCOL-COM協(xié)議中規(guī)定了基本幀格式,基本幀格式有控制代碼,包含了幀頭、命令、正常響應(yīng)、錯(cuò)誤響應(yīng)、結(jié)束等字符,如表2所示。MEWTOCOL-COM的每次通信都先由主站發(fā)起,主站發(fā)起命令幀,命令幀內(nèi)容除了包含控制代碼外,還包括一些特殊標(biāo)志碼、PLC站號(hào)和呼號(hào)字符等[3]。表3是基本幀的格式。命令幀在文本區(qū)域中填寫命令代碼和操作地址,命令代碼含義如表4所示。
1.3 MODBUS RTU工作原理
自1979年來,MODBUS已經(jīng)成為工業(yè)領(lǐng)域通信協(xié)議的業(yè)界標(biāo)準(zhǔn),通過MODBUS連接著百萬臺(tái)自動(dòng)化設(shè)備之間的通信。在OSI模型中,MODBUS位于第7層,是一種應(yīng)用層報(bào)文傳輸協(xié)議。
MODBUS在串行通信模式下,通信幀格式有兩種:一種是主機(jī)發(fā)起的查詢和命令從設(shè)備的格式,另一種是從設(shè)備收到主機(jī)命令后的應(yīng)答格式[4]。通信原理是采用請(qǐng)求/應(yīng)答的方式進(jìn)行主從通信,其工作原理如圖2所示。MODBUS主站通過向相應(yīng)物理地址的從站發(fā)送相應(yīng)的控制信息進(jìn)行總線數(shù)據(jù)的交互,一般采用的是一對(duì)多的物理連接方式,其通信的實(shí)質(zhì)是主從一對(duì)一的請(qǐng)求/應(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模式為研究對(duì)象,建立MEWTOCOL-COM與MODBUS RTU報(bào)文的命令、地址映射關(guān)系,從而實(shí)現(xiàn)兩種不同的總線協(xié)議的相互轉(zhuǎn)換。
在MODBUS RTU協(xié)議中,主機(jī)設(shè)備通常通過不同的功能碼實(shí)現(xiàn)對(duì)位、字進(jìn)行操作,這里的功能碼就是對(duì)應(yīng)MEWTOCOL-COM中的命令。
1.4 命令映射表
為了實(shí)現(xiàn)MEWTOCOL-COM 協(xié)議與MODBUS 協(xié)議的相互轉(zhuǎn)換,首先創(chuàng)建命令對(duì)應(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ì)了一個(gè)驗(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,表明讀取站號(hào)為10的寄存器地址1105-1107三個(gè)字的內(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視圖,頂層一共有三個(gè)輸入端口:clk,rst_n和rxd信號(hào),分別表示FPGA的外部時(shí)鐘輸入,復(fù)位信號(hào)的輸入(低電平有效)和串口接收信號(hào)。頂層的兩個(gè)輸出端口,分別是數(shù)據(jù)輸出有效信號(hào)d_valid和串口發(fā)送信號(hào)txd。
頂層一共例化了4個(gè)獨(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后,輸出信號(hào)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信號(hào)中接收串行數(shù)據(jù),并轉(zhuǎn)換成8 bit并行數(shù)據(jù)后從dout端口輸出,同時(shí)模塊將給出data_ready指示信號(hào),表明串并轉(zhuǎn)換完成1個(gè)字節(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信號(hào)抓取
圖4是通過Altera(現(xiàn)為Intel)公司的Quartus II軟件信號(hào)抓取工具SignalTap,實(shí)時(shí)獲得的FPGA的內(nèi)部信號(hào)數(shù)據(jù),其中rxd和txd為FPGA的串口輸入和輸出信號(hào),i_data_d是來自MEWTOCOL-COM協(xié)議的做了同步處理后的并行數(shù)據(jù),send_en是轉(zhuǎn)換模塊進(jìn)行轉(zhuǎn)換后使能數(shù)據(jù)輸出的指示信號(hào);o_data信號(hào)是協(xié)議轉(zhuǎn)換模塊的MODBUS RTU協(xié)議報(bào)文的輸出并行數(shù)據(jù);silent_interval_done信號(hào)是根據(jù)MODBUS RTU協(xié)議,發(fā)送數(shù)據(jù)報(bào)文前后至少要保持3.5個(gè)字符時(shí)間以內(nèi),串口總線保持寂靜,對(duì)于波特率為115 200 b/s時(shí),要求這個(gè)時(shí)間為1 750 μs。當(dāng)總線上不滿足寂靜時(shí)間時(shí),信號(hào)silent_interval_done為低電平,否則為高電平,表示數(shù)據(jù)可以從串行端口上進(jìn)行發(fā)送。信號(hào)t35_cnt是串口總線寂靜時(shí)間的累加寄存器值,當(dāng)MODBUS RTU協(xié)議的數(shù)據(jù)從串行端口上發(fā)送結(jié)束后,信號(hào)t35_cnt便開始從0計(jì)時(shí),直到計(jì)滿1 750 μs后,silent_interval_done信號(hào)才為高電平有效,表示串口發(fā)送總線上可以進(jìn)行數(shù)據(jù)的傳送了。
SignalTap的采樣時(shí)鐘使用16x波特率的時(shí)鐘,即1.843 2 MHz,每個(gè)時(shí)鐘周期為0.542 5 μs。從接收到MEWTOCOL-COM協(xié)議的數(shù)據(jù)到轉(zhuǎn)換為MODBUS RTU的數(shù)據(jù)并發(fā)送,通過將SignalTap的數(shù)據(jù)導(dǎo)出為csv格式,得到從rxd信號(hào)接收開始有效計(jì)算到協(xié)議轉(zhuǎn)換發(fā)送txd信號(hào)有效輸出,兩者之間的時(shí)間差2 212個(gè)時(shí)間單位,每個(gè)時(shí)間單位為0.542 5 μs,則協(xié)議轉(zhuǎn)換并開始發(fā)送的時(shí)間為0.542 5×2 212=1 200.01 μs。因此,協(xié)議轉(zhuǎn)換時(shí)間很短,而且不需要完全接收完整的一個(gè)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í)延為納秒級(jí),不影響整個(gè)轉(zhuǎn)換時(shí)延)。
3 測(cè)試
假設(shè)PC按MEWTOCOL-COM協(xié)議從站號(hào)(設(shè)備地址)為10號(hào)(范圍是1~32)的保持寄存器DT1105號(hào)開始讀取數(shù)據(jù),直到讀到寄存器1107號(hào),命令幀:%10#RDD011050110757cr。
其中57是數(shù)據(jù)幀的BCC校驗(yàn)字段,cr是結(jié)束符。
3.1 命令轉(zhuǎn)換
根據(jù)命令對(duì)應(yīng)關(guān)系,在讀取保持寄存器,MEWTOCOL-COM的RD命令對(duì)應(yīng)MDOBUS RTU的03功能碼。
3.2 地址轉(zhuǎn)換
首先是站號(hào)的進(jìn)制轉(zhuǎn)換,MEWTOCOL-COM協(xié)議中是ASCII通信,站號(hào)為10,對(duì)應(yīng)到MODBUS RTU的十六進(jìn)制格式就是0x0a。
其次是訪問的寄存器地址轉(zhuǎn)換,在MEWTOCOL-COM協(xié)議中,訪問的是數(shù)據(jù)保持寄存器DT1105~DT1107,起始寄存器地址是1105,結(jié)束地址是1107,一共3個(gè)寄存器。在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)換到從站號(hào)25號(hào)接收到的MODBUS RTU協(xié)議通信幀是(hex格式):0A 03 04 52 00 03 A4 51。
4 結(jié)論
本文在深入分析了MEWTOCOL-COM和MODBUS RTU兩種現(xiàn)場(chǎng)總線通信協(xié)議的基礎(chǔ)上, 提出了基于FPGA架構(gòu)的協(xié)議轉(zhuǎn)換方法的硬件方案,方便快捷地實(shí)現(xiàn)了不同現(xiàn)場(chǎng)總線網(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)場(chǎng)總線網(wǎng)關(guān)的設(shè)計(jì)提供了一個(gè)很好的解決方案。
參考文獻(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] 李洪偉,袁斯華?;赒uartus 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.
評(píng)論
查看更多