C# 实现 Modbus TCP 服务端客户端寄存器

以下是一个使用 C# 实现 Modbus TCP 服务端的示例代码。这个示例使用了 NModbus4 库,这是一个开源的 Modbus 库,支持 Modbus TCP 和 Modbus RTU 协议。

首先,您需要安装 NModbus4 库。您可以通过 NuGet 包管理器来安装:

Install-Package NModbus4

然后,您可以编写以下代码来实现一个简单的 Modbus TCP 服务端:

using System;
using System.Net;
using System.Net.Sockets;
using System.Threading.Tasks;
using NModbus;
using NModbus.Logging;
using NModbus.Tcp;

class Program
{
    static async Task Main(string[] args)
    {
        // 设置服务端监听的IP地址和端口
        IPAddress address = new IPAddress(new byte[] { 127, 0, 0, 1 });
        int port = 502;

        // 创建TcpListener
        TcpListener listener = new TcpListener(address, port);
        listener.Start();
        Console.WriteLine($"Modbus TCP Server is listening on {address}:{port}");

        // 创建Modbus工厂
        var factory = new ModbusFactory(new ConsoleModbusLogger(LoggingLevel.Info));

        // 创建Modbus TCP Slave
        var network = factory.CreateSlaveNetwork(listener);
        var slave = factory.CreateSlave(1);
        
        // 添加从站到网络
        network.AddSlave(slave);

        // 初始化寄存器值
        slave.DataStore.HoldingRegisters[1] = 123;
        slave.DataStore.InputRegisters[1] = 456;
        slave.DataStore.CoilDiscretes[1] = true;
        slave.DataStore.InputDiscretes[1] = false;

        // 启动Modbus服务端
        var slaveNetworkTask = network.ListenAsync();

        Console.WriteLine("Press any key to stop the server...");
        Console.ReadKey();

        // 停止服务端
        network.Stop();

        // 确保服务端任务完成
        await slaveNetworkTask;
    }
}

 

代码解释:

  1. 设置监听地址和端口:这里我们使用本地地址 127.0.0.1 和标准 Modbus TCP 端口 502

  2. 创建 TcpListener:用于监听 TCP 连接请求。

  3. 创建 Modbus 工厂:使用 NModbus4 库创建 Modbus 工厂,包含一个简单的日志记录器。

  4. 创建 Modbus TCP Slave 网络:创建一个从站网络并添加一个从站。

  5. 初始化寄存器和位:为从站的保持寄存器、输入寄存器、线圈和离散输入初始化一些值。

  6. 启动服务端:调用 ListenAsync() 启动服务端以异步方式监听请求。

  7. 等待用户输入停止服务端:按任意键停止服务端并停止监听。

运行代码:

确保在运行代码之前,您已经安装了 NModbus4 库,并且您的项目可以访问该库。

这个示例代码展示了一个基本的 Modbus TCP 服务端的实现,您可以根据实际需求进行扩展和修改。例如,您可以添加更多的寄存器和位,处理更多的从站请求等。

 

接下来是一个使用 C# 实现 Modbus TCP 客户端的示例代码,同样使用 NModbus4 库。这个客户端将连接到之前创建的 Modbus TCP 服务端并读取/写入数据。

首先,确保您已经安装了 NModbus4 库:

Install-Package NModbus4

然后,您可以编写以下代码来实现一个简单的 Modbus TCP 客户端:

using System;
using System.Net.Sockets;
using NModbus;
using NModbus.Logging;
using NModbus.Tcp;

class Program
{
    static void Main(string[] args)
    {
        // 设置服务端的IP地址和端口
        string ipAddress = "127.0.0.1";
        int port = 502;

        // 创建TCP客户端
        using (TcpClient client = new TcpClient(ipAddress, port))
        {
            // 创建Modbus工厂
            var factory = new ModbusFactory(new ConsoleModbusLogger(LoggingLevel.Info));

            // 创建Modbus TCP Master
            var master = factory.CreateMaster(client);

            // 读取保持寄存器
            ushort startAddress = 1;
            ushort numRegisters = 5;
            ushort[] holdingRegisters = master.ReadHoldingRegisters(1, startAddress, numRegisters);

            Console.WriteLine("Holding Registers:");
            for (int i = 0; i < holdingRegisters.Length; i++)
            {
                Console.WriteLine($"Register {startAddress + i}: {holdingRegisters[i]}");
            }

            // 读取输入寄存器
            ushort[] inputRegisters = master.ReadInputRegisters(1, startAddress, numRegisters);

            Console.WriteLine("Input Registers:");
            for (int i = 0; i < inputRegisters.Length; i++)
            {
                Console.WriteLine($"Register {startAddress + i}: {inputRegisters[i]}");
            }

            // 写入保持寄存器
            ushort writeAddress = 1;
            ushort[] writeValues = new ushort[] { 10, 20, 30, 40, 50 };
            master.WriteMultipleRegisters(1, writeAddress, writeValues);

            Console.WriteLine("Written values to Holding Registers.");

            // 读取线圈状态
            bool[] coils = master.ReadCoils(1, startAddress, numRegisters);

            Console.WriteLine("Coils:");
            for (int i = 0; i < coils.Length; i++)
            {
                Console.WriteLine($"Coil {startAddress + i}: {coils[i]}");
            }

            // 写入线圈状态
            bool[] writeCoilValues = new bool[] { true, false, true, false, true };
            master.WriteMultipleCoils(1, writeAddress, writeCoilValues);

            Console.WriteLine("Written values to Coils.");
        }
    }
}

 

代码解释:

  1. 设置服务端地址和端口:客户端将连接到之前设置的本地地址 127.0.0.1 和端口 502

  2. 创建 TCP 客户端:用于与 Modbus TCP 服务端建立连接。

  3. 创建 Modbus 工厂:使用 NModbus4 库创建 Modbus 工厂,包含一个简单的日志记录器。

  4. 创建 Modbus TCP Master:创建一个主站,用于与服务端进行通讯。

  5. 读取保持寄存器:从地址 1 开始读取 5 个保持寄存器,并打印其值。

  6. 读取输入寄存器:从地址 1 开始读取 5 个输入寄存器,并打印其值。

  7. 写入保持寄存器:向地址 1 写入多个寄存器值。

  8. 读取线圈状态:从地址 1 开始读取 5 个线圈状态,并打印其值。

  9. 写入线圈状态:向地址 1 写入多个线圈状态值。

运行代码:

确保服务端已经启动并在监听,然后运行客户端代码。客户端将连接到服务端,读取和写入寄存器和线圈,并打印结果。

通过这个示例,您可以看到如何使用 NModbus4 库在 C# 中实现一个基本的 Modbus TCP 客户端。您可以根据实际需求进行扩展和修改,例如处理更多的寄存器和线圈,增加错误处理等。

  • 17
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
c# modbus tcp服务端是指使用c#语言编写的一个modbus tcp协议的服务端程序。通过该程序,可以实现modbus tcp客户端进行通信,实现数据的读取和写入。一些资源中提供了c# modbus tcp服务端的源代码,可以作为参考使用。根据引用和引用的描述,这些资源中包含了各种基本以及有难度的代码,涵盖了modbus tcp/rtu和tcp等不同协议的实现。此外,还有modbus的类库和仿真软件可供使用。如果需要,可以下载并学习这些资源,以便更好地理解和使用c# modbus tcp服务端。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [modbus tcp/rtu客户端服务端通讯程序合集(C#、c++、mfc)](https://download.csdn.net/download/moumourenaini/11873226)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 33.333333333333336%"] - *2* [C# NModbus TCP 主从站通信样例](https://blog.csdn.net/iml6yu/article/details/127846177)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 33.333333333333336%"] - *3* [C#编成Modbus TCP连接各种PLC读取写入寄存器源码](https://download.csdn.net/download/ksthen/74944387)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 33.333333333333336%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值