00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
#include "../GeneralInclude/CompilerSwitches.h"
00011
#include "../GeneralInclude/ClassId.h"
00012
#include "../GeneralInclude/Constants.h"
00013
#include "../Data/DC_DataItem.h"
00014
#include "../Data/ControlBlock.h"
00015
#include "../Data/DC_MatlabDataItemPID.h"
00016
#include "TestCaseMatlabDataItemPID_1.h"
00017
00018 TestCaseMatlabDataItemPID_1::TestCaseMatlabDataItemPID_1(
void) :
00019
TestCaseGenericSetUp(ID_MATLABDATAITEMPID*10+1,"
TestCaseMatlabDataItemPID_1") {
00020
return;
00021 }
00022
00023 void TestCaseMatlabDataItemPID_1::runTestCase(
void) {
00024
TD_Float input;
00025
TD_Float output;
00026
const unsigned int numParams=3;
00027
DC_DataItem *pInput =
new DC_DataItem(&input);
00028 DC_DataItem *pOutput =
new DC_DataItem(&output);
00029
DC_MatlabDataItemPID *pMPID =
new DC_MatlabDataItemPID;
00030
00031
00032
if (pMPID->
getClassId()!=ID_MATLABDATAITEMPID) {
00033 setTestResult(
TEST_FAILURE,
"Wrong class identifier");
00034
return;
00035 }
00036
00037
00038
if (pMPID->
isObjectConfigured()) {
00039 setTestResult(
TEST_FAILURE,
"Newly created control block is not configured");
00040
return;
00041 }
00042
00043
00044 pMPID->
setInputLink(0,pInput);
00045
if (pMPID->
isObjectConfigured()) {
00046 setTestResult(
TEST_FAILURE,
"Wrong configuration status");
00047
return;
00048 }
00049
00050
00051 pMPID->
setOutputLink(0,pOutput);
00052
if (!pMPID->
isObjectConfigured()) {
00053 setTestResult(
TEST_FAILURE,
"failed to configure the control block");
00054
return;
00055 }
00056
00057
00058
if (pMPID->
getNumberOfParameters()!=numParams) {
00059 setTestResult(
TEST_FAILURE,
"Wrong number of parameters");
00060
return;
00061 }
00062
00063
#ifdef HAVE_SIMULINK
00064
00065
const TD_Float defaultParameters[]={(
TD_Float)-1.0,(
TD_Float)1.0,(
TD_Float)1.0};
00066
00067
for (
unsigned int i=0;i<numParams;i++)
00068 pMPID->
setParameter(i,defaultParameters[i]);
00069
00070
00071
00072
00073
00074
const TD_Float expectedResults[]={(
TD_Float)3.0,(
TD_Float)-0.75,
00075 (
TD_Float)3.0,(
TD_Float)-1.0,(
TD_Float)0.25};
00076
const TD_Float *pRes =expectedResults;
00077
00078
00079
00080
00081
00082 input=(
TD_Float)1.0;
00083
00084
00085 output=(
TD_Float)0.0;
00086
00087 pMPID->
propagate();
00088
if (fabsf(output-*pRes++)>=FLT_EPSILON) {
00089 setTestResult(
TEST_FAILURE,
"Control block returned wrong value");
00090
return;
00091 }
00092
00093 pMPID->
propagate();
00094
if (fabsf(output-*pRes++)>=FLT_EPSILON) {
00095 setTestResult(
TEST_FAILURE,
"Control block returned wrong value");
00096
return;
00097 }
00098
00099
00100
00101 pMPID->
reset();
00102 pMPID->
propagate();
00103
if (fabsf(output-*pRes++)>=FLT_EPSILON) {
00104 setTestResult(
TEST_FAILURE,
"Control block reset failed");
00105
return;
00106 }
00107
00108
00109 pMPID->
reset();
00110 pMPID->
setParameter(2,(
TD_Float)0.0);
00111 pMPID->
propagate();
00112
if (fabsf(output-*pRes++)>=FLT_EPSILON) {
00113 setTestResult(
TEST_FAILURE,
"Failed to set the D gain");
00114
return;
00115 }
00116
00117
00118 pMPID->
reset();
00119 pMPID->
setParameter(0,(
TD_Float)0.0);
00120 pMPID->
propagate();
00121 pMPID->
propagate();
00122
if (fabsf(output-*pRes++)>=FLT_EPSILON) {
00123 setTestResult(
TEST_FAILURE,
"Failed to set the P gain");
00124
return;
00125 }
00126
#else
00127
00128
00129
00130 pMPID->
propagate();
00131 pMPID->
reset();
00132
#endif
00133
00134 setTestResult(
TEST_SUCCESS,
"Test Successful");
00135
return;
00136 }