How do I export a vector to workspace in simulink?
12 次查看(过去 30 天)
显示 更早的评论
I'm trying to model a household appliance in simulink. When the simulation ends, I need the model to output a vector to the workspace which contains power loads corresponding to simulation times. I've started with trying to implement as simple a model as I can, shown below.
![simulink model.PNG](https://www.mathworks.com/matlabcentral/answers/uploaded_files/226501/simulink%20model.png)
The idea here is to just send simulation time to a function which appends the simulation time to a vector containing all simulation times. Basically, if the simulation stop time is 10, what I want from this model is AllTimes = [1, 2, 3, ... 10].
I've set the model to run an initialization function, which contains the following:
times = [];
The MATLAB function block contains the following:
function times = fcn(currentTime)
times = [times, currentTime];
times = time;
Simulink complains that:
![simulink error 1.PNG](https://www.mathworks.com/matlabcentral/answers/uploaded_files/226502/simulink%20error%201.png)
The issue, as I understand it, is that "time" is declared outside fcn's scope. I've tried the following tweaks to fix this:
function times = fcn(currentTime)
if ~exist('vect')
vect = [];
end
times = currentTime;
function times = fcn(currentTime)
times = evalin('base', [times, currentTime]);
times = currentTime;
function times = fcn(currentTime)
assignin('base', times, [times, currentTime])
times = currentTime;
However, none of these have worked.
I also tried importing the function times from the workspace and passing it as an argument to fcn, like so:
![simulink model 2.PNG](https://www.mathworks.com/matlabcentral/answers/uploaded_files/226503/simulink%20model%202.png)
function times = fcn(currentTime, times)
times = [times, currentTime];
times = currentTime;
However, this throws the error:
![simulink error 2.PNG](https://www.mathworks.com/matlabcentral/answers/uploaded_files/226504/simulink%20error%202.png)
Unfortunately, I have very limited knowledge of MATLAB and even less knowledge of simulink. If anyone has any advice I would very much appreciate help.
5 个评论
Jim Riggs
2019-6-28
编辑:Jim Riggs
2019-6-28
Oops. I was assuming that the block in your diagram with the label "Alltimes" was a "to Workspace" block and that you were simply trying to constuct the desired output vector.
In the future, select all of your blocks, then select "Format / Show Block Name" before you capture screenshots.
回答(1 个)
Jim Riggs
2019-6-26
It'a actually very easy. Simulink has a block for combining two signals, called a "mux" block.
Simply combine the two signals together, like so:
![MatlabAnswers 20190626.JPG](https://www.mathworks.com/matlabcentral/answers/uploaded_files/226507/image.jpeg)
2 个评论
Jim Riggs
2019-6-26
编辑:Jim Riggs
2019-6-26
The two signals have to be the same type and compatible shape.
You can use a "Data type convert" block to change the type of one signal, and there is a "reshape" block if you need to change the shape.
For more complex shapes (2D or more), you may need to use use a "Vector concatenate" block in place of the Mux.
另请参阅
类别
在 Help Center 和 File Exchange 中查找有关 Simulink Functions 的更多信息
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!