智能化配电系统中Modbus协议转换的实现

2016-01-17 17:36王双友
自动化与仪表 2016年1期
关键词:波特率中断以太网

李 涛 ,王双友

(1.河北工程大学 信息与电气工程学院,邯郸 056038;2.邯郸学院 软件学院,邯郸 056005)

Modbus协议是应用于电子控制器上的一种通用语言。它可以使不同厂商生产的控制设备连入工业网络,已经成为一个通用工业标准[1]。由于其实现成本相对低廉,Modbus通信协议在配电系统中所占的份额大大超过了其他协议,成为低压配电上应用最广泛的通信协议。同时以太网技术因其价格低廉、稳定可靠、通信速率高等特点在工业控制中被广泛应用,智能配电系统的网络化成为必然的发展趋势。针对这一现状,本文设计了一种实现Modbus协议在RS485总线网络和以太网2种组网之间转换的协议转换单元,使智能配电系统以低成本、高效率完成组网方式的转换,以实现智能配电的网络化。

1 方案设计

Modbus协议转换单元的系统结构如图1所示,主要由主控芯片和网络芯片构成。主控芯片采用意法半导体的32位处理器STM32F103C8T6。STM32具有功耗低、片上资源丰富的特点。网络芯片选择WIZnet公司的支持全硬件TCP/IP协议栈的W5300。主控芯片和网络芯片通过SPI总线连接。

图1 协议转换单元结构示意Fig.1 Structure diagram of protocol conversion

协议转换单元主要完成Modbus-RTU和Mod bus-TCP协议报文的转换,从而将基于RS485总线的各种仪器仪表等电网下位机设备顺利接入以太网组网的智能配电系统中。同时,引入心跳检测机制,避免TCP连接因长时间没有收发数据而发生异常。

1.1 控制器的选择

控制器采用由德意法半导体推出的基于ARM Cortex-M3内核的32位处理器STM32F103C8T6。其工作频率为72 MHz[2],执行速度高达1.25 DMIPS,具有丰富的片上资源。它内置高速存储器(64 K字节的Flash和20 KB的RAM),丰富的I/O接口和APB总线外设,2个12位10通道的A/D转换器,多种通信接口 (2个 I2C、2个 SPI和 3个 USART接口),方便实现与串口设备和网络芯片的通信。

1.2 网络芯片选择

网络接口芯片选用WIZnet的W5300。W5300是一款多功能网络接口芯片,内部集成10/100 Mb/s以太网控制器,支持自动应答[3],兼容IEEE802.3 10 base-T和802.3 100BASE-TX,内部还集成全硬件TCP/IP协议栈、MAC层和物理层,使用时只需要进行Socket编程。同时支持直接并行总线、间接并行总线、SPI总线接口和4个独立端口同时运行,内部有用于数据发送和接收16 KB存储器。

2 硬件电路设计

协议转换单元硬件电路主要由电源电路、STM32最小系统、W5300系统和网络变压电路组成。

网络芯片W5300与控制器接口有3种方式:直接总线接口、间接总线接口和SPI总线接口。因STM32F103C8T6有片上的硬件SPI接口,所以在本系统中,W5300通过 SPI接口和STM32连接。W5300则是通过将SPI_EN引脚拉高来实现SPI操作。

W5300通过4个引脚连接网络变压器控制以太网数据的收发。如图2所示,TXOP和TXON引脚控制数据的发送;RXIP和RXIN引脚控制数据的接收。

3 软件设计

软件部分主要包括系统参数设置、系统初始化、以太网口数据收发、串口数据收发和Modbus协议报文格式的调整。

3.1 Modbus协议

Modbus是一种工业现场总线标准,有2种协议版本:串行链路标准和工业以太网协议标准。在标准Modbus网络中,系统一般可采用ASCII和RTU 2种通信模式[4]。二者区别在于一个信息中的每8位字节是2个ASCII码传输还是2个十六进制数传输。由于在同样的波特率下,RTU模式比ASCII模式能够传送更多的数据[5],所以只研究RTU的串行链路标准和基于TCP的工业以太网协议标准的报文格式的转换。标准的Modbus协议物理层接口有RS232、RS422、RS485和以太网口,采用主从通信方式。主机可对各从机寻址发出广播信息,从机返回信息作为对查询的响应。

在RTU模式中,信息之间至少需要3.5个字符的静止时间,可通过选择的波特率计算静止时间,作为信息帧传输结束的标志。RTU模式下Modbus的帧结构如表1所示。

图2 以太网收发电路Fig.2 Ethernet transceiver circuit

表1 RTU消息帧Tab.1 RTU message frame

Modbus协议根据设备地址,请求功能代码,发送数据,错误校验,建立主机查询格式。从机响应信息也用Modbus协议组织,包括从机地址、动作代码、返回数据和错误校验。若在接收信息时出现错误,从机会返回一个错误帧作为应答。

Modbus-TCP是运行在TCP/IP上的Modbus报文传输协议,采用客户机、服务器模式。Modbus客户机根据需要向Modbus服务器发送建立连接的请求,Modbus服务器在收到一个请求后,就会激活一个本地操作进行读、写或其他操作。其数据帧格式如图3所示。

图3 Modbus TCP数据帧格式Fig.3 Data frame format of Modbus TCP

3.2 模块初始化

协议转换单元要收发以太网数据必须正确配置W5300,启动时要完成W5300的初始化。W5300初始化主要有基本设置 (模式、中断等寄存器设置)、网络参数设置、端口设置。

Modbus的以太网标准是可靠的数据传输,基于TCP协议,所以W5300端口模式为TCP,端口固定为502。网络参数包括W5300的IP地址、子网掩码、MAC地址和网关地址。在系统初始化过程中,是按照预先设置好或修改后的参数来执行的。这些参数保存在STM32自身Flash开辟的一段存储空间中,省去了外接E2PROM。系统参数可以通过串口交互界面、上位机软件和WEB服务器3种方式修改。修改后的参数同样会保存到Flash中,保证系统重启后能正常工作。

3.3 数据收发和协议转换

协议转换在数据收发的过程中完成。转换单元接收到串口数据后按照Modbus-RTU协议进行分析,然后按照Modbus-TCP的帧格式重新组装数据帧通过以太网口发出;同样模块接收到以太网的数据后也会完成Modbus-TCP到Modbus-RTU数据格式的转换。

在Modbus-RTU模式通信过程中,消息发送要以3.5个字符以上时间停顿开始。在最后一个传输字符之后,也要间隔至少3.5个字符时间的停顿作为数据帧传输的结束。通过设置的波特率可以计算3.5个字符的时间间隔,来设置定时器。进入定时中断则表示一个完整的数据帧接收完成,从而可以进行协议转换。数据接收完成后转换单元会对遵循RTU格式的数据帧先进行CRC校验,判断数据是否正确,然后再提取功能码、数据和设备地址。根据设备地址生成MBAP报头。MBAP报头和之前提取的功能码、数据组成了Modbus-TCP的数据帧,再将该数据帧封装到TCP的数据报文中,发到以太网。具体处理流程如图4所示。

图4 中断处理流程Fig.4 Flow chat of interrupt processing

Modbus-TCP到Modbus-RTU数据格式的转换和上面的流程基本相同,只是顺序相反。

以太网数据的接收也采用中断模式。W5300有中断输出引脚、全局和端口的中断寄存器。STM32通过读取中断寄存器,区分数据接收、发送超时等中断信息,根据不同的中断进入相应的中断处理程序。

3.4 心跳检测机制

在系统设计初期存在建立TCP连接后,如果长时间不收发数据,传输会出现异常。这也是其它实现类似转换功能的模块存在的通病。所以在需要长时间保持TCP连接的情况下,如何确保TCP连接处于正常连接状态成为关键问题。经过多种方法的实验,本系统最终采用心跳检测机制,即在一定时间间隔发送心跳报文,在收到对方应答后来确认链路通畅。如果出现超时中断则需要重新进行TCP连接,通信过程如图5所示。系统引入心跳检测后,多次实验均未出现异常。

图5 心跳检测Fig.5 Heartbeat detection

4 系统测试

系统测试采用PC来模拟智能配电网中的上位机和下位机设备,模块一端通过串口连接电脑的串口,另一端用网线连接电脑网口。电脑安装Modbus Poll软件和Wireshark软件,Modbus Poll是Modbus设备模拟工具,帮助Modbus通讯设备开发人员进行Modbus通讯协议的模拟和测试,用于监控、测试、调试Modbus通讯设备,支持寄存器和线圈的读写等功能,支持Modbus的RTU、ASCII和TCP协议。Wireshark软件可以分析TCP连接建立的过程,数据报文的格式、内容,心跳报文的传输等。用Wireshark软件抓包分析,可以保证测试的准确性。经过对串口从9600 b/s~115200 b/s的多个波特率的测试,在不同波特率下系统均能准确无误地进行数据的收发和协议的转换,如图6所示。

图6 协议转换测试Fig.6 Protocol conversion test

5 结语

本文针对串行链路和工业以太网的Modbus协议转换提出了一种基于STM32+W5300的协议转换单元,并实现了系统的设计和软件调试。此协议转换单元支持多波特率、多串口总线,具有结构简单、使用方便,能够满足智能配电系统和其它基于Modbus现场总线的工业控制领域的要求,工程应用前景广阔。

[1]巩全成,吴亚锋,李江江.RS-485总线以太网接口转换装置研究[J].计算机工程,2012,38(22):248-250.

[2]张河新,王晓辉,黄晓东.基于STM32和CAN总线的智能数据采集节点设计[J].化工自动化及仪表,2012,39(1):78-80

[3] 王广维,张浩然.基于ARM和W5100的嵌入式以太网通信接口设计[J].微型机与应用,2011,30(5):50-53.

[4]陈德仙,郑登峰,俞国勇.基于MODBUS协议的智能配电系统设计[J].江苏电器,2007(4):25-28.

[5] 郑鸿彦,苗世洪,张军民.基于ARM9微处理器的MODBUS通信协议的实现[J].电气应用,2007,26(5):45-79.

猜你喜欢
波特率中断以太网
UART 波特率检测电路的FPGA 设计算法与实现
基于1500以太网养猪场的智能饲喂控制系统的设计与实现
CAN 总线波特率自适应程序设计
基于FPGA的中断控制器设计*
浅谈西门子S7—400与S7—200的通讯实现方法
Linux中断线程化分析及中断延时测试
波特率自适应的CAN驱动在嵌入式Linux下的实现①
跟踪导练(二)(5)
千里移防,卫勤保障不中断
谈实时以太网EtherCAT技术在变电站自动化中的应用