Length is only limited to 505 whereas i am having assemblies with bigger size
Closed this issue · 19 comments
Hello,
I am using the EEIP.dll for the communication between my PC and a controller. I have multiple assemblies and for one assembly the size is within 505 so no issues. But for another assembly i have O->T size "885" and T->O size as "1052". So in such case the connection is never established. In the wireshark i see wrong siz. The size appearing in wireshark is "375" and "30".
Please help me solving the issue.
Hi,
could you provide an example (Device and datasheet) which supports assembly sizes > 512?
Thanks a lot!
Hello,
Thank you for your reply.
We have a custom HMI controller which accepts large assemblies. Sorry but it is restricted to share the device info.
In my case, we have one controller talks to the HMI controller via CIP. And in case the source controller is not ready then i need to simulate my laptop as the source controller and set the outputs.
So between these 2 controllers we have 2 assemblies: one with Normal forward open and one with Large forward open. So using your DLL i am able get the proper response from the HMI for the normal forward open request from my laptop. But for the Large Foward open request, when i set the length, in wireshark i cannot see my length instead i see some random length hence the handshake is not establishing.
So is it possible to have a look on the issue modify your DLL to support large forward open.
Regards,
Somanath
Okay,
the DLL currently doesn't support large forward open. With Forward open the assembly size is limited to 512.
I could modify the DLL to support large forward open, but I don't have a device which supports large forward open. I would probably have to rely on your response.
Thanks for your swift reply.
Yes sure. I can do tests as soon as you share the DLL and update you with the wireshark captures.
Okay, I updated the DLL (Folder V1.5 Alpha). Just give it a try
The Method to use is "LargeForwardOpen()"
Hi,
I am not getting the DLL. Can you please let me know where you place exactly? In Sourceforge?
yes i got it. Thanks. I will try and update you.
Now it is showing unknown service and connection failure still.
I am downloading the latest wireshark file to check the packets. I think old wireshark does not recognize Large forward open service.
Hi,
I analyzed the wireshark and found that in the large forward open request the T-->O length is 30 whereas i am setting it to 1052. so including header in the wireshark it should appear as 1054.
The length is correct for O-->T which is 887(885+2(header).
Can you please advice.
EEIPClient eeipClient = new EEIPClient();
eeipClient.IPAddress = "172.16.13.49";
// eeipClient.TCPPort = 80;
//A Session has to be registered before any communication can be established
eeipClient.RegisterSession();
//Parameters from Originator -> Target
eeipClient.O_T_InstanceID = 0x65; //Instance ID of the Output Assembly
eeipClient.O_T_Length = 396;
eeipClient.O_T_RealTimeFormat = Sres.Net.EEIP.RealTimeFormat.Modeless; //Header Format
eeipClient.O_T_OwnerRedundant = false;
eeipClient.O_T_Priority = Sres.Net.EEIP.Priority.Low;
eeipClient.O_T_VariableLength = false;
eeipClient.O_T_ConnectionType = Sres.Net.EEIP.ConnectionType.Point_to_Point;
eeipClient.RequestedPacketRate_O_T = 50000; //RPI in 500ms is the Standard value
//Parameters from Target -> Originator
eeipClient.T_O_InstanceID = 0x66;
eeipClient.T_O_Length = 73;
eeipClient.T_O_RealTimeFormat = Sres.Net.EEIP.RealTimeFormat.Modeless;
eeipClient.T_O_OwnerRedundant = false;
eeipClient.T_O_Priority = Sres.Net.EEIP.Priority.Scheduled;
eeipClient.T_O_VariableLength = false;
eeipClient.T_O_ConnectionType = Sres.Net.EEIP.ConnectionType.Point_to_Point;
eeipClient.RequestedPacketRate_T_O = 50000; //RPI in 500ms is the Standard value
//Forward open initiates the Implicit Messaging
eeipClient.ForwardOpen();
eeipClient.O_T_InstanceID = 0x67; //Instance ID of the Output Assembly
eeipClient.O_T_Length = 885;
eeipClient.RequestedPacketRate_O_T = 1000000; //RPI in 500ms is the Standard value
eeipClient.O_T_RealTimeFormat = Sres.Net.EEIP.RealTimeFormat.Modeless; //Header Format
eeipClient.O_T_OwnerRedundant = false;
eeipClient.O_T_Priority = Sres.Net.EEIP.Priority.Low;
eeipClient.O_T_VariableLength = false;
eeipClient.O_T_ConnectionType = Sres.Net.EEIP.ConnectionType.Point_to_Point;
//Parameters from Target -> Originator
eeipClient.T_O_InstanceID = 0x72;
eeipClient.T_O_Length = 1052;
eeipClient.RequestedPacketRate_T_O = 1000000; //RPI in 500ms is the Standard value
eeipClient.T_O_RealTimeFormat = Sres.Net.EEIP.RealTimeFormat.Modeless;
eeipClient.T_O_OwnerRedundant = false;
eeipClient.T_O_Priority = Sres.Net.EEIP.Priority.Scheduled;
eeipClient.T_O_VariableLength = false;
eeipClient.T_O_ConnectionType = Sres.Net.EEIP.ConnectionType.Point_to_Point;
//Forward open initiates the Implicit Messaging
eeipClient.LargeForwardOpen();
earlier with the old DLL length for both 0-->T and T-->O was appearing wrong in Wireshark. Now only for T-->O the length is appearing wrong. So some improvements.
Sorry for a period of silence, I stuck in some other work.
I updated the DLL at Sourceforge, could you try again? (Would be perfect if you could first try only the Large forward opne and uncomment the forward open)
Yes i will try it on monday and update you the result. I need your support for another feature in your DLL. As of now with this DLL i can request for Forward open to a target. Is it possible to respond to a forward open request from a target.
For ex: A target requests forward open to my laptop and my laptop should be able to respond to the forward open request using your DLL methods in order to start the ENIP exchanges.
This is to simulate a target.
Can you please check the feasibility.
Regards,
Somanath
i checked and now the large forward open is working without any issue. But there are few other issues:
- the target to originator data is always 0 however the originator to target data is reaching successfully to the target.
- The size of the raw data buffer for both T==>O and O==>T is always 505 instead of the actual size of the assemblies.
Can you please have a look on the above issue.
Also as i asked in my previous update, is it possible to respond to a forward open request from a target using your DLL?
Regards,
Somanath
I extended to Buffer now, hopefully it makes sense now
Closed due to inactivity