Zwei While Schleifen eine wird übersprungen

  • Hallo Zusammen,

    bräuchte ein wenig Unterstützung beim Python der while Schleife.

    Das ist nur ein Teil vom Script. Das Problem ist er überspringt die "PLC" schleife.

    Könnte mir da jemande ein Tipp geben?


    Einmal editiert, zuletzt von slawa (6. Februar 2018 um 21:48)

  • Eine wird nicht übersprungen, sondern die 2. verschachtelte dominiert weil sie neverever verlassen wird.

    Die erste ergibt so aber auch gar kein Sinn. Du solltest dich noch mal einlesen was es mit "__main__" auf sich hat.

    Gegenfrage: Was willst du erreichen?

  • Danke für die schnelle Antwort.

    Möchte die Temperatur und die Luftfeuchte ans Display bringen und an die PLC (ist die SPS von Siemens 1200) damit ich die Daten weiter verwerten kann. Es funktioniert immer nur eine while schleifen. Wie du schon geschrieben hast es dominiert immer eine while schleifen.

    Es müssen nicht zwei while schleifen sein.

    Kann ich die zusammenfügen?

    Wenn ja wie?

    Ich komme leider nicht dahinter.

    Gruß

    Slawa

  • Bist Du denn sicher, daß Du hier überhaupt eine while-Schleife haben möchtest? Dein Code soll, wie Du schreibst, zwei Werte aufs Display und an die SPS bringen. Diese Werte ändern sich innerhalb des von Dir geposteten Codes nicht. Wenn Du um die Ausgabe eine while-Schleife packst, gibst Du also in alle Ewigkeit immer wieder die selben Werte au. Ist das sinnvoll?

  • Sorry, ich habe mich wahrscheinlich falsch ausgedruckt das ist nur ein Teil des Scriptes.

    Der Script ist etwas größer. Habe nur den Block dargestellt wo das eigentliche Problem ist.


    PS. die werte werden im Intervall von 2s aktualisiert. Sonst hätte die while schleife keinen Sinn. Du hast vollkommen recht.

  • Nein es gibt noch eine while Schleife.

    Siehe Zeile Nr. 5

  • Bist Du sicher, daß Du das Konzept der while-Schleife verstanden hast? Du hast in Deinem ersten Post eine Schleife, die mit

    Code
    while True:

    beginnt. Die wird so lange ausgeführt, wie (while) die Bedingung wahr ist. 'True' ist aber immer wahr. Das heißt, wenn Du einmal in Deiner while-Schleife aus dem ersten Post landest, wird sie nie wieder (neverever, wie meigrafd so schön schreibt) verlassen. Demnach werden dann auch die Werte nie mehr aktualisiert.

  • Ich bin ganz sicher das ich die Funktion der while schleifen NICHT verstanden hab :). Die Werte werden aber aktualisiert entweder am Display oder an der SPS. Kommt drauf an wie ich die while schleifen setze.

    Lass ich die while True: schleifen weg so springt er in die nächste. Und arbeitet die am Display ab.

    Ganz gewiss ist, dass die Werte sich aktualisieren.

    Habe vor mir alles aufgebaut.

    Hatte die Scripten auch schon gesplittet.

    Den Display Script und den SPS Script hatte ich parallel laufen lassen doch nach etwa einer Minute bricht einer davon ab. Einzeln funktioniert es. Hat wahrscheinlich was mit der Zugriffszeit des DHT22 zu tun(laut Datenblatt Zugriffszeit min. 2s).

    Gruß

    Slawa

  • Ich würde Dir raten, noch mal einen Schritt zurückzugehen und Dir für Dein Programm sowas wie einen Ablaufplan zu schreiben oder zu zeichen. Welche Schritte müssen in welcher Reihenfolge ausgeführt und was muß wann wiederholt werden, um das zu erreichen, was Du möchtest.

    Wenn Du möchtest, kannst Du den dann gerne hier posten und wir machen gemeinsam ein Programm draus.

  • Hallo,

    slawa: da du das Skript ja so wie so überarbeiten musst, eliminiere direkt die `global` in deinem Code. Das ist in 99,9% falsch (bei dir auch) und macht den Zustand des Programms schwer bis nicht nachvollziehbar. Am besten vergisst du, dass es `gobal` gibt.

    Wenn eine Funktion Werte braucht, dann übergib' diese explizit an die Funktion und hoffe nicht darauf, dass die Funktion die Werte auf auto-magische Weise aus dem ihr bekannten Namensraum zieht.

    Und wenn du gerade beim Überarbeiten bis: Funktions- und Variablennamem schreibt man in Python per Konvention klein_mit_unterstrich.

    Gruß, noisefloor

  • Hallo,

    so ich habs jetzt überarbeitet und es hat geklappt. Global ist eliminiert! :)

    Die S7-1200 und das Oled Display kriegen ihre Wertigkeiten.

    @Manul danke für deine Hilfsbereitschaft. Habe noch einiges vor mit Python, werde mich sicher noch melden,

    noisefloor danke für die Tipps hat sehr weiter geholfen.

    Gruß

    Slawa

Jetzt mitmachen!

Du hast noch kein Benutzerkonto auf unserer Seite? Registriere dich kostenlos und nimm an unserer Community teil!