Ethernet/IP compatible library for .NET implementations Supports IO Scanner and Explicit Message Client functionality For Data Exchange with Ethernet/IP Devices
- Support of Explicit Messaging and Implicit Messaging
- Object Library with CIP-Definined Objects
- Provides a simple way to access Ethernet/IP Devices without special knowledge about Ethernet/IP
usingSystem;usingSystem.Collections.Generic;usingSystem.Linq;usingSystem.Text;usingSystem.Threading.Tasks;usingSres.Net.EEIP;namespaceExplicit_Messaging_Example{classProgram{staticvoidMain(string[]args){EEIPClienteeipClient=newEEIPClient();//Register Session (Wago-Device 750-352 IP-Address: 192.168.178.66)//we use the Standard Port for Ethernet/IP TCP-connections 0xAF12eeipClient.RegisterSession("192.168.178.66");//We write an Output to the Wago-Device; According to the Manual of the Device//Instance 0x66 of the Assembly Object contains the Digital Output data//The Documentation can be found at: http://www.wago.de/download.esm?file=%5Cdownload%5C00368362_0.pdf&name=m07500352_xxxxxxxx_0en.pdf//We set the first output "High"eeipClient.AssemblyObject.setInstance(0x66,newbyte[]{0x01});System.Threading.Thread.Sleep(1000);//We set the secoond output "High"eeipClient.AssemblyObject.setInstance(0x66,newbyte[]{0x02});System.Threading.Thread.Sleep(1000);//We set the secoond output "High"eeipClient.AssemblyObject.setInstance(0x66,newbyte[]{0x03});System.Threading.Thread.Sleep(1000);//We reset the outputseeipClient.AssemblyObject.setInstance(0x66,newbyte[]{0x00});//When done, we unregister the sessioneeipClient.UnRegisterSession();}}}usingSystem;usingSystem.Collections.Generic;usingSystem.Linq;usingSystem.Text;usingSystem.Threading.Tasks;usingSres.Net.EEIP;namespaceExplicit_Message_Example2{classProgram{staticvoidMain(string[]args){EEIPClienteeipClient=newEEIPClient();//Register Session (Wago-Device 750-352 IP-Address: 192.168.178.66)//we use the Standard Port for Ethernet/IP TCP-connections 0xAF12eeipClient.RegisterSession("192.168.178.66");//Get the State of a digital Input According to the Manual//Instance 0x6C of the Assembly Object contains the Digital Input data//The Documentation can be found at: http://www.wago.de/download.esm?file=%5Cdownload%5C00368362_0.pdf&name=m07500352_xxxxxxxx_0en.pdfbyte[]digitalInputs=eeipClient.AssemblyObject.getInstance(0x6c);Console.WriteLine("State of Digital Input 1: "+(EEIPClient.ToBool(digitalInputs[0],0)));Console.WriteLine("State of Digital Input 2: "+(EEIPClient.ToBool(digitalInputs[0],1)));Console.WriteLine("State of Digital Input 3: "+(EEIPClient.ToBool(digitalInputs[0],2)));Console.WriteLine("State of Digital Input 4: "+(EEIPClient.ToBool(digitalInputs[0],3)));//When done, we unregister the sessioneeipClient.UnRegisterSession();Console.ReadKey();}}}usingSystem;usingSystem.Collections.Generic;usingSystem.Linq;usingSystem.Text;usingSystem.Threading.Tasks;usingSres.Net.EEIP;namespaceExplicit_Message_Example_ReadAnalogInput{classProgram{staticvoidMain(string[]args){EEIPClienteeipClient=newEEIPClient();//Register Session (Wago-Device 750-352 IP-Address: 192.168.178.66)//we use the Standard Port for Ethernet/IP TCP-connections 0xAF12eeipClient.RegisterSession("192.168.178.66");//Get the State of Analog Inputs According to the Manual//Instance 0x6D of the Assembly Object contains the Analog Input data//The Documentation can be found at: http://www.wago.de/download.esm?file=%5Cdownload%5C00368362_0.pdf&name=m07500352_xxxxxxxx_0en.pdf//Page 202 shows the documentation for instance 6D hexbyte[]analogInputs=eeipClient.AssemblyObject.getInstance(0x6D);Console.WriteLine("Temperature of Analog Input 1: "+(EEIPClient.ToUshort(newbyte[]{analogInputs[0],analogInputs[1]})/10.0)+"°C");Console.WriteLine("Temperature of Analog Input 2: "+(EEIPClient.ToUshort(newbyte[]{analogInputs[2],analogInputs[3]})/10.0)+"°C");//When done, we unregister the sessioneeipClient.UnRegisterSession();Console.ReadKey();}}}usingSystem;usingSystem.Collections.Generic;usingSystem.Linq;usingSystem.Text;usingSystem.Threading.Tasks;usingSres.Net.EEIP;namespaceConsoleApplication1{classProgram{staticvoidMain(string[]args){EEIPClienteeipClient=newEEIPClient();eeipClient.IPAddress="192.168.0.123";eeipClient.RegisterSession();byte[]response=eeipClient.GetAttributeSingle(0x66,1,0x325);Console.WriteLine("Current Value Sensor 1: "+(response[1]*255+response[0]).ToString());response=eeipClient.GetAttributeSingle(0x66,2,0x325);Console.WriteLine("Current Value Sensor 2: "+(response[1]*255+response[0]).ToString());Console.WriteLine();Console.Write("Enter intensity for Sensor 1 [1..100]");intvalue=int.Parse(Console.ReadLine());Console.WriteLine("Set Light intensity Sensor 1 to "+value+"%");eeipClient.SetAttributeSingle(0x66,1,0x389,newbyte[]{(byte)value,0});Console.Write("Enter intensity for Sensor 2 [1..100]");value=int.Parse(Console.ReadLine());Console.WriteLine("Set Light intensity Sensor 2 to "+value+"%");eeipClient.SetAttributeSingle(0x66,2,0x389,newbyte[]{(byte)value,0});Console.WriteLine();Console.WriteLine("Read Values from device to approve the value");response=eeipClient.GetAttributeSingle(0x66,1,0x389);Console.WriteLine("Current light Intensity Sensor 1 in %: "+(response[1]*255+response[0]).ToString());response=eeipClient.GetAttributeSingle(0x66,2,0x389);Console.WriteLine("Current light Intensity Sensor 2 in %: "+(response[1]*255+response[0]).ToString());eeipClient.UnRegisterSession();Console.ReadKey();}}}usingSystem;usingSystem.Collections.Generic;usingSystem.Linq;usingSystem.Text;usingSystem.Threading.Tasks;namespaceDescoverDevices{classProgram{staticvoidMain(string[]args){Sres.Net.EEIP.EEIPClienteipClient=newSres.Net.EEIP.EEIPClient();List<Sres.Net.EEIP.Encapsulation.CIPIdentityItem>cipIdentityItem=eipClient.ListIdentity();for(inti=0;i<cipIdentityItem.Count;i++){Console.WriteLine("Ethernet/IP Device Found:");Console.WriteLine(cipIdentityItem[i].ProductName1);Console.WriteLine("IP-Address: "+Sres.Net.EEIP.Encapsulation.CIPIdentityItem.getIPAddress(cipIdentityItem[i].SocketAddress.SIN_Address));Console.WriteLine("Port: "+cipIdentityItem[i].SocketAddress.SIN_port);Console.WriteLine("Vendor ID: "+cipIdentityItem[i].VendorID1);Console.WriteLine("Product-code: "+cipIdentityItem[i].ProductCode1);Console.WriteLine("Type-Code: "+cipIdentityItem[i].ItemTypeCode);}}}}usingSystem;usingSres.Net.EEIP;//The Following Hardware Configuration is used in this example// Allen-Bradley 1734-AENT Ethernet/IP Coupler// Allen-Bradley 1734-IB4 4-Channel Digital Input Module// Allen-Bradley 1734-IB4 4-Channel Digital Input Module// Allen-Bradley 1734-IB4 4-Channel Digital Input Module// Allen-Bradley 1734-IB4 4-Channel Digital Input Module// Allen-Bradley 1734-OB4E 4-Channel Digital Output Module// Allen-Bradley 1734-OB4E 4-Channel Digital Output Module// Allen-Bradley 1734-OB4E 4-Channel Digital Output Module// Allen-Bradley 1734-OB4E 4-Channel Digital Output Module//IP-Address: 192.168.178.107 (By DHCP-Server)namespaceAllenBradleyPointIO{classProgram{staticvoidMain(string[]args){EEIPClienteeipClient=newEEIPClient();//Ip-Address of the Ethernet-IP Device (In this case Allen-Bradley 1734-AENT Point I/O)eeipClient.IPAddress="192.168.178.107";//A Session has to be registered before any communication can be establishedeeipClient.RegisterSession();//Parameters from Originator -> TargeteeipClient.O_T_InstanceID=0x64;//Instance ID of the Output AssemblyeeipClient.O_T_Length=4;//The Method "Detect_O_T_Length" detect the Length using an UCMM MessageeeipClient.O_T_RealTimeFormat=Sres.Net.EEIP.RealTimeFormat.Header32Bit;//Header FormateeipClient.O_T_OwnerRedundant=false;eeipClient.O_T_Priority=Sres.Net.EEIP.Priority.Scheduled;eeipClient.O_T_VariableLength=false;eeipClient.O_T_ConnectionType=Sres.Net.EEIP.ConnectionType.Point_to_Point;eeipClient.RequestedPacketRate_O_T=500000;//500ms is the Standard value//Parameters from Target -> OriginatoreeipClient.T_O_InstanceID=0x65;eeipClient.T_O_Length=16;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.Multicast;eeipClient.RequestedPacketRate_T_O=500000;//RPI in 500ms is the Standard value//Forward open initiates the Implicit MessagingeeipClient.ForwardOpen();while(true){//Read the Inputs Transfered form Target -> OriginatorConsole.WriteLine("State of first Input byte: "+eeipClient.T_O_IOData[8]);Console.WriteLine("State of second Input byte: "+eeipClient.T_O_IOData[9]);//write the Outputs Transfered form Originator -> TargeteeipClient.O_T_IOData[0]=(byte)(eeipClient.O_T_IOData[0]+1);eeipClient.O_T_IOData[1]=(byte)(eeipClient.O_T_IOData[1]-1);eeipClient.O_T_IOData[2]=1;eeipClient.O_T_IOData[3]=8;System.Threading.Thread.Sleep(500);}//Close the SessioneeipClient.ForwardClose();eeipClient.UnRegisterSession();}}}usingSystem;usingSres.Net.EEIP;//The Following Hardware Configuration is used in this example// Turck FEN20-4DIP-4DXP//Unisversal Digital Channels are used as Digital Outputs// Manual: http://pdb2.turck.de/repo/media/_en/Anlagen/Datei_EDB/edb_6931090_gbr_en.pdf//IP-Address: 192.168.1.254namespaceTurckFEN20{classProgram{staticvoidMain(string[]args){EEIPClienteeipClient=newEEIPClient();//Ip-Address of the Ethernet-IP Device (In this case Allen-Bradley 1734-AENT Point I/O)eeipClient.IPAddress="192.168.1.254";//A Session has to be registered before any communication can be establishedeeipClient.RegisterSession();//Parameters from Originator -> TargeteeipClient.O_T_InstanceID=0x68;//Instance ID of the Output AssemblyeeipClient.O_T_Length=4;//The Method "Detect_O_T_Length" detect the Length using an UCMM MessageeeipClient.O_T_RealTimeFormat=Sres.Net.EEIP.RealTimeFormat.Header32Bit;//Header FormateeipClient.O_T_OwnerRedundant=false;eeipClient.O_T_Priority=Sres.Net.EEIP.Priority.Scheduled;eeipClient.O_T_VariableLength=false;eeipClient.O_T_ConnectionType=Sres.Net.EEIP.ConnectionType.Point_to_Point;eeipClient.RequestedPacketRate_O_T=500000;//500ms is the Standard value//Parameters from Target -> OriginatoreeipClient.T_O_InstanceID=0x67;eeipClient.T_O_Length=8;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=500000;//RPI in 500ms is the Standard value//Forward open initiates the Implicit MessagingeeipClient.ForwardOpen();while(true){//Read the Inputs Transfered form Target -> OriginatorConsole.WriteLine("State of Input byte: "+eeipClient.T_O_IOData[2]);//write the Outputs Transfered form Originator -> TargeteeipClient.O_T_IOData[2]=0x0F;//Set all Four digital Inputs to HighSystem.Threading.Thread.Sleep(500);}//Close the SessioneeipClient.ForwardClose();eeipClient.UnRegisterSession();}}}usingSystem;usingSystem.Collections.Generic;usingSystem.Linq;usingSystem.Text;usingSystem.Threading.Tasks;usingSres.Net.EEIP;//This example demonstrates the usage of Implicit Messaging//whith an Keyence NU-EP1 Network Unit. This is an Input Only connection.//The two received bytes represents the output state of the sensors.//Keyence Users Manual Page 3-6 No. 3namespaceKeyence_NU_RP1_Implicit{classProgram{staticvoidMain(string[]args){EEIPClienteeipClient=newEEIPClient();//Ip-Address of the Ethernet-IP Device (In this case Keyence-NU-EP1)eeipClient.IPAddress="192.168.0.123";//A Session has to be registered before any communication can be establishedeeipClient.RegisterSession();//Parameters from Originator -> TargeteeipClient.O_T_InstanceID=0xfe;//Instance ID of the Output AssemblyeeipClient.O_T_Length=0;eeipClient.O_T_RealTimeFormat=Sres.Net.EEIP.RealTimeFormat.Header32Bit;//Header FormateeipClient.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=500000;//RPI in 500ms is the Standard value//Parameters from Target -> OriginatoreeipClient.T_O_InstanceID=0x66;eeipClient.T_O_Length=2;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.Multicast;eeipClient.RequestedPacketRate_T_O=500000;//RPI in 500ms is the Standard value//Forward open initiates the Implicit MessagingeeipClient.ForwardOpen();while(true){//Read the Inputs Transfered from Target -> OriginatorConsole.WriteLine("State of first Input byte: "+eeipClient.T_O_IOData[0]);Console.WriteLine("State of second Input byte: "+eeipClient.T_O_IOData[1]);System.Threading.Thread.Sleep(500);}//Close the SessioneeipClient.ForwardClose();eeipClient.UnRegisterSession();}}}- Explicit Messaging: Read Analog Inputs
- Explicit Messaging: Read Analog Inputs
- Explicit Messaging: Read Digital Inputs
- Allen Bradley Point IO Implicit Messaging
Sponsored by Rossman Engineering.