У меня есть удаленное устройство ввода-вывода (EIP-2017) с 8 аналоговыми входами, которое реализует протокол EtherNet/IP для чтения значений ввода-вывода. Я нашел на codeplex (https://eipnet.codeplex.com/) библиотеку, написанную на .net c# но у него нет документации или примера того, как его использовать.
Итак, это документация по целевому устройству (удаленному устройству ввода/вывода):
Мы предлагаем пользователям, использующим неявные сообщения, общаться с EIP-2000. Неявные сообщения применяются только для доступа к входному экземпляру 65 hex (101) и выходному экземпляру 66 (102) объекта сборки в объектной модели. Прежде чем использовать неявные сообщения, вы должны использовать службу Forward Open с правильными настройками «Идентификатор экземпляра» и «Длина данных» объекта диспетчера соединений, чтобы установить соединение между сканером EtherNet/IP и EIP-2000. После этого можно использовать неявное сообщение. «Идентификатор экземпляра» модулей EIP-2000 показан ниже, но «Длина данных» отличается от модулей.
Это устройство имеет следующее:
Входной (T->O) Идентификатор экземпляра: 0x65, Длина: 53 байта Исходящий (O->T) Идентификатор экземпляра: 0x66, Длина: 22 байта Идентификатор экземпляра конфигурации: 0x64, Длина: 0 байты
И я написал эти строки кода:
static void Main(string[] args)
{
byte[] sc = new byte[8] { 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08 };
byte[] path = new byte[] { 0x20, 0x04, 0x24, 0x64, 0x2C, 0x66, 0x2C, 0x65 };
SessionInfo si = SessionManager.CreateAndRegister("192.168.2.227", senderContext: sc);
si.SetConnectionParameters(101, 3000, 101, 803, 888);
EIPNET.ConnectionManager.ForwardOpen(si, path);
bool CIPok = EIPNET.EIP.SessionManager.VerifyCIP(si);
EIPNET.EIP.EncapsPacket p = new EncapsPacket();
p.Command = (ushort)EncapsCommand.ListIdentity;
p.SessionHandle = si.SessionHandle;
p.SenderContext = sc;
p.Length = 0;
//p.EncapsData = new byte[53];
byte[] rec = si.SendData_WaitReply(p.Pack());
}
Я регистрирую сеанс, а затем открываю соединение с командой Forward Open, а затем... ничего...