c#实现Modbus TCP/IP与RS 485数据交换的实例
以下是一个具体的 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();