注: MATLAB S-Function を使用するのはこれが初めてで、Simulink を使用したのはほんの数回です。
S-Function で入力変数を使用しようとすると、それらは flaginp
に戻ります。システムへの入力は、バス クリエーターを介してシステムに接続された 3 つの単純なユニティ ステップ関数です。システムをシミュレートしようとすると、エラー メッセージが表示されます。何か案は?NaN
3
inp
詳細:
クラス プロジェクトとしてセグウェイをシミュレートしています。アクチュエータ (DC モーター) とプラント (セグウェイ自体) を Simulink の個別の S-Function ブロックとしてシミュレートしています。モーターは、電圧、セグウェイの速度、ピッチ軸に対するセグウェイの角速度 (逆起電力による) の 3 つの入力を受け取ります。出力は電機子電流です。
これは単純な線形の非微分システムです。そのため、州はありません。実行される唯一の計算は、入力から出力へのフィードスルーです。コードは次のとおりです。
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