• modbusTCP【C#,socket】


    1. 下面是一个使用C#中的Socket对象来实现Modbus TCP通信的简单库:
    2. csharp
    3. using System;
    4. using System.Net;
    5. using System.Net.Sockets;
    6. public class ModbusTcpClient
    7. {
    8. private const int DefaultPort = 502;
    9. private const int DefaultTimeout = 5000; // 5 seconds
    10. private Socket _socket;
    11. public void Connect(string ipAddress, int port = DefaultPort)
    12. {
    13. _socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
    14. _socket.ReceiveTimeout = DefaultTimeout;
    15. _socket.Connect(IPAddress.Parse(ipAddress), port);
    16. }
    17. public void Disconnect()
    18. {
    19. _socket?.Close();
    20. _socket = null;
    21. }
    22. public byte[] ReadHoldingRegisters(byte slaveId, ushort startAddress, ushort numberOfRegisters)
    23. {
    24. var request = new byte[]
    25. {
    26. slaveId,
    27. 0x03, // Function code for Read Holding Registers
    28. (byte)(startAddress >> 8), // Start address high byte
    29. (byte)(startAddress & 0xFF), // Start address low byte
    30. (byte)(numberOfRegisters >> 8), // Number of registers high byte
    31. (byte)(numberOfRegisters & 0xFF) // Number of registers low byte
    32. };
    33. return SendModbusRequest(request);
    34. }
    35. public byte[] WriteSingleRegister(byte slaveId, ushort address, ushort value)
    36. {
    37. var request = new byte[]
    38. {
    39. slaveId,
    40. 0x06, // Function code for Write Single Register
    41. (byte)(address >> 8), // Address high byte
    42. (byte)(address & 0xFF), // Address low byte
    43. (byte)(value >> 8), // Value high byte
    44. (byte)(value & 0xFF) // Value low byte
    45. };
    46. return SendModbusRequest(request);
    47. }
    48. private byte[] SendModbusRequest(byte[] request)
    49. {
    50. _socket.Send(request);
    51. var response = new byte[1024];
    52. int bytesRead = _socket.Receive(response);
    53. var modbusResponse = new byte[bytesRead];
    54. Array.Copy(response, modbusResponse, bytesRead);
    55. return modbusResponse;
    56. }
    57. }
    58. 使用示例:
    59. csharp
    60. var modbusClient = new ModbusTcpClient();
    61. modbusClient.Connect("192.168.0.100");
    62. var slaveId = 1;
    63. var startAddress = 0;
    64. var numberOfRegisters = 10;
    65. var response = modbusClient.ReadHoldingRegisters(slaveId, startAddress, numberOfRegisters);
    66. if (response != null)
    67. {
    68. Console.WriteLine("Read Holding Registers Response: " + BitConverter.ToString(response));
    69. }
    70. else
    71. {
    72. Console.WriteLine("Failed to read holding registers.");
    73. }
    74. var address = 0;
    75. var value = 123;
    76. response = modbusClient.WriteSingleRegister(slaveId, address, value);
    77. if (response != null)
    78. {
    79. Console.WriteLine("Write Single Register Response: " + BitConverter.ToString(response));
    80. }
    81. else
    82. {
    83. Console.WriteLine("Failed to write single register.");
    84. }
    85. modbusClient.Disconnect();
    86. 请注意,上述示例仅演示了如何使用Socket对象进行基本的Modbus TCP通信,实际情况下,您需要根据您的Modbus设备和通信规范来编写相应的代码。此外,还需要根据Modbus协议规范处理不同功能码的请求和响应。

  • 相关阅读:
    详解操作系统的运行机制
    力扣崩溃题:链表相加
    爬虫(1) - 爬虫基础入门理论篇
    选择排序的3种语言实现方法(C java python)
    SpringMVC(四万五字超详细笔记)
    你绝对没想到的GPT的底层意义
    element ui修改select选择框背景色和边框色
    Decorators与类
    Coremail受邀参加中非数字能力建设合作论坛
    10月13日丨第十六届智慧城市大会《实景三维技术创新与应用》论坛日程抢先看!
  • 原文地址:https://blog.csdn.net/cfqq1989/article/details/134080837