EasyModbus:与网络断开连接不会改变连接状态

问题描述 投票:0回答:2

在 C# 应用程序中,我使用 EasyModbus 连接到远程服务器:

ModbusClient client = new ModbusClient()
{
    IPAddress = "192.168.1.100",
    Port = 502,
    ConnectionTimeout = 200
}

try
{
    client.Connect();
}
catch (EasyModbus.Exceptions.ConnectionException)
{
    throw;
}
catch (System.Net.Sockets.SocketException)
{
    throw;
}

然后在我的应用程序的其他部分,我尝试仅在客户端仍然连接时读/写:

if (client.Connected)
{
    try
    {
        int[] readHoldingRegisters = client.ReadHoldingRegisters(1000, 10);
        // do something
    }
    catch (Exception)
    {
        throw;
    }
}

如果在应用程序运行时我断开笔记本电脑与 WiFi 网络的连接,即使过了很长一段时间,

Connected
属性仍然是
true
。当我尝试读取寄存器时,出现“超出范围”异常,但我想知道为什么该属性没有立即变为
false
。至少,当我尝试读/写某些内容时,我会期望出现“超时”异常。

是否有更好的方法来知道服务器不再可达?

c# exception network-programming modbus-tcp
2个回答
1
投票

如果服务器只是简单地断开连接而没有关闭连接,实际上是不可能检测到连接丢失的。那么

Connected
属性仍然是
true

也许

Available
方法会有所帮助。该方法只是轮询服务器是否仍然存在。


0
投票

我知道已经过去很长时间了,但我最近遇到了同样的问题,并且

Available()
也返回 true,因为服务器可以访问,但 Modbus 服务器无法工作。如果是这种情况,您可以通过在 catch 语句上调用
Disconnect()
方法来修复它

© www.soinside.com 2019 - 2024. All rights reserved.