RE: Ethernet/IP to Profinet

Nolan,

We purchased the X-gateway as discussed below and I am in the process of testing its capability. I am unclear how to access, explicitly, custom classes in my EIP Adapter product through the gateway based on the examples and documentation I’ve seen so far. Here are the details of the object I’m trying to access. Can you point me in the right direction for how to get this working?

/~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~/
/
Job Class (Custom Class 0x64) Instance Data /
/
/
/
NOTE: Vendor Specific Class ID range: /
/
0x64-0xC7 & 0x300-0x4FF /
/
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~/
CLASS ATTRIBUTES
- (01) Revision
- uint16_t
- revision of the object
- (02) Max Instance
- uint16_t
- largest instance # of a created object of this class
- (03) Number of Instances
- uint16_t
- # of object instances of the class
- (06) Maximum Class Attribute
- uint16_t
- Largest Class attribute ID
- (07) Maximum Instance Attributes
- uint16_t
- ID of largest Instance attribute

INSTANCE ATTRIBUTES
- (01) Job ID
       - uint32_t
       - Job Identifier
- (02) JobIsCurrent
       - boolean
       - flag indicating Job is current
- (03) JobIsValid
       - boolean
       - flag indicating Job is valid
- (04) Job Version
       - uint32_t
       - Version of the Job file currently in use
- (05) Job Name
       - String (SHORT_STRING)*
       - Human readable name of the Job (MAX 255 8-bit characters)

INSTANCE SERVICES SUPPORTED
- (01) GET_ATTR_ALL
  - Returns all Instance Attributes in order as an array of bytes, each in
    little-endian format.  Length variable depending on size of Job Name.
- (0E) GET_ATTR_SINGLE
  - Returns the selected attribute

CLASS SERVICES SUPPORTED
- (01) GET_ATTR_ALL
  - Returns all Class Attributes in order as an array of bytes, each in
    little-endian format.  10 bytes total.
- (0E) GET_ATTR_SINGLE
  - Returns the selected attribute
- (4B) Execute Job (Object Class Specific range: 0x4B-0x63)
  - Argument: Job ID (32-bit)
  - Begins execution of the system executing the provided Job ID

Regards,
David

Hello David,

If you are using the X-Gateway with the Ethernet/IP scanner I am not sure if this is possible and will need to do some research. The X-gateway EIP scanner is designed to create a class 1 or 3 connection to IO devices. We have details on these connection in section 6.7 of the User guide.

Where you are trying to access a custom object I do not think it fall under a assembly instance. I will need to look into this an verify it with a colleague.

Talking with Nolan, it looks like you are using a compactcom and creating a custom object. What I am thinking is you might be able to just use the General IO data rather then a custom object. I don’t work with the Compactcom myself but I should be able to talk to a colleague about this tomorrow and get you more details.

Deryck

Thank you. I look forward to your research whether or not we can access custom objects.

Regards,

Hi David,

Thank you for your patience with this issue my colleague who is assisting me with this has been traveling the last few day. We might not get a chance to fully review this until Monday.

Regards,
Deryck

Understood, thank you for the update. Have a nice weekend.

Hi David,

My colleague was able to send me an email with some info on this but I think we need to better understand what data you are trying to access. Where this is communication to a compactcom are you trying to access an ADI (Application Data Instance) that you created with an element in the ABCC’s SDK’s “APPL_asAdiEntryList” structure? If you did you should have two options to access this data. Here is an explanation from my colleague for the two options. I am following up with him to discuss how we could turn this around to read the data with the EIP scanner.

== Class 3 connection ==

What they want to check on is:

/*
** Attribute 30: ABCC ADI Object number (UINT16 - 0x0064-0x00C7, 0x0300-0x04FF)
*/
#ifndef EIP_IA_ABCC_ADI_OBJECT_ENABLE
#define EIP_IA_ABCC_ADI_OBJECT_ENABLE FALSE
#define EIP_IA_ABCC_ADI_OBJECT_VALUE 0x00A2
#endif

If EIP_IA_ABCC_ADI_OBJECT_ENABLE is FALSE then the ABCC uses the default value of 0x00A2 for the ADI class object. In their explicit message (Class 3 connection) they can read the “instance” (the ADI instance value they specified in the “APPL_asAdiEntryList” structure entry that they created) along with this 0xA2 class object value and the appropriate “attribute” to read the value or whatever other information they wish to access. Below shows the attributes that each ADI has that can be requested (this is from the ABCC EIP network guide).

image

== Class 1 Connection ==
To access this ADI via a Class 1 connection they must map the ADI to the default mapping (or if they have more complex requirements they can add support for the “assembly mapping object”, though they should not go down this path if they don’t have to as it adds more complexity). To add an ADI to the default mapping, in the ABCC SDK, they need to look at “APPL_asAdObjDefaultMap”. An example of this as can be found in many of the example ADI mappings that are included in the SDK is shown below:

/*------------------------------------------------------------------------------
** Map all adi:s in both directions
**------------------------------------------------------------------------------
** 1. AD instance | 2. Direction | 3. Num elements | 4. Start index |
**------------------------------------------------------------------------------
*/
const AD_MapType APPL_asAdObjDefaultMap[] =
{
{ 1, PD_WRITE, AD_MAP_ALL_ELEM, 0 },
{ 2, PD_READ, AD_MAP_ALL_ELEM, 0 },
{ AD_MAP_END_ENTRY }
};

They should keep in mind that “PD_WRITE” direction is input data (data that the device will write to the assembly data on the EIP network). PD_READ is the other direction. “Start index” is only if you have a structured or array ADI and you want to select a specific element within that ADI to map (in this case the “number of elements” to map should also be adjusted).

It’s been a while since I messed with the driver, but my initial memory reaction is that this data is not accessed through an ADI. Only the implicit IO data is configured with ADIs. The processing of explicit data objects is done in my software by passing the object to populate the data in to my application. The following snippet is from the eip.c file in the driver y’all provide where I send on the psNewMessage (which is an ABP_MsgType pointer) to my application to load up and return with the appropriate data. So it sounds like there is no way to access custom classes explicitly (not using Class 1 or Class 3) but through an explicit UCMM (I think it’s called) request?

Regards,

David

Hi David,

This is starting to become a little clearer to us with what you are doing. Where this is a custom class, as you mentioned, it is not accessible via the ADI’s. One option might be to copy the data over to the ADI and make it accessible via the assemblies. Where it seems like you were just looking for an easy whay to access this data would that be feasible?

Deryck

Topic closed due to inactivity.