package Circuitos3 package Interfaces connector Pin Real v; flow Real i; end Pin; partial model OnePort Pin p,n; Real v, i; equation p.v-n.v = v; p.i=i; p.i+n.i=0; end OnePort; end Interfaces; package Componentes model Capacitor Interfaces.Pin p,n; extends Interfaces.OnePort; parameter Real C=1; equation C * der(v) - i = 0; end Capacitor; model Inductor Interfaces.Pin p,n; extends Interfaces.OnePort; parameter Real L=1; equation L * der(i) - v = 0; end Inductor; model Resistor Interfaces.Pin p,n; extends Interfaces.OnePort; parameter Real R=1; equation R * i - v = 0; end Resistor; model Ground Interfaces.Pin p; equation p.v = 0; end Ground; model Diode extends Interfaces.OnePort; parameter Real Ron=1e-5, Roff=1e5, Vknee=0.6; equation i= if v>Vknee then (v-Vknee)/ Ron+Vknee/Roff else v/Roff; end Diode; model Switch extends Interfaces.OnePort; parameter Real Ron=1e-5, Roff=1e5; discrete Real s; equation v= if s>0.5 then i*Ron else i*Roff; end Switch; model ConstCurr extends Interfaces.OnePort; parameter Real I=1; equation i= -I; end ConstCurr; end Componentes; package Ejemplos model RLC3 Componentes.Capacitor cap(v.start=1); Componentes.Inductor ind; Componentes.Resistor res, res2(R=2); Componentes.Ground gr; equation connect(cap.p,res2.p); connect(res2.n,ind.p); connect(res2.n,res.p); connect(cap.n,gr.p); connect(ind.n,gr.p); connect(res.n,gr.p); end RLC3; package Panel model SolarCell Interfaces.Pin p,n; Componentes.Resistor rs(R=0.35),rsh(R=200); Componentes.Diode dio; Componentes.ConstCurr cc(I=2); equation connect(cc.p,dio.p); connect(cc.p,rsh.p); connect(cc.p,rs.p); connect(rs.n,p); connect(cc.n,dio.n); connect(cc.n,rsh.n); connect(cc.n,n); end SolarCell; model Boost Interfaces.Pin p1,p2,n; Componentes.Capacitor cap(C=1e-4); Componentes.Inductor ind(L=1e-4); Componentes.Switch sw; Componentes.Diode di; parameter Real dc=0.5; parameter Real T=1e-4; equation connect(p1,ind.p); connect(ind.n,sw.p); connect(ind.n,di.p); connect(di.n,cap.p); connect(cap.p,p2); connect(cap.n,n); connect(cap.n,sw.n); algorithm when sample(0,T) then sw.s:=1; end when; when sample(dc*T,T) then sw.s:=0; end when; end Boost; model PanelBoost SolarCell cell; Boost boost; Componentes.Ground gr; Componentes.Resistor rl(R=100); equation connect(cell.p,boost.p1); connect(boost.p2,rl.p); connect(rl.n,boost.n); connect(boost.n,cell.n); connect(boost.n,gr.p); end PanelBoost; model PanelArray parameter Integer N=3,M=4; SolarCell[N,M] cell; Interfaces.Pin p,n; equation for i in 1:N loop for j in 1:M-1 loop connect(cell[i,j].p,cell[i,j+1].p); connect(cell[i,j].n,cell[i,j+1].n); end for; end for; for i in 1:N-1 loop connect(cell[i,1].n,cell[i+1,1].p); end for; connect(cell[1,1].p,p); connect(cell[N,1].n,n); end PanelArray; model PanelArrayBoost PanelArray panel(N=4,M=3); Boost boost; Componentes.Ground gr; Componentes.Resistor rl(R=10); equation connect(panel.p,boost.p1); connect(boost.p2,rl.p); connect(rl.n,boost.n); connect(boost.n,panel.n); connect(boost.n,gr.p); end PanelArrayBoost; end Panel; end Ejemplos; end Circuitos3;