Please urgent help
3 次查看(过去 30 天)
显示 更早的评论
I am facing minor issues regarding my code. I want to have a real time simulation where an object moves according to a sine wave block fed through an S-function. The problem is that the model simulation starts alone and then the drawing starts to appear in the GUI.Also,I could not get the value of the sine wave S-function and updating it in the variable arm angle in the GUI M-file draw function. Could you please assess me on this issue. My files are:
1- GUI M-file (using guide) and it is structure is :
function varargout = auto(varargin) ................................ .
.
. .
including all the buttons callbacks and handles initialization . Start button function having the command sim() and call the draw function .
Function [] = draw(arm angle) arm angle need to have it is value from the S-function to control its movement in real time. .
.
drawing commands of the object needed
.
.
drawnow()
_________________________
2- s-function file
function [sys,x0,str,ts] = my_sfunc(t,x,u,flag)
switch flag,
case 0,
[sys,x0,str,ts]=mdlInitializeSizes;
case 1,
sys=mdlDerivatives(t,x,u);
case 2,
sys=mdlUpdate(t,x,u);
case 3,
sys=mdlOutputs(t,x,u);
case 4,
sys=mdlGetTimeOfNextVarHit(t,x,u);
case 9,
sys=mdlTerminate(t,x,u);
otherwise
error(['Unhandled flag = ',num2str(flag)]);
end
function [sys,x0,str,ts]=mdlInitializeSizes
sizes = simsizes;
sizes.NumContStates=0;
sizes.NumDiscStates=0;
sizes.NumOutputs=0;
sizes.NumInputs=2;
sizes.DirFeedthrough=1;
sizes.NumSampleTimes=1;
sys = simsizes(sizes);
x0 = [];
str = [];
ts = [-1 0];
function sys=mdlDerivatives(t,x,u)
sys = [];
function sys=mdlUpdate(t,x,u)
sys = [];
function [sys,x0,str,ts]=mdlOutputs(t,x,u)
sys = [];
function sys=mdlGetTimeOfNextVarHit(t,x,u)
sampleTime = 1; sys = t + sampleTime;
function sys=mdlTerminate(t,x,u)
sys = [];
________________________________________________________
3- simulink model having a sine wave block and a clock connected to the input of the s function block u(1), u(2)
1 个评论
Walter Roberson
2012-1-23
Still waiting for your answer in your previous thread on this topic,
http://www.mathworks.com/matlabcentral/answers/26785-running-simultaneously-a-gui-file-and-simulink-model-with-s-function
采纳的回答
Walter Roberson
2012-1-23
Your mdlUpdate() function does not appear to be invoking your drawing routine.
Also, make sure you have set the direct feedthrough flags appropriately; see http://www.mathworks.com/matlabcentral/newsreader/view_thread/125257
4 个评论
Walter Roberson
2012-1-23
mdlUpdate() should call draw() to pass in the current arm angle. Or perhaps it would be easier to have mdlOutputs() call it. I find the difference to be confusing, especially when I start reading about feedthrough.
更多回答(1 个)
TAB
2012-1-24
A more convinient way to access runtime simulink data by using Simulink.RunTimeBlock object or by using event listener callback(add_exec_event_listener).
To see a good demo type
>> sldemo_msfcn_lms
on command window
See
0 个评论
另请参阅
类别
在 Help Center 和 File Exchange 中查找有关 Additional Math and Discrete 的更多信息
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!