FOR Schleife

dietere
2008-01-19
2008-01-23
  • dietere - 2008-01-19

    Hallo,

    kann es sein, dass eine FOR Schleife jeZyklus nur 1 Mal durchlaufen wird, und dsnn im nächsten Zyklus wieder ein weiteres Mal mit erhöhtem Zähler, u.s.w ...

    Oder schaue ich nur falsch ?

    Grüsse,

    Dieter

     
  • gravieren - 2008-01-19

    Hi

    Mach doch mal den "Ultimativen Test" !

    Schreibe eine FOR-Schleife, die bis 10.000 oder mehr Durchgänge hat.

    ERGEBNIS: Watch-DOG Zeitüberlauf.

    Die FOR und WHILE ... Schleifen laufen in einem SPS-Zyklus durch.

    Erhöhe die Anzahl der Schleifendurchgänge, so erhöht sich auch die Zykluszeit der TAsk.

    P.S:

    O.g. Aussage nur gültig für "freilaufende" Task.

    Bei "Zyklisch" macht er so viele Schleifen, solange er nach "Zeit" hat.

    (Bin mir NICHT sicher, da möglicherweise Hardware/Hersteller-Abhängig)

     
  • Ralph Holz - 2008-01-20

    Hallo Leute,

    FOR,WHILE und REPEAT Schleifen werden immer komplett in einem Zyklus abgearbeitet. Das ist unabhängig von der Art der Task. Am besten nachvollziehen kann man das wenn man mal einen Breakpoint in die Schleife setzt und dann das Programm Schritt für Schritt abarbeitet. Probiers aber mit einer kleineren Schleife als 10000!

    Gruß

    Ralph

     
  • gravieren - 2008-01-20

    Hi

    Zitat:
    Probiers aber mit einer kleineren Schleife als 10000!

    O.K! Probiere es mit 1000 dann aber mit extrem vielen Berechnungen
    und Wandlungen. Schleifen in diesen sich auch O.K!

    Zitat:
    Das ist unabhängig von der Art der Task

    Verwechsel ich das mit "Preambles-Multitasking"

     
  • dietere - 2008-01-20

    OK danke.

    Also kann ich auch unbesorgt immer den gleichen Counter (i) benutzen, wenn mehrere verschiedene FOR-Schleifen hintereinaner im selben Programm vorkommen ?!

    Grüsse,

    Dieter

     
  • mwatermann - 2008-01-21

    moin,

    ja, kannst du, der wird innerhalb der for schleife ja wieder neu gesetzt.

    => FOR i:=0 TO ....

     
  • Ralph Holz - 2008-01-21

    Hallo Miteinander

    Zitat:
    Verwechsel ich das mit "Preambles-Multitasking"

    Genau! Bevor das einer nachschlägt das heist: "Preemptive" Und bedeutet grob gesagt eine Task darf eine andere Task unterbrechen.

    Damit wieder zu Dieters Problem:

    Du kannst die Zählvariable solange bedenkenlos mehrfach verwenden wenn:

    Du entweder nur eine Task hast oder die Variable immer Lokal deklarierst.

    Probleme kann und wird es geben wen du die Zählvariable global deklarierst und in mehreren Tasks verwendest - dann viel Spass beim fehlersuchen.

    Gruß Ralph

     
  • Tobi - 2008-01-22

    Gibt es egtl in CoDeSys Semaphoren?

    Ein passendes Zitat zum von Ralph genannten Problem von einem Prof.:

    "Das kann dann zu sehr merkwürdigen Fehlern führen..."

    Ich denke, merkwürdig ist gar kein Ausdruck..

     
  • gravieren - 2008-01-22

    Zitat:
    Gibt es egtl in CoDeSys Semaphoren?

    Ja, und eine geeignete LIB dafür. (Soweit ich weiss)

    Kannst auch Global Variablen dafür verwenden.

    Oder eine Art "State-Maschine"

     
  • Uwe - 2008-01-23

    Hallo Karl,

    wie kann man globale Variablen als Semaphore nehmen ?

    Oder wie funktioniert das mit deiner State-Maschine ?

    Würde mich interessieren.

    Ich suche schon lange eine einfache, Variante.

    Schon mal Danke für deine Hilfe

    Uwe

    Übrigens die Bibliothek heisst SysLibSem und ist targetspezifisch.

     
  • Tobi - 2008-01-23

    Naja, dass die Sema global sein muss, leuchtet ein - sonst könnte ja nicht jede Task dran.

     

Log in to post a comment.