Aller au contenu principal

Anybus, EthernetIP comunication with UR5 and ESAB W82

Commentaires

8 commentaires

  • Adewale Oriyomi Oseni

    Dear Albert,

    Good day.

    I am having a similar issue reading welding data via esab w82, have you been able to resolve yours and how did you fix the problems if yes?

    1
  • Franziska Gültig

    Hi Albert!

    It sounds like you're working on something that's beyond the scope of what we can directly support, but I’d still be happy to offer some guidance to point you in the right direction.

    If both of your devices are Ethernet/IP Adapters, you'll need an Ethernet/IP Scanner to retrieve data from them. Depending on what you're aiming to do, a PLC could be a good option—especially if you're looking to automate data exchange. Vendors like Allen Bradley (who originally developed Ethernet/IP) or any reliable PLC vendor that provides Ethernet/IP Scanners should be suitable for this.

    If your goal is simply to monitor the data for testing purposes, using an Ethernet/IP Simulator or test tool for your PC could be a more straightforward option. Pyramid Solutions, for instance, offers a tool called the EIP Scan Test Tool that’s user-friendly and might be worth considering.

    That said, if you're having trouble connecting to the welding machine using a standard Ethernet/IP Scanner, you'll need to contact the welding machine's support team. Even though they use HMS modules, they’ve integrated them with custom settings that we do not have access to, so this falls outside of what we can assist with. They are the best point of contact for resolving any connection issues.

    Lastly, if you're setting up something like a test stand and have a PC available—and you're comfortable programming—you might want to look into vendors that offer Ethernet/IP Stacks. These come with pre-built functions that handle the Ethernet/IP functionality, which could streamline your project. Pyramid Solutions might have something there aswell.

    I hope this helps! Let me know if you have any other questions or need further clarification.

    Best regards,
    Franziska Gültig

    0
  • ALK

    You might wanna also take a look at the open source project Ethernet/IP Explorer that could help you disclose the necessary packets (both through Wireshark sniffs and the source itself) to handle EtherNet/IP communication.  It depends on how exactly the welding and the ESAB machine's application data are set up.  Both EDS file might already give you some hints.

    In general, EtherNet/IP offers three basic ways for data exchange.

    Class 1 connection: a TCP connection over port 44818 has to be set up and a subsequent ForwardOpen request has to be sent and responded.  Then, I/O data is exchanged with minimal overhead over UDP port 2222.

    Class 3 connection: set up a TCP connection and poll the I/O data accessing the right path (address) given by the device manufacturer.

    UCMM (unconnected message manager) just poll the data without need for a prior TCP connection.

    Here's a KB article on the Ethernet Explorer.

    Hope that helps.

    0
  • Albert Olive

    Thank you for your response.

    As the robot SO is Polyscope linux based and is not a closed platform i can develop in java all the applications that are desired I will try to use an EthernetIP java lib. This one for the moment: https://github.com/digitalpetri/ethernet-ip 

    I will try to program a syncronous thread using the mapping provided by ESAB and polling the data continuosly. And try to "virtualize" a scanner in the robot side. After making this posible with a TCP/IP server i can comunicate the robot real-time with this java service in a easier way.

    If this is not posible then I will try to use the explicit metod and doing the CIP messages through the java application using the classes, interfaces, attributes and so on that is explained in the HMS doc that I'm using.

    Please let me know if the document is the correct one, for sure the hardware installed is correct but for my understanding the classes that i have to point are this ones.

     

     

    0
  • ALK

    Hi Albert,

    for an explicit message I/O data exchange, you'll need to use e.g. the get_attribute_single 0x0E or the set_attribute_single 0x10 services applied periodically to the Assembly Class 04, typically instance 0x64/0x96, attribute 03.

    I'm actually not sure about classes 0xB0 and 0xB1, as I'm no expert on the older Anybus-S interface cards.

    You definitely need to take a look at the manual or the EDS file of your decvices.

    0
  • Albert Olive

    Thank you ALK,

    The EDS file is this one, I'm struggling a bit understanding the file. I cannot put files attached so i copy/pasted the raw EDS directly.

    $ EZ-EDS Version 3.11 (Beta, March-29, 2012) Generated Electronic Data Sheet

    [File]
            DescText = "HMS Anybus-S EtherNet/IP(TM)";
            CreateDate = 01-08-2002;
            CreateTime = 07:02:13;
            ModDate = 02-11-2015;
            ModTime = 15:08:29;
            Revision = 2.07;


    [Device]
            VendCode = 90;
            VendName = "HMS Networks";
            ProdType = 12;
            ProdTypeStr = "Communications Adapter";
            ProdCode = 14;
            MajRev = 2;
            MinRev = 19;
            ProdName = "Anybus-S EtherNet/IP(TM)";
            Catalog = "ABS";


    [Device Classification]
            Class1 = EtherNetIP;


    [Params]
            Param1 =
                    0,                      $ first field shall equal 0
                    ,,                      $ path size,path
                    0x0000,                 $ descriptor
                    0xC7,                   $ data type : 16-bit Unsigned Integer
                    2,                      $ data size in bytes
                    "Output Size",          $ name
                    "",                     $ units
                    "",                     $ help string
                    0,504,16,               $ min, max, default data values
                    ,,,,                    $ mult, dev, base, offset scaling not used
                    ,,,,                    $ mult, dev, base, offset link not used
                    ;                       $ decimal places not used

            Param2 =
                    0,                      $ first field shall equal 0
                    ,,                      $ path size,path
                    0x0000,                 $ descriptor
                    0xC7,                   $ data type : 16-bit Unsigned Integer
                    2,                      $ data size in bytes
                    "Input Size",           $ name
                    "",                     $ units
                    "",                     $ help string
                    0,509,16,               $ min, max, default data values
                    ,,,,                    $ mult, dev, base, offset scaling not used
                    ,,,,                    $ mult, dev, base, offset link not used
                    ;                       $ decimal places not used

            Param3 =
                    0,                      $ reserved, shall equal 0
                    ,,                      $ Link Path Size, Link Path
                    0x0000,                 $ Descriptor
                    0xC8,                   $ Data Type
                    4,                      $ Data Size in bytes
                    "RPI Range",            $ name
                    "",                     $ units
                    "",                     $ help string
                    2000,3200000,10000,     $ min, max, default data values
                    ,,,,                    $ mult, div, base, offset scaling
                    ,,,,                    $ mult, div, base, offset links
                    ;                       $ decimal places


    [Assembly]
            Revision = 2;

            Assem100 =
                    "INPUT",
                    ,
                    509,
                    0x0000,
                    ,,
                    4072,;
            Assem150 =
                    "OUTPUT",
                    ,
                    504,
                    0x0001,
                    ,,
                    4032,;


    [Connection Manager]
            Connection1 =
                    0x04030002,             $ 0-15    = supported transport classes
                                            $ 16      = trigger: cyclic
                                            $ 17      = trigger: change of state4
                                            $ 18      = trigger: application
                                            $ 19-23   = trigger: reserved
                                            $ 24      = transport type: listen-only
                                            $ 25      = transport type: input-only
                                            $ 26      = transport type: exclusive-owner
                                            $ 27      = transport type: redundant-owner
                                            $ 28-30   = reserved
                                            $ 31      = Client = 0 / Server = 1
                    0x44640405,             $ 0       = O->T fixed size supported
                                            $ 1       = O->T variable size supported
                                            $ 2       = T->O fixed size supported
                                            $ 3       = T->O variable size supported
                                            $ 4-5     = O->T number of bytes per slot (obsolete)
                                            $ 6-7     = T->O number of bytes per slot (obsolete)
                                            $ 8-10    = O->T Real time transfer format
                                            $ 11      = reserved
                                            $ 12-14   = T->O Real time transfer format
                                            $ 15      = reserved
                                            $ 16      = O->T connection type: NULL
                                            $ 17      = O->T connection type: MULTICAST
                                            $ 18      = O->T connection type: POINT2POINT
                                            $ 19      = O->T connection type: reserved
                                            $ 20      = T->O connection type: NULL
                                            $ 21      = T->O connection type: MULTICAST
                                            $ 22      = T->O connection type: POINT2POINT
                                            $ 23      = T->O connection type: reserved
                                            $ 24      = O->T priority: LOW
                                            $ 25      = O->T priority: HIGH
                                            $ 26      = O->T priority: SCHEDULED
                                            $ 27      = O->T priority: reserved
                                            $ 28      = T->O priority: LOW
                                            $ 29      = T->O priority: HIGH
                                            $ 30      = T->O priority: SCHEDULED
                                            $ 31      = T->O priority: reserved
                    Param3,Param1,Assem150, $ O->T RPI, size, format
                    Param3,Param2,Assem100, $ T->O RPI, size, format
                    ,,                      $ config #1 size, format
                    ,,                      $ config #2 size, format
                    "Exclusive Owner",      $ Connection Name
                    "",                     $ help string
                    "20 04 24 C5 2C 96 2C 64";    $ Path
            Connection2 =
                    0x02030002,             $ 0-15    = supported transport classes
                                            $ 16      = trigger: cyclic
                                            $ 17      = trigger: change of state
                                            $ 18      = trigger: application
                                            $ 19-23   = trigger: reserved
                                            $ 24      = transport type: listen-only
                                            $ 25      = transport type: input-only
                                            $ 26      = transport type: exclusive-owner
                                            $ 27      = transport type: redundant-owner
                                            $ 28-30   = reserved
                                            $ 31      = Client = 0 / Server = 1
                    0x44640305,             $ 0       = O->T fixed size supported
                                            $ 1       = O->T variable size supported
                                            $ 2       = T->O fixed size supported
                                            $ 3       = T->O variable size supported
                                            $ 4-5     = O->T number of bytes per slot (obsolete)
                                            $ 6-7     = T->O number of bytes per slot (obsolete)
                                            $ 8-10    = O->T Real time transfer format
                                            $ 11      = reserved
                                            $ 12-14   = T->O Real time transfer format
                                            $ 15      = reserved
                                            $ 16      = O->T connection type: NULL
                                            $ 17      = O->T connection type: MULTICAST
                                            $ 18      = O->T connection type: POINT2POINT
                                            $ 19      = O->T connection type: reserved
                                            $ 20      = T->O connection type: NULL
                                            $ 21      = T->O connection type: MULTICAST
                                            $ 22      = T->O connection type: POINT2POINT
                                            $ 23      = T->O connection type: reserved
                                            $ 24      = O->T priority: LOW
                                            $ 25      = O->T priority: HIGH
                                            $ 26      = O->T priority: SCHEDULED
                                            $ 27      = O->T priority: reserved
                                            $ 28      = T->O priority: LOW
                                            $ 29      = T->O priority: HIGH
                                            $ 30      = T->O priority: SCHEDULED
                                            $ 31      = T->O priority: reserved
                    Param3,0,,              $ O->T RPI, size, format
                    Param3,Param2,Assem100, $ T->O RPI, size, format
                    ,,                      $ config #1 size, format
                    ,,                      $ config #2 size, format
                    "Input Only",           $ Connection Name
                    "",                     $ help string
                    "20 04 24 C5 2C C6 2C 64";    $ Path
            Connection3 =
                    0x01030002,             $ 0-15    = supported transport classes
                                            $ 16      = trigger: cyclic
                                            $ 17      = trigger: change of state
                                            $ 18      = trigger: application
                                            $ 19-23   = trigger: reserved
                                            $ 24      = transport type: listen-only
                                            $ 25      = transport type: input-only
                                            $ 26      = transport type: exclusive-owner
                                            $ 27      = transport type: redundant-owner
                                            $ 28-30   = reserved
                                            $ 31      = Client = 0 / Server = 1
                    0x44240305,             $ 0       = O->T fixed size supported
                                            $ 1       = O->T variable size supported
                                            $ 2       = T->O fixed size supported
                                            $ 3       = T->O variable size supported
                                            $ 4-5     = O->T number of bytes per slot (obsolete)
                                            $ 6-7     = T->O number of bytes per slot (obsolete)
                                            $ 8-10    = O->T Real time transfer format
                                            $ 11      = reserved
                                            $ 12-14   = T->O Real time transfer format
                                            $ 15      = reserved
                                            $ 16      = O->T connection type: NULL
                                            $ 17      = O->T connection type: MULTICAST
                                            $ 18      = O->T connection type: POINT2POINT
                                            $ 19      = O->T connection type: reserved
                                            $ 20      = T->O connection type: NULL
                                            $ 21      = T->O connection type: MULTICAST
                                            $ 22      = T->O connection type: POINT2POINT
                                            $ 23      = T->O connection type: reserved
                                            $ 24      = O->T priority: LOW
                                            $ 25      = O->T priority: HIGH
                                            $ 26      = O->T priority: SCHEDULED
                                            $ 27      = O->T priority: reserved
                                            $ 28      = T->O priority: LOW
                                            $ 29      = T->O priority: HIGH
                                            $ 30      = T->O priority: SCHEDULED
                                            $ 31      = T->O priority: reserved
                    Param3,0,,              $ O->T RPI, size, format
                    Param3,Param2,Assem100, $ T->O RPI, size, format
                    ,,                      $ config #1 size, format
                    ,,                      $ config #2 size, format
                    "Listen Only",          $ Connection Name
                    "",                     $ help string
                    "20 04 24 C5 2C C7 2C 64";    $ Path


    [Port]
            Port1 =
                    TCP,                    $ port type name
                    "TCP/IP",               $ name of port
                    "20 F5 24 01",          $ instance one of the TCP/IP interface object
                    2;                      $ port number


    [Capacity]
            MaxCIPConnections = 63;         $ Max CIP cnx - all classes
            TSpec1 = TxRx, 1, 2000;         $ Packets per sec @ 1 bytes
            TSpec2 = TxRx, 504, 2000;       $ Packets per sec @ 504 bytes

     

     

    0
  • ALK

    Hello Albert,

    in the [Connection Manager] section, there is the "Exclusive Owner" connection with this path:

    "20 04 24 C5 2C 96 2C 64"

    wherein the 96 and 64 stand for the instance numbers (in hex) of the assembly object 04 just as I assumed in my last post.  The C5 is the configuration instance number.

    If I were you, I'd give it a spin in the EtherNet/IP emulator Ethernet/IP Explorer following the video of the KB article that I mentioned.  Just follow along with the above values.

    0
  • Albert Olive

    Hello ALK,

    Yes, yesterday i took a look into the simulation software and was very helpfull! I could stablish the comunication with the anybus adapter and could read all the values and work with an implicit comunication.

    Im a bit stucked developing the java application for the implicit comunication, i already downloaded and installed a java library and i trying to implement it in my app.

    As you pointed before i should do:

    "Class 1 connection: a TCP connection over port 44818 has to be set up and a subsequent ForwardOpen request has to be sent and responded.  Then, I/O data is exchanged with minimal overhead over UDP port 2222."

    With my limited knowledge I understand that i have to:

    TCP/IP connection to port 44818 (this already works) --> Make a "ForwardOpen" through this connection --> Then the implicit comunication is started (on port 2222) --> And i should have a function to read/write the data accordingly to my needs.

    I will keep you updated on this topic. If there is an example even in other language it could be usefull to me.

    Thank you for your time! Have a nice day.

    0

Vous devez vous connecter pour laisser un commentaire.