Starting and Stopping

When a path interpolation with look ahead command finishes and all interpolation commands in the path have been executed, the commanded axes will remain stationary in the Intpl operation state. At this point, the path interpolation with look ahead command may be finished with the StopPathIntplLookahead function to bring the axes to Idle operation state, or additional interpolation commands can be added with the AddPathIntplLookaheadCommand function to immediately resume motion.

The path interpolation with look ahead command may also be stopped with the StopPathIntplLookahead function before it finishes. In this case, the interpolating axes will decelerate to a stop along the interpolation path. The path interpolation with look ahead command may be resumed by calling StartPathIntplLookahead function again, in which case the path interpolation with look ahead command will execute any remaining interpolation commands in the path.

If the stopOnEmptyBuffer configuration option is set to true using the SetPathIntplLookaheadConfiguration function, the commanded axes will automatically change to Idle operation state after all interpolation commands in the path have been executed.

Stopping Example

//Create the path interpolation with look ahead buffer
wmxlib_AdvancedMotion->advMotion->CreatePathIntplLookaheadBuffer(0, 1000);

//Configure the path interpolation with look ahead channel
AdvMotion::PathIntplLookaheadConfiguration conf;
        
conf.axisCount = 2;
conf.axis[0] = 0;
conf.axis[1] = 1;
conf.compositeVel = 1000;
conf.compositeAcc = 2000;

wmxlib_AdvancedMotion->advMotion->SetPathIntplLookaheadConfiguration(0, &conf);

//Add the path interpolation with look ahead commands
AdvMotion::PathIntplLookaheadCommand path;

path.numPoints = 4;
        
path.point[0].type = AdvMotion::PathIntplLookaheadSegmentType::Linear;
path.point[0].data.linear.axisCount = 2;
path.point[0].data.linear.axis[0] = 0;
path.point[0].data.linear.axis[1] = 1;
path.point[0].data.linear.target[0] = 1000;
path.point[0].data.linear.target[1] = 0;

path.point[1].type = AdvMotion::PathIntplLookaheadSegmentType::Linear;
path.point[1].data.linear.axisCount = 2;
path.point[1].data.linear.axis[0] = 0;
path.point[1].data.linear.axis[1] = 1;
path.point[1].data.linear.target[0] = 1000;
path.point[1].data.linear.target[1] = 1000;

path.point[2].type = AdvMotion::PathIntplLookaheadSegmentType::Linear;
path.point[2].data.linear.axisCount = 2;
path.point[2].data.linear.axis[0] = 0;
path.point[2].data.linear.axis[1] = 1;
path.point[2].data.linear.target[0] = 0;
path.point[2].data.linear.target[1] = 1000;

path.point[3].type = AdvMotion::PathIntplLookaheadSegmentType::Linear;
path.point[3].data.linear.axisCount = 2;
path.point[3].data.linear.axis[0] = 0;
path.point[3].data.linear.axis[1] = 1;
path.point[3].data.linear.target[0] = 0;
path.point[3].data.linear.target[1] = 0;

wmxlib_AdvancedMotion->advMotion->AddPathIntplLookaheadCommand(0, &path);

//Execute path interpolation with look ahead
wmxlib_AdvancedMotion->advMotion->StartPathIntplLookahead(0);

//Wait for the path interpolation with look ahead to complete
AdvMotion::PathIntplLookaheadStatus pathStatus;
wmxlib_AdvancedMotion->advMotion->GetPathIntplLookaheadStatus(0, &pathStatus);
while (pathStatus.remainCommandCount > 0) {
    Sleep(10);
    wmxlib_AdvancedMotion->advMotion->GetPathIntplLookaheadStatus(0, &pathStatus);
}

//Move the axes to Idle state
wmxlib_AdvancedMotion->advMotion->StopPathIntplLookahead(0);

//Wait until the path interpolation with look ahead is in Stopped state
wmxlib_AdvancedMotion->advMotion->GetPathIntplLookaheadStatus(0, &pathStatus);
while(pathStatus.state != AdvMotion::PathIntplLookaheadState::Stopped) {
    Sleep(10);
    wmxlib_AdvancedMotion->advMotion->GetPathIntplLookaheadStatus(0, &pathStatus);
}

//Free the path interpolation with look ahead buffer (normally, the buffer should only be freed at the end of the application)
wmxlib_AdvancedMotion->advMotion->FreePathIntplLookaheadBuffer(0);

The following plots show the two-dimensional trajectory and the velocity of each axis when the above sequence is executed from position (0, 0).

../_images/WMXDOC_FUNC_PLA_SEC1_image0.png