SIMCOS (angleški akronim za SIMulation of COntinouos Systems - Simulacija zveznih sistemov) je namenski programski jezik in razvojno okolje namenjeno računalniški simulaciji, ki so ga leta 1989 izdelali slovenski strokovnjaki z ljubljanske Fakultete za elektrotehniko in Instituta »Jožef Stefan« pod vodstvom profesorja Boruta Zupančiča, ki je vodil projekt v sklopu doktorske disertacije.

Uvodni zaslon SIMCOSa

Lastnosti uredi

Namen jezika je simulacija matematičnih modelov sistemov, ki so podani v obliki navadnih diferencialnih enačb, na digitalnem računalniku. Spada med enačbno orientirane jezike. Imenu navkljub je mogoče simulirati tako zvezne kot tudi diskretne sisteme. Jezik zelo dobro ustreza specifikacijam standarda simulacijskih jezikov CSSL'67, s čimer je močno olajšana prenosljivost med podobnimi jeziki, ki upoštevajo ta standard (npr. ACSL, Tutsim itd.). Deluje pod operacijskim sistemom DOS, občasno ga dopolnijo tako, da deluje tudi v DOSovem načinu aktualnih različic MS Windows. Preverjeno deluje tudi pod posnemovalnikom DOSa DOSBox. Poleg same simulacije nam omogoča še parametrizacijo (serija simulacij z različnimi vrednostmi parametrov), linearizacijo modelov in optimizacijo - iskanje takšnih vrednosti parametrov, ki minimalizirajo vrednost podane funkcije cenilke.

Delovanje uredi

Ko je razvita simulacijska shema modela, jo lahko na podoben način kot pri analognem računalniku prerišemo v program s priloženim grafičnim urejevalnikom (vsebuje bloke, kot so seštevalnik, ojačenje, integrator, nekaj osnovnih funkcij za vhodne signale ipd.), največkrat pa jo z enim izmed zunanjih urejevalnikom (privzet je Edit kot del DOSa) zapišemo v jeziku SIMCOS. Ker gre za prevajalniški jezik, razvrstilni algoritem model v eni ali drugi obliki pretvori v zapis v prostoru stanj in ga zapiše v fortranu, ta pa se s priloženim prevajalnikom prevede v izvršljivo obliko (.EXE) in zažene. Ta izvršljivi program iz datotek, ki jih program pripravi pred tem, prebere potrebne vrednosti parametrov, in med računanjem zahtevane vrednosti zapisuje v izhodne datoteke. Na koncu nam lahko glavni program te izračunane vrednosti prikaže v obliki grafa. Dele simulacijskega programa je mogoče zapisati tudi neposredno v fortranu in se nespremenjeni prenesjo v fazo prevajanja fortranskega vmesnega programa.

Srce samega simulacijskega programa (ki nastane s prevajanjem programa v fortranu) je funkcija INTEG, ki zna reševati diferencialne enačbe po enem izmed numeričnih postopkov. Ta funkcija najprej iz vhodnih datotek prebere potrebne podatke (parametri, začetni pogoji), nato kliče funkcijo DERIV, kjer je v obliki funkcij odvodov pravzaprav definiran sam model sistema, in vrnjene vrednosti upošteva pri samem numeričnem postopku. Zahtevane rezultate sproti izpisuje v datoteke in nato ponavlja postopek vse dotlej, dokler ni izpolnjen pogoj za konec simulacijskega teka.

Primer uredi

Mrtvi čas  , ki ga z Laplacovo transformacijo zapišemo kot  , nam zaradi transcedentne eksponentne funkcije povzroča kar nekaj problemov pri zvezni simulaciji, kjer nimamo na voljo diskretnih funkcij. Zato to prenosno funkcijo bolj ali manj natančno pretvorimo v racionalno funkcijo (ki jo je bistveno lažje simulirati) s Padéjevo aproksimacijo.


Padéjeva aproksimacija 2. reda je enaka:

 

Padéjeva aproksimacija 4. reda pa je enaka:

 

S simulacijo bomo preverili, kako se obe podani Padéjevi aproksimaciji obneseta pri zakasnitvi enotine stopnice za 1 sekundo in rezultate primerjali s simulacijo diskretne funkcije delay (zaradi katerega moramo v program vnesti primerno veliko polje del). Časovni korak (v simulacijskem žargonu komunikacijski interval) naj bo enak stotinki sekunde, simulacijski tek pa naj traja 5 sekund, ko vsi opazovani odzivi zagotovo preidejo v ustaljeno stanje.

Ko prenosni funkciji Padéjevih transformacij zapišemo v eni izmed simulacijskih shem za simulacijo prenosnih funkcij, dobimo naslednji simulacijski program s podanimi parametri. y1 je enak aproksimaciji 2. reda, y2 aproksimaciji 4. reda, y3 pa diskretni simulaciji.

program pade
constant tm=1.0
constant tfin=5
array del(101)
variable t=0.0
u=step(t,0.)

u11d=12/(tm*tm)*u-12/(tm*tm)*y1
u11=integ(u11d,0.)
u21d=u11-u*6/tm-y1*6/tm
u21=integ(u21d,0.)
y1=u21+u
u12d=u*1680/(tm*tm*tm*tm)-y2*1680/(tm*tm*tm*tm)
u12=integ(u12d,0.)
u22d=u12-u*840/(tm*tm*tm)-y2*840/(tm*tm*tm)
u22=integ(u22d,0.)
u32d=u22+u*180/(tm*tm)-y2*180/(tm*tm)
u32=integ(u32d,0.)
u42d=u32-u*20/tm-y2*20*tm
u42=integ(u42d,0.)
y2=u42+u
y3=delay(u,tm,#del,ci)

cinterval ci=0.01
hdr Mrtvi casi s Padejevimi aproksimacijami
prepar y1,y2,y3
output 10,y1,y2,y3
termt(t.ge.tfin)

end
 
Grafični prikaz rezultatov

Po končani simulaciji nam program omogoči grafični prikaz rezultatov. Priloženi program nam omogoča tudi sledenje poteku grafa (prikaz točke na grafu s '+' in izpis koordinat točke), izbor prikaza le določenih grafov, prikaz mreže, povečavo delov grafa in še nekaj stvari.

Literatura uredi

  • Borut Zupančič (prispevki Rihard Karba in Drago Matko), Simulacija dinamičnih sistemov, Založba FER, Ljubljana, 1995, ISBN 8677390782
  • Borut Zupančič, SIMCOS - jezik za simulacijo zveznih in diskretnih dinamičnih sistemov, Založba FER, Ljubljana, 1992, ISBN 8677390162

Zunanje povezave uredi