The RMP Motion Controller APIs
VelocitySetByAnalogInputValue.cs
using RSI.RapidCode.dotNET; // Import our RapidCode Library.
using System;
class VelocitySetByAnalogInputValue
{
static void Main(string[] args)
{
// GLOBAL VARIABLES
double analogMaxValue = 65536; // The analog inputs used are 16 bit wide.
double currentVelocity = 0; // Used to update velocity based on analog input value.
double analogCurrentValue = 0; // Used to store current analog input value.
double analogValuePrecentage = 0; // analogCurrentValue/anlogMaxValue.
double velocityAbsoluteSum = 0; // Absolute sum of min and max velocities.
// CONSTANTS
const int AXIS_NUMBER = 0; // Specify which axis/motor to control.
const int NODE_NUMBER = 0; // Specify which IO Terminal/Node to control. 0 for RSI AKD DemoBench
const int ANALOG_INPUT_0 = 0; // Specify which Analog Input to read.
const int MIN_VEL = -10; // Specify Min Velocity.
const int MAX_VEL = 10; // Specify Max Velocity.
const int ACC = 100; // Specify Acceleration/Deceleration value.
const int USER_UNITS = 1048576; // Specify your counts per unit / user units. (the motor used in this sample app has 1048576 encoder pulses per revolution)
// Initialize RapidCode Objects
MotionController controller = MotionController.CreateFromSoftware(/*@"C:\RSI\X.X.X\"*/); // Insert the path location of the RMP.rta (usually the RapidSetup folder)
HelperFunctions.CheckErrors(controller); // [Helper Function] Check that the controller has been initialized correctly.
HelperFunctions.StartTheNetwork(controller); // [Helper Function] Initialize the network.
Axis axis = controller.AxisGet(AXIS_NUMBER); // Initialize the axis.
HelperFunctions.CheckErrors(axis); // [Helper Function] Check that the axis has been initialized correctly.
IO ioNode = controller.IOGet(NODE_NUMBER); // Initialize the axis.
HelperFunctions.CheckErrors(ioNode); // [Helper Function] Check that the axis has been initialized correctly.
try
{
// CONSOLE OUT
Console.WriteLine("Velocity Move Initialized.");
Console.WriteLine("Max Speed = " + MAX_VEL);
Console.WriteLine("Min Speed = " + MIN_VEL);
Console.WriteLine("\nPress SPACEBAR to exit.");
// READY AXIS
axis.UserUnitsSet(USER_UNITS); // Specify the counts per Unit.
axis.ErrorLimitTriggerValueSet(1); // Specify the position error limit trigger. (Learn more about this on our support page)
axis.PositionSet(0); // Make sure motor starts at position 0 everytime.
axis.DefaultAccelerationSet(ACC); // Set Acceleration.
axis.DefaultDecelerationSet(ACC); // Set Deceleration.
axis.Abort(); // If there is any motion happening, abort it.
axis.ClearFaults(); // Clear faults.
axis.AmpEnableSet(true); // Enable the motor.
do
{
while (!Console.KeyAvailable)
{
velocityAbsoluteSum = Math.Abs(MIN_VEL) + Math.Abs(MAX_VEL);
analogCurrentValue = (double)ioNode.AnalogInGet(ANALOG_INPUT_0); // Get analog in value.
analogValuePrecentage = analogCurrentValue / analogMaxValue; // Get percentage of analog voltage.
/*
* REPRESENTATION OF ANALOG INPUT VALUE BASED ON DIGITAL OUTPUT VOLTAGE
*
* AI Value --> 0 ............ 32,769 ............ 65,536
* DO Voltage --> 0 ........8 9 10 -10 -9 -8...... 0
*/
if (analogValuePrecentage * 100 > 99 || analogValuePrecentage * 100 < 1) // If the Analog Input value is close to 0 or 65,536 then velocity is ZERO.
currentVelocity = 0;
else if (analogValuePrecentage * 100 < 50) // If the Analog Input value is less than 50% of 65,536 then velocity varies from 0 to 10.
currentVelocity = velocityAbsoluteSum * analogValuePrecentage;
else // If the Analog Input value is greater than 50% of 65,536 then velocity varies from 0 to -10.
currentVelocity = -velocityAbsoluteSum + (velocityAbsoluteSum * analogValuePrecentage);
axis.MoveVelocity(currentVelocity); // Update Velocity.
}
} while (Console.ReadKey(true).Key != ConsoleKey.Spacebar); // If the Spacebar key is pressed, exit.
axis.Abort(); // Abort Motion.
}
catch (Exception e)
{
Console.WriteLine(e.Message); // If there are any exceptions/issues this will be printed out.
}
}
}
RSI::RapidCode
RSI
HelperFunctions.CheckErrors
static void CheckErrors(RapidCodeObject rsiObject)
Check if the RapidCode Object has any errors.
Definition: HelperFunctions.cs:64
HelperFunctions.StartTheNetwork
static void StartTheNetwork(MotionController controller)
Start the controller communication/network.
Definition: HelperFunctions.cs:109
HelperFunctions
Helper Functions for checking logged creation errors, starting the network, etc.
Definition: HelperFunctions.cs:50