Lenze ECSxM via EMF2192IB (EtherCAT): CiA402 compatibility and configuration iss

More
4 months 5 days ago #347358 by Nikita
Hi everyone,I'm looking for some help from the community with configuring a Lenze drive setup to work with LinuxCNC via the
Code:
linuxcnc-ethercat
(lcnc-ethercat) driver.The Hardware:
  • Axis module: Lenze ECSxM
  • Communication module: Lenze EMF2192IB (EtherCAT)
The Issue: I am trying to configure the axis module control using the standard CiA402 profile. However, during diagnostics, I ran into some mapping issues:
  1. When running the
    Code:
    ethercat pdos
    command, the core CiA402 profile indices like
    Code:
    0x6060
    (Modes of Operation) and
    Code:
    0x6061
    (Modes of Operation Display) are missing. From what I’ve gathered in the Lenze documentation, these parameters seem to be strictly hardcoded into SDOs.
  2. When running
    Code:
    ethercat sdos
    , the master only returns unnamed indices strictly within the
    Code:
    0x2000
    to
    Code:
    0x5801
    range. Nothing above this pool is visible (objects from
    Code:
    0x6000
    onwards are missing entirely).
Given this situation, I have a few questions for the experts here:
  1. Is it actually possible to get the ECSxM + EMF2192IB combo running properly under the standard CiA402 profile in LinuxCNC? Does a native driver/component for
    Code:
    ethercat-cia402
    support this particular hardware?
  2. If the standard profile isn't supported out of the box due to Lenze's proprietary layout, what is the best way to handle the control? Do I need to manually map the Lenze-specific SDOs/PDOs (from the
    Code:
    0x2000
    -
    Code:
    0x5000
    range) into HAL, or should I write a custom XML config to handle PDO Mapping via SDO download?
  3. If anyone has successfully configured this or has a working
    Code:
    ethercat-conf.xml
    example for this generation of Lenze inverters, could you please share it?
Any advice, pointers, or examples would be greatly appreciated!Cheers!

Please Log in or Create an account to join the conversation.

More
4 months 4 days ago #347362 by rodw
Not all drives are cia402 compatible. Yours probably isn't.
you need to share more info eg.
ethercat pdos > pdos.txt 
ethercat sdos > sdos.txt
and also try using lcec_configgen > configgen.xml (but there are some optional command line switches) It may create your XML for you.
The following user(s) said Thank You: Nikita

Please Log in or Create an account to join the conversation.

More
4 months 3 days ago - 4 months 3 days ago #347404 by Nikita
Title Idea: Lenze ECSxM EtherCAT (CiA402) configuration issue – Drive stuck in PREOP E with Bus Error 20000OS and Hardware Environment:OS / Core: Debian Linux with RT (Realtime) kernel, LinuxCNC version 2.9.4.Driver / Module: linuxcnc-ethercat (the lcec module by Sittner).Servo Drive: Lenze ECSxM (Identified on the bus as: Vendor ID 0x0000003b, Product Code 0x014e7bc0).Network Interface: Integrated Realtek Ethernet adapter. The driver runs in standard generic emulation mode.PC & Realtime Optimization:One CPU core is completely isolated at the GRUB bootloader level (isolcpus) specifically for the LinuxCNC Servo Thread.The Ethernet port dedicated to the EtherCAT bus is completely disconnected from the Linux network stack (all IP addresses removed, any third-party internet traffic is blocked) to eliminate OS-induced jitter.The isolated core and the NIC show excellent results during the standard LinuxCNC Latency Test.Step-by-Step Troubleshooting HistoryStep 1. Initial INI File Adjustments (cia402.ini)The initial configuration had maximum velocity mismatches. Trajectory limits under [DISPLAY] and [TRAJ] were raised to 100.0 to match the simulated X and Z axes (MAX_VELOCITY = 100.0). For the physical Y-axis (Lenze drive, [JOINT_1]), following error limits were adjusted, and homing speeds (HOME_SEARCH_VEL / HOME_LATCH_VEL) were changed from 0.0 to -10.0 and 2.0 to prevent initial startup errors.Step 2. First Run & LCEC CrashRunning linuxcnc /home/debian/devel/cia402.ini resulted in a critical HAL initialization failure:Failed to register PDO entry: No such file or directory
LCEC: master 0 PDO entry registration failed
./cia402.hal:9: insmod for lcec failed, returned -1
This indicated that the ethercat-conf.xml file requested PDO variables that did not match the physical memory layout of the servo amplifier.Step 3. SDO and XML Profile DiagnosticThe ethercat sdos output showed proprietary Lenze arrays (indices like 0x58df, 0x58de). However, running ethercat xml read the ESI profile directly from the drive's EEPROM and revealed the following true CoE / CiA402 structure:Device Name: Servo ECSxM CiA 402RxPDO (Sm="2", idx="1600"): Contains standard 0x6040 (Control word), 0x60b8 (TP Function), 0x607a (Target position), 0x60ff (Target velocity), and an output array from 0x58e1:07 to 0x58e1:12. Total size: 192 bits (24 bytes).TxPDO (Sm="3", idx="1a00"): Starts with a specific 14-bit empty alignment gap (Index 0x0000, BitLen 14), followed by service bits 1800:09 and 1800:07, status word 0x6041, touch-probe registers 60b9-60bb, actual position 0x6064, and an input array from 0x58e0:09 to 0x58e0:12. Total size: 208 bits (26 bytes).Step 4. Adapting XML Syntax to the lcec_conf ParserWe had to match the specific strict XML syntax expected by this particular linuxcnc-ethercat build:vendor="59" product="21920704" type="cia402" threw Invalid slave attribute vendor.vendor="0x3b" product="0x014e7bc0" type="lcec_cia402" threw Cannot find slave type lcec_cia402.Ultimately, we discovered the working format for this build: it requires vid and pid attributes written as 8-character uppercase HEX strings without the 0x prefix (e.g., vid="0000003B" pid="014E7BC0"), along with type="generic" configPdos="true". All entry types must use halType (u32, s32, bit) instead of dataType.Step 5. Handling the 14-bit Alignment Gap in TxPDODeclaring the gap as <pdoEntry idx="0000" subIdx="00" bitLen="14" halPin="gap" halType="raw"/> caused a crash: Invalid pdoEntry halType raw. Stripping the HAL attributes completely allowed the XML parser to pass, but the 14 bits were seemingly ignored in the total Sync Manager size calculation. Later, we tried using a dummy entry without a pin assignment, like <pdoEntry idx="0000" subIdx="00" bitLen="14" halType="u32"/>.Step 6. HAL File Synchronization (cia402.hal)Once the XML was accepted, HAL failed with Pin 'lcec.0.0.status-word' does not exist because under type="generic" the pins are named strictly after the halPin attribute. The HAL file was fully updated to use the new lcec.0.0.cia-controlword and lcec.0.0.cia-statusword pins. Virtual feedback loops (motor-pos-cmd => motor-pos-fb) were also added to the simulated X (Joint 0) and Z (Joint 2) axes to satisfy the XYZ trajectory planner constraints.Following these changes, the Axis GUI opens successfully without any internal HAL or LinuxCNC errors.Step 7. The Main Problem: PREOP E and Error Code 20000Even though the GUI loads, the Lenze ECSxM drive immediately drops the bus into PREOP E (Pre-Operational with Error) and locks LinuxCNC in a permanent E-Stop (АВОСТ) state.sudo dmesg reveals bus warnings: EtherCAT WARNING: 6 datagrams UNMATCHED! and was SKIPPED.Checking the drive's internal Bus Status register (C1830) using ethercat upload -p 0 0x58d9 00 --type uint32 consistently returns 0x00004E20 (Decimal: 20000). In Lenze module documentation, this code translates to "Invalid Parameter Set / Sync Manager Configuration Error" or "Waiting for Phase Synchronization".Step 8. Distributed Clocks (DC) & Clock Sync AttemptsTo fix the 20000 code, we tested several clock synchronization strategies:Adding addf lcec.sync-clock servo-thread or lcec.sync-clocks to cia402.hal failed with function not found (this lcec build handles DC entirely via the XML config).In ethercat-conf.xml, we shifted the master period to 1000000 (1 ms) and cycled through <dcConf> configurations: assignActivate="300", hex assignActivate="0x0300", and added a phase offset sync0Shift="250000".We also attempted to completely disable DC (Free-Run / SM-Sync mode) by using assignActivate="0000", assignActivate="0x0210", or removing the <dcConf /> tag altogether.Result: ESC registers 0x092c and 0x0910 indicate that the drive sees the master's time but reports a massive System Time Offset (~2.7 seconds). The Lenze drive ignores the mode changes and remains stuck at code 20000. We also tried shifting the PDO map to the alternative standard TwinCAT ESI indices (1601 / 1a01 instead of 1600 / 1a00), but the 20000 error persists.Questions for the Community:Lenze ECS Error Code 20000: When dealing with Lenze ECS CoE modules under linuxcnc-ethercat, what exactly triggers the 20000 (0x4E20) bus status? Is it strictly a DC phase synchronization timeout, or is it a Sync Manager length mismatch?TxPDO 14-bit Alignment Gap: How should the 0x0000 index with a 14-bit length be mapped in ethercat-conf.xml for a generic slave so that the lcec driver counts it toward the total SM3 size (which must be exactly 26 bytes) without triggering a halType parsing error?PDO Mapping via SDOs: Does the Lenze ECS series require explicit PDO mapping commands via <initCmds> in the XML configuration, or should the master automatically handle the structure when type="generic" and configPdos="true" are set?Realtek NIC Impact: Could the standard generic Linux EtherCAT driver on an integrated Realtek chip cause a phase drift large enough (~2.7s offset in register 0x0910) to make Lenze reject DC synchronization entirely? Should I force a specific native driver or swap to an Intel NIC?
1. Enabling the Network Interface (Bringing the Link UP)The network card was initially disabled at the OS level (status DOWN), which prevented the EtherCAT master from sending any packets.Action taken: Forced the network interface enp2s0 to turn on using the following command:bashsudo ip link set enp2s0 up
2. CPU Core Isolation for Real-Time (In the GRUB Configuration)The standard network card driver (generic) was delaying packets, causing LinuxCNC to freeze and EtherCAT to trigger datagram timeouts.Action taken: Corrected the Linux kernel boot parameters line in /etc/default/grub. This isolated the 4th CPU core (index 3) exclusively for real-time and EtherCAT tasks and completely disabled power-saving sleep modes:iniGRUB_CMDLINE_LINUX_DEFAULT="quiet isolcpus=3 nohz_full=3 rcu_nocbs=3 intel_idle.max_cstate=0 processor.max_cstate=0 idle=poll"
(Changes were applied via sudo update-grub followed by a system reboot).
3. Binding the MAC Address to the EtherCAT MasterThis tells the EtherCAT service which specific physical port on the PC to use for communicating with the Lenze drive.Action taken: Added your card's unique hardware MAC address into the main EtherCAT service configuration file (under the line MASTER0_DEVICE="00:e0:26:32:3a:40").4. Preparing to Disable Hardware Optimizations (Offloading)Because EtherCAT communicates using raw Ethernet frames without IP addresses, the network chip was attempting to reassemble them. This resulted in thousands of transmission errors (Tx errors). To fix this, we prepared a command to disable all chip optimizations using the ethtool utility:bashsudo ethtool -K enp2s0 tx off rx off sg off tso off gso off gro off lro off


I am also providing a PDF with screenshots from TwinCAT taken from the machine where this axis module ECSCM048C4B was installed, together with the communication module EMF2192IB mounted on top (I think this will be useful).Additionally, I downloaded the XML for the EMF2192IB from TwinCAT, named Lenze_EMF2192_20101005.xml.I am also including the INI, HAL, and ethercat-config.xml files that I created with the help of artificial intelligence, as well as the command‑line outputs. 

File Attachment:

File Name: cia402.hal
File Size:3.28 KB
 

File Attachment:

File Name: cia402.ini
File Size:2.24 KB
  

File Attachment:

File Name: ethercat-conf.xml
File Size:1.28 KB
 

File Attachment:

File Name: ethercatslaves-v.txt
File Size:1.19 KB
 

File Attachment:

File Name: ethercatslaves-v.txt
File Size:1.19 KB
 

File Attachment:

File Name: ethercatslaves-v.txt
File Size:1.19 KB

File Attachment:

File Name: cia402.hal
File Size:3.28 KB

File Attachment:

File Name: ethercatslaves-v.txt
File Size:1.19 KB

File Attachment:

File Name: cia402.ini
File Size:2.24 KB

File Attachment:

File Name: ethercat-conf.xml
File Size:1.28 KB

File Attachment:

File Name: pdos.txt
File Size:1.37 KB

File Attachment:

File Name: sdos.txt
File Size:10.25 KB

File Attachment:

File Name: Lenze_EMF2...1005.xml
File Size:176.66 KB
Last edit: 4 months 3 days ago by Nikita.

Please Log in or Create an account to join the conversation.

More
3 months 4 weeks ago #347463 by Nikita
Hi everyone,
Could you please advise what to do in this situation:

When reading the PDOs, I see CiA402 indices.

But when reading the SDOs, I get indices mapped at 0x1600 and 0x1A00, which belong to the hardware interface (AIF). This mapping seems to be specific to Lenze.

Previously, the drive worked under CiA402 on a dismantled machine controlled by TwinCAT.

Now, when I try to automatically generate the XML via lcec_configgen, the XML is created with the hardware-specific indices instead of the CiA402 ones.

Has anyone dealt with this mismatch between CiA402 and Lenze’s AIF mapping? Is there a way to force or configure the XML generation so it uses CiA402 indices instead of the hardware-specific ones?

Thanks in advance for your help!

Please Log in or Create an account to join the conversation.

More
More
3 months 4 weeks ago #347471 by rodw
Have you tried it? It should work but you need to share sdos, pdos and configgen xml

Please Log in or Create an account to join the conversation.

Time to create page: 0.123 seconds
Powered by Kunena Forum