Error: Class member redefinition has been found

1 次查看(过去 30 天)
I have been trying to define a resistor which also produces heat in simscape. The code for the .ssc file is depicted below. When I try to insert the component (via library browser: simscape/utilities/simscape component), I get the error: " Error: Class member redefinition has been found." and "Caused by:
Error using MyPackage.heat_producing_resistor> (line 10)
Class member 'h' is defined.
Error using MyPackage.heat_producing_resistor> (line 16)
Class member 'h' is defined"
What is the problem?
Am i not authorised to define an output?
Is the fault in foundation.electrical.electrical(I don`t understad what that means and if it should be defined differently and why)?
Thanks in advance
component heat_producing_resistor
%linear resistor
%Follows the relation U=I*R [V]
%Includes the heat produced in the resistor dQ/dt =u(t)*i(t) [J/s = W]
%R is assumed to be constant
nodes
p = foundation.electrical.electrical; % +:left
n = foundation.electrical.electrical; % -:right
dQ = foundation.electical.electrical; % Q:right
end
variables
i = {0, 'A' }; %Current (through)
u = {0, 'V' }; %Voltage (across)
dQ = {0, 'W' }; %Heatflow (across)
end
parameters
R = {1, 'Ohm' }; %resistance
end
branches
i : p.i -> n.i;
end
equations
assert(R>0)
v == p.v - n.v;
v == i*R;
dQ == i*v;
end
end

回答(1 个)

Pramil
Pramil 2024-9-19
编辑:Pramil 2024-9-20
Hello Maarten,
The error you are getting is expected as “dQ” is a node and not a variable. If you try and assign a value to a node, the complier thinks you are redefining the class and hence the error.
Now, onto the main issue, how to create a resistor which produces heat in Simscape.
As you want to measure heat, use “dQ = foundation.thermal.thermal” instead of “dQ = foundation.electrical.electrical”. The reason for this is if you refer the following documentations:
You can see that; you can define heat flow “Q” in thermal domain not electrical domain.
To output heat flow through node “dQ”, define a variable “Q” and in “branches” declare that “Q” is of type “dQ.Q” such that it defines heat flow from the component to outside of component.
Finally, equate “Q == i*v” in “equations” for getting the output heat flow. This should create the required block.
Here is the updated code for your reference:
component heat_producing_resistor
%linear resistor
%Follows the relation U=I*R [V]
%Includes the heat produced in the resistor dQ/dt =u(t)*i(t) [J/s = W]
%R is assumed to be constant
nodes
p = foundation.electrical.electrical; % +:left
n = foundation.electrical.electrical; % -:right
dQ = foundation.thermal.thermal; % Q:right
end
variables
i = {0, 'A' }; %Current (through)
v = {0, 'V' }; %Voltage (across)
Q = {0, 'J/s'};
end
parameters
R = {1, 'Ohm' }; %resistance
end
branches
i : p.i -> n.i;
Q : dQ.Q -> *;
end
equations
assert(R>0)
v == p.v - n.v;
v == i*R;
Q == i*v; % Heat flow
end
end
Hope it helps.

类别

Help CenterFile Exchange 中查找有关 Foundation and Custom Domains 的更多信息

产品


版本

R2018b

Community Treasure Hunt

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

Start Hunting!

Translated by