Hot News:

Mit Unterstützung durch:

  Foren auf CAD.de
  TM - Plant Simulation
  Fragen zu Objekten/Methoden

Antwort erstellen  Neues Thema erstellen
CAD.de Login | Logout | Profil | Profil bearbeiten | Registrieren | Voreinstellungen | Hilfe | Suchen

Anzeige:

Darstellung des Themas zum Ausdrucken. Bitte dann die Druckfunktion des Browsers verwenden. | Suche nach Beiträgen nächster neuer Beitrag | nächster älterer Beitrag
Autor Thema:  Fragen zu Objekten/Methoden (1440 mal gelesen)
Generic 1
Mitglied
Strat. Produktionsplanung

Sehen Sie sich das Profil von Generic 1 an!   Senden Sie eine Private Message an Generic 1  Schreiben Sie einen Gästebucheintrag für Generic 1

Beiträge: 3
Registriert: 06.09.2004

erstellt am: 06. Sep. 2004 09:47    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

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 oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat

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

Sehen Sie sich das Profil von Generic 1 an!   Senden Sie eine Private Message an Generic 1  Schreiben Sie einen Gästebucheintrag für Generic 1

Beiträge: 3
Registriert: 06.09.2004

erstellt am: 09. Sep. 2004 15:15    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

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 oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat

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

Sehen Sie sich das Profil von Generic 1 an!   Senden Sie eine Private Message an Generic 1  Schreiben Sie einen Gästebucheintrag für Generic 1

Beiträge: 3
Registriert: 06.09.2004

erstellt am: 09. Sep. 2004 16:45    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

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 oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat

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 >>)

Darstellung des Themas zum Ausdrucken. Bitte dann die Druckfunktion des Browsers verwenden. | Suche nach Beiträgen

nächster neuerer Beitrag | nächster älterer Beitrag
Antwort erstellen


Diesen Beitrag mit Lesezeichen versehen ... | Nach anderen Beiträgen suchen | CAD.de-Newsletter

Administrative Optionen: Beitrag schliessen | Archivieren/Bewegen | Beitrag melden!

Fragen und Anregungen: Kritik-Forum | Neues aus der Community: Community-Forum

(c)2025 CAD.de | Impressum | Datenschutz