当前位置:   article > 正文

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

c# modbus tcp

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

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

Install-Package NModbus4

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

  1. using System;
  2. using System.Net;
  3. using System.Net.Sockets;
  4. using System.Threading.Tasks;
  5. using NModbus;
  6. using NModbus.Logging;
  7. using NModbus.Tcp;
  8. class Program
  9. {
  10. static async Task Main(string[] args)
  11. {
  12. // 设置服务端监听的IP地址和端口
  13. IPAddress address = new IPAddress(new byte[] { 127, 0, 0, 1 });
  14. int port = 502;
  15. // 创建TcpListener
  16. TcpListener listener = new TcpListener(address, port);
  17. listener.Start();
  18. Console.WriteLine($"Modbus TCP Server is listening on {address}:{port}");
  19. // 创建Modbus工厂
  20. var factory = new ModbusFactory(new ConsoleModbusLogger(LoggingLevel.Info));
  21. // 创建Modbus TCP Slave
  22. var network = factory.CreateSlaveNetwork(listener);
  23. var slave = factory.CreateSlave(1);
  24. // 添加从站到网络
  25. network.AddSlave(slave);
  26. // 初始化寄存器值
  27. slave.DataStore.HoldingRegisters[1] = 123;
  28. slave.DataStore.InputRegisters[1] = 456;
  29. slave.DataStore.CoilDiscretes[1] = true;
  30. slave.DataStore.InputDiscretes[1] = false;
  31. // 启动Modbus服务端
  32. var slaveNetworkTask = network.ListenAsync();
  33. Console.WriteLine("Press any key to stop the server...");
  34. Console.ReadKey();
  35. // 停止服务端
  36. network.Stop();
  37. // 确保服务端任务完成
  38. await slaveNetworkTask;
  39. }
  40. }

 

代码解释:

  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 客户端:

  1. using System;
  2. using System.Net.Sockets;
  3. using NModbus;
  4. using NModbus.Logging;
  5. using NModbus.Tcp;
  6. class Program
  7. {
  8. static void Main(string[] args)
  9. {
  10. // 设置服务端的IP地址和端口
  11. string ipAddress = "127.0.0.1";
  12. int port = 502;
  13. // 创建TCP客户端
  14. using (TcpClient client = new TcpClient(ipAddress, port))
  15. {
  16. // 创建Modbus工厂
  17. var factory = new ModbusFactory(new ConsoleModbusLogger(LoggingLevel.Info));
  18. // 创建Modbus TCP Master
  19. var master = factory.CreateMaster(client);
  20. // 读取保持寄存器
  21. ushort startAddress = 1;
  22. ushort numRegisters = 5;
  23. ushort[] holdingRegisters = master.ReadHoldingRegisters(1, startAddress, numRegisters);
  24. Console.WriteLine("Holding Registers:");
  25. for (int i = 0; i < holdingRegisters.Length; i++)
  26. {
  27. Console.WriteLine($"Register {startAddress + i}: {holdingRegisters[i]}");
  28. }
  29. // 读取输入寄存器
  30. ushort[] inputRegisters = master.ReadInputRegisters(1, startAddress, numRegisters);
  31. Console.WriteLine("Input Registers:");
  32. for (int i = 0; i < inputRegisters.Length; i++)
  33. {
  34. Console.WriteLine($"Register {startAddress + i}: {inputRegisters[i]}");
  35. }
  36. // 写入保持寄存器
  37. ushort writeAddress = 1;
  38. ushort[] writeValues = new ushort[] { 10, 20, 30, 40, 50 };
  39. master.WriteMultipleRegisters(1, writeAddress, writeValues);
  40. Console.WriteLine("Written values to Holding Registers.");
  41. // 读取线圈状态
  42. bool[] coils = master.ReadCoils(1, startAddress, numRegisters);
  43. Console.WriteLine("Coils:");
  44. for (int i = 0; i < coils.Length; i++)
  45. {
  46. Console.WriteLine($"Coil {startAddress + i}: {coils[i]}");
  47. }
  48. // 写入线圈状态
  49. bool[] writeCoilValues = new bool[] { true, false, true, false, true };
  50. master.WriteMultipleCoils(1, writeAddress, writeCoilValues);
  51. Console.WriteLine("Written values to Coils.");
  52. }
  53. }
  54. }

 

代码解释:

  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 客户端。您可以根据实际需求进行扩展和修改,例如处理更多的寄存器和线圈,增加错误处理等。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/从前慢现在也慢/article/detail/886193
推荐阅读
相关标签
  

闽ICP备14008679号