- Set values to the constant blocks u1 and u2 from Python.
- Run the Simulink model.
- Retrieve the outputs x1 and x2 from the MATLAB workspace back to Python.
Python can't send value to simulink constant block
3 views (last 30 days)
Show older comments
![](https://www.mathworks.com/matlabcentral/answers/uploaded_files/1727846/image.png)
This is my simulink. I want to send the value from my python to constant block of u1 and u2, then the x1 and x2 will send the output to my python. Please ignore u2, cuz still in testing phase.
![](https://www.mathworks.com/matlabcentral/answers/uploaded_files/1727851/image.png)
this is part of my python code, the set control action is used to send the value to u1 and u2 in simulink. This is the issue where the simulink cant access to the value sent from python. The output dont have issue.
![](https://www.mathworks.com/matlabcentral/answers/uploaded_files/1727856/image.png)
Here is the output, as shown above the output x1 is showing 1.0 which shows that the constant block is not deliver the input values from python.
SO is there anyway to solve this issue? anything i need to check or set in the simulink? or any website or code I can refer to? any help or recommendation will be appreaciate. Thank you very much.
0 Comments
Accepted Answer
Ayush Singh
on 8 Jul 2024
Edited: Ayush Singh
on 8 Jul 2024
Hi Yeow,
I am assuming you want to assign values to constant blocks u1 and u2 from Python and extract values of x1 and x2 after some simulation on your model.
In order to achieve the workflow mentioned by you there are roughly 3 steps can follow:
Start the MATLAB engine
eng = matlab.engine.start_matlab()
Load the Simulink model
eng.load_system(model_name, nargout=0)
Set values to the constant blocks u1 and u2
eng.set_param(f'{model_name}/u1', 'Value', str(u1), nargout=0)
eng.set_param(f'{model_name}/u2', 'Value', str(u2), nargout=0)
Run the Simulink model
eng.set_param(model_name,SimulationCommand="start")
Wait for the simulation to finish
eng.set_param(model_name,SimulationCommand="stop")
Retrieve the outputs x1 and x2
x1 = eng.eval('out.x1', nargout=1)
x1_data =x1.Data
x2 = eng.eval('out.x2', nargout=1)
x2_data =x2.Data
The above steps/code might not be exactly according to your coding structure but is a rough idea/implementation on how you can achieve the desired workflow.
I hope it helps you to get started!
0 Comments
More Answers (1)
See Also
Categories
Find more on Test Model Components 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!