using NUnit.Framework;
using System;
[TestFixture]
[Category("Software")]
public class MotionHold : SampleAppTestBase
{
public void MotionHoldByDigitalInput()
{
const int DIGITAL_INPUTS_PDO_INDEX = 3;
ulong inputAddress = controller.NetworkInputAddressGet(DIGITAL_INPUTS_PDO_INDEX);
axis.MotionHoldUserAddressSet(inputAddress);
axis.MotionHoldUserMaskSet(0x20000);
axis.MotionHoldUserPatternSet(0x20000);
axis.MoveRelative(10);
axis.MotionDoneWait();
axis.MoveRelative(10);
axis.MotionDoneWait();
axis.MoveRelative(10);
axis.MotionDoneWait();
axis.Abort();
axis.ClearFaults();
}
[Test]
public void MotionHoldByPosition()
{
const double TRIGGER_POS = 1;
const int MOVING_AXIS_TARGET = 10;
const int HOLDINGAXIS_TARGET = 2;
Axis holdingAxis = controller.AxisGet(Constants.HOLDING_AXIS_INDEX);
Axis movingAxis = controller.AxisGet(Constants.MOVING_AXIS_INDEX);
holdingAxis.MotionHoldTypeSet(
RSIMotionHoldType.RSIMotionHoldTypeAXIS_COMMAND_POSITION);
holdingAxis.MotionHoldAxisNumberSet(movingAxis.NumberGet());
holdingAxis.MotionHoldAxisPositionSet(TRIGGER_POS);
holdingAxis.MoveRelative(HOLDINGAXIS_TARGET);
movingAxis.MoveRelative(MOVING_AXIS_TARGET);
movingAxis.MotionDoneWait();
holdingAxis.MotionDoneWait();
Assert.AreEqual(HOLDINGAXIS_TARGET, holdingAxis.CommandPositionGet());
}
[Test]
public void MotionHoldBySoftwareAddress()
{
int WAIT_TIME = 10;
int MOVE_DIST = 2;
axis.MotionHoldUserAddressSet(SOFTWARE_ADDRESS);
axis.MotionHoldUserMaskSet(0x1);
axis.MotionHoldUserPatternSet(0x1);
if (controller.MemoryGet(SOFTWARE_ADDRESS) != 0x0)
{
controller.MemorySet(SOFTWARE_ADDRESS, 0x0);
}
axis.MoveRelative(MOVE_DIST);
System.Threading.Thread.Sleep(WAIT_TIME);
var expectedCmdPos1 = axis.CommandPositionGet();
controller.MemorySet(SOFTWARE_ADDRESS, 0x1);
axis.MotionDoneWait();
controller.MemorySet(SOFTWARE_ADDRESS, 0x0);
var expectedCmdPos2 = axis.CommandPositionGet();
axis.MoveRelative(MOVE_DIST);
System.Threading.Thread.Sleep(WAIT_TIME);
controller.MemorySet(SOFTWARE_ADDRESS, 0x1);
axis.MotionDoneWait();
controller.MemorySet(SOFTWARE_ADDRESS, 0x0);
axis.MoveRelative(MOVE_DIST);
axis.MotionDoneWait();
Assert.AreEqual(0, expectedCmdPos1);
Assert.AreEqual(MOVE_DIST, expectedCmdPos2);
}
}