How can I change block parameters in simulink using block path in app designer?

5 次查看(过去 30 天)
I want to change block parameters (by refrrencing the block's path) in simulink using app designer.
In order to make .exe file I used SimulationInput object as the below code:
simInp = Simulink.SimulationInput('test_model');
I can't use simInp.setBlockParameter because of this error:
and I couldn't use set_param because it dosen't accept SimulationInput object an an input.
Here is the full code:
function startupFcn(app)
start_simulink;
end
% Button pushed function: simulateButton
function simulateButtonPushed(app, event)
try
simInp = Simulink.SimulationInput('test_model');
simInp = simInp.setBlockParameter("test_model/Gain",'Gain',num2str(app.kkEditField.Value));
% set_param('test_model/Gain','Gain',num2str(app.kkEditField.Value));
simInp = simulink.compiler.configureForDeployment(simInp);
simOut = sim(simInp);
t = simOut.tout;
y = simOut.yout{1}.Values.Data;
plot(app.UIAxes,t,y);
catch ME
errordlg(ME.message);
end
end
Would you please help me about the solution?

回答(1 个)

Riya
Riya 2025-6-24
Hi Sabereh,
I understand that you are getting an error while trying to change a block parameter in Simulink using the SimulationInput object in App Designer.
This error happens because you are using setBlockParameter along with simulink.compiler.configureForDeployment. These two are not compatible — once you configure a simulation for deployment, you are not allowed to modify block parameters directly using setBlockParameter.
To resolve this, you can change the block parameter in your model (e.g., Gain value) to be a workspace variable, and then use setVariable instead of setBlockParameter to assign the value.
Here is the corrected code:
function simulateButtonPushed(app, event)
try
simInp = Simulink.SimulationInput('test_model');
simInp = simInp.setVariable('kk', app.kkEditField.Value); % Set gain value using variable
simInp = simulink.compiler.configureForDeployment(simInp); % Prepares for EXE
simOut = sim(simInp); % Run simulation
t = simOut.tout;
y = simOut.yout{1}.Values.Data;
plot(app.UIAxes, t, y); % Plot output
catch ME
errordlg(ME.message);
end
end
To apply this solution, ensure that the Gain block in your model has its value set to kk(just a variable name) instead of a fixed number. The line setVariable('kk', value) passes this value to the model correctly even when it is compiled into a standalone .exe.
For further reference, please see the following documentation:
  1 个评论
Finlay
Finlay 2025-8-5
Hi Riya,
I'm looking to do something similar to pass a custom file name to the "record" block from the app so the user can select where to store model outputs. Documentation suggests you can only change the filename by modifying the block parameter directly, but this doesn't seem to be possible in the app designer. Is there any way to achive this?
Thanks,
Finlay

请先登录,再进行评论。

类别

Help CenterFile Exchange 中查找有关 Simulink Environment Customization 的更多信息

产品


版本

R2021b

Community Treasure Hunt

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

Start Hunting!

Translated by