Matlab Function
블록 으로 Simulink 모델을 구축하고 있습니다. 이러한 함수 블록에는 많은 상수가 있습니다 (예 :) g=9.8
. Matlab 스크립트에서 이러한 모든 상수를 한 번에 초기화하여 각 함수 블록에서 그렇게 할 필요가 없습니다.
지금까지 시도한 내용은 다음과 같습니다.
Matlab Function
블록 에서는 Constant
함수 블록에 대한 입력으로 제공되는 블록을 사용하여 변수를 초기화했습니다 . 이 시스템은 작동하지만 모델에 많은 상수 블록이 있고 매우 클러스터 화되고 있습니다.또한 global
Matlab 스크립트에서 이러한 변수를 변수 로 선언 해 보았습니다 . 작동하지 않습니다.
내가 시도한 또 다른 방법은 이러한 상수에 대한 함수 스크립트를 만든 다음이 함수 스크립트를 Matlab Function
블록 에로드하는 것 입니다. 작동하지 않습니다.
Matlab 스크립트에서 이러한 값을 초기화하고 Simulink 모델이 이러한 상수 블록을 사용할 필요없이 Matlab 스크립트에서 읽어 오는 방법이 있습니까?
%refercode
%matlabscript
Initialization values;
sim('filenmae.slx');
post processing;
%simulink model
constant blocks(initialization values) -> matlab function block -> output;
%end
이 문제를 해결하는 가장 좋은 방법은 무엇입니까?
Matlab Function
블록 에서 선택적으로 사용할 수있는 변수를 포함하는 단일 구조체를 가질 수 있습니다 . 즉 Constant
, 스크립트에서 초기화 된 단일 블록과 추가 함수 입력 만 가질 수 있습니다 .
이 MathWorks 기사에서는 모델에서 사용하기 위해 구조체를 Simulink Bus로 변환하는 방법을 보여줍니다 (상수 블록에서 직접 구조체를 사용할 수 없음).
https://blogs.mathworks.com/simulink/2011/12/05/initializing-buses-using-a-matlab-structure/
다음과 같은 것을 제공합니다.
% initialise constants within struct, keeps the workspace tidy too!
vars = struct();
vars.g = 9.8;
vars.lambda = 2;
% Create bus data for the variables struct
varsInfo = Simulink.Bus.createObject(vars);
% Sim the model
sim( 'myModel.slx' );
링크 된 문서에 설명 된대로 버스에 대해 구성된 상수 블록을 사용합니다.
그런 다음 함수 내에서 액세스 할 수 있습니다.
function y = ( y, vars )
% MATLAB Function block function within myModel.slx
y = vars.lambda + u * vars.g;
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다