Hot News:

Unser Angebot:

  Foren auf CAD.de (alle Foren)
  TM - Plant Simulation
  Problem beim Umlagern

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:  Problem beim Umlagern (1314 mal gelesen)
first_edition
Mitglied
Student

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

Beiträge: 3
Registriert: 15.12.2004

erstellt am: 27. Dez. 2004 09:20    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 Forum,

Meine Bearbeitungsstation besteht aus einem Sortierer und einer Einzelstation. Möchte ich nun vom Sortierer auf die Einzelstation umlagern, hängt sich eM-plant vollständig auf. Ich weiß auch, wo der Fehler liegt, was ich leider nicht weiß ist, wie man diesen vermeiden kann.

Beispiel:
repeat
J12_aj_größer_bj[1,1].umlagern;
Objekt:= J12_aj_größer_bj[1,1];
until myES1.inhalt = Objekt;
J12_aj_größer_bj.entferneZeile(1);

Die repeat-Schleife befindet sich in der Ausgangssteuerung des Sortierers. Diese habe ich eingefügt, damit sichergestellt ist, dass das BE auch tatsächlich umgelagert ist, bevor die Zeile gelöscht wird. Ist die Einzelstation allerdings belegt, verlässt er die repeat-Schleife nicht mehr, da das BE auf der Einzelstation die Ausgangssteuerung der ES gar nicht mehr aufruft.

Was kann ich tun? Ganz herzlichen Dank für Eure Mithilfe!!!

Gruß first_edition

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP


Ex-Mitglied

erstellt am: 27. Dez. 2004 11:20    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat

Hallo first_edition,

mit welcher Version arbeitest Du ?

Kannst Du nochmal beschreiben, was der Sortierer
in Verbindung mit der Einzelstation genau machen soll

Anbei ein paar Info´s vorab.

Bedingte Repeat-Schleifen sind gefährlich und in Ausgangssteuerungen
seeehr gefährlich! Hier hast Du eine Schleife ohne Zeitverbrauch (Zeitdauer 0 Sekunden!) d.h. in diesem Fall "wartet" der Ereignisverwalter bis die Schleife abgearbeitet ist.

Wie Du auch festgestellt hast, läuft beim 1. fehlgeschlagenen Umlagerungsversuch Deine Repeat-Schleife endlos durch weil Deine Abbruchbedingung nicht erfüllt wird.

Aus der Schleife kommst Du aber mit der Tastenkombination STRG+ALT+SHIFT (gleichzeitig) heraus.

Was ist da noch für eine Ausgangssteuerung auf der ES=Einzelstation (siehe letzten Absatz) oder meinst Du vermutlich damit doch den Sortierer(=ES?).

Was für BE´s stehen in der Tabelle <j12_aj_größer_bj[..,..]> ?
ist das BE "J12_aj_größer_bj[1,1]" das aktuelle  "= @" ?


Gruß


------------------
DER SIMULATOR 

first_edition
Mitglied
Student

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

Beiträge: 3
Registriert: 15.12.2004

erstellt am: 27. Dez. 2004 13:54    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,

erstmal ganz herzlichen Dank für Deine Antwort!

ich arbeite mit der Version 7.0 (Studentenversion). Ich versuche, die Prioritätsregeln nach Jackson zu programmieren. Vorgabe ist, dass 4 verschiedene Auftragstypen existieren, die auf zwei Maschinen bearbeitet werden, also:
Typ 1: erst auf Maschine 1 dann auf Maschine 2
Typ 2: erst auf Maschine 2 dann auf Maschine 1
Typ 3: nur auf Maschine 1
Typ 4: nur auf Maschine 2

Meine Vorgehensweise ist wie folgt:
In der Ausgangssteuerung der Quelle (Quelle_Ausgang) werden die Typen 1-4 zufällig erzeugt und eine zufällige Bearbeitungszeit zugewiesen. Das funktioniert. Weiterhin werden die Typen in Quelle_Ausgang entsprechenden Tabellen zugewiesen. Die Typen 1 und 3 werden zuerst auf Maschine 1 bearbeitet, daher Zuweisung in Tabelle J12_aj_kleiner_bj bzw. J12_aj_größer_bj. Zuweisung zu J12_aj_kleiner_bj erfolgt, wenn die Bearbeitungszeit auf Maschine 1 kleiner der Bearbeitungszeit auf Maschine 2 ist. Trifft das nicht zu, wird J12_aj_größer_bj zugewiesen. Analoges gilt für die Typ 2 und 4, sowie für die Tabellen J21_*** Das funktioniert auch. Anschließend werden die Typen auf den Sortierer der entsprechenden Maschine umgelagert (eine Maschine besteht aus einem Sortierer und einer Einzelstation).

Bei Eintritt in den Sortierer werden die Tabellen J12_aj_kleiner_bj, J21_aj_kleiner_bj aufsteigend und J12_aj_größer_bj, J21_aj_größer_bj absteigend sortiert. Das stellt sicher, dass entweder das Objekt mit der größten bzw. kleinsten Bearbeitungszeit in Zeile 1 steht.

Jetzt kommt die Ausgangssteuerung des Sortierers (Sortierer_Ausgang). Das ist die, die mir Probleme bereitet. Hier soll überprüft werden, welcher Auftrag die höchste Priorität hat und dieser soll dann auf die nachfolgende Einzelstation umgelagert werden. Das kann das aufrufende BE sein, muss aber nicht. Am besten ist, ich schreibe mal den Quellcode für den Sortierer1 nachfolgend auf:

is
Objekt: object;
do
if J12_aj_kleiner_bj[2,1] /= 0 then
repeat
J12_aj_kleiner_bj[1,1].umlagern;
Objekt:= J12_aj_kleiner_bj[1,1];
until myES1.inhalt = Objekt;
J12_aj_kleiner_bj.entferneZeile(1);

elseif J12_aj_größer_bj[2,1] /= 0 then
repeat
J12_aj_größer_bj[1,1].umlagern;
Objekt:= J12_aj_größer_bj[1,1];
until myES1.inhalt = Objekt;
J12_aj_größer_bj.entferneZeile(1);

else
repeat
Warteschlange21[1,1].umlagern;
Objekt:= Warteschlange21[1,1];
until myES1.inhalt = Objekt;
Warteschlange21.entferneZeile(1);
end;
end;

Das Problem ist, wie Du gesagt hast, dass wenn einmal die repeat-Schleife betreten ist, diese auch nicht mehr verlassen wird, wenn die nachfolgende Einzelstation belegt ist. Hier habe ich die Beobachtung gemacht, dass das BE, das auf der nachfolgenden Einzelstation sitzt, die Ausgangssteuerung der Einzelstation überhaupt nicht mehr aufruft. Ich weiß jetzt nicht, ob Du den Quellcode für diese Ausgangssteuerung (ES_Ausgang) auch gerne sehen möchtest?!

Mit der repeat-Schleife möchte ich vermeiden, dass die Tabellenzeile vor der tatsächlichen Umlagerung auf die Einzelstation gelöscht wird.

Ich hoffe, ich habe mein Problem einigermaßen verständlich dargestellt. Auf jeden Fall möchte ich mich nochmal für Dein Interesse und Deine Mithilfe bedanken!

Viele Grüße

first_edition

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

first_edition
Mitglied
Student

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

Beiträge: 3
Registriert: 15.12.2004

erstellt am: 27. Dez. 2004 19:46    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,

das mit dem Zeitverbrauch hat funktioniert, das Programm hängt sich jetzt wenigstens nicht mehr auf. Funktionieren tut es zwar noch nicht, wie ich das möchte, sollte ich aber hinbekommen.

Zu Deiner Frage: es handelt sich um den eM-Plant Baustein. Was der genau macht? Eigentlich sortiert er die Tabellen und soll dann entsprechend umlagern je nach dem, welches BE die höchste Priorität hat (gemäß Tabelle). Man braucht in dieser Form sicherlich keinen Sortierer, da hast Du recht. Du weißt nicht zufällig, ob es in eM-Plant einen vordefinierten Jackson-Algorithmus gibt?!? :-)

Tschüss und viele Grüße,

first_edition

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP


Ex-Mitglied

erstellt am: 27. Dez. 2004 20:21    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat

Hi first_edition,

das mit dem wait(1) war nur als Zwischenlösung (quick & dirty) gedacht damit Du schnell weiterarbeiten kannst, denn sie macht die Simulation erzwungenermaßen langsam.

Wenn Du anscheinend keine sortiererspezifischen Funktionen nutzt kannst Du den Sortierer mit einem Puffer austauschen, dann kannst Du mal dies probieren (ist etwas sauberer und schneller ):

is
Objekt: object;
do

waituntil ES1.leer prio 1;

if J12_aj_kleiner_bj[2,1] /= 0 then
J12_aj_kleiner_bj[1,1].umlagern;
J12_aj_kleiner_bj.entferneZeile(1);
elseif J12_aj_größer_bj[2,1] /= 0 then
J12_aj_größer_bj[1,1].umlagern;
J12_aj_größer_bj.entferneZeile(1);
else
Warteschlange21[1,1].umlagern;
Warteschlange21.entferneZeile(1);
end;
end;


Nun zum Jackson-Algorithmus:
wenn überhaupt dann in der shop-library, aber ich weis nicht ob Du (Studenten-Lizenz) da Zugriff darauf hast. Aber ich vermute mal nicht.


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)2023 CAD.de | Impressum | Datenschutz