s-функция прямой ввод

Примечание. Я впервые использую S-функцию MATLAB, и я использовал Simulink всего несколько раз.

Когда я пытаюсь использовать свои входные переменные в S-функции, inp, они возвращают NaN с флагом 3. Входными данными для системы являются три простые функции единичного шага, подключенные к системе через генератор шины. При попытке смоделировать систему я получаю сообщение об ошибке — я обнаружил, что они NaN, только выполнив тестовую печать на inp. Любые идеи?


Подробности:
Я моделирую Segway как классный проект. Я моделирую привод (двигатель постоянного тока) и установку (сам Segway) как отдельные S-функциональные блоки в Simulink. Двигатель принимает три входа: напряжение, скорость Segway и угловая скорость Segway относительно его оси тангажа (из-за обратной ЭДС). На выходе ток якоря.

Это простая, линейная, недифференциальная система. По этой причине нет государств. Единственное вычисление, которое выполняется, — это сквозная передача от входов к выходу. Код выглядит следующим образом:

function [sys,X0]=nl_pend(time,state,inp,FLAG,ICs);
% actuator parameters:
% R_m: motor armature resistance
% K_b: motor back emf constant
% K_t: motor torque constant
% r: radius of the wheel
global R_m K_b K_t r;

if FLAG == 0,   % initialize system parameters and states
% Call file that initializes parameters
    segway_dcmotor_pars;
% This system has:
%  0 states (theta,thetatheta_dot),
%  3 input  (v,x_dot,theta_dot),
%  1 outputs (i)
nx = 0; % # of states
nu = 3; % # of inputs
ny = 1; % # of outputs
sys = [nx; 0; ny; nu; 0; 0];
% Initial Conditions  (will be passed as and argument)
X0 = ICs;
elseif FLAG == 1, % states derivatives
    %blank
elseif FLAG == 3,  % system outputs
    %inp(1) = motor voltage
    %inp(2) = segway velocity
    %inp(3) = segway pitch angular velocity
    display( inp );
    y(1) = (1/R_m)*inp(1) - (K_b/(r*R_m))*inp(2) + (K_b/R_m)*inp(3);
    sys = y;
else,
    sys = [];
end

person rurouniwallace    schedule 14.04.2012    source источник
comment
Что ж, я нашел решение. Я изменил его так, чтобы вместо отсутствия состояний у системы было одно состояние q, которое представляет собой заряд в якоре. Поскольку это решение, а не ответ, я оставлю вопрос открытым для любых идей относительно того, почему первый метод не сработал.   -  person rurouniwallace    schedule 14.04.2012


Ответы (1)


Как вы упомянули, это прямой проход, поэтому вам нужно установить

sys(6)=1 in flag==0... 
person Raphgut    schedule 22.04.2012