问题描述
PC和NCU之间进行通信,采用SCANET模块进行连接,使用OPENS7通信协议。
在使用Socket类编写上位机程序,发生错误的程序段如下:
Client.BeginConnect(scanetEP, AsyncConnectCallback, Client);
private void ConnectCallback(IAsyncResult ar)
{
try
{
IsConnectionSuccessful = false;
Socket client = (Socket)ar.AsyncState;
if (client != null)
{
client.EndConnect(ar);
IsConnectionSuccessful = true;
}
}
catch (Exception ex)
{
IsConnectionSuccessful = false;
MessageBox.Show(ex.Message);
}
finally
{
TimeoutObject.Set();
}
}
当语句执行到:
client.EndConnect(ar);
发生错误,catch 捕捉到错误,弹框显示:
原因
使用命令提示符 ping 一下 ip 地址,发现错误所在:PC和SCANET模块所在的网段出现了问题。
本人这里误将PC和SCANET的 ip 设置相同了,导致Socket无法连接到SCANET端。
下图是ping失败的截图:
解决方法
修改PC端本地连接的 ip 地址,设置在同一网段,而不是相同。
SCANET模块的 ip 地址相对固定,为192.168.1.190,设置PC端的 ip 地址为192.168.1.191 后,再次运行程序,完成通信的连接。