CompactCom B40 EtherCAT ESI Generator Error with Assembly Object

We are currently having issues with the ESI Generator when using the B40 EtherCAT brick. We are able to successfully create an ESI file when the Assembly Object (0xEB) is disabled, however for our implementation of the Ethernet/IP brick, we need the Assembly Object to be enabled. When attempting to generate the ESI file with the Assembly Object enabled, the generator produces the following error:

I have looked into the issue with Wireshark and found that the Sync Manager Rx PDO Assign object has a max sub-index of 0.

I believe the issue is that when the generator is trying to read sub-index 1, an error is being thrown because 1 is outside the maximum sub-index for the Sync Manager Rx PDO Assign object (which I believe is where the error is caused). Are there additional configurations that I need to do in order to successfully generate the ESI file or must the Assembly Object be disabled when using EtherCAT?

For context, we have successfully implemented Ethernet/IP with this same configuration with no issues.

Thank you in advance!

Hi @pdesai,

Can you tell me what version of the ESI generator are you using? I am thinking this could be a bug with the tool.

Deryck

Deryck,

Also just to note, we have developed our host application using the Starter Kit code from version 3.06.01. I am not sure if the new 3.7 version of the code would fix an issue like this.

Deryck,

I am using HMS EtherCAT ESI Generator Setup 1.8.0.0.

Is there a more recent version that I should be using? If so, could you attach the link please?

Thank you!

Hi @pdesai,

Version 1.8.0 is the latest version, there were several issues in version 1.7.1.1 that i was thinking this could have been. I don’t know of any issues in 1.8.
Would you be able to submit a case to mysupport.hms.se. This will allow us to more easily involve the development team for an issue like this.

Deryck

Deryck,

After messing around with the code for a bit, I think I found a possible workaround.

As I had mentioned previously, we need to have ASM_OBJ_ENABLE set to TRUE for our implementation of Ethernet/IP. In our code, we were using the APPL_asAdObjectDefaultMap variable to store our process data when we used Ethernet/IP. This subsequently meant that we were not using APPL_aasAsmInstances and defined it as empty.

So when the ESI generator was running, it saw that the APPL_aasAsmInstances had a size of zero so it was returning a maximum subindex of 0 for the Sync Manager Rx PDO assign, thus when trying to access subindex 1, it was out of range, which was causing the error above.

To work around this issue, we updated with the newest Starter Kit code and implemented APPL_aasAsmInstances. The ESI file generated properly and we were able to read and write the process data after this workaround was added.

When using EtherCAT, is it necessary then to utilize APPL_aasAsmInstances instead of, or in addition to, APPL_asAdObjectDefaultMap when the Assembly Object is also enabled? Is there a different fix that needs to be done to use the Assembly Object with EtherCAT?

Thank you.

Hello @pdesai,

The errors are most likely from not having any asm instances setup. I don’t think this is supported in EtherCAT. What is the reason you have it enabled to begin with without any?

You should be able to define instances to resolve this issue so the size is not zero. It looks like this is what you are already doing. Another option would be to disable the object for EtherCAT. This could be done at run time by modifying the ASM object to check the network type before reporting if it is supported or not.

Deryck

Deryck,

We originally did not have any asm instances because we misunderstood and thought that the APPL_asAdObjectDefaultMap would store the asm instances. Currently, we are setting up asm instances as you described, but may need to modify the assembly object at run time.

Thank you for your help. We have some additional testing to do still and appreciate you letting us know different options for solving this problem.

Great glad to hear!

I have a similar issue. I have no process data because I have no ADIs because my device is a bootloader. I want it to indicate no data. Is there a way I can configure the EtherCAT object to indicate 0 for the number of Rx PDOs and Tx PDOs?

Hello,
The RxPdos and TxPdos listed in the ESI file are optional (not required); so it should be possible to create a ESI file that does not list any PDOs. However, I haven’t tested the ESI file generator in the circumstance. Some manual editing might be necessary.

I don’t believe that it is common for EtherCAT devices to have a separate ESI defined for the bootloader state, and another for a non-bootloader state. For the purpose of firmware update and entering a bootloader, many EtherCAT devices define that firmware update process should be done in a state that is lower that Safe-OP so the PDOs are not used. This will allow the application to control state changes rather than what objects are mapped to PDOs.