用 C# 程序包 NModbus 写一个 modbus tcp server的例子并给地址1赋值
以下是使用C#程序包NModbus编写Modbus TCP Server的示例代码,并在地址1处赋值:
using System;
using System.Net;
using System.Net.Sockets;
using System.Threading;
using NModbus;
class Program
{
static void Main(string[] args)
{
// 创建Modbus TCP Server
TcpListener listener = new TcpListener(IPAddress.Any, 502);
listener.Start();
Console.WriteLine("Modbus TCP Server started...");
try
{
using (IModbusDataStore dataStore = DataStoreFactory.CreateDefaultDataStore())
using (ModbusTcpSlave slave = new ModbusTcpSlave(dataStore))
{
slave.ListenBacklog = 10;
slave.Start();
Console.WriteLine("Modbus TCP Slave started...");
// 设置地址1的值为100
dataStore.HoldingRegisters[0] = 100;
Console.WriteLine("Address 1 value set to 100");
while (true)
{
TcpClient client = listener.AcceptTcpClient();
Thread thread = new Thread(HandleClient);
thread.Start(client);
}
}
}
catch (Exception ex)
{
Console.WriteLine("Exception: " + ex.Message);
}
finally
{
listener.Stop();
}
}
static void HandleClient(object obj)
{
TcpClient client = (TcpClient)obj;
ModbusTcpSlave slave = null;
try
{
slave = new ModbusTcpSlave(new EmptyDataStore());
slave.ListenBacklog = 1;
slave.ModbusSlaveRequestReceived += Slave_ModbusSlaveRequestReceived;
slave.DataStore = DataStoreFactory.CreateDefaultDataStore();
slave.ModbusSlaveRequestReceived += Slave_ModbusSlaveRequestReceived;
slave.Listen(client.GetStream());
}
catch (Exception ex)
{
Console.WriteLine("Exception: " + ex.Message);
}
finally
{
if (slave != null)
{
slave.ModbusSlaveRequestReceived -= Slave_ModbusSlaveRequestReceived;
slave.Dispose();
}
client.Close();
}
}
static void Slave_ModbusSlaveRequestReceived(object sender, ModbusSlaveRequestEventArgs e)
{
Console.WriteLine("Modbus request received: " + e.Message.FunctionCode);
}
}
上述代码创建了一个Modbus TCP Server,监听端口502,并设置地址1的值为100。在HandleClient方法中,可以处理来自客户端的Modbus请求。在Slave_ModbusSlaveRequestReceived事件处理程序中,可以处理不同的Modbus功能码。
请注意,上述示例代码仅用于演示目的,并需要根据实际需求进行修改和完善
原文地址: https://www.cveoy.top/t/topic/hyA7 著作权归作者所有。请勿转载和采集!