Multi-Axis Motion sample application.
We have created arrays for start_position, end_position, velocity, accel, decel and jerkPct and used them in function called MoveSCurve which commands motion for both the axis->
Syncpptart commands both motors to start moving at the same time towards their respective end_positions. SyncEnd commands both the motors to end their motion at the same time when moving towards start_positions.
- Precondition
- This sample code presumes that the user has set the tuning paramters(PID, PIV, etc.) prior to running this program so that the motor can rotate in a stable manner.
- Warning
- This is a sample program to assist in the integration of your motion controller with your application. It may not contain all of the logic and safety features that your application requires.
- Copyright
- Copyright © 1998-2019 by Robotic Systems Integration, Inc. All rights reserved. This software contains proprietary and confidential information of Robotic Systems Integration, Inc. (RSI) and its suppliers. Except as may be set forth in the license agreement under which this software is supplied, disclosure, reproduction, or use with controls other than those provided by RSI or suppliers for RSI is strictly prohibited without the prior express written consent of Robotic Systems Integration.
#include "rsi.h"
#include "HelperFunctions.h"
#include <conio.h>
using namespace RSI::RapidCode;
const int AXIS_X = 0;
const int AXIS_Y = 1;
const int AXIS_COUNT = (2);
long axisNumber[AXIS_COUNT] = { 0, 1, };
double start_position[2] = { 0 , 0 };
double end_position[2] = { 2000 , 6000 };
double velocity[2] = { 1000, 1000 };
double accel[2] = { 10000, 10000 };
double decel[2] = { 10000, 10000 };
double jerkPct[2] = { 0, 0 };
long index;
void PrintResult(
Axis *axisX,
Axis *axisY)
{
printf("Motion Done \n AxisX position-> Commanded: %f \tActual: %f\n",
printf(" AxisY position-> Commanded: %f \tActual: %f\n",
}
void multiaxisMotionMain()
{
SampleAppsCPP::HelperFunctions::CheckErrors(controller);
try
{
SampleAppsCPP::HelperFunctions::CheckErrors(axisX);
SampleAppsCPP::HelperFunctions::CheckErrors(axisY);
SampleAppsCPP::HelperFunctions::CheckErrors(multiAxisXY);
{
printf("\nMotionStart...");
multiAxisXY->
MoveSCurve(end_position, velocity, accel, decel, jerkPct);
PrintResult(axisX, axisY);
printf("\nMotionStart...");
multiAxisXY->
MoveSCurve(start_position, velocity, accel, decel, jerkPct);
PrintResult(axisX, axisY);
}
printf("\nTrapezoidal Motion Done\n");
}
{
printf(
"\n%s\n", err.
text);
}
}