Simulink scope autoscale
13 次查看(过去 30 天)
显示 更早的评论
Hi everyone, i was wondering if there is a way for a scope i use in a simulink model to automaticaly autoscale. Maybe from adding a code to its startfunction???
0 个评论
采纳的回答
Titus Edelhofer
2012-1-18
Hi Raldi,
assuming the scope blocks are open, the following piece of code does the autoscaling for you:
% find all scope blocks as MATLAB figures:
set(0, 'showhiddenhandles', 'on')
scope = findobj(0, 'Tag', 'SIMULINK_SIMSCOPE_FIGURE');
for i=1:length(scope)
% this is the callback of the "autoscale" button:
simscope('ScopeBar', 'ActionIcon', 'Find', scope(i))
end
set(0, 'showhiddenhandles', 'off')
Titus
5 个评论
Scott Rauscher
2013-1-18
Where did you implement this Raldi? I'm not sure how to use the code that Titus supplied. I tried adding it in a Matlab Function that runs in the Simulink model, but that didn't work
I also tried just running the code in Matlab afterwards and that did nothing. What did you do?
Ignacio
2013-9-18
To make the autoscale function automatically i created a matlab function with the code above. The code will be executed each certain period of time. In my case 3 seconds, i did it with this function and the block clock of Simulink. the function that i have created is this one: -------- function u=scope(y) % find all scope blocks as MATLAB figures: u=0; z=mod(y,3)==0 if(z==1) set(0, 'showhiddenhandles', 'on') scope = findobj(0, 'Tag', 'SIMULINK_SIMSCOPE_FIGURE'); for i=1:length(scope) % this is the callback of the "autoscale" button: simscope('ScopeBar', 'ActionIcon', 'Find', scope(i)) end set(0, 'showhiddenhandles', 'off') end
end ----------- Then, in the clock block i selected 1000 as decimation and i use this code in a "interpreted Matlab function" block just writting "scope" in the label "Matlab function". I drive the output of this function to a scope but this output is not really interesting.
best regards
更多回答(5 个)
TAB
2012-1-18
Add below piece of code in your 'StopFcn' callback function. When the simulation is completed, it will open and autoscale all the scopes in the model.
[EDITED TO WORK FOR MULTIPLE INPUT SCOPE]
bh=find_system(gcs,'FindAll','on','BlockType','Scope');
for x=1:length(bh) %close all scope
set_param(bh(x),'Open','off');
end
for x=1:length(bh)
set_param(bh(x),'Open','on');
fh=gcf;
AxesInScope = findall(fh,'type','axes');
for y=1:length(AxesInScope)
set(fh,'CurrentAxes',AxesInScope(y));
xlim('auto');
ylim('auto');
end
end
6 个评论
TAB
2012-1-18
As your scope is reading 2 inputs, previous code was autoscaling only one graph keeping other as it is.
I have updated the code so that it can work for multiple input scopes.
Andreas Goser
2012-1-18
Typically, when users describe this, they are happy with the Time Scope Block from DSP System Toolbox. Here is the link to the documentation.
Especially, as Raldi is working at a university in the field of Signal Processing, this product should be available. Note that previous versions used different names like Signal Processing Blockset or DSP Blockset.
Mingli ZHU
2021-4-22
编辑:Mingli ZHU
2021-4-22
set(0, 'showhiddenhandles', 'on')
%current graphic object
scope=gcf;
%find Autoscale object
scale=findobj(gcf, 'Tag', 'uimgr.uisplittool_Autoscale');
%click this object
feval(get(scale,'Callback'),scale,[]);
%find PrintToFigure Menu
fig=findobj(gcf, 'Tag', 'uimgr.uimenu_PrintToFigure');
%Click this Menu
feval(get(fig,'Callback'),fig,[]);
set(0, 'showhiddenhandles', 'off')
0 个评论
Jessy Mathault
2021-8-27
This function:
simscope('ScopeBar', 'ActionIcon', 'Find', scope(i))
Doesn't seem to be supported anymore in MATLAB 2020b.
This seems to work:
allAxes = findall(gcf,'type','axes');
for x = 1:numel(allAxes)
axis(allAxes(x), 'auto y');
axis(allAxes(x), 'auto x');
end
0 个评论
另请参阅
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!