Hot News:

Unser Angebot:

  Foren auf CAD.de (alle Foren)
  TM - Plant Simulation
  Entnahme aus Lager - Anfängerfrage

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:  Entnahme aus Lager - Anfängerfrage (1651 mal gelesen)
mnl
Mitglied


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

Beiträge: 2
Registriert: 18.01.2018

Tecnomatix Plant Simulation 13

erstellt am: 22. Jan. 2018 14:57    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,

in mein Lager werden 3 verschiedene BEs eingelagert (Name: Teil1, Teil2 und Teil3), die mit dem Fahrzeug an 3 Linien (epm1, epm2, epm3) transportiert werden müssen. Es wird geprüft, welche der Teile benötigt werden (emp*.leer). Dann soll gepüft werden ob die Teile im Lager vorhanden sind und, falls ja, auf das Fahrzeug umgelagert werden.

Mein Problem war, dass bei bisherigen Versuchen die Reihenfolge stimmen musste. Wurden bspw. alle 3 Teile benötigt, aber das zuletzt eingelagerte BE war ein "Teil3", dann wurde nur dieses umgelagert.

(sensorID:integer)
is
do
if sensorID = 1 and lager.belegt then
@.anhalten;
if lager.inhalt.name="Teil1" and epm1.leer then
@.pausieren(30);
lager.inhalt.umlagern(@);
end;
if lager.inhalt.name="Teil2" and epm2.leer then
@.pausieren(30);
lager.inhalt.umlagern(@);
end;
if lager.inhalt.name="Teil3" and epm3.leer then
@.pausieren(30);
lager.inhalt.umlagern(@);
end;
@.fahren;
end;
end;

Der Fehler dürfte sein, dass er bei dem if nur den Namen des zuletzt eingelagerten BEs prüft und dieses dann umlagert, richtig? Wird umgekehrt zur Methode eingelagert, dann ist aller super. Andernfalls wird ggf. nur das zuletzt eingelagerte Teil auf das Fahrzeug (@) umgelagert.

Ich habe testweise für jedes Teil einen eigenes Lager angelegt und lasse, über die Ausgangsteuerung der Quelle, die Teile auf das entsprechende Lager verteilen. Sodas funktioniert, ist aber natürlich nicht sonderlich elegant. Wie kann ich stattdessen nur ein Lager verwenden und dieses komplett durchsuchen?

Methode:
(sensorID:integer)
is
do
if sensorID = 1 then
@.anhalten;
if epm1.leer then
if lager1.belegt then
lager1.inhalt.umlagern(@);
end;
end;

if epm2.leer then
if lager2.belegt then
lager2.inhalt.umlagern(@);
end;
end;

if epm3.leer then
if lager3.belegt then
lager3.inhalt.umlagern(@);
end;
end;
@.fahren;
end;
end;

Diese Methode kann ich vermutlich noch mit "if epm*.leer and lager*.belegt" kürzen, richtig?

Vielen Dank im Voraus! 

Gruß
Manuel

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: 23. Jan. 2018 03:19    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 mnl 10 Unities + Antwort hilfreich

Hallo mnl,

eine Möglichkeit ist...

Code:

is
local _a : boolean;
local _b : boolean;
local _c : boolean;
do
/*deklaration einer Variable, da wenn Teil auf Fahrzeug die Station immer noch leer ist*/
_a:=epm1.leer;
_b:=epm2.leer;
_c:=epm3.leer;
/*wenn etwas benötigt, dann*/
if _a  or _b  or _c  then
    @.anhalten;
    for var i:= 1 to current.Lager.Xdim loop /*gehe Xdim im Lager durch*/
      for var j:= 1 to current.Lager.YDim loop /*gehe Ydim im Lager durch*/
        if _a= false and _b= false and _c= false then /*wenn alles da, dann raus aus den Schleifen*/
          exitloop 2;
        else
          if current.Lager[i,j].inhalt /= VOID then /*wenn Lagerplatz belegt*/
              if current.Lager[i,j].inhalt.Name = "Teil1" and _a = true then
                  @.pausieren(30);
                  lager[i,j].inhalt.umlagern(@);
                  _a:= false;
              elseif current.Lager[i,j].inhalt.Name = "Teil2" and _b = true then
                @.pausieren(30);
                lager[i,j].inhalt.umlagern(@);
                _b:= false;
              elseif current.Lager[i,j].inhalt.Name = "Teil3" and _c = true then
                @.pausieren(30);
                lager[i,j].inhalt.umlagern(@);
                _c:= false;
              end;
          end;
        end
      next;
  next;

@.fahren;
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

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

mnl
Mitglied


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

Beiträge: 2
Registriert: 18.01.2018

Tecnomatix Plant Simulation 13

erstellt am: 24. Jan. 2018 11:26    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

Zitat:
Original erstellt von nadin1223:
     for var i:= 1 to current.Lager.Xdim loop /*gehe Xdim im Lager durch*/
       for var j:= 1 to current.Lager.YDim loop /*gehe Ydim im Lager durch*/

Hallo Nadin,

wow, damit kann ich viel anfangen! Besten Dank für deine Mühe. Besonders für die Kommentare, die waren sehr hilfreich um den Code schnell zu verstehen!
Das fett Gedruckte ist 2.0 Syntax, richtig? Wenn ich ansonsten noch 1.0 verwende, dann kann ich einfach die "var" rausnehmen, solange ich sie zwischen is und do als integer definiere?

Grüße
Manuel

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