以下是一个具体的 C# 示例代码,展示如何通过 Modbus TCP 主站 与 Modbus RTU(RS-485)从站设备 通信,实现协议转换的核心逻辑。代码使用 NModbus
库简化协议处理。
1. 环境准备
NuGet 包安装
Install-Package NModbus Install-Package System.IO.Ports
2. 完整代码示例
using System; using System.IO.Ports; using System.Net; using System.Net.Sockets; using System.Threading; using System.Threading.Tasks; using Modbus.Device;public class ModbusTcpToRtuGateway {private const int TCP_PORT = 502; // Modbus TCP 监听端口private const string COM_PORT = "COM3"; // RS-485 串口号private const int BAUD_RATE = 9600; // 波特率private const Parity PARITY = Parity.None;private const int DATA_BITS = 8;private const StopBits STOP_BITS = StopBits.One;private TcpListener _tcpListener;private SerialPort _serialPort;private IModbusSerialMaster _rtuMaster;private bool _isRunning;public void Start(){_isRunning = true;// 初始化串口和Modbus RTU主站_serialPort = new SerialPort(COM_PORT, BAUD_RATE, PARITY, DATA_BITS, STOP_BITS);_serialPort.Open();_rtuMaster = ModbusSerialMaster.CreateRtu(_serialPort);// 启动TCP监听_tcpListener = new TcpListener(IPAddress.Any, TCP_PORT);_tcpListener.Start();Console.WriteLine($"Modbus TCP网关已启动,监听端口:{TCP_PORT}");// 处理TCP客户端连接Task.Run(() =>{while (_isRunning){var tcpClient = _tcpListener.AcceptTcpClient();