Hot News:

Unser Angebot:

  Foren auf CAD.de (alle Foren)
  TM - Plant Simulation
  Ereignisverwalter vergisst Funktionen

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:  Ereignisverwalter vergisst Funktionen (733 mal gelesen)
julez
Mitglied
Student


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

Beiträge: 29
Registriert: 14.05.2007

erstellt am: 17. Okt. 2007 15: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 zusammen!


Ich schlage mich seit längerem mit entwas merkwürdigen Fehlern herum, die mir Kopfzerbrechen bereiten und bei denen ich beim besten Willen nicht weiß, wie ich Sie umgehen soll.

Beispiel:

Ich habe eine Säge mit einer etwas komplizierten Ausgangssteuerung (ich programmiere in einer Methode, dass die in der Säge enthaltene BE auf dem danach folgenenden Förderband zwei mal kopiert wird (mit ein paar Sekunden Abstand), die Original-BE wird anschliessend gelöscht.

Die Methode dazu sieht in etwa so aus:

________________________________

  for i:= 1 to 2 loop


      .BEs.Fördergut.erzeugen (Förderstrecke6,10);
      .modelle.testlinie.test.Förderstrecke6.inhalt.name:=a;

      if i=1 then
        Längen2.setzeZeiger(1,1);
        Längen2.finden(@.name);
        .modelle.testlinie.test.Förderstrecke6.inhalt.buchpkt:=1;
        .modelle.testlinie.test.Förderstrecke6.inhalt.laenge := Längen2[2,Längen2.ZeigerY] ;
        .modelle.testlinie.test.Förderstrecke6.inhalt.buchpkt:=(Längen2[2,Längen2.ZeigerY])/2 ;

      else
        Längen2.setzeZeiger(1,1);
        Längen2.finden(@.name);
        .modelle.testlinie.test.Förderstrecke6.inhalt.buchpkt:=1 ;
        .modelle.testlinie.test.Förderstrecke6.inhalt.laenge := Längen2[3,Längen2.ZeigerY] ;
        .modelle.testlinie.test.Förderstrecke6.inhalt.buchpkt:=(Längen2[3,Längen2.ZeigerY])/2 ;

      end;

      wait 15;
  next;

@.deleteobject;
_________________________


Anschließend "fahren" die BEs ein bißchen auf dem Förderband6, bis sie an der Mitte angekommen sind. Dort ist ein Sensor, die eine Methode auslöst, die prüft, ob benachbarte Förderbänder belegt sind, und falls nicht, die BEs nach dorthin umlagert. Dafür gibts ein paar Bedingungen, beispielsweise kann das übernächste Förderband nur erreicht werden, falls das nächste frei ist, da die BE über das nächste hinweggeschoben werden muss um zum übernächsten zu gelangen.

Sind alle Förderbänder belegt, will ich mittels einer while-Schleifer warten, bis das Förderband3 frei wird, und dann dahin umlagern. Dazu setze ich vor der Schleife die Geschwindigkeit des Förderbands auf 0, warte dann mittels der While-Schleife, bis Förderband 3 frei ist, setze die Geschwindigkeit des Förderband6 wieder auf normal, und lager um. Das sieht in etwa so aus:
(Das BE wird nicht direkt auf ein Föderband umgelagert, sondern auf ein Quertransportband gesetzt, aber das ändert nichts am Sachverhalt)

___________________________

if Förderstrecke3.belegt then
  if Förderstrecke4b.belegt then
      .modelle.testlinie.test.förderstrecke6.speed:=0;
      while not Förderstrecke3.leer loop;
        wait 2;
      end;
      .modelle.testlinie.test.förderstrecke6.speed:=1.75;
      @.umsetzen(Quertransport3);
  else
      if Förderstrecke5b.belegt then
        @.umsetzen(Quertransport4b)
      else
        @.umsetzen(Quertransport5b);
      end;
  end;
else
  @.umsetzen(Quertransport3);
end;
__________________________________


Das Problem was ich jetzt habe:

Manchmal, nach meinetwegen 100 gelungenen Umlagerungen, ensteht ein Stau, der sich auch bis zum Ende des Simulationsdurchlaufs nicht mehr auflöst, selbst wenn ALLE Förderbänder frei sind.

Wenn ich das ganz dann im Debugger analysiere (mit F9 Haltepunkt im Code setzen und dann Zeile für Zeile mit F11 durchgehen), stoße ich immer wieder auf eine ähnliche Problematik, wenn ich mit "wait" arbeite (unabhängig davon, dass ich wie hier in diesem Beispiel eine while-Schleife beutze):

Manchmal, wenn ein "wait" im code vorkommt, schliesst Tecnomatix wie geplant für 2 Sekunden das Code-Fenster, öffnet es aber nicht mehr und führt die Mehtode nicht mehr weiter aus. Das passiert, soweit ich das richtig beobachte, immer dann, wenn gleichzeitig zwei Funktionen nebenher laufen. In diesem Beispiel wird nämlich genau bei der problematischen BE, die diesen Stau verursacht, die Ausgangssteuerungsmethode beendet. Das sieht dann bei mir so aus, dass ich mich in Zeile 5 der zweiten oben angegebenen Funktion befinde, F11 drücke, das Funktionsfenster verschwindet, sich dann aber nicht mehr öffnet, sondern plötzlich die andere Funktion aupoppt (obwohl ich hier garkein Haltepunkt gesetzte habe), grade bei der Zeile "@.deleteobject" steht, und nach erneutem Drücken von F11 plangemäß die in der Säge befindliche BE löscht. Nur dass dann anschließend nicht mehr die andere Funktion aufpoppt...und das Forderband dann im Grunde dauerhaft auf die Geschwindigkeit 0 gesetzt bleibt und von da an blockiert.

Nochmal zusammengefasst sieht mein Problem so aus, dass der Ereignisverwalter durcheinander gerät, wenn zwei Funktionen mit dem Befehl "wait" gleichzeitig pausieren.

Weiß da jemand eine Lösung? Liegt das an dem "wait", was man in dieser Form nicht benutzen sollte? Gibts Alternativen? oder ist das ein bekanntes Problem von Plant Simulation? Oder liegts vielleicht doch in irgendeinder Weise an meinen Schleifen, die man so nicht anwenden darf?

Ich habe schon versucht, an mehreren Stellen Debugg-Funktionen einzubauen, die einfach von Zeit zu Zeit die Geschwindigkeit wieder auf den normalen Wert setzen, aber das erzeugt nur Chaos.

Das Problem habe ich an mehreren Stellen, teilweise wird auch durch eine ähnliche Situation einfach mal "vergessen", eine BE umzubenennen, obwohl es 10.000 mal vorher funktioniert hat. Einfach weil durch einen blöden Zufall zwei Funktionen gleichzeitig laufen und die eine dann anscheinend schlicht und ergreifend vergessen wird weiterzuführen, nachdem die andere beendet wurde.


Gruß und schönen Dank fürs Lesen, Julez.


P.S. benutze Plant Simulation 7.6.0

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

LaBonita
Mitglied
Dipl.-Math.


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

Beiträge: 151
Registriert: 26.07.2007

eM-Plant 7.5 bis 8.1
VB
Java
C#

erstellt am: 17. Okt. 2007 15: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 Nur für julez 10 Unities + Antwort hilfreich

Hallo julez,

das alles nachzuvollziehen dauert jetzt zu lange. An Deiner aktuellen Version von PlantSimulation sehe ich jedoch, dass da noch Potentiale sind. Wenn das Problem weiterhin auftritt, wenn Du die aktuellste Version eingespielt hast, werde ich darüber mal länger nachdenken...

In ganz vielen Situationen hat bei mir eine Aktualisierung den gewünschten Erfolg gehabt. Klingt vielleicht trivial, ist aber leider so...

Gruß,
Ortrun

P.S.: Hab was vergessen... Die aktuellste Version müßte aktuell die 7.6.6 sein

[Diese Nachricht wurde von LaBonita am 17. Okt. 2007 editiert.]

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

julez
Mitglied
Student


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

Beiträge: 29
Registriert: 14.05.2007

erstellt am: 17. Okt. 2007 15: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

Hmmm okay, ich werde mal meinen Administrator fragen ob er da was machen kann. Ich fürchte aber leider nicht.

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


Ex-Mitglied

erstellt am: 17. Okt. 2007 19:20    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat

Ich bin mir sicher, dass nicht eMPlant die Ursache Deines Problems ist, sondern eher das fehlende Verständnis der Zusammenhänge.

Hast Du schon bedacht, dass die Sensorsteuerung nur 1 x aufgerufen wird ?

D.h. wenn der Umlagerversuch fehlschlägt,kommt es zwangsläufig zu einer Blockade.

Vor dem Umlagern überprüfst Du nicht das eigentliche Umlagerungsziel sonder gehst einfach davon aus, dass es schon ein BE aufnehmen kann.

Weiterhin ist xxx.belegt nicht das Gleiche wie xxx.voll !


    

Zitat:
     
while not Förderstrecke3.leer loop;
       wait 2;
end;

schon von "waituntil ....leer prio 1;" gehoert ?

------------------
Stephan Römberg

COMAU Deutschland GmbH

[Diese Nachricht wurde von COMAU am 18. Okt. 2007 editiert.]

julez
Mitglied
Student


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

Beiträge: 29
Registriert: 14.05.2007

erstellt am: 18. Okt. 2007 12: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:
Ich bin mir sicher, dass nicht eMPlant die Ursache Deines Problems ist, sondern eher das fehlende Verständnis der Zusammenhänge.

Das kann gut sein, so ist das halt bei mir, wenn ichs mir selber beibringe, ich versteh es erst richtig durch gemachte Fehler^^.


      

Zitat:
Hast Du schon bedacht, dass die Sensorsteuerung nur 1 x aufgerufen wird ?

D.h. wenn der Umlagerversuch fehlschlägt,kommt es zwangsläufig zu einer Blockade.


Dass die Methode nur einmal aufgerufen wird ist mir schon klar, das Problem will ich ja mit der Schleife umgehen, d.h. die Methode soll erst beendet werden, wenn die BE wirklich umgelagert ist.

      

Zitat:
Vor dem Umlagern überprüfst Du nicht das eigentliche Umlagerungsziel sonder gehst einfach davon aus, dass es schon ein BE aufnehmen kann.

Das stimmt. Könnte eine Ursache in diesem Fall sein, d.h. ich müsste noch eine zusätzliche Abfrage über die Quertransportbänder starten.


      

Zitat:
schon von "waituntil ....leer prio 1;" gehoert ?


Ehrlich gesagt, nein. Was hat es damit auf sich? Ich bin leider voll und ganz auf die Hilfe angewiesen. Von dem, was da nicht erwähnt wird, weiß ich leider auch nicht, dass es existiert       

Ebenso wie "xxx.belegt" und "xxx.voll"...ich Suche immer nach Stichworten in der Hilfe, die mir plausibel erscheinen. So denke ich dann z.B. "was muss ich im Code angeben, wenn das Förderband belegt ist?" Und suche dann nach "belegt" in der Hilfe. Hätte ich in dem Moment gedacht "was muss ich angeben wenn das Förderband voll ist?" hätte ich wahrscheinlich zufälligerweise nach dem richtigen Stichwort gesucht^^. Ein paar Verweise in der Hilfedatei wären da schon hilfreich...

Vielleicht ist es auch nur ein Fehler im Debugger, dass die betrachtete Funktion nicht mehr weiter angezeigt wird, in Wirklichkeit aber tatsächlich zuende läuft. Das ist wirklich so wie ichs oben beschrieben habe...manchmal springt er in eine andere Methode, die grade abläuft, und zeigt mir die eigentlich zu betrachtende nicht mehr an. Das kann ich notfalls mit Screenshots belegen       

Aber schonmal Danke für die Anregungen, vielleicht reichen die kleinen Änderungen ja schon um das Problem zu lösen.

edit: Ahhh...jetzt wo ich nach "waituntil" in der Hilfe suche, finde ichs natürlich... habe immer nach "wait until" gesucht...Da spuckt die Hilfedatei leider nur "die Ausführung mit wait unterbrechen" aus...hab grad nochmal nachgeschaut, es ist auch nicht ein einziger Verweis auf waituntil in der Beschreibung, obwohl das ja eine Erweiterung von wait ist. Stattdessen wird da eine ähnliche Schleife, wie ich sie oben gemacht habe, erklärt...wait und dann eine repeat schleife. Wie soll man da auch von alleine drauf kommen, dass es noch eine viel bessere Variante davon gibt...


[Diese Nachricht wurde von julez am 18. Okt. 2007 editiert.]

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

julez
Mitglied
Student


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

Beiträge: 29
Registriert: 14.05.2007

erstellt am: 18. Okt. 2007 16:32    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

So, habe micht jetzt mit der waituntil-Sache auseinandergesetzt und weitere Abfragebedingungen für die Quertransportbänder eingefügt. Grade ist meine Simulation zum allererstenmal fehlerfrei durchgelaufen 

Ich werde jetzt mal Methode für Methode durchgehen und den ganzen Loop-Schleifen+wait-Mist rausschmeissen.

Dann werden wahrscheinlich wieder 100 neue Fehler auftreten, aber bis dahin erstmal Danke 

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


Ex-Mitglied

erstellt am: 18. Okt. 2007 20:03    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat

      
Zitat:

Das kann gut sein, so ist das halt bei mir, wenn ichs mir selber beibringe, ich versteh es erst richtig durch gemachte Fehler^^.

Nun, Du behauptest in Deiner Themenueberschrift, dass eMPlant Funktionen vergisst.

ver-Plant behauptet in seinem Thema, dass eMPlant falsche Zufallszahlen generiert.

Beide Behauptungen stimmen ja nachweislich nicht und werfen somit ein falsches negatives Licht auf diese SW.

Trotzdem sprichst Du - beim "Springen" des Debuggers- weiterhin von belegbaren Fehlern des Systems.

Auch hier irrst Du Dich wieder und diskreditierst die SW

s. Thema "Abarbeitung suspendierter Methoden".  

Ich glaube nicht, dass Ihr das Tutorial mit den Fallbeispielen
durchgearbeitet oder aber eine entsprechende und absolut notwendige Schulung besucht habt.

Stattdessen wird versucht in einer vollkommen unakademischen Weise
seine "Probleme" durch den gratis "online" Support dieses Forums lösen zu lassen.


Das ist nicht im Sinne des Erfinders !

------------------
Der Simulator

[Diese Nachricht wurde von Simulator am 19. Okt. 2007 editiert.]

julez
Mitglied
Student


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

Beiträge: 29
Registriert: 14.05.2007

erstellt am: 19. Okt. 2007 08:28    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

Du hast recht, ich hätte die Überschrift als Frage formulieren müssen. Hatte ich eigentlich auch vor, aber dann dachte ich mir dass das reicht wenn es im Eingangsposting rauskommt dass ich da keinesfalls eine Tatsache hinstellen will.

Das Tutorial habe ich sehr wohl durchgearbeitet, für ne Schulung reicht es aber selbstverständlicherweise als Student nicht. Und ich dachte genau für sowas sind Foren da...immerhin antwortet hier ja jeder freiwillig (was ich den Leuten natürlich hoch anrechne).

[Diese Nachricht wurde von julez am 19. Okt. 2007 editiert.]

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