我有一个带有 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 命令打开连接,然后......什么都没有......