Thread Rating:
  • 0 Vote(s) - 0 Average
  • 1
  • 2
  • 3
  • 4
  • 5
EtherCAT Homing Mode
#1
L.S.,

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.

TIA

-ronald
Reply
#2
Ronald,

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:


Code:
//Variables
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) {}
        sdo_result=ecatsdo(1,0,$6061,0,6,0)
        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:
                AmpHomeInProgress=1
                break;
                case 1:
                break;
                case 4:
                AmpHomeInProgress =1
                break;
                case 5:
                AmpHomeInProgress = 0
                AmpHomeComplete = 1
                break;
                case 8:
                homeerror = 1
                break;
                default:
                homeerror = 2
                break;
        }
}
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) {}
        sdo_result=ecatsdo(0,0,$6061,0,8,0)
        sdoretry = sdoretry + 1
}
jog1^0
homez1
disable plc 3
close

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.
Reply


Forum Jump:


Users browsing this thread: 1 Guest(s)