#include <labbcan/common/Point.h>
#include <labbcan/common/labbcan_test_helpers.h>
#include <usl/core/Thread.h>
#include <usl/core/PollingTimer.h>
#include <log4cplus/logger.h>
#include <diag/diag.h>
using namespace Lcl;
using namespace Usl;
#define BOOST_TEST_MODULE capi_nemaxys_test
#include <boost/test/unit_test.hpp>
long Result = 0;
BOOST_AUTO_TEST_CASE(testCapiOpen)
{
using namespace boost::unit_test;
Result =
LCB_Open(
"config/testconfig_qmixsdk", 0);
CHECK_RETURN_CODE(Result);
CHECK_RETURN_CODE(Result);
Result =
LCB_Open(
"config/testconfig_qmixsdk", 0);
CHECK_RETURN_CODE(Result);
CHECK_RETURN_CODE(Result);
Result =
LCB_Open(
"config/testconfig_qmixsdk", 0);
REQUIRE_ERR_NOERR(Result);
}
BOOST_AUTO_TEST_CASE(testDeviceNameLookup)
{
BOOST_CHECK_NE(hAxisX, 0);
CHECK_RETURN_CODE(Result);
BOOST_CHECK_NE(hAxisSystem, 0);
CHECK_RETURN_CODE(Result);
char Name[64];
CHECK_RETURN_CODE(Result);
BOOST_CHECK_EQUAL(hAxisSystem, hAxisSystem2);
CHECK_RETURN_CODE(Result);
BOOST_CHECK_EQUAL(hAxisX, hAxis1);
CHECK_RETURN_CODE(Result);
CHECK_RETURN_CODE(Result);
BOOST_CHECK_BITWISE_EQUAL(hAxis2, (
dev_hdl)0);
}
BOOST_AUTO_TEST_CASE(testDeviceInfo)
{
char StringBuf[64];
BOOST_TEST_MESSAGE("Device name: " << StringBuf);
}
BOOST_AUTO_TEST_CASE(testBusStart)
{
CHECK_RETURN_CODE(Result);
Result =
LCB_Log(
"C-API Log Test Message");
CHECK_RETURN_CODE(Result);
}
bool waitAxisHomingAttained(
dev_hdl hAxis, uint32_t TimeoutSeconds)
{
CPollingTimer Timer(TimeoutSeconds * 1000);
do
{
CThread::sleep(100);
}
while ((0 == Result) && !Timer.isExpired());
return (Result > 0);
}
bool waitHomingAttained(
dev_hdl AxisSystem, uint32_t TimeoutSeconds)
{
CPollingTimer Timer(TimeoutSeconds * 1000);
do
{
CThread::sleep(100);
}
while ((0 == Result) && !Timer.isExpired());
return (Result > 0);
}
bool waitAxisTargetReached(
dev_hdl hAxis, uint32_t TimeoutSeconds)
{
CPollingTimer Timer(TimeoutSeconds * 1000);
do
{
CThread::sleep(100);
}
while ((0 == Result) && !Timer.isExpired());
return (Result > 0);
}
bool waitTargetReached(
dev_hdl AxisSystem, uint32_t TimeoutSeconds)
{
CPollingTimer Timer(TimeoutSeconds * 1000);
do
{
CThread::sleep(100);
}
while ((0 == Result) && !Timer.isExpired());
return (Result > 0);
}
BOOST_AUTO_TEST_CASE(testAxisSystemEnable)
{
CHECK_RETURN_CODE(Result);
for (int i = 0; i < 3; ++i)
{
BOOST_CHECK_GT(Result, 0);
}
}
BOOST_AUTO_TEST_CASE(testAxisSystemHoming)
{
bool HomingAttained = waitHomingAttained(hAxisSystem, 30);
BOOST_CHECK_EQUAL(HomingAttained, true);
}
BOOST_AUTO_TEST_CASE(testXyPositioning)
{
BOOST_CHECK_GT(AxisX, 0);
CHECK_RETURN_CODE(Result);
BOOST_CHECK_GT(AxisY, 0);
CHECK_RETURN_CODE(Result);
double maxX;
double maxY;
CHECK_RETURN_CODE(Result);
std::vector<CPoint> Targets;
Targets.push_back(CPoint(maxX, maxY));
Targets.push_back(CPoint(0, 0));
for (unsigned int i = 0; i < Targets.size(); ++i)
{
CPoint TargetPosition = Targets.at(i);
TargetPosition.y(), 1, 0);
CHECK_RETURN_CODE(Result);
bool Result = waitTargetReached(hAxisSystem, 10);
BOOST_CHECK_EQUAL(Result, true);
}
for (unsigned int i = 0; i < Targets.size(); ++i)
{
CPoint TargetPosition = Targets.at(i);
TargetPosition.y(), 0.5, 0);
CHECK_RETURN_CODE(Result);
bool Result = waitTargetReached(hAxisSystem, 30);
BOOST_CHECK_EQUAL(Result, true);
}
}
BOOST_AUTO_TEST_CASE(testZPositioning)
{
BOOST_CHECK_GT(AxisZ, 0);
CHECK_RETURN_CODE(Result);
double MaxVelocity;
CHECK_RETURN_CODE(Result);
double MinPosition;
CHECK_RETURN_CODE(Result);
CHECK_RETURN_CODE(Result);
bool TargetReached = waitAxisTargetReached(AxisZ, 30);
BOOST_CHECK_EQUAL(TargetReached, true);
double MaxPositon;
CHECK_RETURN_CODE(Result);
CHECK_RETURN_CODE(Result);
Result = waitAxisTargetReached(AxisZ, 30);
BOOST_CHECK_EQUAL(Result, true);
}
void testAxisMinMaxPositioning(int AxisId)
{
BOOST_CHECK_GT(Axis, 0);
CHECK_RETURN_CODE(Result);
double MaxVelocity;
CHECK_RETURN_CODE(Result);
double MinPosition;
CHECK_RETURN_CODE(Result);
CHECK_RETURN_CODE(Result);
bool TargetReached = waitAxisTargetReached(Axis, 30);
BOOST_CHECK_EQUAL(TargetReached, true);
double MaxPositon;
CHECK_RETURN_CODE(Result);
CHECK_RETURN_CODE(Result);
Result = waitAxisTargetReached(Axis, 30);
BOOST_CHECK_EQUAL(Result, true);
}
BOOST_AUTO_TEST_CASE(testAllAxisTravelRange)
{
BOOST_CHECK_GT(AxisCount, 0);
for (int i = 0; i < AxisCount; ++i)
{
testAxisMinMaxPositioning(i);
}
}
BOOST_AUTO_TEST_CASE(testAxesDisable)
{
CHECK_RETURN_CODE(Result);
CThread::sleep(200);
BOOST_CHECK_GT(AxisCount, 0);
for (int i = 0; i < AxisCount; ++i)
{
BOOST_CHECK_GT(Axis, 0);
CHECK_RETURN_CODE(Result);
BOOST_CHECK_EQUAL(0, Result);
BOOST_CHECK_EQUAL(0, Result);
}
}
BOOST_AUTO_TEST_CASE(testCapiClose)
{
CHECK_RETURN_CODE(Result);
CHECK_RETURN_CODE(Result);
}