1. 项目概述与背景
在工业自动化领域,Modbus协议作为最常用的通信标准之一,其TCP和RTU两种传输模式各有优势。实际项目中常遇到需要将串口设备接入以太网的场景,这正是串口转Modbus TCP网关的核心价值所在。本次基于玄武F103(STM32F103核心板)和EBYTE模块的方案,实现了稳定可靠的协议转换功能。
这个方案特别适合以下场景:
- 老旧设备只有RS485接口但需要接入现代SCADA系统
- 现场布线受限需要无线转TCP通信
- 需要将多个串口设备集中接入一个TCP端口
2. 硬件选型与连接
2.1 核心硬件组件
玄武F103开发板:
- 主控STM32F103C8T6(72MHz Cortex-M3)
- 内置2个USART接口
- 64KB Flash/20KB RAM
- 丰富的外设资源支持
EBYTE E810-DTU模块:
- 支持Modbus TCP转RTU协议
- 10/100M自适应以太网接口
- 工作电压3.3V-5.5V
- 内置16KB数据缓冲区
2.2 硬件连接示意图
code复制[STM32F103] [EBYTE E810]
PA2(TX) ------> RX
PA3(RX) <------ TX
3.3V ------> VCC
GND ------> GND
注意:EBYTE模块的TXD/RXD需要与STM32交叉连接,电压匹配很重要,避免使用5V直接供电
3. 软件架构设计
3.1 FreeModbus协议栈配置
FreeModbus作为开源协议栈,需要进行以下关键配置:
c复制// 在portserial.c中修改串口参数
#define MB_SERIAL_BAUDRATE 9600
#define MB_SERIAL_PARITY MB_PAR_NONE
#define MB_SERIAL_TXD_PIN GPIO_Pin_2
#define MB_SERIAL_RXD_PIN GPIO_Pin_3
3.2 核心代码实现
3.2.1 Modbus初始化
c复制eMB
