文献标识码: A
DOI:10.16157/j.issn.0258-7998.190859
中文引用格式: 陈虎,陈倩. 基于FPGA的MEWTOCOL-COM与MODBUS RTU协议快速转换的设计与实现[J].电子技术应用,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 引言
现场总线技术是在工业自动化领域中解决工业现场的智能化仪器仪表、控制器、执行机构等现场设备间的数字通信以及这些现场控制设备和高级控制系统之间的信息传递问题,是工业设备自动化和信息化的基础。然而,由于历史原因,现场总线的通信协议却种类繁多,根据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.
作者信息:
陈 虎1,陈 倩2
(1.成都航空职业技术学院 信息工程学院,四川 成都610100;2.四川大学 电子信息学院,四川 成都610064)