State Space Model as Simscape Thermal component

17 views (last 30 days)
Hello, I want to include a thermal impedance model in state space representation. For this I want to create a custom simscape component in the following style:
component thermal_state_space
nodes
input_1 = foundation.thermal.thermal; % input_1
input_2 = foundation.thermal.thermal; % input_1
input_3 = foundation.thermal.thermal; % input_1
input_4 = foundation.thermal.thermal; % input_1
output_1 = foundation.thermal.thermal; % output_1
output_2 = foundation.thermal.thermal; % output_1
output_3= foundation.thermal.thermal; % output_1
output_4 = foundation.thermal.thermal; % output_1
.
.
.
end
The dimensions of my state space matrices specify the numer of input nodes and output nodes.
Is there a predefined object I culd use for this? If not, what is the easiest representation of such a model?

Answers (1)

Shubham
Shubham on 4 May 2023
Hi Johannes,
There is no predefined object in Simulink that can directly represent a thermal impedance model in state space representation. However, you can create a custom Simulink component to represent this model using the Simulink Simscape language.
Here's an example of how you can create a custom Simscape component to represent a thermal impedance model in state space representation:
  1. Create a new Simscape component in your Simulink model.
  2. Define the nodes for your component. In your case, you have four input nodes and four output nodes. You can define them as follows:
nodes
p1 = foundation.thermal.thermal;
p2 = foundation.thermal.thermal;
p3 = foundation.thermal.thermal;
p4 = foundation.thermal.thermal;
t1 = foundation.thermal.thermal;
t2 = foundation.thermal.thermal;
t3 = foundation.thermal.thermal;
t4 = foundation.thermal.thermal;
end
3. Define the state variables for your component. In your case, you have a state space model, so you will need to define t he state variables as follows:
variables
x = zeros(4, 1);
end
4. Define the state space matrices for your component. You can define them as follows:
parameters
A = [-1.0, 0.5, 0.0, 0.0; 0.5, -1.0, 0.5, 0.0; 0.0, 0.5, -1.0, 0.5; 0.0, 0.0, 0.5, -1.0];
B = [1.0, 0.0, 0.0, 0.0; 0.0, 1.0, 0.0, 0.0; 0.0, 0.0, 1.0, 0.0; 0.0, 0.0, 0.0, 1.0];
C = [1.0, 0.0, 0.0, 0.0; 0.0, 1.0, 0.0, 0.0; 0.0, 0.0, 1.0, 0.0; 0.0, 0.0, 0.0, 1.0];
D = [0.0, 0.0, 0.0, 0.0; 0.0, 0.0, 0.0, 0.0; 0.0, 0.0, 0.0, 0.0; 0.0, 0.0, 0.0, 0.0];
end
5. Define the equations for your component. You can define them as follows:
equations
t1 == x(1);
t2 == x(2);
t3 == x(3);
t4 == x(4);
der(x) == A * x + B * [p1.p; p2.p; p3.p; p4.p];
[output_1.p; output_2.p; output_3.p; output_4.p] == C * x + D * [p1.p; p2.p; p3.p; p4.p];
end
6. Connect your component to the rest of your Simulink model.
This example assumes that you have a thermal impedance model that can be represented by a state space model with four inputs and four outputs. You will need to modify the component to match the dimensions of your state space matrices and the number of input and output nodes in your model.
I hope this helps!
  3 Comments
Shubham
Shubham on 10 May 2023
Hi Johannes,
You are correct that the .p field is not defined for the foundation.thermal.thermal nodes in Simscape. Instead, you can directly use the nodes as inputs and outputs in the equations section. Here is the updated code:
component thermal_state_space
nodes
input_1 = foundation.thermal.thermal; % input_1
input_2 = foundation.thermal.thermal; % input_2
input_3 = foundation.thermal.thermal; % input_3
input_4 = foundation.thermal.thermal; % input_4
output_1 = foundation.thermal.thermal; % output_1
output_2 = foundation.thermal.thermal; % output_2
output_3 = foundation.thermal.thermal; % output_3
output_4 = foundation.thermal.thermal; % output_4
end
variables
x = zeros(4, 1);
end
parameters
A = [-1.0, 0.5, 0.0, 0.0; 0.5, -1.0, 0.5, 0.0; 0.0, 0.5, -1.0, 0.5; 0.0, 0.0, 0.5, -1.0];
B = [1.0, 0.0, 0.0, 0.0; 0.0, 1.0, 0.0, 0.0; 0.0, 0.0, 1.0, 0.0; 0.0, 0.0, 0.0, 1.0];
C = [1.0, 0.0, 0.0, 0.0; 0.0, 1.0, 0.0, 0.0; 0.0, 0.0, 1.0, 0.0; 0.0, 0.0, 0.0, 1.0];
D = [0.0, 0.0, 0.0, 0.0; 0.0, 0.0, 0.0, 0.0; 0.0, 0.0, 0.0, 0.0; 0.0, 0.0, 0.0, 0.0];
end
equations
t1 == x(1);
t2 == x(2);
t3 == x(3);
t4 == x(4);
der(x) == A * x + B * [input_1; input_2; input_3; input_4];
[output_1; output_2; output_3; output_4] == C * x + D * [input_1; input_2; input_3; input_4];
end
end
In this updated code, the inputs and outputs are directly used in the equations section without the .p field. This code assumes that you have a thermal impedance model that can be represented by a state space model with four inputs and four outputs and that the state space matrices A, B, C, and D are defined. You will need to modify the component to match the dimensions of your state space matrices and the number of input and output nodes in your model.
Johannes Flohe
Johannes Flohe on 10 May 2023
Dear @Shubham thank you again for your help. Unfortunatly, there is still some issue with your code. I get the following failure:
Failed to generate 'Thermal_SS'
Caused by:
't1' is not defined in this scope.
In Thermal_SS (line 26)
Do you need to initialize t1 to t4 before using it?
Thank you for your help again!

Sign in to comment.

Categories

Find more on Foundation and Custom Domains in Help Center and File Exchange

Products


Release

R2023a

Community Treasure Hunt

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

Start Hunting!