当前位置:首页 » 《关于电脑》 » 正文

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

8 人参与  2024年09月13日 17:21  分类 : 《关于电脑》  评论

点击全文阅读


以下是一个使用 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;    }}

 

代码解释:

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

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

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

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

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

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

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

运行代码:

确保在运行代码之前,您已经安装了 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.");        }    }}

 

代码解释:

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

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

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

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

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

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

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

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

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

运行代码:

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

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


点击全文阅读


本文链接:http://zhangshiyu.com/post/159448.html

<< 上一篇 下一篇 >>

  • 评论(0)
  • 赞助本站

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

最新文章

  • 深情为祭,爱成虚影必读文(谢芸芸谢凡锃)
  • [和四个兽人试婚后,拒绝我99次的他悔疯了]小说精彩节选免费试读_鹿砚卿朋友黑蛇删减内容修复版本
  • 该死的药,该死的人独家章节限时试读_「苏珊林轩顾行」完本
  • 完结文出国五年归来后,我为被拍卖小视频的妹妹点天灯列表_完结文出国五年归来后,我为被拍卖小视频的妹妹点天灯(陆昀昭沈晓雪)
  • 杜伟的发现祠堂的秘密后,全村无一活口书荒冯若琳杜伟全书在线
  • 川隐逢归客人气列表_川隐逢归客人气(顾临川沈霜音)
  • 攻略失败后,我一心求死章节彩蛋限时释出‌_林兆川顾雪爸爸妈妈全文免费无弹窗阅读_笔趣阁
  • 无端却被春风误免费赏析(孟南汐宋祁钰)_无端却被春风误免费赏析孟南汐宋祁钰
  • 岁岁不渡春风谢列表_岁岁不渡春风谢(季华厉朝圣宗)
  • [妻子出去旅游,在大山里失联了]无弹窗阅读_[赵颖孟志泽云云]节选角色羁绊特辑‌
  • 女儿死后,爸妈为我老公和凶手举办婚礼全书+后续+结局(周明昊)列表_女儿死后,爸妈为我老公和凶手举办婚礼全书+后续+结局(周明昊)女儿死后,爸妈为我老公和凶手举办婚礼全书+后续+结局在线
  • 全文老公为佛女的狗点天灯后,我死遁离开全书在线(江梵音桃星)列表_全文老公为佛女的狗点天灯后,我死遁离开全书在线

    关于我们 | 我要投稿 | 免责申明

    Copyright © 2020-2022 ZhangShiYu.com Rights Reserved.豫ICP备2022013469号-1