c# Modbus TCP
时间: 2024-02-05 12:05:10 浏览: 28
C# 中可以使用 Modbus TCP 协议来进行设备通信。以下是一个简单的示例代码,演示如何使用 C# 进行 Modbus TCP 通信:
```csharp
using System;
using System.Net.Sockets;
namespace ModbusTCP
{
class Program
{
static void Main(string[] args)
{
// 连接 Modbus TCP 服务器
TcpClient client = new TcpClient();
client.Connect("192.168.1.1", 502); // 替换为实际的服务器 IP 和端口号
// 创建 Modbus TCP 请求帧
byte[] requestFrame = new byte[12];
requestFrame[0] = 0x01; // 事务标识符高字节
requestFrame[1] = 0x00; // 事务标识符低字节
requestFrame[2] = 0x00; // 协议标识符高字节
requestFrame[3] = 0x00; // 协议标识符低字节
requestFrame[4] = 0x00; // 长度高字节
requestFrame[5] = 0x06; // 长度低字节
requestFrame[6] = 0x01; // 单元标识符
requestFrame[7] = 0x03; // 功能码
requestFrame[8] = 0x00; // 起始地址高字节
requestFrame[9] = 0x00; // 起始地址低字节
requestFrame[10] = 0x00; // 寄存器数量高字节
requestFrame[11] = 0x01; // 寄存器数量低字节
// 发送 Modbus TCP 请求帧
NetworkStream stream = client.GetStream();
stream.Write(requestFrame, 0, requestFrame.Length);
// 接收 Modbus TCP 响应帧
byte[] responseFrame = new byte[1024];
int bytesRead = stream.Read(responseFrame, 0, responseFrame.Length);
// 处理 Modbus TCP 响应帧
byte[] responseData = new byte[bytesRead - 9];
Array.Copy(responseFrame, 9, responseData, 0, responseData.Length);
ushort registerValue = BitConverter.ToUInt16(responseData, 0);
// 输出寄存器值
Console.WriteLine("Register Value: {0}", registerValue);
// 关闭连接
client.Close();
}
}
}
```
此示例代码演示了如何连接到 Modbus TCP 服务器,并发送一个读取单个寄存器的请求。在实际应用中,您需要根据设备的 Modbus 寄存器映射表编写自己的请求帧。