Jump to content
OMRON Forums

EtherCAT Homing Mode


Recommended Posts



I'm trying to get a CK3E to work together with an LTI Motion ServoOne CM three-axis drive. One of the issues I'm having is that I cannot seem to find out how to properly use the drive's Homing mode; I've read in several locations that Delta Tau supports the three synchronous cyclic modes as well as the homing mode (6) for EtherCAT drives, but I have not been able to find out how one is supposed to use the homing mode. Does anyone have any experience in using an EtherCAT drive's homing mode? Not that I'd rather not perform homing in the CK3E (using probing) since then I'd have to write PLC's to support homing using Heidenhain distance coded reference markers, where the drive supports this type of homing natively.





Link to comment
Share on other sites

  • Replies 1
  • Created
  • Last Reply

Top Posters In This Topic

Popular Days

Top Posters In This Topic



I'm not sure where you read that homing mode is supported--while we do support the three synchronous cyclic modes, we don't support homing mode. That said, engineers and some customers have gotten it to work before, but even then it still requires a PLC to execute because it is not supported in firmware.


A sample PLC that has worked on some 3rd party drives is:



global sdo_result
global AmpHomeInProgress
global AmpHomeComplete
global homestatus
global homeerror
global sdoretry
global servowait

//Settings -- Consult Drive Manual for appropriate values
sdo_result = ecatsdo(0,0,$607C,0,###,0) // Setup home offset
sdo_result = ecatsdo(0,0,$6098,0,###,0) // Setup home method
sdo_result = ecatsdo(0,0,$6099,0,###,0) // Setup home speeds
sdo_result = ecatsdo(0,0,$609A,0,###,0) // Setup home acceleration

open plc 3
AmpHomeInProgress = 0
AmpHomeComplete = 0
cout1:0                                             // Place motor into open loop mode for homing
sdo_result=ecatsdo(0,0,$6098,0,34,0)                // Home w/ index pulse
                                                   // likely will be different for users

sdo_result=ecatsdo(0,0,$6060,0,6,0)                 // Set Drive in Homing Mode
sdoretry = 0
while (sdo_result != 6 && sdoretry < 10)            // Verify for drive to gets into
{                                                   // home mode
       servowait = sys.servocount + 2
       while (sys.servocount < servowait) {}
       sdoretry = sdoretry + 1
ampctrlword=ampctrlword | $1F                       // Start homing
homeerror = 0
while (AmpHomeComplete == 0 && homeerror == 0)      // You should add a timeout
{                                                   // to this while loop for
       homestatus = ampstatusword & $3400          // a real production systems
       homestatus = homestatus / 1024
       switch (homestatus)
               case 0:
               case 1:
               case 4:
               AmpHomeInProgress =1
               case 5:
               AmpHomeInProgress = 0
               AmpHomeComplete = 1
               case 8:
               homeerror = 1
               homeerror = 2
sdo_result=ecatsdo(0,0,$6060,0,8,0)                // Place drive back in position mode
ampctrlword = $F                                   // Put amp ctrl word back to normal
sdoretry = 0
while (sdo_result != 8 && sdoretry < 10)
       servowait = sys.servocount + 2
       while (sys.servocount < servowait) {}
       sdoretry = sdoretry + 1
disable plc 3


Some notes for the above:

[*]This code is written as PLC 3, and specifically homes Motor 1. Both of these can be changed if needed.

[*]The above code should cause the motor to move. Be sure that it is safe to do so--it is strongly recommended to test it on a system in which uncontrolled motion cannot cause any damage first

[*]The above code uses the "ecatsdo" command, which will not work with Acontis. Instead, "ecattypedsdo" must be used. If using with an Acontis system, be sure to convert the commands properly (noting that most of the parameters are re-ordered). Look at the slave device manual to determine the number of bytes for a given parameter.

[*]This code has a while loop without any timeout--as noted by the in-line comments, adding a timeout is recommended.

Link to comment
Share on other sites

This topic is now closed to further replies.

  • Create New...