Simulink модель «в рабочую область» вывод - PullRequest
0 голосов
/ 04 июля 2019

Я пытаюсь контролировать крутящий момент двигателя и использую переменную рабочего пространства в Simulink и хочу вывести переменную, аналогичную рабочей области.

У меня есть размер (T_u) = [3, 91], тогда как выходной явыход из симуляции имеет размер [91, 90]

Я не могу понять, почему это так.

Код, который я использую:

load('Motor_Param.mat')

t = 1:0.1:10;
T_o = [0.05*(10-t);0.04*(10-t);0.03*(10-t)];
T_d = zeros(size(T_o));
T_e = (T_d - T_o);
C_PD = pid(100,0,10,100);
T_u = zeros(size(T_e));
for k=1:size(T_e,1)
    T_u(k,:) = lsim(C_PD,T_e(k,:),t);
%T_u(1,:)= -45.0450000000000    -44.5444552724092   -44.0439110892737   -43.5433674500493   -43.0428243541925   -42.5422818011600   -42.0417397904094   -41.5411983213986   -41.0406573935862   -40.5401170064312   -40.0395771593933   -39.5390378519326   -39.0384990835098   -38.5379608535861   -38.0374231616233   -37.5368860070837   -37.0363493894301   -36.5358133081260   -36.0352777626353   -35.5347427524223   -35.0342082769522   -34.5336743356904   -34.0331409281029   -33.5326080536564   -33.0320757118181   -32.5315439020554   -32.0310126238368   -31.5304818766308   -31.0299516599067   -30.5294219731343   -30.0288928157839   -29.5283641873264   -29.0278360872332   -28.5273085149760   -28.0267814700274   -27.5262549518604   -27.0257289599483   -26.5252034937652   -26.0246785527857   -25.5241541364848   -25.0236302443380   -24.5231068758215   -24.0225840304120   -23.5220617075865   -23.0215399068228   -22.5210186275990   -22.0204978693939   -21.5199776316868   -21.0194579139572   -20.5189387156857   -20.0184200363529   -19.5179018754402   -19.0173842324294   -18.5168671068029   -18.0163504980435   -17.5158344056347   -17.0153188290603   -16.5148037678048   -16.0142892213531   -15.5137751891906   -15.0132616708034   -14.5127486656779   -14.0122361733011   -13.5117241931606   -13.0112127247442   -12.5107017675407   -12.0101913210389   -11.5096813847285   -11.0091719580996   -10.5086630406426   -10.0081546318487   -9.50764673120954   -9.00713933821711   -8.50663245236405   -8.00612607314350   -7.50562020004906   -7.00511483257487   -6.50460997021554   -6.00410561246623   -5.50360175882257   -5.00309840878072   -4.50259556183731   -4.00209321748951   -3.50159137523496   -3.00109003457184   -2.50058919499879   -2.00008885601498   -1.49958901712007   -0.999089677814209  -0.498590837598075  0.00190750402718064

    a = sim('Motor_Control','SimulationMode','normal');
    out = a.get('T_l')
end

Ссылка наФайлы .mat и .slx: https://drive.google.com/open?id=1kGeA4Cmt8mEeM3ku_C4NtXclVlHsssuw

Ответы [ 2 ]

0 голосов
/ 05 июля 2019

Я редактирую ваш код, код имеет размер вывода [21,3].«21» исходит из (t_final * 1 / sample_time + 1)

  • В вашем коде время t должно начинаться с 0.
  • Модель Motor_Control.slx имеет время выборки 0,1, еслиВы запускаете модель в течение 9 секунд, выходной файл имеет 91 выборку для каждого сигнала, и поэтому у вас есть выходной размер [91, 90].Я скачиваю с твоей ссылки по ссылке и у этой модели Simulink есть 2 сек.моделирование.
  • T_u используется как вход модели Simulink, оно не является постоянным, поэтому T_u должен быть временным рядом.

Отредактированный код приведен ниже;

load('Motor_Param.mat')
t = 0:0.1:10;
T_o = [0.05*(10-t);0.04*(10-t);0.03*(10-t)];
T_d = zeros(size(T_o));
T_e = (T_d - T_o);
C_PD = pid(100,0,10,100);
T_u = timeseries(zeros(size(T_e)),t);
for k=1:size(T_e,1)
    T_u.Data(k,:) = lsim(C_PD,T_e(k,:),t);
    a = sim('Motor_Control','SimulationMode','normal');
    out = a.get('T_l')
end
0 голосов
/ 04 июля 2019

Если вы установите Save format в блоке To Workspace на Timeseries, выход будет иметь размеры сигнала, умноженные на количество временных шагов.

В вашем случае я активировал опцию Display->Signals & Ports->Signal dimensions, и размеры сигнала в вашей модели выглядят так:

Signal dimensions in Simulink model

Таким образом, сигнал, который вы выводите в рабочую область, имеет размер 90. Теперь, если я напечатаю size(out.Data), я получу

ans = 138  90

, где 90 - это размер сигнала, а 138 - количество временных шагов в вашей модели Simulink.

Теперь вы можете использовать последнюю строку данных (которая имеет длину 90) и добавить ее в свой массив.

...