RsPathProcedure Example
This example shows you how to create a path, and how to move along it. First, we create a target and set its transformation (translation and rotation). We create a MoveInstruction for the target, and add it to our created path. This example creates six targets.
Compiling the Code
Note
This example needs an IRB140 to work.
Example
// NOTE: This example requires a station containing an IRB_140 and a running VC.
Project.UndoContext.BeginUndoStep("RsPathProcedureExample");
try
{
Station station = Station.ActiveStation;
// Create a PathProcedure.
RsPathProcedure myPath = new RsPathProcedure("myPath");
// Add the path to the ActiveTask.
station.ActiveTask.PathProcedures.Add(myPath);
myPath.ModuleName = "MyModule";
myPath.ShowName = true;
myPath.Synchronize = true;
myPath.Visible = true;
// Create the first RobTarget.
RsRobTarget target1 = new RsRobTarget();
// Set the name of the RobTarget.
target1.Name = station.ActiveTask.GetValidRapidName("Target", "_", 10);
// Set the position and rotation of the RobTarget.
target1.Frame.X = 0.50629;
target1.Frame.Y = 0;
target1.Frame.Z = 0.67950;
target1.Frame.RX = Globals.DegToRad(180); // From ABB.Robotics.Math
target1.Frame.RY = Globals.DegToRad(60);
target1.Frame.RZ = Globals.DegToRad(180);
// Add the RobTarget to the DataDeclarations of the ActiveTask.
station.ActiveTask.DataDeclarations.Add(target1);
// Create an RsTarget for the RobTarget.
RsTarget homeRsTarget = new RsTarget(station.ActiveTask.ActiveWorkObject, target1);
homeRsTarget.Name = target1.Name;
// Add it to the ActiveTask.
station.ActiveTask.Targets.Add(homeRsTarget);
// Create a MoveInstruction for the RobTarget.
RsMoveInstruction homeInstr = new RsMoveInstruction(station.ActiveTask, "Move", "Default", MotionType.Linear, "wobj0", target1.Name, "tool0");
// Add it to myPath.
myPath.Instructions.Add(homeInstr);
// Create the second RobTarget. See description for the first one.
// The steps are identical.
RsRobTarget target2 = new RsRobTarget();
target2.Name = station.ActiveTask.GetValidRapidName("Target", "_", 10);
target2.Frame.X = 0.500;
target2.Frame.Y = 0.125;
target2.Frame.Z = 0.700;
target2.Frame.RX = Globals.DegToRad(180);
target2.Frame.RY = Globals.DegToRad(60);
target2.Frame.RZ = Globals.DegToRad(180);
station.ActiveTask.DataDeclarations.Add(target2);
RsTarget trg1RsTarget = new RsTarget(station.ActiveTask.ActiveWorkObject, target2);
trg1RsTarget.Name = target2.Name;
station.ActiveTask.Targets.Add(trg1RsTarget);
RsMoveInstruction trg1Instr = new RsMoveInstruction(station.ActiveTask, "Move", "Default", MotionType.Linear, "wobj0", target2.Name, "tool0");
myPath.Instructions.Add(trg1Instr);
// Create the third RobTarget. See description for the first one.
// The steps are identical.
RsRobTarget target3 = new RsRobTarget();
target3.Name = station.ActiveTask.GetValidRapidName("Target", "_", 10);
target3.Frame.X = 0.500;
target3.Frame.Y = 0.125;
target3.Frame.Z = 0.500;
target3.Frame.RX = Globals.DegToRad(180);
target3.Frame.RY = Globals.DegToRad(60);
target3.Frame.RZ = Globals.DegToRad(180);
station.ActiveTask.DataDeclarations.Add(target3);
RsTarget trg2RsTarget = new RsTarget(station.ActiveTask.ActiveWorkObject, target3);
trg2RsTarget.Name = target3.Name;
station.ActiveTask.Targets.Add(trg2RsTarget);
RsMoveInstruction trg2Instr = new RsMoveInstruction(station.ActiveTask, "Move", "Default", MotionType.Linear, "wobj0", target3.Name, "tool0");
myPath.Instructions.Add(trg2Instr);
// Create the fourth RobTarget. See description for the first one.
// The steps are identical.
RsRobTarget target4 = new RsRobTarget();
target4.Name = station.ActiveTask.GetValidRapidName("Target", "_", 10);
target4.Frame.X = 0.500;
target4.Frame.Y = 0.200;
target4.Frame.Z = 0.500;
target4.Frame.RX = Globals.DegToRad(180);
target4.Frame.RY = Globals.DegToRad(60);
target4.Frame.RZ = Globals.DegToRad(180);
station.ActiveTask.DataDeclarations.Add(target4);
RsTarget trg3RsTarget = new RsTarget(station.ActiveTask.ActiveWorkObject, target4);
trg3RsTarget.Name = target4.Name;
station.ActiveTask.Targets.Add(trg3RsTarget);
RsMoveInstruction trg3Instr = new RsMoveInstruction(station.ActiveTask, "Move", "Default", MotionType.Linear, "wobj0", target4.Name, "tool0");
myPath.Instructions.Add(trg3Instr);
// Create the fifth RobTarget. See description for the first one.
// The steps are identical.
RsRobTarget target5 = new RsRobTarget();
target5.Name = station.ActiveTask.GetValidRapidName("Target", "_", 10);
target5.Frame.X = 0.500;
target5.Frame.Y = 0.400;
target5.Frame.Z = 0.500;
target5.Frame.RX = Globals.DegToRad(180);
target5.Frame.RY = Globals.DegToRad(60);
target5.Frame.RZ = Globals.DegToRad(180);
station.ActiveTask.DataDeclarations.Add(target5);
RsTarget trg4RsTarget = new RsTarget(station.ActiveTask.ActiveWorkObject, target5);
trg4RsTarget.Name = target5.Name;
station.ActiveTask.Targets.Add(trg4RsTarget);
RsMoveInstruction trg4Instr = new RsMoveInstruction(station.ActiveTask, "Move", "Default", MotionType.Linear, "wobj0", target5.Name, "tool0");
myPath.Instructions.Add(trg4Instr);
// Create the sixth RobTarget. See description for the first one.
// The steps are identical.
RsRobTarget target6 = new RsRobTarget();
target6.Name = station.ActiveTask.GetValidRapidName("Target", "_", 10);
target6.Frame.X = 0.500;
target6.Frame.Y = 0.400;
target6.Frame.Z = 0.700;
target6.Frame.RX = Globals.DegToRad(180);
target6.Frame.RY = Globals.DegToRad(60);
target6.Frame.RZ = Globals.DegToRad(180);
station.ActiveTask.DataDeclarations.Add(target6);
RsTarget trg5RsTarget = new RsTarget(station.ActiveTask.ActiveWorkObject, target6);
trg5RsTarget.Name = target6.Name;
station.ActiveTask.Targets.Add(trg5RsTarget);
RsMoveInstruction trg5Instr = new RsMoveInstruction(station.ActiveTask, "Move", "Default", MotionType.Linear, "wobj0", target6.Name, "tool0");
myPath.Instructions.Add(trg5Instr);
// Move along the path.
if (await myPath.MoveAlongAsync(null))
{
Logger.AddMessage(new LogMessage("Move along path '" + myPath.Name + "' succeded!"));
}
else
{
Logger.AddMessage(new LogMessage("Move along path '" + myPath.Name + "' failed!"));
}
}
catch
{
Project.UndoContext.CancelUndoStep(CancelUndoStepType.Rollback);
throw;
}
finally
{
Project.UndoContext.EndUndoStep();
}