Использую пример на базе этой библиотеки:
http://www.codeproject.com/Tips/16260/Modbus-TCP-class
ПЛК110-32. Конфиг такой:
Код, осуществляющий подключение:
Код:
public void connect(string ip, ushort port)
{
try
{
IPAddress _ip;
if (IPAddress.TryParse(ip, out _ip) == false)
{
IPHostEntry hst = Dns.GetHostEntry(ip);
ip = hst.AddressList[0].ToString();
}
// ----------------------------------------------------------------
// Connect asynchronous client
tcpAsyCl = new Socket(IPAddress.Parse(ip).AddressFamily, SocketType.Stream, ProtocolType.Tcp);
tcpAsyCl.Connect(new IPEndPoint(IPAddress.Parse(ip), port));
tcpAsyCl.SetSocketOption(SocketOptionLevel.Socket, SocketOptionName.SendTimeout, _timeout);
tcpAsyCl.SetSocketOption(SocketOptionLevel.Socket, SocketOptionName.ReceiveTimeout, _timeout);
tcpAsyCl.SetSocketOption(SocketOptionLevel.Socket, SocketOptionName.NoDelay, 1);
// ----------------------------------------------------------------
// Connect synchronous client
tcpSynCl = new Socket(IPAddress.Parse(ip).AddressFamily, SocketType.Stream, ProtocolType.Tcp);
tcpSynCl.Connect(new IPEndPoint(IPAddress.Parse(ip), port));
tcpSynCl.SetSocketOption(SocketOptionLevel.Socket, SocketOptionName.SendTimeout, _timeout);
tcpSynCl.SetSocketOption(SocketOptionLevel.Socket, SocketOptionName.ReceiveTimeout, _timeout);
tcpSynCl.SetSocketOption(SocketOptionLevel.Socket, SocketOptionName.NoDelay, 1);
_connected = true;
}
catch (System.IO.IOException error)
{
_connected = false;
throw (error);
}
}
ip == "192.168.0.101"
port == 502
_timeout == 500
при исполнении выскакивает исключение на попытке установить синхронное соединение. Тут:
Код:
tcpSynCl = new Socket(IPAddress.Parse(ip).AddressFamily, SocketType.Stream, ProtocolType.Tcp);
Предупреждая дополнительные распросы, контролер сконфигурирован правильно. По указанному ip пингуется, TCP-подключение из CDS устанавливается, видимых причин для неправильной работы нет.
Вопрос: В чем может быть причина? В реализации библиотеки? Или в самом контролере?