Hot News:

Unser Angebot:

  Foren auf CAD.de (alle Foren)
  TM - Plant Simulation
  Lager Voll

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:  Lager Voll (2331 mal gelesen)
tommy93
Mitglied
Sutdent

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

Beiträge: 4
Registriert: 06.03.2018

erstellt am: 06. Mrz. 2018 18:33    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 liebe Community,

ich bereite gerade ein Projekt für mein Studium vor und möchte vertieft mit TM Plant Simulation arbeiten. Jetzt kämpfe ich mit den Methoden und komme an einem Punkt nicht weiter, wobei ich sicher bin, dass die Lösung ziemlich simpel ist. Das Ziel ist ganz leicht: Ich möchte nach einer Einzelstation auf ein Lager transportieren. Wenn dieses voll ist, soll die ES auf einen Puffer ausweichen. Mein Code lautet:

if
Lager1.voll=false
@.umlagern(Lager1)

else
@.umlagern(Puffer1)
end


Doch immer wenn ich starte meckert das Programm bezüglich Syntaxfehler <> (in Zeile 2) und ich erkenne nicht warum bzw. was ich ändern muss. Bangsow und Co. führen in ihren Büchern teils ähnliche Beispiele doch bei mir klappt es nicht. Da ich SimTalk 2.0 verwende können es auch keine fehlenden Semikolons sein. Muss ich noch etwas deklarieren?

Danke an Alle, die sich meiner Problematik annehmen. Freue mich über jede Antwort und bin für jeden Tipp/Hinweis dankbar.

Grüße
Tommy

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

nadin1223
Mitglied
Ing.


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

Beiträge: 938
Registriert: 29.03.2016

erstellt am: 06. Mrz. 2018 19:52    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 Nur für tommy93 10 Unities + Antwort hilfreich

Hallo Tommy,

Code:
if Lager1.voll=false then /*Kontrollstrukturen in einer Zeile!! schreiben und "then" fehlte*/
@.umlagern(Lager1)

else
@.umlagern(Puffer1)
end


vG
Nadin

------------------
„Die einfachste Art an korrekte Informationen zu gelangen ist, etwas Falsches in ein Forum zu posten und auf die Korrektur zu warten.“ Matthew Austern

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

tommy93
Mitglied
Sutdent

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

Beiträge: 4
Registriert: 06.03.2018

erstellt am: 07. Mrz. 2018 15: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 Nadin,
erstmal herzlichen Dank, es hat geklappt. Mir war nicht bewussst, dass der Befehl gleich in die erste Zeil nach dem IF muss. Jetzt klappts.

Da du dich offenbar gut auskennst würde ich dir direkt noch eine Frage stellen, vll hast du eine Idee. Ich möchte nach einer vordefinierten Tabelle (kann ich bereits erstellen) BEs in einer Einzelstation verarbeiten (Anzahl und Zeiptunkt sind festgelegt). Die BEs sollen aber nicht aus einer Quelle sondern aus einem bestimmten Lager (z.B. lager1) entnommen werden. Zu Beginn wollte ich mit den KANBAN-Bausteinen arbeiten und den RequestBefehl benutzen, komme aber nicht weiter. Denkst du, es gibt etwas Leichteres?

Gruß Tommy

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

nadin1223
Mitglied
Ing.


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

Beiträge: 938
Registriert: 29.03.2016

erstellt am: 07. Mrz. 2018 22:43    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 Nur für tommy93 10 Unities + Antwort hilfreich

Hallo Tommy,
das Grundprinzip einer möglichen Auslagerungssteuerung für Lager hatte mal BANGSOW hier  und hier abgebildet.

vG
Nadin

------------------
„Die einfachste Art an korrekte Informationen zu gelangen ist, etwas Falsches in ein Forum zu posten und auf die Korrektur zu warten.“ Matthew Austern

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

nadin1223
Mitglied
Ing.


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

Beiträge: 938
Registriert: 29.03.2016

erstellt am: 10. Mrz. 2018 15:23    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 Nur für tommy93 10 Unities + Antwort hilfreich

Hallo Tommy,

INFO: Forenbeiträge sind immer bessern, da so auch Andere die Möglichkeit bekommen, bei gleichen Problemen eine Lösung zu finden.

Es gibt viele Möglichkeiten ein Lager abzubilden. Mein Liebling ist immer noch der Pufferbaustein   .

ZU Frage Englisch in Plant Simulation: naja alles vorliebe. Plant Simulation ist sehr freundlich zu User, da umfangreiche Hilfe und Attribute in englisch und deutsch angeboten werden.

ZU Frage Abbildung:

Beispielsweise "[...] nach definierten Zeitpunkten [...]" heißt Generator verwenden.

-------
Habe mal das Beispiel von BANGSOW Training-ID: 510 einwenig kommentiert..
DIeses Beispiel beschreibt folgende Situation: 1 Lager verwaltet drei BE-Arten. Die nachfolgende Station "SingleProc" nimmt in der festgelegten Sequenz (diese ist in Tabelle "CycleTable" hinterlegt)  jeden Takt (das ist die hinterlegte Zeit im Generator) das erforderliche BE aus dem Lager raus. Wenn BE nicht im Lager zu dem Prüfzeitpnkt (Taktbeginn) vorrätig, bleibt die Station leer.
Die BE, die im Lager sind, werden in Tabelle "Stock" gespeichert, sodass die Suche nach dem BE, welches in dieser Sequenz erforderlich ist, über diese Tabelle abgebildet ist. Es geht auch direkt im Lager nach dem BE zu suchen. Die Tabelle ist FIFO-Prinzip.
Zu Beginn der Simulation wird der Inhalt in Tabelle "Stock" gelöscht, da Lager leer ist. Auch der Cursor in "CycleTable" wird auf 1 gesetzt, damit startet die Simulation immer mit gleichen erforderlichen BE für "SingleProc".

Code:

/****METHODE take_in********/
/* n.r.
wird aufgerufen von Weg "L1" als Ausgangssteuerung BUG. Da als BUG aufruf ist @.move erforderlich
*/
is
x:integer;
y:integer;
partName:string;
do
waituntil warehouse.full=false prio 1; --n.r.--> warte bis warenhause (Lager) leer
--look for free place
warehouse.getFreePlace(x,y); --n.r. --> dass speichert die Koordinaten eines freien, nicht mit BE belegten Platzes in x und y
partName:=@.name; --n.r. --> merke den Namen des BE in partName (ist lokale Variable)
@.move(warehouse.pe(x,y)); --n.r. lagere das BE auf den zuvor gemerkten Platz um
--register
stock.writeRow(1,stock.yDim+1,
partName,x,y); --n.r. --> schreibe in Tabelle "stock" welcher BE auf welchen Platz liegt

end;

Code:

/****METHODE take_out****/
/* n.r.
wird aufgerufen von dem Generator
*/
is
x:integer;
y:integer;
part:string;
found:boolean;
do
--look for the next partName in the cycleTable
part:=cycleTable[1,cycleTable.position]; --n.r. --> leist den Name des BE´s aus, welcher als nächstes auf der Einzelstation bearbeitet werden soll
--look for the part in the stock of the warehouse
stock.setCursor(1,1); --n.r. --> setzt den Zeiger im Lager auf 1,1. Ab dieser Position wird gesucht. Steht der zeiger beispielsweise auf 10,1 und der Eintrag ist auf 1,1, wird dieser nicht gefunden

found:=stock.find(part); --n.r. --> sucht den Namen des BEs, welches als nächstes aufgelegt werden soll in der Tabelle "stock" und spechert das Suchergebnis (true: gefunden OR false : nicht gefunden)
if found then --n.r. --> wenn es den Namen gefunden hat
-- read coords from stock
--n.r. --> nach dem Suchen, wenn gefunden ist der Zeiger (cursor) auf das Ergebniss gesetzt.
x:=stock["X",stock.cursorY]; --n.r.--> holle PositionX von dem gefundenen BE
y:=stock["Y",stock.cursorY]; --n.r.--> holle PositionY von dem gefundenen BE
--delete row in the stock-table
stock.cutRow(stock.cursorY); --n.r.--> Schneide die Zeile aus der Tabelle raus. Damit wird das BE aus der Tabelle entfernt
-- increase position in cycle
--n.r. --> setze Position in "cycleTable" eins hoch, aber nur dann, wenn nicht der letzte Eintrag. Wenn letzter Eintrag, dann setze auf 1
if cycleTable.position = cycleTable.YDim then
cycleTable.position:=1;
else
cycleTable.position:=cycleTable.position+1;
end;
--take part put from warehouse
warehouse.pe(x,y).cont.move(SingleProc); --n.r.--> dies ist zum Umlagern des gefundenen BEs aus dem Lager auf die Station dar.
end;
end;


vG
Nadin

------------------
„Die einfachste Art an korrekte Informationen zu gelangen ist, etwas Falsches in ein Forum zu posten und auf die Korrektur zu warten.“ Matthew Austern

[Diese Nachricht wurde von nadin1223 am 10. Mrz. 2018 editiert.]

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

tommy93
Mitglied
Sutdent

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

Beiträge: 4
Registriert: 06.03.2018

erstellt am: 20. Mrz. 2018 18:27    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

Hi Nadin,

vielen vielen Dank für die ausführliche Erklärung. Die hat mir sehr geholfen zu durchschauen wie alles zusammenhängt. Deine Beschreibungen bringen eine Menge Licht ins Dunkel. Um mein individuelles Modell zu erstellen muss ich noch etwas rumdoktern aber aufbauend auf deiner Erklärung sollte das möglich sein. Wirklich sehr freundlich von dir! Bei meinen Basteleien kommt es jedoch immer wieder vor, dass der Befehl "getFreePlace" bzw. "holeFreienPlatz" nicht zu finden ist. Gibt es da einen anderen Befehl bzw. einen Ordner, wo man alle Befehle einsehen kann, die mit einem Lager in Zusammenhang stehen? Muss ihm ja sagen, dass er eben einen freien Platz mit den jeweiligen Koordinaten speichern soll.

Grüße Tommy

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

nadin1223
Mitglied
Ing.


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

Beiträge: 938
Registriert: 29.03.2016

erstellt am: 21. Mrz. 2018 05:00    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 Nur für tommy93 10 Unities + Antwort hilfreich

Hallo Tommy,

Zitat:
Bei meinen Basteleien kommt es jedoch immer wieder vor, dass der Befehl "getFreePlace" bzw. "holeFreienPlatz" nicht zu finden ist.

ja dies ist richtig bis einschließlich Version13.0. In Version 14.0 ist dies ein Standardbefehl. Dieser Befehl ist nicht Bestandteil von Lager.  BANGSOW hat es programmiert. (In Klassenbibliothek das Lager auswählen und Reiter "Benutzerdefiniert" auswählen. Dort stehen zwei Methoden. Eine davon ist die "getFreePlace". In Klassenbibliothek deshalb, weil alle im Netzwerk eingefügten Methoden diese Eigenschaft, des in Klassenbibliothek hinterlegten Bausteins, erben. Der Text ist dann ausgegraut.)

Prinzipiell gilt, wenn der Befehl nicht von der Plant Simulation Hilfe gefunden wird, ist es kein Standardbefehl...naja es Scheint, dass 14.0 "hofeFreienPlatz" noch nicht in Hilfe drinne hat.
Alle Attribute eines Bausteins und BEs kannst du sehen mit: Rechstklick aufs Baustein und "Attribute und Methoden anzeigen..." auswählen.

Sobald du also ein neues Modell erstellt hast und nicht die Vorlage aus diesem Beispiel nahmst oder in V13 arbeitest, konntest du diesen Befehl nicht finden. So sieht in Plant Simulation Customizing von Bausteinen aus. Würde gerne auf den gewollten Lerneffekt schieben. Habe aber nur beim Kommentieren dies übersehen     . 

Also Nachtrag --> Methode getFreePlace im Lager. Diese ermittelt den nächstfolgenden freien Platz im Lager

Code:
(byRef x,y:integer):boolean -- n.r.--> bekommt x,y als Integer übergeben und gibt true oder false zurück. Für SimTalk2 unter Hilfe-->"Eine Methode programmieren" nachschauen, wie diese Zeile zu schreiben ist
is
i:integer;
k:integer;
do
if self.~.full then --n.r. --> wenn Lager.voll
return false; -- n.r. --> beende diese Methode und gib false zurück
else
for i := 1 to self.~.xDim loop --n.r. --> gehe die xDim dieses Lagers durch
for k := 1 to self.~.yDim loop --n.r. --> gehe die yDim dieses Lagers durch
if self.~.pe(i,k).empty then -- n.r. --> wenn Platz[i,k] leer
--save coords into parameters
-- n.r.--> Speichere in die übergebenen Variablen. Da diese auch der anderen Methode zugänglich sind, können diese in anderer Methode abgefragt werden.
x:=i;
y:=k;
return true; --n.r. --> beende diese Methode und gib true zurück
end;
next;
next;
end;
end;

vG
Nadin

------------------
„Die einfachste Art an korrekte Informationen zu gelangen ist, etwas Falsches in ein Forum zu posten und auf die Korrektur zu warten.“ Matthew Austern

[Diese Nachricht wurde von nadin1223 am 21. Mrz. 2018 editiert.]

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

tommy93
Mitglied
Sutdent

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

Beiträge: 4
Registriert: 06.03.2018

erstellt am: 22. Mrz. 2018 11:36    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

Hi Nadin,

dein Beitrag hat mal wieder geholfen. Selbst wäre ich da nicht drauf gekommen. Naja; leichter ist es wohl, wenn ich gleich 14.0 hernehme. Aber diese Lösung passt auch. Mittlerweile klappt auch die Vernetzung mit anderen Lagern, die andere Teile produzieren. Stehen diese Teile in der CycleTable sucht er in allen Lagern und findet schlussendlich die nötigen Teile. Mit Ausprobieren kommt man auch weit :-) (Aber es dauert ewig  )

Abschließend frage ich mich, ob man in der CycleTable auch Anzahl und Datum des Zugriffs nutzen kann  . Momentan erkennt er nur den Namen und holt das betreffende BE über den Generator raus. Spannend wäre es, wenn er zu einer gewissen Zeit (datetime) eine vorbestimmte Anzahl dieser Teile rausholt. Hab mal die gewollten Daten in die CycleTable eingegeben aber da meckert das Programm...(wohl auch zurecht :-)) Mir fehlt das Wissen dem Generator beizubringen, dass neben Name eben auch Zeit und Anzahl wichtig sind. Werd mal weiter basteln.....

Grüße Tommy

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

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