See, add, or customize EtherCAT node info.
The RMP motion controller provides a more streamlined and unified way to interact with the various types of EtherCAT nodes/subdevices with the RapidCode API.
From a software perspective, all RapidCode Axis and IOPoint objects behave the same regardless of manufacturer. This minimizes the amount of changes to your software application that would be required if you have to swap drive manufacturers.
🔹 What are these files?
📄 NodeInfo.xml
Contains all RSI officially supported/integrated EtherCAT nodes as of RMP version 10.5.5.
See info about Settings section (only if RSI has recommended this)
You need to use NodeInfo.xml for the <Settings> block for everything, but <StrictNodeOrder>. This block handles automatic identification of IO based on size and key strings. By default, all 1 bit sized PDO entries are assumed to be Digital Inputs or Digital Outputs. This leads some Diagnostics and Control bits being identified as IO when you don't desire it. Add <Ignore> entries remove false positive identifications. Analog values are harder to detect. In order to add them, add an appropriate <AnalogInput> or <AnalogOutput> block following examples within the file.
The Has attribute can be used to add an additional string to help identify the IO.
Example
<AnalogInput Size="16" Has="(Beckhoff - AI">.Value</AnalogInput> will search for a pdo entry with both (Beckhoff - AI and .Value in it.
📝 CustomNodeInfo.xml
Allows users to add new nodes or customize existing nodes to meet your application needs.
- EDITABLE
- Available starting RMP version 10.4.2
- Vendor entries in CustomNodeInfo.xml will fully replace Vendor entries in NodeInfo.xml
See file
Many comments where added to explain all possible entries.
<EtherCATNodeInfo>
<Vendors>
<Vendor Id="0x111713">
<VendorName>Robotic Systems Integration</VendorName>
<Product Code="0xdead" Pattern="FakePatternName">
<ProductName>Not a Real Node</ProductName>
<ShortName>RSI FakeNode</ShortName>
<ItemSubType>Drive</ItemSubType>
<IO>
<DigitalInputItems>
<DigitalInput SigBits="0x007F0000" Size="32" Home="16" PosLimit="20" NegLimit="21">Inputs.Digital inputs</DigitalInput>
</DigitalInputItems>
<DigitalOutputItems>
<DigitalOutput SigBits="0x00030000" Size="32">Outputs.Digital outputs</DigitalOutput>
</DigitalOutputItems>
<AnalogInputItems>
<AnalogInput Size="16">Inputs.AIN.VALUE</AnalogInput>
</AnalogInputItems>
<AnalogOutputItems>
<AnalogOutput Size="16">Outputs.AOUT.VALUE</AnalogOutput>
</AnalogOutputItems>
</IO>
<InitCmds>
<InitCmd Index="0x60FE" SubIndex="0x2" Transition="SO">ef cd ab 00</InitCmd>
<InitCmd Index="0x60FE" SubIndex="0x2" Transition="SO" ChangeData="78 56 34 12" ChangeTimeout="1000" ChangeTransition="PS">ef cd ab 00</InitCmd>
</InitCmds>
<PDOs>
<PDOAssignment Index="0x1B01" IsOutput="False" Include="False"/>
<PDOAssignment Index="0x1A00" IsOutput="False" Include="True" RemoveContent="0x6041 0x6042" />
<PDOAssignment Index="0x1A01" IsOutput="False" Include="True">
<AddEntry Name="Velocity actual value" Index="0x606C" SubIndex="0" BitLen="32" DataType="DINT"/>
<AddEntry Name="Digital inputs" Index="0x60FD" SubIndex="0" BitLen="32" DataType="DINT"/>
</PDOAssignment>
</PDOs>
<SafeopOpTimeout>100000</SafeopOpTimeout>
<Unsupported state="bootstrap"/>
<MailboxPollTime>50</MailboxPollTime>
<AxisCount>1</AxisCount>
<AdditionalAxes>
<Axis Index="1">
</Axis>
</AdditionalAxes>
<StatusWord>Inputs.Status word</StatusWord>
<ControlWord>Outputs.Control word</ControlWord>
<PositionActual>Inputs.Position actual value</PositionActual>
<VelocityActual>Inputs.Velocity actual value</VelocityActual>
<TorqueActual>Inputs.Torque actual value</TorqueActual>
<PositionDemand>Outputs.Position demand value</PositionDemand>
<VelocityDemand>Outputs.Velocity command value</VelocityDemand>
<TargetTorque>Outputs.Additive torque value</TargetTorque>
<SecondaryFeedback>Inputs.Position actual value 2</SecondaryFeedback>
<FollowingError>Inputs.Following error</FollowingError>
<ModeOfOperation>Cyclic Position Velocity Mode.Mode of Operation</ModeOfOperation>
</Product>
</Vendor>
</Vendors>
<Patterns>
<FakePatternName>
<InitCmds>
<InitCmd Index="0x6060" SubIndex="0x0" Transition="PS">08</InitCmd>
</InitCmds>
</FakePatternName>
</Patterns>
<Settings>
<StrictNodeOrder />
</Settings>
</EtherCATNodeInfo>
🔹 New node official support
RSI can add support for any EtherCAT device however some complex nodes may require additional time or a purchase order before they can be integrated. Simple drives with ESI files that adhere well to the DS402 standard can often be integrated easily.
If you would like RSI to integrate your node into the RMP, we will need:
- The ESI file for the node
- A link to the manufacturer's node/drive page and/or documentation
- If you have discovered the node in your EtherCAT network:
- Vendor Id
- Product Code
Revision Number
🔹 Integrate a new node (unofficially)
You can integrate your own EtherCAT node into the RMP. Here's how:
1. Identifying the Node
Initially an Unsupported node will show up as 'Unknown' in RapidSetup upon discovering network nodes.
.png)
To identify it, click on the 'Unknown' node. You'll see information like 'Vendor' and 'Product'. Example: 0x6A and 0x414B44.

2. Editing CustomNodeInfo.xml
- Note
- The 6A and 414b44 were pulled from the Node Info above. You can use any description string for <VendorName>, <ProductName>, and <ShortName>. ShortName is what you will see in RapidSetup replacing Unknown. The <ItemSubType> can be Box, Term, or Drive with no change in behavior. Its a description that is added to each PDO entry.
3. Copy the new ESI file to the ESI folder
- Copy the ESI file to the ESI folder in the RapidCode installation directory.
- The ESI file is provided by the manufacturer.
4. Generate the ENI file and start the network
Bonus: DS402 Auto Implementation
- For DS402 Drives, RMP auto-detects and configures common parameters like ControlWord, StatusWord, Position Actual, Position Demand, Velocity Actual, Velocity Demand, Torque Actual, Target Torque, and Position Error.
- You can customize further in CustomNodeInfo.xml, but it's not required.
- Any CustomNodeInfo.xml entry will override automatically detected entries.
- Note
- Override Behavior: (As of 10.7.0) If you define any IO sub-entries (such as
<DigitalInputItems>, <DigitalOutputItems>, <AnalogInputItems>, <AnalogOutputItems>) in your CustomNodeInfo.xml, these will completely override the corresponding entries from NodeInfo.xml. This allows you to fully customize IO mapping for your network.