Mdp.xml topology scan only detects up to 8 modules

Hi community,

Our Mdp.xml topology scan only returns a maximum of 8 IO modules (until slot number 8) even if there are more than 8 modules connected to the IO coupler.

We’ve tried with different IO couplers (Weidmuller UR20-FBC-EC - 10 modules and Omron NX-ECC201 - 15 modules) and the topology always only returns up to 8 IO modules even though the IO couplers have more than 8 modules configured

To further my understanding, may I know on the following:

  1. How does the Mdp.xml topology scan works? (I know the <Location> section is for RapidSetup to search/retrieve for Mdp information)
  2. Does the default value for “depth”, “primary” and “secondary” in <Location> <Scan> section play a role in only 8 modules detected?

As the default value of 8 in “depth” (from the sample in MDP documentation) only scans IO modules up to 8 but the <Location> <Scan> section is not advisable to be edited as per the MDP documentation

<Location>
    <Scan deviceType="0x1389" start="0xF050" delta="0x0" depth="8" primary="0x10" />
    <Scan deviceType="0x184C1389" start="0x9000" delta="0x10" depth="8" primary="4" secondary="5" />
</Location>

Attached below is also my Mdp.xml file created for Weidmuller UR20-FBC-EC with “depth” changed to 10 in <Location> <Scan> section

<Mdp xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
  <Topology>
    <Node address="100d">
      <Slot number="1" moduleIdent="0x000C9FC2">16 NPN Digital Inputs</Slot>
      <Slot number="2" moduleIdent="0x000C9FC2">16 NPN Digital Inputs</Slot>
      <Slot number="3" moduleIdent="0x000C9FC2">16 NPN Digital Inputs</Slot>
      <Slot number="4" moduleIdent="0x000C9FC2">16 NPN Digital Inputs</Slot>
      <Slot number="5" moduleIdent="0x010DAFD0">16 NPN Digital Outputs</Slot>
      <Slot number="6" moduleIdent="0x010DAFD0">16 NPN Digital Outputs</Slot>
      <Slot number="7" moduleIdent="0x010DAFD0">16 NPN Digital Outputs</Slot>
      <Slot number="8" moduleIdent="0x040115C4">4 Analog Inputs</Slot>
      <Slot number="9" moduleIdent="0x040115C4">4 Analog Inputs</Slot>
      <Slot number="10" moduleIdent="0x050225E0">4 Analog Outputs</Slot>
    </Node>
  </Topology>
  <Location>
    <Scan deviceType="0x1389" start="0xF050" delta="0x0" depth="10" primary="0x10"/>
    <Scan deviceType="0x184C1389" start="0x9000" delta="0x10" depth="10" primary="4" secondary="5"/>
  </Location>
  <LookupTable>
    <Item key="c9fc2" moduleIdent="0x000C9FC2">16 NPN Digital Inputs</Item>
    <Item key="10dafd0" moduleIdent="0x010DAFD0">16 NPN Digital Outputs</Item>
    <Item key="40115c4" moduleIdent="0x040115C4">4 Analog Inputs</Item>
    <Item key="50225e0" moduleIdent="0x50225E0">4 Analog Outputs</Item>
  </LookupTable>
  <Default moduleIdent="0x80000081">Default Entry</Default>
</Mdp>

As for the above Mdp.xml configuration, does the entry for Axes IO (or non-Mdp nodes) need to be configured as well? (like moduleIdent 0x1312)

  • Is this required for the scanned Mdp topology to show the other non-Mdp nodes to use Default Entry configuration?

Further clarification on this is much appreciated in helping us learn more about Mdp.xml. Thank you for the help and guidance!

Hi @gregory,

Change Depth to increase the number of nodes scanned. Increase it to the maximum possible nodes on the device you are using. When we initially implemented Mdp, we had devices which had a maximum of 8 nodes. But we built the system to flexible to support a variety of capacities. You could even lower this value if you knew you’d only have 5 devices attached for example.

Our original internal implementation tired to read the depth out of the nodes. Unfortunately some of the test nodes we had didn’t populate this value properly. Thus the need to define depth.

Primary and Secondary are used to collect information about the Mdp nodes attached. Mdp has everything we need at the primary location. IOLink puts relevant information in 2 places so we have to scan both.

You only need entries for Mdp and IO Link nodes. You don’t need to use this file at all for the other types Axis, IO, or otherwise.

1 Like

Hi @jacob,

Thank you for the clarification on the value for depth. Mdp.xml can now scan based on the number of IO modules connected to the coupler now.

I have some issues regarding an analog module connected to the Weidmuller UR20-FBC-EC IO coupler. When this module is slotted in the IO coupler, the network is unable to transition into Operational but Pre-Op is fine.

  • The Mdp topology in Mdp.xml is the same as shown above
  • However we were able to transition into Operational on Beckhoff TwinCAT with the same configuration and topology
  • We noticed there were some slight differences for nodes in EtherCAT.xml generated from RSI and for EtherCAT.xml from TwinCAT (ENI files) - ENI files & XML files for Weidmuller

Below are the error logs prompted when starting the network in RSI with the analog module attached last in the IO coupler:

ℹ️ 01:10:49.322 EtherCAT EthernetSwitch.cpp:78 CEthernetSwitch created with maxPorts(2) maxFrames(120) maxMacs(100)
ℹ️ 01:10:52.086 EtherCAT INtimeDevice.cpp:467 hpeOpen-Probe rtl1g0 NIC found
ℹ️ 01:10:54.914 EtherCAT INtimeDevice.cpp:524 MAC address:f8-75-a4-c8-87-aa
ℹ️ 01:10:54.914 EtherCAT INtimeDevice.cpp:535 Allocate and attach the receive buffers
ℹ️ 01:10:56.165 EtherCAT INtimeDevice.cpp:585 Checking Ethernet PHY media status for nodes...
ℹ️ 01:10:56.165 EtherCAT INtimeDevice.cpp:602 Interface is connected at 100Mbps
ℹ️ 01:10:56.176 EtherCAT RMPNetworkFirmware.cpp:928 EtherCAT starting with cycle period=0.001000 [sec]
ℹ️ 01:10:56.176 EtherCAT EtherCAT.cpp:260 EtherCAT Configuration file Cycle Time set to 1000 microseconds
🚧 01:10:56.425 EtherCAT EtherCAT.cpp:794 State changed from Initialisation to Stopped
ℹ️ 01:10:56.427 EtherCAT RMPNetworkFirmware.cpp:653 FSoE file Safety.xml not found. Continuing without FSoE.
ℹ️ 01:10:56.427 EtherCAT RMPNetworkFirmware.cpp:500 Found 98 inputs.
ℹ️ 01:10:56.427 EtherCAT RMPNetworkFirmware.cpp:531 Found 68 outputs.
🚧 01:10:56.737 EtherCAT EtherCAT.cpp:646 Entering Starting state, mode: Normal
ℹ️ 01:10:56.738 EtherCAT EtherCAT.cpp:887 EtherCAT starting with cycle period=1000 [usec]
ℹ️ 01:10:56.771 EtherCAT EcDcSlave.cpp:79 Box 0 (UR20-FBC-EC) DC support: 32-bit and 64-bit
❌ 01:10:56.946 EtherCAT EcSlave.cpp:2019 'Box 0 (UR20-FBC-EC)' (1001) 'PS': CoE ('InitDown' 0x80f0:3) - SDO Abort ('Object does not exist in the object dictionary.', 0x06020000): 'Name UR20-4AO-UI-16'.
❌ 01:10:56.952 EtherCAT EcSlave.cpp:2019 'Box 0 (UR20-FBC-EC)' (1001) 'PS': CoE ('InitDown' 0x80f0:10) - SDO Abort ('Object does not exist in the object dictionary.', 0x06020000): 'Module id of UR20-4AO-UI-16'.
❌ 01:10:57.363 EtherCAT EtherCAT.cpp:963 Error signaled by master while starting driver

🚧 01:10:57.488 EtherCAT EtherCAT.cpp:794 State changed from Starting to StoppingOnError
🚧 01:10:57.926 EtherCAT EtherCAT.cpp:794 State changed from StoppingOnError to Error

The error thrown is from the last analog module in the coupler where an SDO abort occured due to the object not existing in the Object Dictionary:

❌ 01:10:56.946 EtherCAT EcSlave.cpp:2019 'Box 0 (UR20-FBC-EC)' (1001) 'PS': CoE ('InitDown' 0x80f0:3) - SDO Abort ('Object does not exist in the object dictionary.', 0x06020000): 'Name UR20-4AO-UI-16'.
❌ 01:10:56.952 EtherCAT EcSlave.cpp:2019 'Box 0 (UR20-FBC-EC)' (1001) 'PS': CoE ('InitDown' 0x80f0:10) - SDO Abort ('Object does not exist in the object dictionary.', 0x06020000): 'Module id of UR20-4AO-UI-16'.
  • After changing the value in RMP’s ENI file for the stated object from “33008” (Generated by RMP) to “32912” (Taken from same block in the ENI generated TwinCAT) to try and solve the error, the error does not prompt anymore but network timeout occurs instead
<InitCmd>
  <Transition>PS</Transition>
  <Comment>
    <![CDATA[ Name UR20-4AO-UI-16 ]]>
  </Comment>
  <Timeout>0</Timeout>
  <Ccs>1</Ccs>
  <Index>32912</Index> (Changed from 33008 to 32912)
  <SubIndex>3</SubIndex>
  <Data>555232302d3441492d55492d3136</Data>
</InitCmd>

<InitCmd>
  <Transition>PS</Transition>
  <Comment>
    <![CDATA[ Module id of UR20-4AO-UI-16 ]]>
  </Comment>
  <Timeout>0</Timeout>
  <Ccs>1</Ccs>
  <Index>32896</Index>  (Changed from 33008 to 32912)
  <SubIndex>10</SubIndex>
  <Data>c4150104</Data>
</InitCmd>

However, if taking out the last IO analog module from the coupler and re-generating the Mdp.xml topology again to not include it, the IO coupler is now able to start into Operational.

May I know if there is an issue with the configuration or what we could change/test to mitigate this issue?

Your help is much appreciated in determining the root cause and in furthering our understanding for this issue. Thank you!