Code covered by the BSD License  

Highlights from
Moving Horizon Estimation

image thumbnail

Moving Horizon Estimation

by

John Hedengren

 

Simulink and MATLAB Toolbox for Moving Horizon Estimation and Model Predictive Control

apm_sol(server,app)
% APM Retrieve Solution in Structure Format
%
% y = apm_sol(server,app)
%
% Function apm_sol retrieves the solution from the APM server
%   with the following arguments:
%
% Input:  server   = server web-address to retrieve the solution
%         app      = application name
%
% Output: y.names  = names of all variables
%         y.values = tables of values corresponding to y.names
%         y.nvar   = number of variables
%         y.x      = combined variables and values but variable
%                      names may be modified to make them valid MATLAB
%                      characters (e.g. replace '[' with '_')
function [y] = apm_sol(server,app)
filename = ['solution_' app '.csv'];
% get ip address for web-address lookup
ip = deblank(urlread([deblank(server) '/ip.php']));
url = [deblank(server) '/online/' ip '_' app '/results.csv'];
response = urlread(url);
% write solution.csv file
fid = fopen(filename,'w');
fwrite(fid,response);
fclose(fid);
% tranfer solution to local array
% load data from csv file with header on the right column
fid = fopen(filename, 'r');
% Parse and read rest of file
ctr = 0;
while(~feof(fid))
    aline = fgetl(fid);
    if ischar(aline)
        ctr = ctr + 1;
        A(ctr,:) = parse(aline, ',');
    else
        break;
    end
end
fclose(fid);
[n,m] = size(A);
for i = 1:n,
    for j = 2:m,
        A{i,j} = str2num(A{i,j});
    end
end
raw = A';

% extract names
y.names = raw(1,:);
% extract values
y.values = cell2mat(raw(2:end,:));
% number of variables
y.nvar = size(y.values,2);
% remove the following characters
c = '[],().';
nc = size(c,2);
% generate variable names as a structure
for i = 1:y.nvar;
    % remove some offending characters for MATLAB that
    %   are allowed in APM including: "[],()."
    var_name = y.names(i);
    for j = 1:nc,
         var_name = strrep(var_name, c(j), '');
    end
    str = ['y.x.' var_name{1} '= y.values(:,' int2str(i) ');'];
    eval(str);
end

Contact us