s功能直接馈通

时间:2012-04-14 16:08:57

标签: matlab simulation nan simulink

注意:这是我第一次使用MATLAB S函数,而且我只使用过几次Simulink。

当我尝试在S函数inp中使用我的输入变量时,它们会在标记NaN上返回3。系统的输入是三个简单的统一步骤功能,通过总线创建器连接到系统。在尝试模拟系统时,我收到一条错误消息 - 我只是通过在inp上进行测试打印,发现它们是NaN。有什么想法吗?


详细信息:
我正在模拟Segway作为一个类项目。我将执行器(直流电机)和工厂(赛格威本身)模拟为Simulink中的独立S功能块。电机需要三个输入:电压,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

1 个答案:

答案 0 :(得分:1)

正如您所提到的,它是直接馈通,因此您必须设置

sys(6)=1 in flag==0...