How do I keep parameter and variable workspace and simulink visibility when running a *.m file from a GUI?

5 views (last 30 days)
I currently have a system that is partitioned into three files.
mySystem.m
setSystemParameters.m
mySystemModel.slx
I run mySystem.m from the command line
>> mySystem
which runs setSystemParameters.m and then launches the simulink model.
135 ...
136 tend = 0.011;
137 setSystemParameters;
138 ...
139 set_param('mySystemModel','StartTime', '0.0096', 'StopTime',string(tend))
140 sim('mySystemModel');
141 % start post processing
142 ...
this all runs fine and the workspace shows all the variable and parametric values and they are passed to the simulink model without issue.
I then created a GUI so the user can select system frequency from a set of radio buttons and a RUN PushButton to run mySystem.m after the desired frequency is selected. The frequency is being passed to mySystem.m properly and the mySystem.m runs when 'RUN' is pressed.
The problem is that the variables no longer apear in the workspace and the simulink nolonger has visibility to the values set in the mySystem.m and setSystemParameters.m files. I get a series of errors similar to:
Error using mySystem (line 140)
Invalid setting in 'mySystemModel/Constant' for parameter 'Value'.
Error using mySystem (line 140)
Error evaluating parameter 'Value' in 'mySystemModel/Constant'
Error using mySystem (line 140)
Undefined function or variable 'DCin'.
'Constant' is a simulink library element with parameter 'Vaule' which is set in setSyetemParameters.m to DC in.
How do I maintain workspace and simulink visibility to the parameters after I launch the mySystem From the GUI?

Accepted Answer

David Barry
David Barry on 13 Dec 2016
Edited: David Barry on 13 Dec 2016
Your variables will now be living in the function workspace of your GUI function. By default, Simulink is looking in the MATLAB base workspace for input data. If you don't want to change your model then one of the easiest solutions (not the only solution) is to assign your variables back in to the MATLAB base workspace by using the assignin command within your GUI code.
If changing your Simulink model is up for grabs then take a look at Data Dictionaries which are much cleaner and get rid of variables in the base workspace. https://uk.mathworks.com/help/simulink/ug/what-is-a-data-dictionary.html

More Answers (1)

Gary Stirk
Gary Stirk on 14 Dec 2016
Barry,
Once again a perfect answer. For now I'm taking the easy way out (assignin) but will migrate to the Data Dictionary approach, it looks like this is the better way to go in the long run.
Thanks for providing both options

Categories

Find more on Modeling in Help Center and File Exchange

Community Treasure Hunt

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

Start Hunting!