• 收藏
  • 加入书签
添加成功
收藏成功
分享

基于FPGA+SM5100架构的ModBus TCP通信服务器设计研究

张永龙
  
富网媒体号
2025年79期
贵州航天电子科技有限公司

打开文本图片集

摘要:为实现某系统ModBus TCP/IP通信服务器的设计,本文采用基于FPGA+ SM5100的架构的以太网通信服务器架构方案。通过对以太网通信物理层(PHY)的配置及数据获取后,并通过读取Socket接收缓冲区内的数据进行解析使用。在应用层通过对ModBus TCP/IP总线数据格式对接收的数据进行解析和处理后,将应答数据封装后写入Socket发送缓冲区中,通过SW5100发送至客户端,实现ModBus TCP/IP通信服务器的设计。

关键词: 以太网 FPGA SW5100 服务器

1 前言

ModBus是OSI模型第7层上的应用报文传输协议,它在连接至不同类型的总线或网络设备之间提供客户端/服务器通信,ModBus是一个请求/应答协议,并且提供功能功能码规定的服务[1]。ModBus TCP是标准的网络通信协议,通过CPU上PN接口进行TCP/IP通信,不需要额外的通信硬件模块,ModBus TCP使用开放式用户通信连接作为ModBus通信路径,SM5100内部集成了4个Socket通用套接字接口,支持客户机和服务器连接数最大为4个[2]。

在实现ModBus TCP服务器通信中,通过对SM5100的公共寄存器配置该网络的IP地址、端口号、MAC地址等,并通过对SOCKET接口寄存器配置TCP工作模式、目的端的IP地址、端口号等信息。采用不同SOCKET对应不同客户端的架构方式,防止多终端通信冲突的技术问题;由于SM5100内部集成了TCP/IP协议栈,因此只需要对TCP/IP协议栈寄存器进行配置后,直接读取应用层的数据进行解析后,与客户端之间建立网络通信[3]。本文阐述一种FPGA+ SM5100架构的以太网设计方案,为以太网通信提供解决方案。

2系统概况

ModBus TCP服务器的网络通信采用具有硬件协议栈(将TCP/IP协议栈采用硬件集成),在通信时,只需要对SM5100内部的SOCKET接口进行配置,将TCP层连接状态进行转换和控制,即可实现对客户端查询指令的应答处理。其中,FPGA内嵌软核CPU(Microblaze核)通过SPI接口对SM5100进行数据读写控制,并通过对SM5100的公共寄存器配置该网络的IP地址、端口号、MAC地址等,并通过对SOCKET接口寄存器配置TCP工作模式、目的端的IP地址、端口号等信息,并通过每一个SOCKET对应一台客户端,实现对客户端通信时,采用不同SOCKET对应不同客户端的架构方式,防止多终端通信冲突的技术问题;由于SM5100内部集成了TCP/IP协议栈,因此只需要对TCP/IP协议栈寄存器进行配置后,直接读取应用层的数据进行解析后,与客户端之间建立网络通信:

3 硬件架构

在本方案设计中,采用FPGA作为主控芯片,通过对SW5100的外围电路的设计,实现FPGAFPGA+SW5100以太网通信控制(如图2所示)。在SW5100的外围电路设计中,主要考虑其复位引脚、晶振输入、并行接口和与以太网变压器的连接。

SM5100 是 10/100M 以太网控制电路,包括 MAC 和 PHY,支持 TCP/IP 协议,内部集成 16K 存储器,支持 IEEE802.3 10BASE-T、 100BASE-TX,集成 4 路 socket,提供 SPI 接口,直接并行接口,间接并行接口。主要应用于高集成、高稳定、高性能和低成本的嵌入式系统中。使用 SM5100 可以实现没有操作系统的 Ethernet 连接。SM5100 内部集成了全硬件的 TCP/IP 协议栈、以太网介质传输层(MAC)和物理层(PHY)。硬件 TCP/IP 协议栈支持 TCP, UDP,ICMP等协议。 SM5100 内部还集成有 16KB 存储器用于数据传输。使用 SM5100 不需要考虑以太网的控制,只需要进行简单的 Socket 编程。

4 软件架构

4.1 ModBus TCP通信协议层IP地址及协议解析

由于SM5100内部集成了TCP/IP协议栈,因此,读取的网络数据属于MODBUS应用层的数据,通过对该数据进行解析后,对客户端进行应答处理。采用ModBus通信协议,该ModBus协议满足GB/T 19582-2008标准中关于ModBus通信的技术要求。在系统上电后,控制模块接收客户端的发送查询指令,根据查询指令将应答数据封装在以太网数据帧中,并将以太网数据帧作为应答数据发送至客户端。控制模块的FPGA通过对SW5100配置后,将控制模块设置为以太网通信协议的服务器,其IP地址设置为192.168.12.7(示例IP),子网掩码为255.255.255.0,端口号为502,站地址为3。FPGA控制软件对以太网数据帧封装时,采用大端数据模式对数据进行封装处理。

控制模块接收的查询指令码(XX:表示00~FF的十六进制数据):

XX XX 00 00 00 06 03 03 00 00 00 XX(十六进制数据)

控制模块发送的应答数据如下(XX:表示00~FF的十六进制数据):

00 00 00 00 00 XX 03 03 XX XX XX XX XX ….(十六进制数据)

4.2 FPGA控制软件架构

在FPGA控制软件设计中,由于ModBus TCP总线是基于TCP/IP通信总线建立的通信协议,为保证以太网通信的可靠和资源的有效利用,将Socket套接字空闲状态下释放连接,实现连接资源的重利用,实现ModBus TCP协议可靠通信。

软核CPU模块以MicroBlaze软核为中心搭建框架,FPGA底层通过将底层数据信息与CPU软核之间的数据线传入CPU内部,并通过对内嵌软核CPU的调用,实现对SM5100网络通信控制接口的控制,将SM5100的Socket 0、Socket 1、Socket 2、Socket 3等接口的配置,将接收控制台或测试软件的ModBus TCP查询指令及相关的系统控制指令和系统应答数据流信息等进行解析处理,并实现以太网通信指令查询及应答处理,实现ModBus TCP服务器系统的网络通信和控制功能。软核架构图如

图3所示。

软核CPU通过对FPGA底层输入信号的初始化处理,获取FPGA底层输入的信号,并通过对SM5100进行配置处理后,实现对SM5100网络通信协议Socket接口的网络配置处理,完成基于ModBus TCP通信的以太网通信,通过获取以太网通信的指令,实现网络指令对温控组合的控制处理,并解析指令,若指令为查询指令,则通过网络向控制台发送温度数据及故障码应答数据。

对获取地址参数,建立CPU与底层之间的通信数据接口,实现对软核CPU与FPGA底层之间的数据交互处理。然后再对软核CPU平台参数进行初始化处理,对定时器进行初始化、对IO接口进行初始化处理,对温度及温度参数进行例化处理,对对SM5100网络接口进行初始化处理,实现网络TCP模式配置处理。通过对Socket0 、Socket1、Socket2、Socket3的TCP服务器模式进行配置,完成网络通信配置处理,并通过对温度参数调用处理,实现对网络温度处理。实现四个Socket通道的网络通路配置,使温控组合支持四个终端(客户端)进行网络通信和控制处理。

4.2 ModBus TCP传输层可靠连接的设计架构

在FPGA软核CPU内对Socket套接字接口的状态寄存器和控制寄存器进行读取;实现对SM5100网关地址、IP地址、子网掩码、MAC地址等进行设置处理。对SM5100的内存空间进行分配处理;并通过读取SM5100的公共寄存器数据,查看寄存器数据是否写入成功,若未成功则重新对寄存器进行数据写入,提高SM5100寄存器模式配置的可靠性。通过以上步骤后,可以实现对Socket0、Socket1、Socket2、Socket3的套接字接口寄存器的配置,实现TCP服务器模式配置。

在后续对Socket的TCP模式下进行监听,若Socket状态字读取后,TCP连接状态处于SOCK_INIT,则需要对端口的状态进行重新初始化,并再次打开,直到成功,提高端口配置的可靠性。并读取状态寄存器,若TCP连接状态处于SnTCP_listen,表示该服务器进入监听状态。在监听状态下,若读取状态寄存器为SnTCP_established,则表示TCP状态进入建立状态,网络传输层已经完成三次握手,TCP建立连接。

在TCP状态建立连接下,通过读取Socket套接字接口2K Byte的接收数据缓冲区空间,依次将数据读取后,按照协议进行解析后,作为系统控制处理使用,并将应答数据写入Socket套接字接口2K Byte的发送数据缓冲区空间内,实现数据收发控制处理。

若读取TCP状态为断开状态SnTCP_discon时,则向Socket寄存器中写入相应的TCP关闭状态字,实现关闭状态SnTCP_close功能。可实现对新客户端网络连接使用。TCP可靠连接的状态转换图如图4所示。

4.3 ModBus应用层数据的设计

根据ModBus 应用层通信协议,FPGA控制软件对接收的查询指令码进行解析后,根据查询指令码的功能应答相应的数据。

查询指令如下:

XX XX 00 00 00 06 03 03 00 00 00 XX(十六进制数据)

根据ModBus 通信协议,从左向右,第一、二个字节表示网络包序号,用于识别网络不同数据帧;第三、四个字节表示协议号,默认为0;第五、六个字节表示该数据帧后续ModBus帧的长度。第七个字节表示站地址;第八个字节表示功能码为请求获取数据;第九、十表示获取ModBus数据的初始地址;第十一、十二表示获取请求数据的长度。

在对ModBus数据解析后,封装以太网数据帧,发送的应答数据如下(XX:表示00~FF的十六进制数据):

00 00 00 00 00 XX 03 03 XX XX XX XX XX ….(十六进制数据)

据ModBus 通信协议,从左向右,第一、二个字节表示网络包序号,用于识别网络不同数据帧;第三、四个字节表示协议号,默认为0;第五、六个字节表示该数据帧后续ModBus帧的长度,该长度由查询指令的获取请求数据的长度决定。第七个字节表示站地址;第八个字节表示功能码为请求获取数据;第九个字节表示后续应答数据的长度;之后的字节为应答数据。

FPGA控制软件根据查询指令的功能码解析后,按照ModBus应答数据的协议进行数据封装后,向客户端应答数据,实现客户端与ModBus TCP服务器之间数据交互。

5 结束语

本文采用FPGA+SM5100架构方式,结合+SM5100集成功能的CRC校验,数据滤波等有效地减轻了FPGA的载荷,使得+SM5100内部的收发接口单元操作起来灵活方便,为以太网数据包提供了有效的缓冲。本文通过对ModBus TCP不同层数据交互、解析、处理后,使得客户端与ModBus TCP服务器之间数据交互工作性能良好,能够进行稳定的数据传递,为后续ModBus TCP通信提供方案借鉴。

参考文献

[1]施达雅. 基于TCP/IP 的网络FPGA应用[J]. 湖北科技学院学报,2011,31(12):104-105.

[2]焦毅霞.嵌入式TCP/IP 协议FPGA技术在网络通信中的应用研究. 现代制造技术与装备2018第7期 总第260期

[3]林勇坚. 基于ModBus 现场总线的水处理流程控制的工程设计[J]. 广西民族大学学报(自然科学版), 2013, 19(1):79-81.

*本文暂不支持打印功能

monitor