버퍼처럼 작동하는 레벨 2 s- 함수를 만들려고합니다. (방금 S- 함수를 배우기 시작했습니다). 이제 내가 원하는 것은 입력이 들어올 때마다 버퍼가 가득 차게 될 때까지 다음 인덱스에 저장됩니다. 마지막 인덱스에서 마지막 인덱스까지 저장 한 데이터를 첫 번째 인덱스에서 마지막 인덱스 두 번째까지 밀어 넣기 시작하고 샘플링 시간 후에 자체를 업데이트합니다. 더 나은 이해를 위해 관련 일 것입니다 무슨 내 코드를 첨부합니다레벨 2에서 초기화되지 않은 전역 변수 s-function
function Buffer(block)
global i;
i = 1;
setup(block);
function setup(block)
% Register number of ports
block.NumInputPorts = 2;
block.NumOutputPorts = 1;
% Setup port properties to be inherited or dynamic
block.SetPreCompInpPortInfoToDynamic;
block.SetPreCompOutPortInfoToDynamic;
% Override input port properties
block.InputPort(2).Dimensions = 1;
block.InputPort(2).DatatypeID = 0; % double
block.InputPort(2).Complexity = 'Real';
block.InputPort(2).DirectFeedthrough = true;
% Override input port properties
block.InputPort(1).Dimensions = 1;
block.InputPort(1).DatatypeID = 0; % double
block.InputPort(1).Complexity = 'Real';
block.InputPort(1).DirectFeedthrough = true;
% Override output port properties
block.OutputPort(1).Dimensions = [1 block.InputPort(2).Data];
block.OutputPort(1).DatatypeID = 0; % double
block.OutputPort(1).Complexity = 'Real';
block.SampleTimes = [-1 0];
block.SimStateCompliance = 'DefaultSimState';
block.RegBlockMethod('Outputs', @Outputs);
block.RegBlockMethod('Update', @Update);
block.RegBlockMethod('Terminate', @Terminate);
function Outputs(block)
block.OutputPort(1).Data(i) = block.InputPort(1).Data;
% block.Dwork(1).Data
%end Outputs
%%
%% Update:
%% Functionality : Called to update discrete states
%% during simulation step
%% Required : No
%% C-MEX counterpart: mdlUpdate
%%
function Update(block)
if(i == block.InputPort(2).Data)
block.OutputPort(1).Data(1:block.InputPort(2).Data - 1) = block.OutputPort(1).Data(2:block.InputPort(2).Data);
else
i = i + 1;
end
%end Update
function Terminate(block)
나는 그것이 내가 정의되지 않은 말한다 기능을 실행할 때, 사람이 어떤 생각을 알고 않습니다, 글로벌 변수로 i
선언하고 있지만 지금 문제는 내가 잘못하고있어?
전역이 아닌 DWork 벡터를 사용해야합니다. 이를 수행하는 방법은 [DWork 벡터 사용 방법] (https://www.mathworks.com/help/simulink/sfg/how-to-use-dwork-vectors.html#brd2qpw)을 참조하십시오. –
@ PhilGoddard 제안에 감사드립니다 .... 잠시 후 이것을 깨닫고 코드를 작성했습니다. 버퍼 기능이 완벽하게 작동합니다. 제안에 감사드립니다. – Umar