How can I update a GUI with values from my Simulink model as it is running by using a Execution Event Listener?

57 views (last 30 days)

Accepted Answer

MathWorks Support Team
MathWorks Support Team on 13 Dec 2021
Edited: MathWorks Support Team on 2 Mar 2022
There is no direct way to access the runtime parameters of a Simulink model from a MATLAB GUI without the use of some callback function. To work around this issue, you need to create a function that will update the GUI with the desired model data at each time step. An outline of this procedure is as follows.
NOTE: This solution is specific to normal mode simulation. It does not work when the model is run in accelerator mode or built into an executable. In these cases, one way to get the model to work is to write the value to a text file in the model, and then setup a timer to read the value from the text file in the GUI.
You can download the attached model and GUI to see a working example.
1. Create a GUI with a control that you would like to update with information from the model. In this case we would like to see the output of the model's Gain block in the GUIs edit text window.
2. Create a model callback function that will register an event listener for the block in question. This function will be called every time the block is updated. We will use it to access the value of the Gain blocks output and pass them to the GUI.
In this case we will use the models 'StartFcn' callback.
%The GUI handles are by default hidden, turn them on
set(0,'ShowHiddenHandles','on');
%Set up the arguments that will go into the gain block event callback listener
blk = 'mytestmdl/Gain';
event = 'PostOutputs';
listener = @updategui;
%Create the listener
h = add_exec_event_listener(blk, event, listener);
3. Create a MATLAB file function that will get the Gain block's runtime output parameter and pass it to the GUI.
function varargout = updategui(varargin)
%create a run time object that can return the value of the gain block's
%output and then put the value in a string.
rto = get_param('mytestmdl/Gain','RuntimeObject');
str = num2str(rto.OutputPort(1).Data);
%get a handle to the GUI's 'current state' window
statestxt = findobj('Tag','curState');
%update the gui
set(statestxt,'string',str);
You can try out an example by following the steps below.
1. Download the attached files
mytestgui.m
mytestmdl.mdl
mytestgui.fig
updategui.m
2. Open the model file.
3. Open the GUI by running the file 'mytestgui.m'
4. Start the simulation by clicking the 'Start' button in the GUI.
5. You can change the value of 'Gain' in the GUI while the simulation is running.
6. Click 'Stop' in the GUI to halt the simulation.

More Answers (0)

Categories

Find more on Migrate GUIDE Apps in Help Center and File Exchange

Products


Release

R2007b

Community Treasure Hunt

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

Start Hunting!