EtherNet/IP (Industrial Protocol) .NET Library

本文关键字:NET Library Protocol Industrial IP EtherNet | 更新日期: 2023-09-27 18:36:59

我有一个带有 8 个模拟输入的 I/O 远程设备 (EIP-2017),它实现了用于读取 I/O 值的 EtherNet/IP 协议。我在 codeplex (https://eipnet.codeplex.com/) 上发现了一个用 .net c# 编写的库,但它没有如何使用它的文档或示例。

因此,这是目标(I/O 远程设备)文档:

我们建议使用隐式消息的用户与 EIP-2000 通信。 隐式消息仅用于访问输入实例 65 程序集对象的十六进制 (101) 和输出实例 66 (102) 在 对象模型。在使用隐式消息之前,必须使用转发 使用正确的"实例 ID"和"数据长度"设置打开服务 连接管理器对象,用于在 以太网/IP 扫描器和 EIP-2000。之后,隐式消息 可以使用。EIP-2000 模块的"实例 ID"如下所示: 但"数据长度"与模块不同。

此设备具有以下功能,
输入 (T->O) 实例 ID:0x65,长度:53 字节输出 (O->T) 实例 ID:0x66,长度:22 字节配置实例 ID: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());
}

我正在注册会话,然后使用"转发打开"命令打开连接,然后...无。。。

EtherNet/IP (Industrial Protocol) .NET Library

您是否连接到 PLC/CompactLogix 或通过以太网/IP 连接的任何类型的设备?此外,隐式消息传递 (UDP) 应仅用于关键任务。如果仅从设备中的数据表中读取寄存器,则应使用显式消息传递 (TCP/IP)。

还有一个来自

德国公司Hilscher的EtherNet/IP测试工具和库,可以在这里找到 https://kb.hilscher.com/pages/viewpage.action?pageId=97444743:

编辑 这些天似乎有多个图书馆。这是另一个似乎也在积极维护的:http://eeip-library.de/

基本上,对于 CIP 类 0/1,您应该打开一个封装会话,发送 ForwardOpen,然后设备应该开始向您发送输入数据 UDP 帧,您应该开始将输出数据发送到设备。这些可能是多播传输。Wireshark的踪迹对于判断发生了什么很有用。