app/schulis-simulationssystem/3.0/src/ls simulation

Raw file
Back to index

1
2
3
4
PACKETlssimulationDEFINESberechne,berechnefortfuehrung,forgetmodellauf,zeigediagramm,zeigephasendiagramm,zeigevergleichskurve,zeigevergleichfuertabelle,zeigevergleichskurvefuerphasendiagramm:LETabbruch=36,mldruckertaskexistiertnicht=37,mldrucktasknichtempfangsbereit=38,mldruckunmoeglich=39,druckok=0,printertaskname="PRINTER",kurveleer=99,oueberschrift=67,vueberschrift=68,steuerleisteberechnung=26,steuerleistegraphik=27,steuerleistevergleichgraphik=29,steuerleistetabelle=30,steuerleistewarten=31,produktname=21,sendetaste="p",vglbeendenz="z",vglbeendent="t",vglbeendenh="h",lsabbruch="m",lsabbrucheingabe="m",blaetternoben="o",blaetternunten="u",weiter="w",druckdateitab=" tabelle.p",druckdateitab2=" tabelle.p.2",dateimodellwerte=" modellwerte",erzeugtetabelle=" tabelle";LETstrukt1fenster=1,strukt4fenster=4,fensterdummy=0,fensterganz=1,fensterlinksoben=4,fensterrechtsoben=6,fensterrechtsunten=7,fensterlinksunten=5;TEXT CONSTscrollausstiegmitdrucken:="md";INT VARfehlercode:=0,fehlernummer;LETscrollsp1=16,scrollzeile1=3,scrollbreitetab=15;LETniltext="",seitenvorschub="#page#",headanfang="#head#",nummerierung="#right# Seite: ",center="#center#",headende="#end#",druckbreite=78,drucklaenge=60;LETpausendauer=30;TEXT CONSTsendenblaetternuntenundoben:=sendetaste+blaetternunten+blaetternoben;INT VARsteuerzeilennr,kopfzeilennr;PROCberechne(LOESUNG VARergebnis,ZUSTAND PROC(REAL CONST,ZUSTAND CONST,PARAMETER CONST)f,ZUSTAND PROC(REAL CONST,ZUSTAND CONST,PARAMETER CONST)cof,TEXT VARtaste):enablestop;taste:="";forgetlogischemaske;REPkernvonberechne;PER.kernvonberechne:forgetmodellauf;eingabemodellgroessen(ergebnis,PROCf,PROCcof,kopfzeilezusammenstellen(kopfzeile(21),modellkurzbezeichnung,77),steuerleiste(steuerleisteberechnung),taste,zeichenkette,fehlercode);IFfehlercode=abbruchCORfehlercode=kurveleerTHENpausebeifehlern;reenterberechneELSEpausebeifehlernFI;IFtaste=lsabbrucheingabeCORtaste=weiterTHENleaveberechneFI;.zeichenkette:weiter.leaveberechne:LEAVEberechne.reenterberechne:forget("aus",quiet);LEAVEkernvonberechne.END PROCberechne;PROCforgetmodellauf:forget(dateimodellwerte,quiet);forget("aus",quiet);forget("aus diagramm",quiet);forget(" neue kurve",quiet);forget(druckdateitab,quiet);END PROCforgetmodellauf;PROCzeigediagramm(TEXT CONSTart,LOESUNG VARdieloesung,ZUSTAND VARmuster,BOOL CONSTinfortsetzung,TEXT VARtaste):TEXT VARdiagrammart:=art;OUTPUT VARausdiagramm;fehlernummer:=0;gibdiagrammaus(ausdiagramm,muster,dieloesung,infortsetzung,diagrammart,taste);.END PROCzeigediagramm;PROCgibdiagrammaus(OUTPUT VARausdiagramm,ZUSTAND CONSTmuster,LOESUNG VARloesungx,BOOL CONSTinfortsetzung,TEXT CONSTdiagrammart,TEXT VARtaste):KURVE VARhilfskurve:=LOESUNGSABSCHNITTloesungx;TEXT CONSTtastenraus:=lsabbruch;;ausdiagramm:=niloutput(strukt1fenster,"aus diagramm");IFdiagrammart=vglbeendenzTHENgibzeitdiagrammausELIFdiagrammart=vglbeendentTHENgibtabelleausELIFdiagrammart=vglbeendenhTHENgibhistogrammausFI.gibzeitdiagrammaus:IFinfortsetzungTHENkopfzeilennr:=4ELSEkopfzeilennr:=3FI;steuerzeilennr:=steuerleistegraphik;pausebeifehlern;steuerprozessfuereineloesung(ausdiagramm,hilfskurve,muster,neuerzustand(dimension+codimension),fensterganz,fensterdummy,kopfzeilennr,steuerzeilennr,sendetaste,tastenraus,taste,PROCcoroutinezeit,PROCcoroutinedummy).gibtabelleaus:FILE VARtbl:=tabelle(hilfskurve,muster,TRUE);WINDOW VARtabwindow:=grossesrahmenfenster;INT VARerstersatz1:=3,erstespalte1:=scrollsp1,seitenzaehler:=1;INT VARok:=0;forget(druckdateitab,quiet);rename(erzeugtetabelle,druckdateitab);outframe(tabwindow);footnote(steuerleiste(steuerleistetabelle));scroll(tabwindow,druckdateitab,scrollsp1,scrollzeile1,scrollbreitetab,erstersatz1,erstespalte1,scrollausstiegmitdrucken,taste);WHILEtaste<>lsabbruchREPdruckeevt;scroll(tabwindow,druckdateitab,scrollsp1,scrollzeile1,scrollbreitetab,erstersatz1,erstespalte1,scrollausstiegmitdrucken,taste);PER;erase(tabwindow);.druckeevt:footnote(steuerleiste(steuerleistewarten));seitenzaehler:=1;druckemodellwerteaus(originalwerte,seitenzaehler
,ok);IFok=druckokTHENtabelleaufbereitetdrucken(druckdateitab,scrollsp1,scrollzeile1,scrollbreitetab,seitenzaehler,ok);FI;IFok=druckokTHENfootnote(steuerleiste(steuerleistetabelle));ELSEfootnote(meldungstext(ok));pause;footnote(steuerleiste(steuerleistetabelle));FI;.gibhistogrammaus:IFinfortsetzungTHENkopfzeilennr:=29ELSEkopfzeilennr:=28FI;steuerzeilennr:=steuerleistegraphik;pausebeifehlern;steuerprozessfuereineloesung(ausdiagramm,hilfskurve,muster,neuerzustand(dimension+codimension),fensterganz,fensterdummy,kopfzeilennr,steuerzeilennr,sendetaste,tastenraus,taste,PROCcoroutinehisto,PROCcoroutinedummy).END PROCgibdiagrammaus;PROCpausebeifehlern:IFfehlercode>0THENzeigemeldung(meldungstext(fehlercode),FALSE);pause(pausendauer);fehlercode:=0;loescheaktuellemeldung;FI.END PROCpausebeifehlern;PROCzeigephasendiagramm(LOESUNG VARdieloesung,ZUSTAND VARmuster,BOOL CONSTinfortsetzung,TEXT VARtaste):TEXT CONSTtastenraus:=lsabbruch;gibphasendiagrammaus;.gibphasendiagrammaus:KURVE VARhilfskurve:=LOESUNGSABSCHNITTdieloesung;OUTPUT VARausphasen:=niloutput(strukt1fenster,"aus phasen");kopfzeilennr:=kopf;steuerzeilennr:=steuerleistegraphik;steuerprozessfuereineloesung(ausphasen,hilfskurve,muster,neuerzustand(dimension+codimension),fensterganz,fensterdummy,kopfzeilennr,steuerzeilennr,sendetaste,tastenraus,taste,PROCcoroutinephase,PROCcoroutinedummy).kopf:IFinfortsetzungTHEN9ELSE8FI.END PROCzeigephasendiagramm;PROCzeigevergleichskurve(TEXT VARtaste,LOESUNG VARlsga,lsgb,ZUSTAND CONSTmuster,TEXT CONSTwas):KURVE VARkurvea,kurveb;TEXT VARtastenraus:=lsabbruch;originalundvergleichskurveausgeben.originalundvergleichskurveausgeben:OUTPUT VARausvergl2:=niloutput(strukt4fenster,"ausvergl2");kurvea:=LOESUNGSABSCHNITTlsga;kurveb:=LOESUNGSABSCHNITTlsgb;modellwertefuervergleich(ausvergl2,fensterrechtsoben,lsga,fensterrechtsunten,lsgb);kopfzeilennr:=6;steuerzeilennr:=steuerleistevergleichgraphik;aufrufvergleichhistogrammodervergleichzeit.aufrufvergleichhistogrammodervergleichzeit:IFwas=vglbeendenzTHENsteuerprozessfuerzweiloesungen(ausvergl2,kurvea,kurveb,muster,fensterlinksoben,fensterlinksunten,kopfzeilennr,steuerzeilennr,sendenblaetternuntenundoben,tastenraus,taste,PROCcoroutinezeit,PROCkreuzzeitvergleich)ELSEsteuerprozessfuerzweiloesungen(ausvergl2,kurvea,kurveb,muster,fensterlinksoben,fensterlinksunten,kopfzeilennr,steuerzeilennr,sendenblaetternuntenundoben,tastenraus,taste,PROCcoroutinehisto,PROCkreuzhistovergleich)FI.ENDPROCzeigevergleichskurve;PROCzeigevergleichfuertabelle(TEXT VARtaste,LOESUNG VARla,lb,ZUSTAND CONSTmuster):KURVE VARkurvea:=LOESUNGSABSCHNITTla,kurveb:=LOESUNGSABSCHNITTlb;WINDOW VARtabwindowo:=tabellenfensteroben,tabwindowu:=tabellenfensterunten;INT VARerstersatz1:=3,erstersatz2:=3,erstespalte1:=scrollsp1,seitenzaehler:=1;INT VARok:=0;originalundvergleichausgeben;forget(druckdateitab2,quiet);forget(druckdateitab,quiet);.originalundvergleichausgeben:FILE VARtbl;kopfzeilennr:=6;steuerzeilennr:=steuerleistetabelle;forget(druckdateitab2,quiet);forget(druckdateitab,quiet);tbl:=tabelle(kurvea,muster,TRUE);rename(erzeugtetabelle,druckdateitab);tbl:=tabelle(kurveb,muster,TRUE);rename(erzeugtetabelle,druckdateitab2);footnote(steuerleiste(steuerzeilennr));outframe(tabwindowo);outframe(tabwindowu);scroll(tabwindowo,tabwindowu,druckdateitab,druckdateitab2,scrollsp1,scrollzeile1,scrollbreitetab,erstersatz1,erstespalte1,erstersatz2,scrollausstiegmitdrucken,taste);WHILEtaste<>lsabbruchREPdruckeevt;scroll(tabwindowo,tabwindowu,druckdateitab,druckdateitab2,scrollsp1,scrollzeile1,scrollbreitetab,erstersatz1,erstespalte1,erstersatz2,scrollausstiegmitdrucken,taste);PER;erase(tabwindowo);erase(tabwindowu);.druckeevt:footnote(steuerleiste(steuerleistewarten));seitenzaehler:=1;druckemodellwerteaus(la,seitenzaehler,ok);IFok=druckokTHENtabelleaufbereitetdrucken(druckdateitab,scrollsp1,scrollzeile1,scrollbreitetab,seitenzaehler,ok);IFok=druckokTHENdruckemodellwerteaus(lb,seitenzaehler,ok);IFok=druckokTHENtabelleaufbereitetdrucken(druckdateitab2,scrollsp1,
scrollzeile1,scrollbreitetab,seitenzaehler,ok);FI;FI;FI;IFok=druckokTHENfootnote(steuerleiste(steuerleistetabelle));ELSEfootnote(meldungstext(ok));pause;footnote(steuerleiste(steuerleistetabelle));FI;.ENDPROCzeigevergleichfuertabelle;PROCzeigevergleichskurvefuerphasendiagramm(TEXT VARtaste,KURVE CONSTkva,kvb,ZUSTAND VARmuster):TEXT VARtastenraus:=lsabbruch;originalundvergleichskurveausgeben;.originalundvergleichskurveausgeben:OUTPUT VARausvergl2:=niloutput(strukt1fenster,"ausvergl2");KURVE VARkurvea,kurveb;kurvea:=kva;kurveb:=kvb;steuerprozessfuerzweiloesungenaufrufen.steuerprozessfuerzweiloesungenaufrufen:kopfzeilennr:=6;steuerzeilennr:=steuerleistegraphik;steuerprozessfuerzweiloesungen(ausvergl2,kurvea,kurveb,muster,fensterganz,fensterganz,kopfzeilennr,steuerzeilennr,sendetaste,tastenraus,taste,PROCcoroutinephase,PROCkreuzphasevergleich).ENDPROCzeigevergleichskurvefuerphasendiagramm;PROCmodellwertefuervergleich(OUTPUT VARseite,INT CONSToben,LOESUNG CONSToriginal,INT CONSTunten,LOESUNG CONSTvergleich):FILE VARzfile;zfile:=modellwerteausgeben(original);modify(zfile);toline(zfile,1);insertrecord(zfile);writerecord(zfile,meldungstext(oueberschrift));toline(zfile,2);insertrecord(zfile);writerecord(zfile,"         ");replace(seite,oben,zfile);zfile:=modellwerteausgeben(vergleich);modify(zfile);toline(zfile,1);insertrecord(zfile);writerecord(zfile,meldungstext(vueberschrift));toline(zfile,2);insertrecord(zfile);writerecord(zfile,"         ");replace(seite,unten,zfile);END PROCmodellwertefuervergleich;PROCforgetds:forget("groessen vergl",quiet);forget("ausvergl",quiet);forget("ausvergl2",quiet);END PROCforgetds;PROCberechnefortfuehrung(LOESUNG VARoriginal,gesamtloesung,ZUSTAND PROC(REAL CONST,ZUSTAND CONST,PARAMETER CONST)f,ZUSTAND PROC(REAL CONST,ZUSTAND CONST,PARAMETER CONST)cof):ZUSTAND VARstartwert:=neuerzustand(dimension),letzterpunkt:=letzterwert(LOESUNGSABSCHNITTgesamtloesung);INT VARi;FORiFROM1UPTOdimensionREPreplace(startwert,i,(letzterpunktSUBi));PER KURVE VARzkurve1,zkurve2;gibberechnungsstandzeileaus;zkurve1:=kurve1(PROCf,PROCcof,startwert,zustandunteregrenze,zustandoberegrenze,letztezeit(LOESUNGSABSCHNITTgesamtloesung),DAUERoriginal,PARAMETERSATZgesamtloesung,anzahlbeobachtungspunkte,codimension,"fortfuehrung",fehlercode);zkurve2:=LOESUNGSABSCHNITTgesamtloesung;zkurve2CATzkurve1;forget("fortfuehrung",quiet);gesamtloesungLOESUNGSABSCHNITTzkurve2;gesamtloesungDAUER(letztezeit(LOESUNGSABSCHNITTgesamtloesung)-(STARTZEIToriginal));pausebeifehlern;END PROCberechnefortfuehrung;PROCtabelleaufbereitetdrucken(TEXT CONSTfname,INT CONSTspaltenbeginn,zeilenbeginn,spaltenbreite,INT VARseitenzahl,INT VARret):FILE VARf,fdruck;INT VARdateibreite,dateilaenge,i,j,verfuegbarerplatz,zulaessigebreite;TEXT CONSTneuername:=fname+"."+timeofday+text(seitenzahl);TEXT VARzeile,druckzeile;testeumfangderzudruckendendatei;bereitedateiauf;ret:=erfolgreicherdruckversuch(neuername);IFret=druckokTHENforget(neuername,quiet);ELSE END IF.testeumfangderzudruckendendatei:f:=sequentialfile(input,fname);dateilaenge:=lines(f);dateibreite:=0;WHILE NOTeof(f)REPgetline(f,zeile);IFlength(zeile)>dateibreiteTHENdateibreite:=length(zeile)END IF END REP;verfuegbarerplatz:=drucklaenge-zeilenbeginn+1;verfuegbarerplatzDECR5;zulaessigebreite:=0;REPzulaessigebreiteINCRspaltenbreiteUNTILzulaessigebreite>druckbreite-spaltenbeginn+1END REP;zulaessigebreiteDECRspaltenbreite.bereitedateiauf:INT VARspaltenpointer,zeilenpointer;modify(f);fdruck:=sequentialfile(output,neuername);spaltenpointer:=spaltenbeginn;WHILEspaltenpointer<dateibreiteREPschreibeseiten;seitenzahlINCR1;spaltenpointerINCRzulaessigebreiteEND REP.schreibeseiten:zeilenpointer:=zeilenbeginn;REPschreibekopfzeilen;schreiberumpfzeilenEND REP;.schreibekopfzeilen:putline(fdruck,seitenvorschub);putline(fdruck,headanfang);putline(fdruck,auskunftstext(produktname)+nummerierung+text(seitenzahl));line(fdruck);putline(fdruck,center+modellbezeichnung);putline(fdruck,headende);line(fdruck,2);FORjFROM1UPTOzeilenbeginn-1REP
druckzeile:=niltext;toline(f,j);readrecord(f,zeile);druckzeileCATsubtext(zeile,1,spaltenbeginn-1);druckzeileCATsubtext(zeile,spaltenpointer,spaltenpointer+zulaessigebreite);putline(fdruck,druckzeile)END REP.schreiberumpfzeilen:FORiFROM1UPTOverfuegbarerplatzREPdruckzeile:=niltext;toline(f,zeilenpointer);readrecord(f,zeile);druckzeileCATsubtext(zeile,1,spaltenbeginn-1);druckzeileCATsubtext(zeile,spaltenpointer,spaltenpointer+zulaessigebreite);putline(fdruck,druckzeile);zeilenpointerINCR1;IFzeilenpointer>dateilaengeTHEN LEAVEschreibeseitenEND IF END REP.END PROCtabelleaufbereitetdrucken;PROCdruckemodellwerteaus(LOESUNG CONSTloesungx,INT VARseitenzahl,INT VARret):FILE VARmdw,fdruck;TEXT VARzeilentext,eindeutigerwertname;initialisieredruckdateimitueberschrift;lesemodellwertdateiein;druckemodellwerte;.initialisieredruckdateimitueberschrift:mdw:=modellwerteausgeben(loesungx);eindeutigerwertname:=dateimodellwerte+"."+timeofday+text(seitenzahl);IFexists(eindeutigerwertname)THENforget(eindeutigerwertname,quiet);FI;fdruck:=sequentialfile(output,eindeutigerwertname);putline(fdruck,seitenvorschub);putline(fdruck,headanfang);putline(fdruck,auskunftstext(produktname)+nummerierung+text(seitenzahl));line(fdruck);putline(fdruck,center+modellbezeichnung);putline(fdruck,headende);line(fdruck,2);.lesemodellwertdateiein:input(mdw);WHILE NOTeof(mdw)REPgetline(mdw,zeilentext);putline(fdruck,zeilentext);PER;.druckemodellwerte:seitenzahlINCR1;ret:=erfolgreicherdruckversuch(eindeutigerwertname);IFret=druckokTHENforget(dateimodellwerte,quiet);forget(eindeutigerwertname,quiet);FI;.END PROCdruckemodellwerteaus;INT PROCerfolgreicherdruckversuch(TEXT CONSTdatname):disablestop;IFexiststask(printertaskname)THEN IFstatus(/printertaskname)=2THENsicherezuprinterELSEenablestop;mldrucktasknichtempfangsbereitFI ELSEenablestop;mldruckertaskexistiertnichtFI.sicherezuprinter:commanddialogue(FALSE);save(datname,/printertaskname);commanddialogue(TRUE);IFiserrorTHENclearerror;enablestop;mldruckunmoeglichELSEenablestop;druckokEND IF.END PROCerfolgreicherdruckversuch;END PACKETlssimulation;