rsipkema Posted December 4, 2019 Posted December 4, 2019 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
Alex Anikstein Posted December 4, 2019 Posted December 4, 2019 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: //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.
Recommended Posts