问题描述
这是使用Modbus / tcp Nmodbus4的客户端的类。 在调用SendSingleInt方法的循环中,我关闭了服务器,我的应用程序崩溃,因为我无法检查连接是否存在。怎么处理?此外,客户端类位于类库中,并且不会对主程序引发异常。
public class ModbusTCPClient
{
private string ipAddress;
private int tcpPort;
public TcpClient tcpClient;
private ModbusIpMaster clpMaster;
public ModbusTCPClient(string ip,int port)
{
ipAddress = ip;
tcpPort = port; // 502
tcpClient = new TcpClient();
try
{
tcpClient.BeginConnect(ipAddress,tcpPort,null,null);
// Create modbus master device on the tcp client
clpMaster = ModbusIpMaster.CreateIp(tcpClient);
//TryConnect();
}
catch (Exception err)
{
throw; //new Exception($"Não foi possível conectar o protocolo modbus no servidor {ip}.\r\n{err}");
}
}
public void SendSingleInt(int intValue,byte deviceAddress = 1,byte valuePosition = 0)
{
if(clpMaster != null)
{
clpMaster.WriteSingleRegister(deviceAddress,valuePosition,Convert.ToUInt16(intValue));
}
}
解决方法
据我了解,您可以添加以下代码:
master.Transport.Retries = 1000;
master.Transport.ReadTimeout = 1000;
master.Transport.WriteTimeout = 1000;
serialPort.ReadTimeout
serialPort.WriteTimeout
,
在发布此问题之前,我尝试过使用try / catch,但这是行不通的; 后来我意识到我正在捕获InvalidOperationExceptions并从类中抛出一个新的Exception()! '¬¬