Simulink sim-команда не использует данные о времени во входных временных сериях - PullRequest
0 голосов
/ 24 июня 2018

Я пытаюсь научиться делать тестовые жгуты в Simulink.Для этого я сделал простой блок кросс-произведения и прикрепил к нему два векторных входа (u, v).test_harnness_cross_product

Внутри cross_product находится эта архитектура: cross_product_contents

Для запуска теста у меня есть отдельный скрипт, который вызываеткоманда sim ():

%% SETUP
clear, clc, close all


%overwrite these params just to be safe that they are correct...
options.LoadExternalInput = 'on';
options.ExternalInput = 'u_in, v_in';
options.StopTime = 'end_time';

% generate vector data
u_in_data = [1 0 0; 0 1 0];
v_in_data = [0 1 0; 0 0 1];

% u_in_data = 10*rand(num_el,3)-5; % 10x3 of -5 to 5
% v_in_data = 10*rand(num_el,3)-5; % 10x3 of -5 to 5

% sim options
sim_dt = 1;
model_name = 'harness_cross_product';
u_size = size(u_in_data);
num_el = u_size(1);
end_time = num_el-sim_dt;
y_out_e = zeros(num_el,3);
test_limit = 1e-9;

% Generate time data
u_in_time = 0:sim_dt:end_time;
v_in_time = u_in_time;

% define input timeseries
u_in = timeseries(u_in_data, u_in_time);
v_in = timeseries(v_in_data, v_in_time);

%% sim
simOut = sim(model_name,options);

%% comparison and scoring
y_out  = simOut.yout{1}.Values.Data;
y_out = y_out(1:num_el,:);

% fetch expected results
for indx=1:num_el
    y_out_e(indx,:) = cross(u_in_data(indx,:),v_in_data(indx,:));
end

% scoring
res_norm = norm(y_out-y_out_e);
if res_norm < test_limit
    test_score = 'passed';
else
    test_score = 'failed!';
end

disp(['Test ' test_score]);

Когда я запускаю скрипт, он не возвращает [0 0 1;-1 0 0] как надо.Скорее, он возвращает массив данных размером 51 на 3 столбца.Я почти уверен, что это как-то связано с sim (), не понимая, что я хочу использовать дискретное время u_in.Time = [0;1], поскольку вместо этого он генерирует свой собственный вектор времен simOut.tout = [0: 0,02: 1];Есть ли какая-то пара имя-значение, которую мне нужно включить в структуру параметров, которой у меня нет?

1 Ответ

0 голосов
/ 24 июня 2018

Я нашел проблему. Если у вас есть эта проблема, не забудьте проверить:

ModelConfigurationParameters> SolverOptions> Type [выберите «Fixed-step» из выпадающего меню]

и

ModelConfigurationParameters> SolverOptions> Solver [выберите «дискретный (без непрерывных состояний)» из выпадающего меню]

Как только были выбраны оба из этих параметров. Мой тест пройден.

Редактировать: может также потребоваться установить

ModelConfigurationParameters> Additional options> Fixed-step size [set equal to 1]
...