gpt4 book ai didi

c# - 一起编写 ModbusClient 和 ModbusServer 时出现问题

转载 作者:太空狗 更新时间:2023-10-29 21:48:21 25 4
gpt4 key购买 nike

关于准则

我在 C# 窗口窗体应用程序中使用 EasyModbus Nuget。我正在尝试使用 ModbusServer 通过 RTU(实时更新)获取更改后的保持寄存器的地址值。

下面的代码连接到服务器。

void Connect() {
ModbusClient client = null;
client = new ModbusClient("IP Address", 502);
client.Connect();
}

下面的代码获取在 Holding Register 下面给出的地址的值。

client.ReadHoldingRegisters(10001, 1);

到目前为止,一切正常。

我正在阅读有关阅读 EasyModbus 实时更新的内容。 <强> I found this link that can send the changed value of holding register automatically to the even handler.

现在,我有以下代码:

void Connect() {
ModbusServer ser = new ModbusServer();
ser.Port = Convert.ToInt32(Settings.Default.Port);
ser.Listen();
ser.HoldingRegistersChanged += Ser_HoldingRegistersChanged;

ModbusClient client = null;
client = new ModbusClient("IP Address", 502);
client.Connect();
}


private void Ser_HoldingRegistersChanged(int register, int numberOfRegisters)
{
}

当我运行它时,出现以下错误。

Only one usage of each socket address (protocol/network address/port) is normally permitted

发生此错误是因为我添加了 ModbusServer 代码。

你能解释一下为什么会这样吗?

最佳答案

你的问题没那么严重,主要问题在这一行

ser.Listen();

因为您之前的服务器套接字仍处于绑定(bind)

让我们看看监听套接字何时绑定(bind)?

明显的原因是当您的监听套接字发送/接收数据包时,但在极少数情况下,当操作系统不处于理想状态(100% cpu 使用率等)时,释放服务器套接字可能需要一分钟才能释放。在这种情况下,当您再次运行服务器时出现异常

Only one usage of each socket address (protocol/network address/port) is normally permitted

发生。因为,正如我之前所说,之前的服务器套接字尚未发布。

解决方案是

为不同的服务器套接字使用不同的端口

只使用一个只启动一次的服务器套接字,并检查它是否连接。

// create the socket
public static Socket listenSocket = new Socket(AddressFamily.InterNetwork,
SocketType.Stream,
ProtocolType.Tcp);

// bind the listening socket to the port
IPAddress hostIP = (Dns.Resolve(IPAddress.Any.ToString())).AddressList[0];
IPEndPoint ep = new IPEndPoint(hostIP, port);
if(!listenSocket.IsBound){
listenSocket.Bind(ep);
// start listening
listenSocket.Listen(backlog);
}
// connect client
ModbusClient client = null;
client = new ModbusClient(hostIP , port);
client.Connect();

关于c# - 一起编写 ModbusClient 和 ModbusServer 时出现问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57984190/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com