using System;
using NUnit.Framework;
{
public static void CheckErrors(RapidCodeObject rsiObject)
{
bool hasErrors = false;
System.Text.StringBuilder errorStringBuilder = new System.Text.StringBuilder();
while (rsiObject.ErrorLogCountGet() > 0)
{
RsiError error = rsiObject.ErrorLogGet();
if (error.isWarning)
{
errorStringBuilder.AppendLine("WARNING: " + error.Message);
}
else
{
hasErrors = true;
errorStringBuilder.AppendLine("ERROR: " + error.Message);
}
}
if (errorStringBuilder.Length > 0)
{
Console.WriteLine(errorStringBuilder.ToString());
}
if (hasErrors)
{
throw new Exception(errorStringBuilder.ToString());
}
}
{
if (controller.NetworkStateGet() !=
RSINetworkState.RSINetworkStateOPERATIONAL)
{
Console.WriteLine("Starting Network..");
controller.NetworkStart();
}
if (controller.NetworkStateGet() !=
RSINetworkState.RSINetworkStateOPERATIONAL)
{
int messagesToRead = controller.NetworkLogMessageCountGet();
for (int i = 0; i < messagesToRead; i++)
{
Console.WriteLine(controller.NetworkLogMessageGet(i));
}
Console.WriteLine("Expected OPERATIONAL state but the network did not get there.");
}
else
{
Console.WriteLine("Network Started");
}
}
}
public static class Constants
{
public const int SAMPLES = 2;
public const int AXIS_NUMBER = 0;
public const int X_AXIS_NUMBER = 0;
public const int Y_AXIS_NUMBER = 1;
public const int Z_AXIS_NUMBER = 2;
public const int A_AXIS_NUMBER = 3;
public const int B_AXIS_NUMBER = 4;
public const int C_AXIS_NUMBER = 5;
public const int MAIN_AXIS_NUMBER = 0;
public const int DRIVEN_AXIS_NUMBER = 1;
public const int HOLDING_AXIS_INDEX = 0;
public const int MOVING_AXIS_INDEX = 1;
public const int AXIS_COUNT = 6;
public const int FIRST_AXIS_NUMBER = 0;
public const int SECOND_AXIS_NUMBER = 1;
public const int THIRD_AXIS_NUMBER = 2;
public const double USER_UNITS = 1;
public const double AKD_USER_UNITS = 1048576;
public const double POSITION = 2;
public const double VELOCITY = 200;
public const double ACCELERATION = 100;
public const double DECELERATION = 100;
public const double JERK_PERCENT = 50;
public const double POSITION_A = 5;
public const double POSITION_B = 10;
public const int MAX_TEST_TIME = 3000;
public const int COMP_NUM_ZERO = 0;
public const int COMP_NUM_ONE = 1;
public const int COMP_NUM_TWO = 2;
}
public class TestBase
{
public MotionController controller;
public Axis axis;
public Axis x_axis;
public Axis y_axis;
public Axis z_axis;
public Axis a_axis;
public Axis b_axis;
public Axis c_axis;
public Axis main_axis;
public Axis driven_axis;
public MultiAxis jointsMultiAxis;
public Robot robot;
public Axis CreateAndReadyAxis(int AxisNumber)
{
Axis axis = controller.AxisGet(AxisNumber);
ResetAxis(axis);
return axis;
}
public void InitializeAllAxes()
{
axis = controller.AxisGet(Constants.AXIS_NUMBER);
x_axis = controller.AxisGet(Constants.X_AXIS_NUMBER);
y_axis = controller.AxisGet(Constants.Y_AXIS_NUMBER);
z_axis = controller.AxisGet(Constants.Z_AXIS_NUMBER);
a_axis = controller.AxisGet(Constants.A_AXIS_NUMBER);
b_axis = controller.AxisGet(Constants.B_AXIS_NUMBER);
c_axis = controller.AxisGet(Constants.C_AXIS_NUMBER);
main_axis = controller.AxisGet(Constants.MAIN_AXIS_NUMBER);
driven_axis = controller.AxisGet(Constants.DRIVEN_AXIS_NUMBER);
}
public void DisableAllAxes()
{
for (int i = 0; i < controller.AxisCountGet(); i++)
{
Axis axis = controller.AxisGet(i);
axis.Abort();
axis.AmpEnableSet(false);
}
}
public void ResetAxis(Axis myAxis)
{
myAxis.ErrorLimitTriggerValueSet(1000);
myAxis.UserUnitsSet(Constants.USER_UNITS);
myAxis.PositionSet(0);
myAxis.Abort();
myAxis.DefaultAccelerationSet(Constants.ACCELERATION);
myAxis.DefaultDecelerationSet(Constants.ACCELERATION);
myAxis.DefaultVelocitySet(Constants.VELOCITY);
EnableAmp(myAxis);
}
public void EnableAmp(Axis myAxis)
{
myAxis.ClearFaults();
myAxis.AmpEnableSet(true);
}
public void TearDownFixture()
{
DisableAllAxes();
controller.Shutdown();
controller.Delete();
}
}
public class SampleAppTestBase : TestBase
{
[SetUp]
public void SetUp()
{
for (int i = 0; i < controller.AxisCountGet(); i++)
{
Axis axis = controller.AxisGet(i);
ResetAxis(axis);
}
}
[OneTimeSetUp]
public void OneTimeSetUp()
{
controller = MotionController.CreateFromSoftware(TestContext.CurrentContext.TestDirectory);
controller.AxisCountSet(Constants.AXIS_COUNT);
InitializeAllAxes();
}
[TearDown]
public void TearDown()
{
DisableAllAxes();
}
[OneTimeTearDown]
public void OneTimeTearDown()
{
controller.Shutdown();
controller.Delete();
}
}
[TestFixture]
[Category("Software")]
public class StaticMemoryTestBase : TestBase
{
[OneTimeSetUp]
public void OneTimeSetUp()
{
controller = MotionController.CreateFromSoftware(TestContext.CurrentContext.TestDirectory);
controller.Reset();
}
[SetUp]
public void Setup()
{
controller = MotionController.CreateFromSoftware(TestContext.CurrentContext.TestDirectory);
}
[TearDown]
public void TearDown()
{
TearDownFixture();
}
}
[TestFixture]
[Category("Software")]
public class HelperFunctionsTests : SampleAppTestBase
{
[Test]
public void CheckErrorsTest()
{
string expectedErrorSubstring = "Motion: MPIStateERROR";
axis.ThrowExceptions(false);
axis.Abort();
axis.MoveSCurve(1);
}
[Test]
public void CheckErrorsWarningTest()
{
const int BAD_AXIS_NUMBER = 777;
Axis badAxis = controller.AxisGet(BAD_AXIS_NUMBER);
Assert.Throws(Is.TypeOf<Exception>().And.Message.Contains(BAD_AXIS_NUMBER.ToString()), () =>
HelperFunctions.
CheckErrors(badAxis));
}
}