How to find Stateflow chart using API's

조회 수: 21 (최근 30일)
N/A
N/A 2015년 7월 28일
댓글: Fangjun Jiang 2025년 3월 12일
Hello All,
I have simulink model with Subsystem. My subssystem are linked with Library and these library links are resolved. Inside subsystem, I have stateflow chart. I want to find stateflow chart using m-scripts.
sflow=sfroot;
model = sflow.find('-isa', 'Simulink.BlockDiagram','-and','Name','libraryIncluded');
chartArray = model.find('-isa','Stateflow.Chart');
here chartArray = model.find('-isa','Stateflow.Chart'); does not returns statflow charts from library links. How can I get all charts from linked libraries?
PS: Please find Library file and simulink model from attachments

채택된 답변

Fangjun Jiang
Fangjun Jiang 2015년 8월 3일
I had a similar need but couldn't find a way. It was confirmed by the Mathworks tech support that there is no direct way to find the Stateflow chart objects inside a linked library block in a model. I ended up writing the following code. It was verified in many models, including some models with nested library links.
% Updating the model is needed to make sure libraries, if any, are loaded
% There might be error updating the model, but the error are non-critical
% for this operation
try
fprintf(1,'Need to update the model to load all libraries.\n');
set_param(Model,'SimulationCommand','Update');
catch %#ok<CTCH>
fprintf(1,'There are errors updating the model. Ignore ...');
end
ChartRoots=libinfo(Model);
ChartRoots=[{Model},{ChartRoots.Library}];
sfrt=sfroot;
ChartObj=sfrt.find('-isa','Stateflow.Chart');
Index=ismember(bdroot(get(ChartObj,'Path')),ChartRoots);
ChartObj=ChartObj(Index);
  댓글 수: 4
Sean de Wolski
Sean de Wolski 2015년 8월 6일

Welcome back Fangjun!

N/A
N/A 2015년 8월 7일
Thank you Fangjun..

댓글을 달려면 로그인하십시오.

추가 답변 (1개)

Philipp
Philipp 2025년 3월 12일
You can configure a finder from slreportgen to find Stateflow charts in linked / resolved libraries:
% Create the finder for the model / library "mdlName"
% by using this finder instead of the stateflow search api we can follow links
sfFinder = slreportgen.finder.ChartDiagramFinder(mdlName);
% configure following links
sfFinder.IncludeSimulinkLibraryLinks = 1; % default is true, just as demonstration
sfFinder.IncludeUserLibraryLinks = 1; % default is true
% Find the Stateflow charts in model / its libraries
sfResults = find(sfFinder);
stateflowChartsArray = [sfResults.Object]

카테고리

Help CenterFile Exchange에서 Decision Logic에 대해 자세히 알아보기

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by