MATLAB Answers

0

Reading a wire value from Simulink into the Command Window or GUIDE

Asked by River Rock on 20 Aug 2012
Latest activity Edited by John Kelly on 12 Jul 2016
I want to read the values that passes through a wire in my Simulink model.
This value should be displayed in a text field on a MATLAB GUI (it's the water level in a tank that is acquired every 100 ms).
I found out about get_param instruction, but until now I only managed to get the values from constants and transfer functions; example: get_param('main/Constant','Value') ; get_param('main/Transfer Function','Denominator').
How do I address a wire and its property list (value)?
The data is generated by an OPC Read block, passing through a subsystem using an Out port.

  0 Comments

Sign in to comment.

2 Answers

Answer by Kaustubha Govind on 20 Aug 2012
Edited by John Kelly on 12 Jul 2016
 Accepted Answer

  0 Comments

Sign in to comment.


Answer by River Rock on 21 Aug 2012

Thanks for your answer; I was able to get the data from the filter's output
data=get_param('main/level/level_filter','RuntimeObject'); lvl = data.OutputPort(1).Data;
It works ok by request
How can I display this data cyclically in a Static Text field on a GUI ? Is there some callback that runs periodically ( and the sample time can be specified) ?

  4 Comments

Show 1 older comment
I added the following code in the gui m file:
function pushbutton1_Callback(hObject, eventdata, handles)
set_param('main','SimulationCommand','start');
iev = add_exec_event_listener('main/nivel/MATLAB Function','PostOutputs',@fetch_data);
function fetch_data(block, eventData)
set(handles.text3,'String','does_it_work');
Doesn't seem to work. What am I doing wrong?
UPDATE: It works if I type the add_exec_event_listener instruction in the Command Window, provided that fetch_data is a stand-alone function. In the GUI it still doesn't work.
Is fetch_data part of the GUI function? I think that it should indeed be a standalone function. You can cache the GUI "handles" object onto the block's UserData. Haven't tested this myself, but how about:
In GUI file:
function pushbutton1_Callback(hObject, eventdata, handles)
set_param('main/nivel/MATLAB Function', 'UserData', handles);
set_param('main','SimulationCommand','start');
iev = add_exec_event_listener('main/nivel/MATLAB Function','PostOutputs',@fetch_data);
In a standalone function:
function fetch_data(block, eventData)
handles = get_param(block.BlockHandle,'UserData');
set(handles.text3,'String','does_it_work');
I found a workaround yesterday. But your solution looks more elegant, I had to use global variables.
Thanks for your great support, the problem is solved.

Sign in to comment.