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();
           

你可能感兴趣的:(c#,Modbus,RTU,Modbus,TCP/IP)