UserLimit directly sets a command position sample application.
Configure two UserLimits. The first will trigger on a digital input and copy the Axis Actual Position to the UserBuffer and decelerate to zero velocity with TRIGGERED_MODIFY. The second UserLimit will trigger after the first UserLimit triggers and the Axis gets to IDLE stae and it will directly set the command position of an Axis from the position stored in the UserBuffer.
using System;
using System.Runtime.InteropServices;
using RSI.RapidCode.dotNET;
using RSI.RapidCode.dotNET.Enums;
{
class UserLimitCommandPositionDirectSet
{
const int AXIS_INDEX = 0;
const int USER_LIMIT_FIRST = 0;
const int USER_LIMIT_SECOND = 1;
const int USER_LIMIT_COUNT = 2;
const double VELOCITY = 10000.0;
const double ACCEL = 100000.0;
const double DECEL = 1000000000000000000000.0;
const double JERK_PCT = 0.0;
const int DURATION = 0;
const bool ONE_SHOT = true;
const int COMMAND_POSITION_INDEX = 0;
const int ACTUAL_POSITION_INDEX = 1;
const int TC_COMMAND_POSITION_INDEX = 2;
const int TC_ACTUAL_POSITION_INDEX = 3;
static void ConfigureUserLimitInterrupts(int userLimitIndex)
{
}
static void WaitForInterrupts()
{
bool done = false;
int timeout_millseconds = 10000;
while(!done)
{
switch(eventType)
{
Console.WriteLine(
"CmdPos: " + BitConverter.ToDouble(BitConverter.GetBytes(controller.
InterruptUserDataGet(COMMAND_POSITION_INDEX)), 0));
Console.WriteLine(
"ActPos: " + BitConverter.ToDouble(BitConverter.GetBytes(controller.
InterruptUserDataGet(ACTUAL_POSITION_INDEX)), 0));
Console.WriteLine(
"TC.CmdPos: " + BitConverter.ToDouble(BitConverter.GetBytes(controller.
InterruptUserDataGet(TC_COMMAND_POSITION_INDEX)), 0));
Console.WriteLine(
"TC.ActPos: " + BitConverter.ToDouble(BitConverter.GetBytes(controller.
InterruptUserDataGet(TC_ACTUAL_POSITION_INDEX)), 0));
break;
done = true;
break;
default:
break;
}
}
}
static void Main(string[] args)
{
axis = controller.
AxisGet(AXIS_INDEX);
try
{
ConfigureUserLimitInterrupts(USER_LIMIT_FIRST);
ConfigureUserLimitInterrupts(USER_LIMIT_SECOND);
WaitForInterrupts();
}
catch(Exception e)
{
Console.WriteLine(e.Message);
}
}
}
}