帮我用C#写一个modbusRtuOverTCP 服务器
时间: 2024-04-10 09:34:01 浏览: 15
当然可以!以下是一个使用C#编写的Modbus RTU over TCP服务器的示例代码:
```csharp
using System;
using System.IO.Ports;
using System.Net;
using System.Net.Sockets;
namespace ModbusServer
{
class Program
{
static void Main(string[] args)
{
// 设置Modbus服务器的IP地址和端口号
IPAddress ipAddress = IPAddress.Parse("127.0.0.1");
int port = 502;
// 创建TCP监听器
TcpListener listener = new TcpListener(ipAddress, port);
listener.Start();
Console.WriteLine("Modbus server started.");
while (true)
{
// 接受客户端连接
TcpClient client = listener.AcceptTcpClient();
Console.WriteLine("Client connected.");
// 处理客户端请求
HandleClient(client);
}
}
static void HandleClient(TcpClient client)
{
// 设置Modbus串口参数
SerialPort serialPort = new SerialPort("COM1", 9600, Parity.None, 8, StopBits.One);
// 打开Modbus串口
serialPort.Open();
Console.WriteLine("Serial port opened.");
// 获取网络流和串口流
NetworkStream networkStream = client.GetStream();
SerialPortStream serialPortStream = new SerialPortStream(serialPort);
while (true)
{
try
{
// 从网络流中读取Modbus请求
byte[] request = new byte[256];
int bytesRead = networkStream.Read(request, 0, request.Length);
// 将Modbus请求发送到串口
serialPortStream.Write(request, 0, bytesRead);
// 从串口读取Modbus响应
byte[] response = new byte[256];
int bytesWritten = serialPortStream.Read(response, 0, response.Length);
// 将Modbus响应发送回客户端
networkStream.Write(response, 0, bytesWritten);
}
catch (Exception ex)
{
Console.WriteLine("Error: " + ex.Message);
break;
}
}
// 关闭网络流和串口
networkStream.Close();
serialPortStream.Close();
client.Close();
Console.WriteLine("Client disconnected.");
}
}
}
```
请注意,此代码仅为示例,需要根据实际情况进行修改和完善。