Home > matlab > acado > packages > +acado > @SimulationEnvironment > getInstructions.m

getInstructions

PURPOSE ^

Used to generate CPP file

SYNOPSIS ^

function getInstructions(obj, cppobj, get)

DESCRIPTION ^

Used to generate CPP file

  Licence:
    This file is part of ACADO Toolkit  - (http://www.acadotoolkit.org/)

    ACADO Toolkit -- A Toolkit for Automatic Control and Dynamic Optimization.
    Copyright (C) 2008-2009 by Boris Houska and Hans Joachim Ferreau, K.U.Leuven.
    Developed within the Optimization in Engineering Center (OPTEC) under
    supervision of Moritz Diehl. All rights reserved.

    ACADO Toolkit is free software; you can redistribute it and/or
    modify it under the terms of the GNU Lesser General Public
    License as published by the Free Software Foundation; either
    version 3 of the License, or (at your option) any later version.

    ACADO Toolkit is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
    Lesser General Public License for more details.

    You should have received a copy of the GNU Lesser General Public
    License along with ACADO Toolkit; if not, write to the Free Software
    Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA

    Author: David Ariens
    Date: 2010

CROSS-REFERENCE INFORMATION ^

This function calls: This function is called by:

SOURCE CODE ^

0001 function getInstructions(obj, cppobj, get)
0002 %Used to generate CPP file
0003 %
0004 %  Licence:
0005 %    This file is part of ACADO Toolkit  - (http://www.acadotoolkit.org/)
0006 %
0007 %    ACADO Toolkit -- A Toolkit for Automatic Control and Dynamic Optimization.
0008 %    Copyright (C) 2008-2009 by Boris Houska and Hans Joachim Ferreau, K.U.Leuven.
0009 %    Developed within the Optimization in Engineering Center (OPTEC) under
0010 %    supervision of Moritz Diehl. All rights reserved.
0011 %
0012 %    ACADO Toolkit is free software; you can redistribute it and/or
0013 %    modify it under the terms of the GNU Lesser General Public
0014 %    License as published by the Free Software Foundation; either
0015 %    version 3 of the License, or (at your option) any later version.
0016 %
0017 %    ACADO Toolkit is distributed in the hope that it will be useful,
0018 %    but WITHOUT ANY WARRANTY; without even the implied warranty of
0019 %    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
0020 %    Lesser General Public License for more details.
0021 %
0022 %    You should have received a copy of the GNU Lesser General Public
0023 %    License along with ACADO Toolkit; if not, write to the Free Software
0024 %    Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
0025 %
0026 %    Author: David Ariens
0027 %    Date: 2010
0028 %
0029 
0030 
0031 global ACADO_;
0032 
0033 if (get == 'B')
0034      
0035     fprintf(cppobj.fileMEX,sprintf('    SimulationEnvironment %s(%s, %s, %s, %s);\n', obj.name, stringIntDouble(obj.startTime), stringIntDouble(obj.endTime), obj.process.name, obj.controller.name));
0036     
0037     if (~isempty(obj.initvector))
0038         fprintf(cppobj.fileMEX,sprintf('     %s.init(%s);\n', obj.name, obj.initvector.name));
0039     end
0040     
0041     fprintf(cppobj.fileMEX,sprintf('    returnValue returnvalue = %s.run();\n', obj.name));
0042     
0043     fprintf(cppobj.fileMEX,'\n');
0044     fprintf(cppobj.fileMEX,'\n');
0045 
0046     
0047     fprintf(cppobj.fileMEX,'    VariablesGrid out_processout; \n');
0048     fprintf(cppobj.fileMEX,'    VariablesGrid out_feedbackcontrol; \n');
0049     fprintf(cppobj.fileMEX,'    VariablesGrid out_feedbackparameter; \n');
0050     fprintf(cppobj.fileMEX,'    VariablesGrid out_states; \n');
0051     fprintf(cppobj.fileMEX,'    VariablesGrid out_intermediate_states; \n');
0052     fprintf(cppobj.fileMEX,'    VariablesGrid out_algstates; \n');
0053     
0054     fprintf(cppobj.fileMEX,sprintf('    %s.getSampledProcessOutput(out_processout);\n', obj.name));
0055     fprintf(cppobj.fileMEX,sprintf('    %s.getProcessDifferentialStates(out_states);\n', obj.name));
0056     if (~isempty(cppobj.u))
0057         fprintf(cppobj.fileMEX,sprintf('    %s.getFeedbackControl(out_feedbackcontrol);\n', obj.name));
0058     end
0059     if (~isempty(cppobj.p))
0060         fprintf(cppobj.fileMEX,sprintf('    %s.getFeedbackParameter(out_feedbackparameter);\n', obj.name));
0061     end
0062     if (~isempty(cppobj.ints))
0063         fprintf(cppobj.fileMEX,sprintf('    %s.getProcessIntermediateStates(out_intermediate_states);\n', obj.name));
0064     end
0065     if (~isempty(cppobj.z))
0066         fprintf(cppobj.fileMEX,sprintf('    %s.getProcessAlgebraicStates(out_algstates);\n', obj.name));
0067     end
0068     
0069 
0070     if (ACADO_.results_to_file == true)
0071         % Write output to files
0072         fprintf(cppobj.fileMEX,sprintf('    out_processout.printToFile( "%s_OUT_states_sampled.m","STATES_SAMPLED",PS_MATLAB ); \n', cppobj.problemname));
0073         fprintf(cppobj.fileMEX,sprintf('    out_feedbackcontrol.printToFile( "%s_OUT_controls.m","CONTROLS",PS_MATLAB ); \n', cppobj.problemname));
0074         fprintf(cppobj.fileMEX,sprintf('    out_feedbackparameter.printToFile( "%s_OUT_parameters.m","PARAMETERS",PS_MATLAB ); \n', cppobj.problemname));
0075         fprintf(cppobj.fileMEX,sprintf('    out_states.printToFile( "%s_OUT_states.m","STATES",PS_MATLAB ); \n', cppobj.problemname));
0076         fprintf(cppobj.fileMEX,sprintf('    out_intermediate_states.printToFile( "%s_OUT_intermediatestates.m","INTERMEDIATESTATES",PS_MATLAB ); \n', cppobj.problemname));  
0077         fprintf(cppobj.fileMEX,sprintf('    out_algstates.printToFile( "%s_OUT_algebraicstates.m","ALGEBRAICSTATES",PS_MATLAB ); \n', cppobj.problemname));
0078     end
0079     
0080 
0081     fprintf(cppobj.fileMEX,'    const char* outputFieldNames[] = {"STATES_SAMPLED", "CONTROLS", "PARAMETERS", "STATES", "INTERMEDIATESTATES", "ALGEBRAICSTATES", "CONVERGENCE_ACHIEVED"}; \n');
0082     fprintf(cppobj.fileMEX,'    plhs[0] = mxCreateStructMatrix( 1,1,7,outputFieldNames ); \n');
0083     
0084     cppobj.getCPPlefthandout('OutSS', 'outSS', 'out_processout')
0085     fprintf(cppobj.fileMEX,'    mxSetField( plhs[0],0,"STATES_SAMPLED",OutSS );\n');
0086     
0087     cppobj.getCPPlefthandout('OutS', 'outS', 'out_states')
0088     fprintf(cppobj.fileMEX,'    mxSetField( plhs[0],0,"STATES",OutS );\n');
0089     
0090     cppobj.getCPPlefthandout('OutC', 'outC', 'out_feedbackcontrol')
0091     fprintf(cppobj.fileMEX,'    mxSetField( plhs[0],0,"CONTROLS",OutC );\n');
0092     
0093     cppobj.getCPPlefthandout('OutP', 'outP', 'out_feedbackparameter')
0094     fprintf(cppobj.fileMEX,'    mxSetField( plhs[0],0,"PARAMETERS",OutP );\n');
0095 
0096     cppobj.getCPPlefthandout('OutIS', 'outIS', 'out_intermediate_states')
0097     fprintf(cppobj.fileMEX,'    mxSetField( plhs[0],0,"INTERMEDIATESTATES",OutIS );\n');
0098  
0099     cppobj.getCPPlefthandout('OutZ', 'outZ', 'out_algstates')
0100     fprintf(cppobj.fileMEX,'    mxSetField( plhs[0],0,"ALGEBRAICSTATES",OutZ );\n');
0101 
0102     fprintf(cppobj.fileMEX,'    mxArray *OutConv = NULL;\n');
0103     fprintf(cppobj.fileMEX,'    if ( returnvalue == SUCCESSFUL_RETURN ) { OutConv = mxCreateDoubleScalar( 1 ); }else{ OutConv = mxCreateDoubleScalar( 0 ); } \n');
0104     fprintf(cppobj.fileMEX,'    mxSetField( plhs[0],0,"CONVERGENCE_ACHIEVED",OutConv );\n');    
0105     
0106     fprintf(cppobj.fileMEX,'\n');
0107    
0108 end
0109 
0110 end

www.acadotoolkit.org/matlab
Generated on Tue 01-Jun-2010 20:14:12 by m2html © 2005