INpact EPL Slave - Update Object Dictionary/XDD File


I see in the documentation that it’s possible to dynamically generate an XDD file. However, I need to modify quite a bit of the device’s object dictionary, and it might be easiest to change the file itself.

Does there exist a utility or a code sample to send the XDD configuration file to the card? Is it possible to read/write the object dictionary directly through the Anybus/ABCC API?


I am attempting to read the file system object (0x0A) since I read that there’s an XDD directory, but GetAttribute() always fails when attempting to read the instance attributes for the type, size, and path.

The application file system object (0xEA) always returns 0 for the number of instances, highest instance number, and max instance.

Any ideas with how to get these working?

Unfortunately, using FTP is not really an option due to how the Powerlink network is currently configured.

Sorry for inundating–mostly doing troubleshooting and trying to make my way through the API. I see where I have to create an object instance, and then use this to perform file/directory reading. Is it safe to assume that there will be an “Application” and “XDD” directories available for reading?

Here’s the response I got for your questions:

for question 1:
It is not possible to transfer a XDD-file to the module.
The module generates the XDD file internally based on the Host-Implementation.
The generated file can be read from the device’s object dictionary afterwards (index 0x1021).
As this record is pretty large, most masters cannot directly read it.
HMS offers a “XDD Uploader” that can be used to read the XDD from the device.
This tool requires the device to be connected point-to-point
with the Ethernet interface of the PC which runs the tool.
In addition, all services on the network card should be disabled
as the upload will break is unexpected packages are seen
(to avoid disturbances in running Powerlink networks).
The file cannot be written by the host application.

for question 2:
Before accessing an instance of the Anybus File System Interface Object,
it has to be created by sending the Create-command to the Object.
This newly created Instance can then be used as handle
to access the File System using the commands described in our Software design guide.
Examples on how to access files and directories of the file system within the module
are shown in the software design guide,
as the behavior is the same for the different networks.
The Examples can be found on the last pages
of the chapter describing the Anybus File System Interface Object
(In Version 4.0 of the software design guide it is chapter 12.7 and the examples start on page 94).

Thanks Kyle! Since I can’t write the XDD file within the application, it looks like I’ll need to update the object dictionary. E.g., I need to enable multiplexing and set a few corresponding values.

Are there any samples of how to read from/write to the Powerlink object dictionary with the IDL API? I’m attempting to read the application data object name (0xFE, instance 0, attribute 1) but see an object not registered error. Not sure if this is where the dictionary resides. However, in application setup there is a remap command on this object that executes successfully (RemapProcessDataCommand()). I have an understanding of what indexes/subindexes need to be changed based on the Powerlink config, but I’m not sure how to change them within my application.


Objects in the IDL communication model come in two flavours.
There are Anybus objects and there are host objects.
Anybus objects reside in the Anybus module and the application may issue commands.
Host objects reside in the host application (your code) and the Anybus module will issue commands.
The application data object (FE) is a host object.
Thus it represents data contained in the application.
The Anybus module does not know about this specific object.

The XDD upload via FTP does unfortunately not work with the current firmware.
The XDD uploader on the home page is the only way to get an XDD of the actual POWERLINK object dictionary.
There is no straight way to read or modify the POWERLINK object dictonary.
There is a default structure for the object dictionary,
which can be modified by using various APIs of the Anybus module.

Could you please describe us, which changes you would like to archive?
The API provides some options in this area. A general example would be too complicated.

Here are some example objects I need to update within the object dictionary in order to properly integrate with the MN:
Object 1F98h: NMT_CycleTiming_REC

  • Subindex 3 = PResMaxLatency_U32 => set to 10000
  • Subindex 6 = ASndMaxLatency_U32 => set to 25000
  • Subindex 7 = MultiplCycleCnt_U8 => set to 4 (enable multiplexing)
  • Subindex 8 = AsyncMTU_U16 => set to 1500

Object 1F81h: NMT_NodeAssignment_AU32

  • Subindex 1 = NMT_NodeAssignment_AU32 => set to 0x80000207
  • Subindex 240 = NMT_NodeAssignment_AU32 => set to 0x80001001

Object 1F8Dh: NMT_PResPayloadLimitList_AU16

  • Subindex 1 = NMT_PResPayloadLimitList_AU16 => set to 1400
  • Subindex 240 = NMT_PResPayloadLimitList_AU16 => set to 200

These are all listed in the CompactCom Powerlink manual (27-219), but it’s not clear from the document or the sample code with how to access the values.

Could you send any samples of how to modify the object dictionary using the Anybus APIs?


I was able to access the Anybus file system via the application, but attempting to open the “application” folder results in an error. It doesn’t appear that this can be accessed via the application.

What’s the best route for updating the object dictionary for configuring the Powerlink CN?

I"m sorry I’m on the road today, but this doc should help explain the file system interface objects:

NP40_Powerlink_Filesystem_V1.0.pdf (259.6 KB)

Thanks Kyle. Unfortunately, the MN I am integrating with does not appear to set those values, so the INpact might not provide a solution for us.

I attempted to set up some ADIs, and mapped one for read and one for write. However, I am not seeing any data being output (using Wireshark) or being read. Is it possible for the INpact to receive a PRes from the MN as process data?