EtherNet/IP (промышленный протокол) Библиотека .NET

У меня есть удаленное устройство ввода-вывода (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, а затем... ничего...


person serban.b    schedule 02.03.2016    source источник
comment
если кому-то нужно что-то подобное, это библиотека здесь: eipnet.codeplex.com   -  person serban.b    schedule 05.03.2016
comment
а все остальное написано здесь read.pudn.com/ downloads166/ebook/763212/EIP-CIP-V2-1.0.pdf и здесь odva.org/Portals/0/Library/Publications_Numbered/   -  person serban.b    schedule 05.03.2016
comment
См. вопрос: stackoverflow.com/questions/ 31461069/   -  person JPelletier    schedule 20.06.2016
comment
@serban.b тебе удалось заставить его работать? не могли бы вы связаться со мной через miscelaneo на Gmail точка com?   -  person impoetk    schedule 10.08.2016


Ответы (2)


Подключены ли вы к ПЛК/CompactLogix или любому устройству, подключенному через Ethernet/IP? Кроме того, неявный обмен сообщениями (UDP) следует использовать только для критических задач. Если вы только читаете регистры из таблицы данных на устройстве, вам следует использовать явный обмен сообщениями (TCP/IP).

person Jarvis    schedule 24.05.2016

Существует также инструмент и библиотека для тестирования EtherNet/IP от немецкой компании Hilscher, которые можно найти здесь: https://kb.hilscher.com/pages/viewpage.action?pageId=97444743

Изменить Кажется, в наши дни существует множество библиотек. Вот еще один, который также активно поддерживается: http://eeip-library.de/

По сути, для класса CIP 0/1 вы должны открыть сеанс инкапсуляции, отправить ForwardOpen, а затем устройство должно начать отправлять вам UDP-кадры входных данных, а вы должны начать отправлять выходные данные на устройство. Это могут быть многоадресные транспорты. Трассировка Wireshark была бы полезна, чтобы понять, что происходит.

person Marc Bommert    schedule 11.06.2020