Ejemplo simple de
un programa de Modelica usando OpenModelica.
El programa de
Modelica se puede bajar de Modelica
research at PELAB
http://www.ida.liu.se/labs/pelab/modelica/index.shtml
Se
quiere simular el siguiente circuito,
Se
abrio OpenModelica 1.4.4, aparece lo siguiente,
OpenModelica 1.4.4
Copyright 2002-2006, PELAB, Linkoping University
To get help on using OMShell and OpenModelica, type
"help()" and press enter.
Se escribio el siguiente texto
con el Free Modelica Editor y se lo guardo como edu.mo (inicialmente
utilice la libreta de apuntes de Windows, pero esto puede traer problemas) en C:\OpenModelica1.4.4\tmp\edu.mo.
al hacer copy paste en OpenModelica, es importante hacer notar que primero se debe
cargar Load Modelica Library,
>> model edu
Modelica.Electrical.Analog.Basic.Ground
ground1 ;
Modelica.Electrical.Analog.Basic.Conductor
conductor1 ;
Modelica.Electrical.Analog.Sources.ConstantVoltage
constantVoltage1 ;
equation
connect (
constantVoltage1.p,conductor1.p);
connect ( constantVoltage1.n,ground1.p);
connect ( conductor1.n,ground1.p);
end edu;
Ok
Luego se realizo la
simulacion,
>> simulate(edu,startTime=0.0,stopTime=10.0)
record
resultFile = "edu_res.plt"
end record
el siguiente commando me
permite ver el programa con mas detalle,
>> instantiateModel(edu)
"fclass edu
Real ground1.p.v(quantity =
"ElectricPotential", unit = "V") "Potential at the
pin";
Real ground1.p.i(quantity =
"ElectricCurrent", unit = "A") "Current flowing into
the pin";
Real conductor1.v(quantity =
"ElectricPotential", unit = "V") "Voltage drop between
the two pins (= p.v - n.v)";
Real conductor1.i(quantity = "ElectricCurrent",
unit = "A") "Current flowing from pin p to pin n";
Real conductor1.p.v(quantity =
"ElectricPotential", unit = "V") "Potential at the
pin";
Real conductor1.p.i(quantity =
"ElectricCurrent", unit = "A") "Current flowing into
the pin";
Real conductor1.n.v(quantity =
"ElectricPotential", unit = "V") "Potential at the
pin";
Real conductor1.n.i(quantity =
"ElectricCurrent", unit = "A") "Current flowing into
the pin";
parameter Real conductor1.G(quantity =
"Conductance", unit = "S", min = 0.0) = 1 "Conductance";
Real constantVoltage1.v(quantity =
"ElectricPotential", unit = "V") "Voltage drop between
the two pins (= p.v - n.v)";
Real constantVoltage1.i(quantity =
"ElectricCurrent", unit = "A") "Current flowing from
pin p to pin n";
Real constantVoltage1.p.v(quantity =
"ElectricPotential", unit = "V") "Potential at the
pin";
Real constantVoltage1.p.i(quantity =
"ElectricCurrent", unit = "A") "Current flowing into
the pin";
Real constantVoltage1.n.v(quantity =
"ElectricPotential", unit = "V") "Potential at the
pin";
Real constantVoltage1.n.i(quantity =
"ElectricCurrent", unit = "A") "Current flowing into
the pin";
parameter Real constantVoltage1.V(quantity =
"ElectricPotential", unit = "V") = 1 "Value of
constant voltage";
equation
ground1.p.v = 0.0;
conductor1.i = conductor1.G * conductor1.v;
conductor1.v = conductor1.p.v - conductor1.n.v;
0.0 = conductor1.p.i + conductor1.n.i;
conductor1.i = conductor1.p.i;
constantVoltage1.v = constantVoltage1.V;
constantVoltage1.v = constantVoltage1.p.v -
constantVoltage1.n.v;
0.0 = constantVoltage1.p.i + constantVoltage1.n.i;
constantVoltage1.i = constantVoltage1.p.i;
conductor1.n.i + constantVoltage1.n.i + ground1.p.i
= 0.0;
conductor1.n.v = constantVoltage1.n.v;
constantVoltage1.n.v = ground1.p.v;
constantVoltage1.p.i + conductor1.p.i = 0.0;
constantVoltage1.p.v = conductor1.p.v;
end edu;
"
el siguiente comando me
permite ver la respuesta del circuito en un grafico
>> plot(conductor1.i)
true
>>
Circuito RLC serie excitado por un escalon de tension.
En el anterior ejemplo se simulo con valores ya
establecidos de los componentes (default), en el siguiente ejemplo se
establecen valores,
model edu2
Modelica.Electrical.Analog.Basic.Ground
ground1 ;
Modelica.Electrical.Analog.Basic.Conductor
conductor1(G=0.01) ;
Modelica.Electrical.Analog.Sources.ConstantVoltage
constantVoltage1 ;
Modelica.Electrical.Analog.Basic.Capacitor
capacitor1(C=0.000001);
Modelica.Electrical.Analog.Basic.Inductor
inductor1(L=0.01);
equation
connect (
constantVoltage1.p,conductor1.p);
connect ( conductor1.n,capacitor1.p);
connect ( capacitor1.n,inductor1.p);
connect ( constantVoltage1.n,ground1.p);
connect ( inductor1.n,ground1.p);
end edu2;
La simulacion resulta,
Enlaces
Estudio de un
motor de continua.
Durante mi estudio de
Modelica ,tratando de simular un control PID de un motor de contina con un
campo formado por un iman permanente,me encuentro ante la necesidad de escribir
el modelo del motor.
Trabajar con Modelica
es muy complejo, esto se debe que esta tecnologia es reciente y es una forma de
programación orientada a
objetos, a pesar de esto el metodo presenta muchas ventajas al disenar modelos
que combinen sistemas eléctricos y mecánicos, una diferencia se obtiene al
escribir las ecuaciones y luego realizar la simulación, que puede llevar muchas
horas de trabajo.
Eduardo Ghershman 16.7.2008