Autor
|
Thema: Zählvariable erhöht sich nicht (1487 mal gelesen)
|
Rakorion Mitglied
Beiträge: 6 Registriert: 12.07.2006
|
erstellt am: 06. Okt. 2006 18:29 <-- editieren / zitieren --> Unities abgeben:
Hallo zusammen, wir haben ein kleines Problem mit unserer Abbruchsvariabla (n). Die Methode räumt das Lager mit den Endprodukten leer und soll, sobald eine bestimmte Anzahl von Löschungen geschehen sind, damit aufhören. Wir haben es mit einer for/until und mit einer while Schleife probiert, aber irgendwie erhöht sich die Variable "n" nicht und somit läuft das ganze bis zum Sanktnimmerleinstag und löscht fleissig weiter. Die Anzahl der "Löschungen" bezieht sich aus einer Tabelle (momentan 153) und wird mit "yDim" geholt. hier der Aszug aus dem Methodenqzelltext: Zitat:
is maxzeile, n : integer; do n := 1; maxzeile := Tabelle.yDim; while n < maxzeile loop Puffer1.vernichteBEs; n := n + 1; end; end;
Vielleicht kann uns jemand weiterhelfen wo unser Fehler liegt? Vielen Dank schon mal jetzt.
Rakorion
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Ex-Mitglied
|
erstellt am: 06. Okt. 2006 19:39 <-- editieren / zitieren -->
also mit puffer1.vernichtebes werden alle be´s auf einmal gelöscht. versucht es mal mit puffer1.be(1).vernichten; ------------------ Der Simulator |
Rakorion Mitglied
Beiträge: 6 Registriert: 12.07.2006
|
erstellt am: 07. Okt. 2006 15:49 <-- editieren / zitieren --> Unities abgeben:
Danke für die Antwort! Dass alle BEs gelöscht werden ist gerade Sinn der Sache. Das Problem liegt darin, dass die Zählvariable n nicht erhöht wird und somit die Schleife zur Endlos-Schleife wird anstatt nach 153x abzubrechen! Gruß Rakorion Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Ex-Mitglied
|
erstellt am: 07. Okt. 2006 16:19 <-- editieren / zitieren -->
??? wofür willst Du denn 153 x alle puffer1-Be´s löschen wenn es mit 1x Puffer1.vernichteBEs auch geht. Bei mir läuft die Schleife und n wird inkrementiert (s. Anhang). Du kannst aber mal prophylaktisch die Variable "maxzeile" checken. Hat sie wirklich den Wert 153 ? oder mal "n" gegen eine andere Variable (z.B. "i") austauschen und alles ohne Leerzeichen zusammenschreiben also "i:=i+1;" wobei ich persönlich nicht glaube, dass es daran liegen wird - dafür ist das Produkt über die Jahre doch zu ausgereift. Oder probier einfach mal Folgendes maxzeile:=tabelle.ydim; print maxzeile; for i:=1 to maxzeile loop puffer1.be(1).vernichten; next; ------------------ Der Simulator |
Rakorion Mitglied
Beiträge: 6 Registriert: 12.07.2006
|
erstellt am: 10. Okt. 2006 09:33 <-- editieren / zitieren --> Unities abgeben:
Hallo und Danke. Inzwischen sind wir darauf gestoßen, wo der Fehler liegt und wir können nun die verblüfften Kommentare nachvollziehen.... Die Schleife lief 153 mal durch und n wird inkrementiert. (Käse, wie von SIMULATOR schon angemerkt) Aber wir wollten was anderes machen mit der Methode. Unsere Anzahl an verschiedenen Zeitperioden beträgt eben 153 mal. Also soll sooft die Schleife EINMAL angestoßen werden und n (was die einen Wert aus einer Tabelle abruft (soviele Teile werden aus dem Puffer gelöscht) soll dauerhaft erhöht werden. (also beim ersten Aufruf soll der Wert aus der ersten Zeile, beim 2. aus der 2. Zeile etc verwendet werden) Aber n wird nach Abschluss der Schleife wieder auf "1" gesetzt. Gibt es eine Möglichkeit dass die Methode die Variable dauerhaft (also bis zum Reset) erhöht? ICh hoffe ich habe mich nur nachvollziehbarer ausgedrückt... -.- Gruß Rakorion
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Homer Simpson Mitglied
Beiträge: 345 Registriert: 14.09.2005
|
erstellt am: 10. Okt. 2006 12:10 <-- editieren / zitieren --> Unities abgeben: Nur für Rakorion
Die einfachste Möglichkeit, das Problem zu lösen, ist statt einer lokalen Variable eine globale Variable zu verwenden (d.h. .Informationsfluss.Variable in das Netzwerk einzusetzen) oder - was ich persönlich noch besser fände - ein benutzerdefiniertes Attribut bei der Methode anzulegen. Sowohl globale Variablen als auch benutzerdefinierte Attribute behalten ihre Werte auch nach Beendigung des Methodenaufrufs. Die Methode darf dann aber keine Schleife enthalten, da bei jedem Aufruf nur 1 "Schleifendurchlauf" abgearabeitet wird. Eine alternative Möglichkeit wäre, anstatt die Methode mehrfach aufzurufen, die Methodenausführung nur einmal aufzurufen und die Methodenausführung solange anzuhalten, bis der nächste Schleifendurchlauf ansteht. Innerhalb der Schleife muss dann eine wait-Anweisung oder eine waituntil-Anweisung stehen, die die Schleife für eine gewisse Zeit bzw. bis eine bestimmte Bedingung erfüllt ist anhält. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Rakorion Mitglied
Beiträge: 6 Registriert: 12.07.2006
|
erstellt am: 11. Okt. 2006 15:11 <-- editieren / zitieren --> Unities abgeben:
|