2012-04-14 1 views
0

참고 : 이것은 MATLAB S- 함수를 처음 사용하는 경우이며, Simulink를 몇 번 사용했습니다.s 함수 직접 피드 스루

S- 함수에서 입력 변수 inp을 사용하려고하면 3NaN을 반환합니다. 시스템에 대한 입력은 버스 생성자를 통해 시스템에 연결된 세 가지 간단한 단일 단계 기능입니다. 시스템을 시뮬레이트 할 때 오류 메시지가 나타납니다. inp에서 테스트 인쇄를 수행하여 NaN 만 발견했습니다. 어떤 아이디어?


세부 사항 :
나는 세그웨이를 클래스 프로젝트로 시뮬레이션 중이다. Simulink에서 액츄에이터 (DC 모터)와 플랜트 (Segway 자체)를 별도의 S- 기능 블록으로 시뮬레이션하고 있습니다. 모터는 전압, 세그웨이의 속도 및 피치 축에 대한 세그웨이 (역기전력으로 인한) 세 입력을받습니다. 출력은 전기자 전류입니다.

이것은 단순한 선형, 비 차동 시스템입니다. 그런 이유로, 국가가 없습니다. 수행되는 유일한 계산은 입력에서 출력으로의 피드 스루 (feed-through)입니다.

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 
+0

음을 설정해야하므로, 그것을 직접 피드 스루, 나는 해결책을 발견했습니다이며, 다음과 같이 코드입니다. 나는 상태를 갖지 않고 시스템이 뼈대에서 차지하는 단일 상태 인 q를 가지도록 변경했습니다. 이것은 해결책이 아닌 해결책이기 때문에 첫 번째 방법이 효과가 없었던 이유에 대한 아이디어를 공개 할 것입니다. – Ataraxia

답변

1

당신이 언급 한 바와 같이 당신이

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