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