Hot News:

Unser Angebot:

  Foren auf CAD.de (alle Foren)
  TM - Plant Simulation
  Hilfe - Fehler in Methode Ablaufsteuerung?!

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:  Hilfe - Fehler in Methode Ablaufsteuerung?! (3382 mal gelesen)
LeaSophieKA
Mitglied



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

Beiträge: 22
Registriert: 14.10.2010

erstellt am: 23. Nov. 2010 10:31    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 zusammen,

ich habe das Problem, dass meine Methode für den Ablaufplan prinzipiell richtig funktioniert, also die Schleifen so durchlaufen werden wie ich es mir vorstelle. Das Problem ist nur, dass irgendwie kein BE gefunden wird und ich immer die Fehlermeldung "Ein "Void" kann keine Methode "umlagern" empfangen" bekomme. Das bedeutet ja, dass kein aktuelles BE gefunden wird. Ich verstehe aber nicht warum das ost ist?!?!
hier der Quellcode den ich verwende:

is
    name: object;
    hilfezaehler: integer;
    NächsteStation : object;
i,j,x : integer;


do
for i := 1 to root.lieferliste.ydim loop      -- Äußere Schleife die die Lieferliste abarbeitet
name := Lieferliste["BE",i];      -- die Variable "name" soll das aktuelle BE ansprechen
 
  for j:=1 to root.arbeitsplan.ydim loop  --innere Schleife, die zum Einen die Lieferliste mit dem Arbeitsplan vgl
 
      if name = root.arbeitsplan["TeileTyp",j]
      then          --und zum Anderen das aktuelle BE auf die verschiedenen Stationen umlagern soll
      hilfezaehler := j;
        for x := 1 to root.Arbeitsplan.xdim loop
        NächsteStation := Arbeitsplan[x,hilfezaehler];
        @.umlagern(NächsteStation);  -- wieso ist mein @ ein Void?
        next;
      end;
  next;
next;
end;


Die Lieferliste und der Ablaufplan sind jeweils Tabellen die hinterlegt sind. Bei den Einzelstationen habe ich als "Ausgangssteuerung" die oben reinkopierte Methode angegeben.

Hat jemand eine Idee warum es nicht funktioniert?

Vielen Dank vorab und Viele Grüße,
Lea

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

Homer Simpson
Mitglied



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

Beiträge: 345
Registriert: 14.09.2005

erstellt am: 23. Nov. 2010 12:55    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 LeaSophieKA 10 Unities + Antwort hilfreich

Ich glaube, hier liegen gleich mehrere Missverständnisse vor.

Der Klammeraffe @ ist keine Funktion, die auf magische Weise das richtige BE findet. Du kannst dir den @ wie einen Parameter der Methode vorstellen. Er wird beim Aufruf der Methode einmal gesetzt und behält seinen Wert bei. Der @ wird aber nur gesetzt, wenn ein BE den Methodenaufruf veranlasst hat, also z. B. bei einer Ein- oder Ausgangssteuerung. Ansonsten ist @ immer 'void'. Was du hier vermutlich brauchst ist 'Station.Inhalt'. (Wenn kein BE auf der Station ist, ist Station.Inhalt übrigens auch 'void'.)

Außerdem: Wenn du in einer Schleife das BE mehrfach umlagerst, dann wird das BE sofort in Nullzeit von Station zu Station springen. Damit das BE bearbeitet wird, solltest du es erst in einer Ausgangssteuerung der Station wieder umlagern. (Außerdem ist dann @ auch gleich richtig gesetzt.)

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

LeaSophieKA
Mitglied



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

Beiträge: 22
Registriert: 14.10.2010

erstellt am: 24. Nov. 2010 15:34    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,

danke für die Hinweise! Das ist mir prinzipiell auch irgendwie klar, aber ich verstehe nicht, warum es nicht funktioniert. Mein BE, welches an der Quelle über die Lieferliste erzeugt wird, ist eigentlich in der Variable "name" festgelegt. (Wenn ich über den Befehl "print" mir den Namen ausgeben lassen, wird auch das BE was ich erzeugen will in die Konsole geschrieben. Eigentlich dürfte doch mein @ dann kein Void mehr sein!?!?)

Bei allen Stationen habe ich als Ausgangssteuerung die Methode angegeben, die ich im ersten Beitrag beschrieben habe. Aber du hast vollkommen recht - wenn ich die Simulation laufen lasse, werde einfach alle BEs direkt auf die Senke umgelagert. An welcher Stelle muss ich den ansetzten und den Inhalt der Station reinbringen?

Stehe gearde echt auf dem Schlauch und bin über jeden Hinweis dankbar!

Viele Grüße!

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

Opa
Mitglied
Selbständiger Simulationsexperte


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

Beiträge: 62
Registriert: 16.06.2005

eM-Plant 7.6 / 8.2
Development License

erstellt am: 26. Nov. 2010 08: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 Nur für LeaSophieKA 10 Unities + Antwort hilfreich

Hallo!
Zitat:
Original erstellt von LeaSophieKA:
is
    name: object;
    hilfezaehler: integer;
    NächsteStation : object;
i,j,x : integer;


do
for i := 1 to root.lieferliste.ydim loop      -- Äußere Schleife die die Lieferliste abarbeitet
name := Lieferliste["BE",i];       -- die Variable "name" soll das aktuelle BE ansprechen
 
  for j:=1 to root.arbeitsplan.ydim loop  --innere Schleife, die zum Einen die Lieferliste mit dem Arbeitsplan vgl
  
      if name = root.arbeitsplan["TeileTyp",j]
      then          --und zum Anderen das aktuelle BE auf die verschiedenen Stationen umlagern soll
      hilfezaehler := j;
        for x := 1 to root.Arbeitsplan.xdim loop
        NächsteStation := Arbeitsplan[x,hilfezaehler];
        @.umlagern(NächsteStation);   -- wieso ist mein @ ein Void?
        next;
      end;
  next;
next;
end;


Die Lieferliste enthält ja offensichtlich schon die BEs, d.h. die Variable name IST das BE, wie Du ja auch selbst schreibst. Also einfach statt @ name einsetzen.

Gruß

Opa

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

LeaSophieKA
Mitglied



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

Beiträge: 22
Registriert: 14.10.2010

erstellt am: 30. Nov. 2010 11: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

Hallo,

ich habe meine Ablaufplanmethode jetzt noch einmal etwas verändert, weil es mit den ganze for-Schleifen etwas sehr kompliziert war   
(BEs werden über Lieferliste erzeugt)

is
folgestation: object;
spalte, zeile : integer;

do

spalte := @.Position;      --Position ist ein Attribut des jeweiligen BEs
zeile := @.holeattribut("Zeile");  --Zeile ebenfalls Attribut des BEs. für Teil A ist Zeile immer 1 und TeilB 2

  if @.Position = Ablaufplan.xdim then
  @.umlagern(root.senke)
  else
  folgestation := Ablaufplan[spalte,zeile];
  @.umlagern(folgestation);
  @.Position := spalte+1; --spalte um eins hochzählen, um die nächste Folgestation zu ermitteln
  end;
end;

Für jede Bearbeitungsstationen habe ich für die Ausgangssteuerung die obige Methode hinterlegt.
Der Ablauf funktioniert immer für die Hälfte der erzeugten BEs einwandfrei. Die restlichen 50% werden einfach von der Quelle auf die Senke umgelagert.
Mir ist es absolut rätselhaft, warum das nicht für alle BEs funktioniert?!?
hat irgendjemand eine Idee woran das liegen kann?

Vielen Dank!!

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

Samson53
Mitglied
Nur noch selten simulierend


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

Beiträge: 119
Registriert: 18.02.2010

Plant Simulation 11
Office 2013

erstellt am: 01. Dez. 2010 13: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 LeaSophieKA 10 Unities + Antwort hilfreich

Hallo,

if @.Position = Ablaufplan.xdim then

wenn dein Ablaufplan 3 Spalten hat, werden alle BE mit Position <> 3 an die senke umgelagert.
Vorschlag:
Position ist Ausgangsnummer der Station (Kanten in der richtigen Reihenfolge ziehen)
@.umlagern(@.Position) gibt das BE über die Kante(1,2,3) an die Nachfolgestation. Geht das?

------------------
Gruß
Samson

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

LeaSophieKA
Mitglied



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

Beiträge: 22
Registriert: 14.10.2010

erstellt am: 01. Dez. 2010 15:14    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... wie genau meinst du das mit der Ausgangsnummer, wo muss ich die anlegen? Hab mal für jede Station ein "benutzerdefinierte Attribut" angelegt und dann durchnummeriert. aber so funktioniert es nicht.


Meine Idee mit der Position war eigentlcih diese:
Jedes BE hat ein "benutzerdefiniertes Attribut" namens Position, welches den Wert 1 hat. Über die Methode sollte eigentlich dann die Position für jedes BE, welches an der Quelle erzeugt wird pro Umlagerung um eins hochgezählt werden.
Ich finde es so komisch, dass es für ein BE funktioniert und beim nächsten dann nicht (die bleiben auf der Quelle und springen dann direkt in die Senke) und für das nächste funktioniert es dann wieder?!?!

Grüße
Lea

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

Samson53
Mitglied
Nur noch selten simulierend


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

Beiträge: 119
Registriert: 18.02.2010

Plant Simulation 11
Office 2013

erstellt am: 02. Dez. 2010 08:34    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 LeaSophieKA 10 Unities + Antwort hilfreich


Ausgaenge.JPG

 
Hallo,

ich meine das so, wie im Bild angedeutet.
Die Ausgangssteuerung der Quelle wäre dann wie folgt:

-- Zählt die Ausgänge hoch für gleichmäßige Verteilung
is
do
  source.Ausgang := source.Ausgang +1;
  if source.Ausgang >4 then
      source.Ausgang := 1;
  end;
  If source.nf(Source.Ausgang).occupied then
      -- Was soll passieren, wenn der NF besetzt ist
  else
      @.move(source.Ausgang);
  end;
end;

Oder habe ich noch etwas nicht beachtet? Kannst du mal ein Bild posten?

------------------
Gruß
Samson

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

LeaSophieKA
Mitglied



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

Beiträge: 22
Registriert: 14.10.2010

erstellt am: 02. Dez. 2010 09:38    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


Simulation.png


Ablaufplan.png

 
Hallo,

vielen Dank für deine Hilfe. Hab es jetzt mal so ähnlich probiert. Aber: immernoch das selbe Problem... ein BE funktioniert, das nächste wieder nicht und so weiter.

Hab dir mal meinen Simulationsaufbau und den Ablaufplan geschickt. Wäre dir sehr dankbar, wenn du es dir anschauen würdest.
Es sollen wie gesagt die beiden unterschiedlichen BEs (TeilA und TeilB) produzierten werden.

Tausend Dank vorab!

Grüße
Lea

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

Samson53
Mitglied
Nur noch selten simulierend


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

Beiträge: 119
Registriert: 18.02.2010

Plant Simulation 11
Office 2013

erstellt am: 03. Dez. 2010 08: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 LeaSophieKA 10 Unities + Antwort hilfreich

Hallo,

ich glaube jetzt habe ich es:
Ich habe der Quelle zwei Zähler spendiert AusgangA und AusgangB. Wenn ein Teil die Quelle verlassen will, wird je nach TeilA oder B der Zähler A oder B hochgezählt. Dann schaue ich nach, ob in der Spalte des Ablaufplans ein Ziel definiert ist. Ist das nict der Fall, setzte ich den Zähler auf Anfang. Bevor dann die eigentliche Umlagerung erfolgt, prüfe ich, ob das Ziel auch frei ist. Wenn nicht habe ich keine Lösung programmiert und der Lauf ist beendet.
Außerdem setzte ich in einer Reset-Methode den AusgangA und AusgangB auf 0.
Der Simtalk-Code:
die Ausgangsteuerung der Quelle:

is
    Ziel : object;
do
    if @.Name = "TeilA" then
        source.AusgangA := source.AusgangA +1;
        Ziel := Ablaufplan[source.AusgangA,"Bes.TeilA"];
        -- Wenn nichts mehr drin steht fang von vorne an
        if  Ziel = VOID then
            source.AusgangA := 1;
            Ziel := Ablaufplan[source.AusgangA,"Bes.TeilA"]
        end;
    else
        source.AusgangB := source.AusgangB +1;
        Ziel := Ablaufplan[source.AusgangA,"Bes.TeilB"];
        -- Wenn nichts mehr drin steht fang von vorne an
        if  Ziel = VOID then
            source.AusgangB := 1;
            Ziel := Ablaufplan[source.AusgangA,"Bes.TeilB"]
        end;
    end;
    If Ziel.occupied then
        -- Was soll passieren, wenn der Ziel besetzt ist
    else
@.move(Ziel);
    end;
end;

Methode Reset:
is
do
    Source.AusgangA :=0;
    Source.AusgangB :=0;
end;

------------------
Gruß
Samson

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

LeaSophieKA
Mitglied



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

Beiträge: 22
Registriert: 14.10.2010

erstellt am: 03. Dez. 2010 09: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

wow!! Vielen Dank!! Ich werde es heute nachmittag gleich ausprobieren! Danke für deine Unterstützung! Hoffentlich bekomme ich es so jetzt auch hin 

Tausend Dank!!

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

LeaSophieKA
Mitglied



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

Beiträge: 22
Registriert: 14.10.2010

erstellt am: 06. Dez. 2010 11: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

Hallo Samson,

nach einigen Versuchen mit deiner Methode, bin ich wieder zu dem selben Ergebnis gekommen, wie schon mit meiner Methode... Es werden einfach nicht alle BEs richtig umgelagert.
Das Problem ist, dass die Quelle ja nach und nach hochgezählt wird, dieser Zähler ist aber nicht direkt an ein BE "gekoppelt". Das Bedeutet: Teil A ist im Wertstrom auf Station 1. AUsgangA ist dann 1. Dieser wird dann hochgezählt auf 2. Das nächste TeilA wird von der Quelle erzeugt, bekommt als "Ziel" dann aber nicht Station 1 sondern Station 2, weil der Zähler AusgangA ja gerade auf 2 steht wg. dem ersten TeilA.
Richtig funktionieren tut es nur, wenn ich in der Lieferliste die Position als Attribut (also in einer Untertabelle) hinterlege.
Das Problem ist aber, dass ich die Lieferliste als textdatei einlesen muss (da die über eine Parameteroptimierungssoftware verändert werden soll). Wenn ich die Tabelle als Textdatei einlesen, geht die Untertabelle "verloren".
Gibt es irgendein Alternative zu der "untertabelle" damit es funktioniert? Oder gibt es eine Möglichkeit die Untertabelle auch einzulesen?

Vielen Dank vorab!
Viele Grüße,
Lea

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

LeaSophieKA
Mitglied



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

Beiträge: 22
Registriert: 14.10.2010

erstellt am: 06. Dez. 2010 16:22    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,

ich habe das Problem jetzt gelöst... Ich importiere einfach nur die Spalte mit der Anzahl in die Lieferliste und damit geht die Untertabelle nicht "verloren" und der Ablaufplan funktioniert.
Manchmal ist es doch einfacher als man denkt 

Trotzdem danke für Eure Bemühungen!

Viele Grüße,
Lea

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