4

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

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

我们建议使用隐式消息的用户与 EIP-2000 通信。隐式消息仅适用于访问对象模型中装配对象的输入实例 65 hex (101) 和输出实例 66 (102)。在使用隐式消息之前,您必须使用连接管理器对象的正确“实例 ID”和“数据长度”设置的 Forward Open 服务来建立 EtherNet/IP 扫描仪和 EIP-2000 之间的连接。之后,可以使用隐式消息。EIP-2000 模块的“Instance 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());
}

我正在注册会话,然后使用 Forward Open 命令打开连接,然后......什么都没有......

4

2 回答 2

1

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

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

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

于 2020-06-11T15:26:33.293 回答
1

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

于 2016-05-24T16:53:33.607 回答