c# - C#处理EASYMODBUS时Socket是否连接
问题描述
我正在使用“EasyModBus”与 BUS 系统进行通信。如果连接丢失或出现故障,我需要用户立即知道。另一个问题是,如果我断开网络连接,软件将由于下面提到的行上的未连接套接字而挂起:
ushort[] inputs = master1.ReadHoldingRegisters(startAddress, numInputs);
我测试了下面列出的几种方法:
- 如果(tcpClient.Connected)
- if(tcpClient.Available!=0) 以及 socket.Poll
- Ping 和检查状态
结果: Ping 没问题,但我必须将阅读时间间隔从 1000 毫秒更改为至少 2500 毫秒。然后,如果我断开套接字,我会得到异常。但我需要每 1000 毫秒读取一次脉冲。
这里有同样的问题:EasyModbus: disconnecting from network doesn't change the connection state
正如我所提到的,我尝试了 tcpclient.Available 但它不起作用。
我的代码:
private NetWork _NetWork = null;
bool PingSlave(IPAddress slaveIPB)
{
PingReply reply = _NetWork.SendPing(slaveIPB,2500);
if (reply.Status == IPStatus.Success)
return true;
else return false;
}
void Master1_Slave1_Read()
{
try
{
ipAddressTCP1 = tBxIPAdrs.Text.ToString();
tcpClient1 = new TcpClient();
tcpClient1.Connect(ipAddressTCP1, ipPortTCP1);
master1 = ModbusIpMaster.CreateIp(tcpClient1);
ushort startAddress = 0;
ushort numInputs = 10;
if (PingSlave(ipS) == true)
{
ushort[] inputs = master1.ReadHoldingRegisters(startAddress, numInputs);
for (int i = 0; i < numInputs; i++)
{
if (inputs != null)
rTBx0_IOMF.AppendText(inputs[i].ToString() + "\t");
}
rTBx0_IOMF.AppendText("\n");
}
else
rTBx1_IOMF.AppendText("\n" + "Warning:\t\t Check Your Connection!" + "\t\t" + DateTime.Now.ToString("dd-mm-yyyy:HH:mm:ss") + "\n");
}
catch (EasyModbus.Exceptions.ConnectionException ex)
{
rTBx0_IOMF.AppendText(ex.Message.ToString() + "\n");
}
catch (SocketException ex)
{
rTBx0_IOMF.AppendText(ex.Message.ToString() + "\n");
}
}
private void t0_Tick(object sender, EventArgs e)
{
Master1_Slave1_Read();
}
任何帮助表示赞赏。
解决方案
推荐阅读
- c++ - 如何从 EnumChildWindow 获取 Window Rectangle 列表并存储它们?
- lua - 如何在 LUA 中为 Logitech 鼠标按钮编程切换宏
- opencv - CUDA:程序启动时GPU很慢(需要更多时间)是否正常?
- php - 当我为 laravel 版本 7.3.0 安装 laravel/ui 时出现错误
- angular - Angular Google Drive Api Response 400 登录
- r - R Shiny:如何创建一个空的可编辑表以允许用户输入并绘制更新的散点图?
- python - 按字符长度从txt文件中的列表中提取随机单词
- regex - 从正则表达式中2个字符串之间的字符串中提取子字符串
- javascript - 单击当前页面中的某个按钮时如何在另一个html页面中请求某些api
- c++ - 我的代码 (C++) 在 IDE 中工作,但在hackerrank 中不工作