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

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.

Plus de réponses (1)

River Rock
River Rock le 21 Août 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 commentaires

Yes, there is an event-listener mechanism that will invoke your callback every time there is a new output. Please see the "Listening for Method Execution Events" section in the page I linked above.
River Rock
River Rock le 22 Août 2012
Modifié(e) : River Rock le 22 Août 2012
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.

Connectez-vous pour commenter.

Catégories

En savoir plus sur Simulink Environment Customization dans Centre d'aide et File Exchange

Produits

Community Treasure Hunt

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

Start Hunting!

Translated by