Autor
|
Thema: Fragen zu Objekten/Methoden (1440 mal gelesen)
|
Generic 1 Mitglied Strat. Produktionsplanung
 Beiträge: 3 Registriert: 06.09.2004
|
erstellt am: 06. Sep. 2004 09:47 <-- editieren / zitieren --> Unities abgeben:         
Halli Hallo! Ich bräuchte mal Hilfe zum Objekt "Display". Mit welcher Methode kann ich denn den aktuell angezeigten Wert auslesen? .Wert wie beim Objekt "Variable" geht ja leider nicht, dennoch bin ich auf "Display" angewiesen. Vielen Dank, Michael Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Ex-Mitglied
|
erstellt am: 08. Sep. 2004 19:35 <-- editieren / zitieren -->
Hallo Michael, so einen direkten Weg gibt es da wohl nicht - aber einen indirekten. Du kannst den Wert des angegebenen Pfades abfragen. Über display.pfad erhälst Du den Pfad (als string !) Und über folgende Methode kannst du den Wert des Pfades (Attribut) abfragen. is do print execute(sprint (":integer is do "," return ", display.pfad," end;")); end; Hierbei bin ich mal davon ausgegangen, dass Du einen integer-Wert abfragst. Wenn es ein anderes Attribut sein soll, dann tausche das "integer" entsprechend aus.
Durch diese Methode greifst Du natuerlich direkt auf das Attribut zu d.h. du bekommst den aktuellen Wert. Dieser ist identisch mit dem durch Display dargestellten Wert , wenn Du im Watch-Modus bist. Wenn du im Sample-Modus Dir die Werte ausgeben lässt, dann können die Werte varieren, da der Display-Baustein nur entsprechend des Sample- intervalls den Wert updatet. Frage zum Schluß: Warum muß Du umbedingt auf den Display-Baustein zugreifen ? Gruß ------------------ DER SIMULATOR [Diese Nachricht wurde von Simulator am 08. Sep. 2004 editiert.] [Diese Nachricht wurde von Simulator am 08. Sep. 2004 editiert.] |
Generic 1 Mitglied Strat. Produktionsplanung
 Beiträge: 3 Registriert: 06.09.2004
|
erstellt am: 09. Sep. 2004 15:15 <-- editieren / zitieren --> Unities abgeben:         
Hallo Simulator! Danke für die schnelle Antwort, ich habe mein Sim-Modell mittlerweile umgestellt, so dass ich das Problem "eleganter" habe umgehen können. Kurzer Hintergrund: Ich habe verschiedene Unter-Netzwerke gehabt, die inhaltlich nicht identisch waren. Da ich aber wissen musste, ob die darin enthaltene(n) Station(en) resWartend waren oder nicht, fügt ich ein Display ein (mit immer gleichem Namen), auf das ich dann von außen einfach zugreifen konnte. Ich habe diese "Unter-Netzwerke" nun neu aufgebaut, so dass ich auch einfach identische Namen habe verwenden können und so eine direkte Abfrage auf die Stationen machen kann. Nun ne andere Frage, fast im gleichen Zusammenhang: Wenn sich der Zustand einer Station (bspw auf ResWartend) ändert, kann durch die Zustandsänderung eine Methode angestossen werden? Danke nochmals, Michael
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Ex-Mitglied
|
erstellt am: 09. Sep. 2004 16:19 <-- editieren / zitieren -->
Hallo Michael, Dieser Zustand ist "beobachtbar" (watchable) -lt. Attributtabelle (Baustein anwählen und F3 drücken).
D.h. mit den Befehlen waituntil <Bedingung> prio 1; kann eine Methode, die du vorher aufgerufen hast z.B. beim BE-Eintritt ,darauf warten bis die Bedingung - in Deinem Fall "reswartend" eintritt. Danach wird die Methode weiter ausgeführt. Gruß DER SIMULATOR ------------------ DER SIMULATOR [Diese Nachricht wurde von Simulator am 09. Sep. 2004 editiert.] |
Generic 1 Mitglied Strat. Produktionsplanung
 Beiträge: 3 Registriert: 06.09.2004
|
erstellt am: 09. Sep. 2004 16:45 <-- editieren / zitieren --> Unities abgeben:         
Mh, das ist schon richtig, jedoch in meinem speziellen Fall nicht wirklich zielführend, da die Methode ja dann wartet und dadurch der Gesamtablauf gestört wird. ;-) Hier mein Problem im groben Detail (ist das ein Widerspruch in sich?): Ich habe ein Lager und danach 2 Einzelstationen. Diese drei Elemente sind Teil eines weitaus größeren Netzwerkes, d.h. das Netzwerk muss unabhängig von der Logik die die drei Elemente betrifft weiter laufen. Das Lager nimmt 2 unterschiedliche BEs auf und soll einen BE-Typ an die eine Einzelstation, den anderen BE-Typ an die andere Einzelstation routen. Dieser Auslagervorgang darf aber natürlich nur dann erfolgen, wenn die Einzelstation resWartend ist, da es sonst zu einem blocking kommen kann. Momentan ist die Logik die, dass der Auslagervorgang durch a) den Einlagervorgang in das Lager angestossen wird (Prüfung ob BE umlagerfähig, d.h. nachfolgende Einzelstation.resWartend=true und auch Mindestbestand im Lager erfüllt) und auch b) durch den Auslagervorgang aus der bearbeitenden Station. Das funktioniert leider nur so lange, bis das Lager von BEs befüllt ist, die auf eine bspw pausierte Einzelstation umgelagert werden müssen. Dann sind die Einzelstationen leer, das Lager ist voll, es kommt nichts mehr rein, fliesst nichts mehr raus und mein Modell hat sich selbst an die Wand gefahren... Deshalb wollte ich eine Art "If Einzelstation.State=ResWartend then SchiebemeineMethodean", das sich permanent im Watch-Modus befindet... Puh, nach so viel Text brauche ich nen Kaffee....
Danke schon für die bisherige Hilfe, vielleicht fällt Dir ja noch was ein...
Michael
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Ex-Mitglied
|
erstellt am: 09. Sep. 2004 21:02 <-- editieren / zitieren -->
Hallo Michael, folgendes noch zu der methode "wait ...". Die Simulation läuft natürlich weiter, nur die methode mit der wait-Anweisung wird suspendiert bis das definierte Ereignis irgend wann während der Simulation eintritt. Nun zum Lager: Wenn Dein Lager nur 2 verschiedene Typen beinhaltet, so würde ich einfach 2 Stränge mit dem Pufferbaustein modellieren. Am Anfang ein Flussbaustein, der die Be´s je nach Typ in 1. oder 2. Strang (oder strang n bei n-Typen) verteilt. Dies ist einfach und sicher. Von irgendwo muß dein Lager doch ein signal erhalten, welcher Typ auszulagern bzw. umzulagern ist oder ? Ich gehe mal davon aus, dass ein derartiges Signal existiert (Auslagerungsanfrage). Wenn diese Anfrage an Dein Lager gestellt wird und der entsprechende Typ ist vorrätig, dann wird ausgelagert, wenn der Typ nicht vorrätig ist, wird der Be-Typ in eine Liste geschrieben (für später). Bei der nächsten Anfrage oder beim nächsten BE-Eintritt oder Austritt wird anhand der liste das lager überprüft, welches teil als nächstes ausgelagert werden kann. Wird ein Teil ausgelagert, so wird es aus der Liste gestrichen. Nun kann es sein,dass ein Teil,das ausgelagert werden soll nicht ausgelagert werden kann, weil die Nachfolgestation gestoert, pausiert oder blockiert ist. Wenn Du die Umlagerung "händisch" mit einer methode durchführst muß du all diese Zustände berücksichtigen. Einfacher ist es z.b. mit den Puffer-Bausteinen, wo du die Ausgänge oeffnen bzw. schliessen kannst. - ein Ausgang bleibt so lange offen, bis ein Be ihn passiert hat und mit der Ausgangssteuerung selber wieder geschlossen hat. Mit den 3 Ereignissen Be-Eintritt, Be-Austritt und Auslagerungsanfrage ist eigentlich sichergestellt, dass keine deadlocks auftreten können wenn das Lager nicht zu klein ist für die Ein bzw. -Auslagerungsfrequenzen. Gruß
------------------ DER SIMULATOR  |
| Anzeige.:
Anzeige: (Infos zum Werbeplatz >>)
 |