I have a I/O remote device (EIP-2017) with 8 analog inputs and it implements EtherNet/IP protocol for reading I/O values. I found on codeplex (https://eipnet.codeplex.com/) a library written in .net c# but it does not have documentation or example how to use it.
So, this is the target (I/O remote device) documentation:
We suggest users using Implicit Message communicate with EIP-2000. Implicit Messages are applied only for accessing the Input Instance 65 hex (101) and Output Instance 66 (102) of the Assembly Object in the object model. Before using Implicit Messages, you must use the Forward Open service with correct “Instance ID” and “Data length” settings of the Connection Manager Object to build a connection between the EtherNet/IP scanner and the EIP-2000. Afterwards, the Implicit Message can be used. The “Instance ID” of EIP-2000 modules are shown below, but the “Data length” is different from modules.
This device has the following,
Input (T->O) Instance ID: 0x65, Length: 53 bytes
Out (O->T) Instance ID: 0x66, Length: 22 bytes
Configuration Instance ID: 0x64, Length: 0 bytes
And I wrote these lines of code:
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());
}
I'm registering the session and then open connection with Forward Open command and then...nothing...
Are you connected to a PLC/CompactLogix or any kind of device connected via Ethernet/IP? Also, Implicit Messaging (UDP) should only be used for critical tasks. If you are only reading registers from a data table in a device, you should use Explicit Messaging (TCP/IP).