Примечание. Я впервые использую 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