summaryrefslogtreecommitdiff
path: root/app/schulis-simulationssystem/3.0/src/ls dp1
blob: 6c82b94855f68132a2d23997b1e272bba3dbfd14 (plain)
1
2
3
4
PACKETdiagrammpraesentation1DEFINESgibbildaus,transformierewirkungsdiagrammundstartesimulation,modellinfo:LETbitteumgeduld=576,prozedurdeklarationfuerdgl=616,realconst=602,parameter=604,dquotientdeklaration=605,replacefuerzustand=606,dquotientliefern=607,prozedurfussfuerdgl=617,prozedurdeklarationfueregl=618,prozedurfussfueregl=619,prozedurkopfzusatzdarst=620,prozedurfusszusatzdarst=621,evektor=611,replacefuerergebnis=612,evektorliefern=613,startwert=614,singularmodellgroesse=511,singularergebnis=512,singularparameter=513,singularformel=514,pluralformel=538,simulationneustarten=10,terminaltaskname="ARBEITSPLATZ";LETnull="0.0",maxlink=8,standardkanal=1;PROCgibbildaus:INT VARi,j,k,starti:=impos(gitterstart),endi:=starti+igittersize-1,startj:=jmpos(gitterstart),endj:=startj+jgittersize-1;initialisierezeichenflaeche;zeichnealleboxen;zeichnealleverbindungen.initialisierezeichenflaeche:page(area(standardfenster));bsspeicherinit.zeichnealleboxen:FORiFROMstartiUPTOendiREP FORjFROMstartjUPTOendjREP IFbelegt(actualcell)THENbox(i,j)FI PER PER.zeichnealleverbindungen:FORiFROMstartiUPTOendiREP FORjFROMstartjUPTOendjREP IFbelegt(actualcell)THENbearbeiteausgehendeundankommendelinien;FI PER PER.actualcell:cell(i,j).bearbeiteausgehendeundankommendelinien:FORkFROM1UPTOmaxlinkREP IFactualcellAUSGANGkTHENausgehendelinie;ELIFeineliniekommtanANDliniekommtvonaussenTHENvonaussenankommendelinieFI PER.ausgehendelinie:zeichneverbindung(mpos(actualcell),k,actualcellUEBERk,actualcellNRk).vonaussenankommendelinie:zeichneverbindung(actualcellUEBERk,actualcellNRk,mpos(actualcell),k).eineliniekommtan:actualcellEINGANGk.liniekommtvonaussen:NOTimgitter(actualcellUEBERk).END PROCgibbildaus;PROCmodellinfo(FILE VARf):allevariablen;alleergaenzungsvariablen;alleparameter;alleformeln.allevariablen:IFanzahlmpos(variablenthesaurus)=1THENputline(f,anwendungstext(singularmodellgroesse)+":");line(f);objekttexte(f,variablenthesaurus)ELIFanzahlmpos(variablenthesaurus)>1THENputline(f,anwendungstext(singularmodellgroesse)+"n:");line(f);objekttexte(f,variablenthesaurus)FI.alleergaenzungsvariablen:IFanzahlmpos(ergebnisthesaurus)=1THENputline(f,anwendungstext(singularergebnis)+":");line(f);objekttexte(f,ergebnisthesaurus);line(f)ELIFanzahlmpos(ergebnisthesaurus)>1THENputline(f,anwendungstext(singularergebnis)+"n:");line(f);objekttexte(f,ergebnisthesaurus);line(f)FI.alleparameter:IFanzahlmpos(parameterthesaurus)>0THENputline(f,anwendungstext(singularparameter)+":");line(f);objekttexte(f,parameterthesaurus);line(f)FI.alleformeln:IFanzahlmpos(formelthesaurus)=1THENputline(f,anwendungstext(singularformel)+":");line(f);objekttexte(f,formelthesaurus);line(f)ELIFanzahlmpos(formelthesaurus)>1THENputline(f,anwendungstext(pluralformel)+":");line(f);objekttexte(f,formelthesaurus);line(f)FI.END PROCmodellinfo;PROCobjekttexte(FILE VARf,THESAURUS CONSTt):INT VARi:=0;MPOS VARmp;WHILEi<highestentry(t)REPgetmpos(t,mp,i);objekttext(f,mp)PER END PROCobjekttexte;FILE VARq;MPOS VARmp;INT VARdimensiondesmodells,codimensiondesmodells;PROCtransformierewirkungsdiagrammundstartesimulation(BOOL CONSTls,INT VARreturncode):DATASPACE VARmodellds,codeds;BOUND MODELLDGL VARtemporaeresmodell;INT VARinternerretcode:=0;schreibehinweis;initmodellds;initmodell;fuelletemporaeresmodell;versendemodellundstartesimulation(modellds,codeds,ls,internerretcode);IFiserrorTHENclearerror;returncode:=1ELSEreturncode:=internerretcode;FI.schreibehinweis:IF NOTlsTHENdoublefootnote(anwendungstext(bitteumgeduld))ELSEfootnote(anwendungstext(bitteumgeduld))FI.initmodellds:forget(modellds);modellds:=nilspace;.initmodell:temporaeresmodell:=modellds;nilmodell(temporaeresmodell).fuelletemporaeresmodell:erzeugequelltext(codeds);vthesaurus;ethesaurus;pthesaurus;modellmitdatenfuellen(temporaeresmodell,vnamenlang,vnamenkurz,enamenlang,enamenkurz,pnamen).vthesaurus:THESAURUS VARvnamenlang:=emptythesaurus,vnamenkurz:=emptythesaurus;INT VARi:=0;MPOS VARmp;WHILEi<highestentry(variablenthesaurus)REPgetmpos(variablenthesaurus,mp,i);insert(
vnamenlang,langname(objekt(mp)));insert(vnamenkurz,kurzname(objekt(mp)))PER.ethesaurus:THESAURUS VARenamenlang:=emptythesaurus,enamenkurz:=emptythesaurus;i:=0;WHILEi<highestentry(ergebnisthesaurus)REPgetmpos(ergebnisthesaurus,mp,i);insert(enamenlang,langname(objekt(mp)));insert(enamenkurz,kurzname(objekt(mp)))PER.pthesaurus:THESAURUS VARpnamen:=emptythesaurus;i:=0;WHILEi<highestentry(parameterthesaurus)REPgetmpos(parameterthesaurus,mp,i);insert(pnamen,langname(objekt(mp)))PER.END PROCtransformierewirkungsdiagrammundstartesimulation;LETbtsimulationnichtmoeglichbittetaste=64,btwartenallgemein=44,btmodell=106;INT CONSTexistiertnicht:=-1,nichtempfangsbereit:=-2;PROCversendemodellundstartesimulation(DATASPACE VARmodellds,codeds,BOOL CONSTls,INT VARretcode):retcode:=0;TEXT VARo:="";DATASPACE VARtransportdsp,infodsp:=nilspace;disablestop;REPmodellbearbeiten;UNTILordnungsgemaessbeendetodertasknichtempfangsbereitPER;IFokTHEN ELSE IF NOTlsTHENpage;doublefootnote(anwendungstext(btsimulationnichtmoeglichbittetaste));clearbuffer;inchar(o);ELSE FI FI;forget(codeds);forget(modellds);.ok:retcode=0.ordnungsgemaessbeendetodertasknichtempfangsbereit:retcode<>simulationneustarten.bereiteinformationstextvor:FILE VARinfofile:=sequentialfile(output,infodsp);putline(infofile,anwendungstext(btmodell)+aktuellermodellname);putline(infofile,length(anwendungstext(btmodell)+aktuellermodellname)*"=");line(infofile);modellinfo(infofile);.modellbearbeiten:IFretcode=simulationneustartenTHENpage;footnote(anwendungstext(btwartenallgemein));FI;bereiteinformationstextvor;retcode:=0;schickemodelldaten;IFokTHENschickemodellinfos;IFokTHENstartesimulationFI;FI;forget(infodsp);continue(standardkanal);.schickemodelldaten:transportdsp:=modellds;schickezumanager(transportdsp,2,retcode);forget(transportdsp);.schickemodellinfos:transportdsp:=infodsp;schickezumanager(transportdsp,7,retcode);forget(transportdsp);.startesimulation:transportdsp:=codeds;break(quiet);schickezumanager(transportdsp,9,retcode);forget(transportdsp);.END PROCversendemodellundstartesimulation;PROCschickezumanager(DATASPACE VARdatenraum,INT CONSTverarbeitung,INT VARmesscode):INT CONSTeingabevomkanal:=-4;TASK VARmanagertask:=/terminaltaskname,kontrolltask:=/terminaltaskname;enablestop;REPkernvonschickezumanagerPER.kernvonschickezumanager:managertask:=kontrolltask;send(managertask,verarbeitung,datenraum,messcode);forget(datenraum);REP IFmesscode=existiertnichtTHENleaveschickezumanager;ELIFmesscode=nichtempfangsbereitTHENleaveschickezumanager;ELSEwarteaufquittungFI PER.warteaufquittung:managertask:=/terminaltaskname;wait(datenraum,messcode,managertask);forget(datenraum);IFquerschlaegersendungTHEN IFcontinueversuchTHENleaveschickezumanager;ELSE IFmesscode=eingabevomkanalTHEN REP UNTILincharety=""PER;forget(datenraum);FI;FI ELSEleaveschickezumanager;FI.querschlaegersendung:NOT(managertask=kontrolltask).continueversuch:managertask=supervisorAND((task(messcodeMOD100)=niltask)OR(task(messcodeMOD100)=myself)).leaveschickezumanager:LEAVEschickezumanager;END PROCschickezumanager;PROCerzeugequelltext(DATASPACE VARds):ds:=nilspace;q:=sequentialfile(output,ds);erzeugedgl;erzeugeegl;erzeugepseudozusatzdarstellung;END PROCerzeugequelltext;PROCerzeugedgl:dimensiondesmodells:=anzahlvariablen;schreibeprozedurkopffuerdgl;schreibeprozedurrumpffuerdgl;schreibeprozedurfussfuerdgl;.schreibeprozedurkopffuerdgl:putline(q,anwendungstext(prozedurdeklarationfuerdgl)).schreibeprozedurrumpffuerdgl:deklariereundinitialisierestartwerte;deklariereundinitialisiereparameter;berechnedifferentialquotienten;listerefinementsfuerformeln.schreibeprozedurfussfuerdgl:putline(q,anwendungstext(prozedurfussfuerdgl)).berechnedifferentialquotienten:INT VARi:=0,j:=0;TEXT VARzeile:=anwendungstext(dquotientdeklaration)+text(dimensiondesmodells)+");";;putline(q,zeile);WHILEi<highestentry(variablenthesaurus)REPjINCR1;getmpos(variablenthesaurus,mp,i);zeile:=replacestatement+text(j)+","+summedereinlaufendenpfeile+");";putline(q,zeile);PER;putline(q,
ergebniszeile);.replacestatement:anwendungstext(replacefuerzustand).ergebniszeile:anwendungstext(dquotientliefern).END PROCerzeugedgl;PROCerzeugeegl:codimensiondesmodells:=anzahlergaenzungsvariablen;schreibeprozedurkopffueregl;schreibeprozedurrumpffueregl;schreibeprozedurfussfueregl.schreibeprozedurkopffueregl:putline(q,anwendungstext(prozedurdeklarationfueregl)).schreibeprozedurrumpffueregl:deklariereundinitialisierestartwerte;deklariereundinitialisiereparameter;deklariereundberechneergebnisse;listerefinementsfuerformeln.schreibeprozedurfussfueregl:putline(q,anwendungstext(prozedurfussfueregl)).deklariereundberechneergebnisse:INT VARi:=0,j:=0;TEXT VARzeile:=anwendungstext(evektor)+text(codimensiondesmodells)+");";putline(q,zeile);WHILEi<highestentry(ergebnisthesaurus)REPjINCR1;getmpos(ergebnisthesaurus,mp,i);zeile:=replacestatement+text(j)+","+summedereinlaufendenpfeile+");";putline(q,zeile);PER;putline(q,ergebniszeile);.replacestatement:anwendungstext(replacefuerergebnis).ergebniszeile:anwendungstext(evektorliefern).END PROCerzeugeegl;PROCerzeugepseudozusatzdarstellung:putline(q,anwendungstext(prozedurkopfzusatzdarst));putline(q,anwendungstext(prozedurfusszusatzdarst))END PROCerzeugepseudozusatzdarstellung;PROCdeklariereundinitialisierestartwerte:INT VARi:=0,j:=0;TEXT VARzeile:=anwendungstext(realconst);WHILEi<highestentry(variablenthesaurus)REPjINCR1;getmpos(variablenthesaurus,mp,i);zeileCATelanname(objekt(mp));zeileCAT"::";zeileCAT(anwendungstext(startwert)+"SUB"+text(j)+",")PER;IFvariablenvorhandenTHENreplace(zeile,LENGTHzeile,";");putline(q,zeile)FI.variablenvorhanden:j>0.END PROCdeklariereundinitialisierestartwerte;PROCdeklariereundinitialisiereparameter:INT VARi:=0,j:=0;TEXT VARzeile:=anwendungstext(realconst);WHILEi<highestentry(parameterthesaurus)REPjINCR1;getmpos(parameterthesaurus,mp,i);zeileCATelanname(objekt(mp));zeileCAT"::";zeileCAT(anwendungstext(parameter)+"SUB"+text(j)+",");PER;IFparametervorhandenTHENreplace(zeile,LENGTHzeile,";");putline(q,zeile)FI.parametervorhanden:j>0.END PROCdeklariereundinitialisiereparameter;PROClisterefinementsfuerformeln:INT VARi:=0;WHILEi<highestentry(formelthesaurus)REPgetmpos(formelthesaurus,mp,i);putline(q,elanname(objekt(mp))+":"+ausdruck(objekt(mp))+".")PER END PROClisterefinementsfuerformeln;TEXT PROCsummedereinlaufendenpfeile:INT VARk;TEXT VARsumme:="";FORkFROM1UPTOmaxlinkREP IF(cell(mp)EINGANGk)THENsummeCATelanname(objekt(cell(mp)UEBERk))+"+"FI PER;IFlength(summe)>0THENreplace(summe,length(summe)," ");ELSEsumme:=nullFI;summeEND PROCsummedereinlaufendenpfeile;INT PROCanzahlvariablen:anzahlmpos(variablenthesaurus)END PROCanzahlvariablen;INT PROCanzahlergaenzungsvariablen:anzahlmpos(ergebnisthesaurus)END PROCanzahlergaenzungsvariablen;END PACKETdiagrammpraesentation1;