Zuviel Werbung? - > Hier kostenlos beim SPS-Forum registrieren

Seite 3 von 3 ErsteErste 123
Ergebnis 21 bis 25 von 25

Thema: Philosophiefrage: Break in C

  1. #21
    Registriert seit
    06.07.2007
    Beiträge
    2.811
    Danke
    174
    Erhielt 274 Danke für 253 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Zitat Zitat von HeizDuese Beitrag anzeigen
    Irre ich, oder ist das, was hier als "Abbruchbedingung" im Schleifenkopf deklariert wurde nicht in Wirklichkeit die "Schleifenausführbedingung" ???

    Solange die mittlere Bedingung (hier: "Abbruchbedingung") erfüllt ist, wird die Schleife ausgeführt!
    A programmer is just a tool which converts caffeine into code.

  2. #22
    Registriert seit
    27.10.2005
    Ort
    Schwäbisch Gmünd
    Beiträge
    5.224
    Danke
    630
    Erhielt 955 Danke für 769 Beiträge

    Standard

    Zitat Zitat von Tapio Bearking Beitrag anzeigen
    Eben genau das ist das Problem. Meiner (und scheinbar nur meiner, aber was soll's, ich war schon immer ein Einzelkämpfer) Meinung nach wird diese Struktur durch ein Break eben zerbrochen, zwar nicht sehr, aber sagen wir mal, sie hat einen Knacks, der eventuell weiter bricht.
    Nehmen wir mal ein einfaches For(Start; Abbruchbedingung; xyz++); Wenn ich z.B. eine Schleife vorzeitig verlassen will, ist für ein break kein bedarf, da ich die Abbruchbedingung ja in dem Schleifenkopf, bzw. Schleifenende bei do/while() untergebracht habe.
    Das mag bei einfachen Abbruchkriterien gehen. Wenn aber innerhalb der Schleife auf mehrere Abbruchbedingungen geprüft werden soll, ist ein break sauberer und übersichtlicher als 10 verknüpfte Bedingungen innerhalb der for oder do Anweisung.
    Rainer Hönle
    DELTA LOGIC GmbH

    Ein Computer kann das menschliche Gehirn nicht ersetzen. Engstirnigkeit kann unmöglich simuliert werden. (Gerd W. Heyse)

  3. Folgender Benutzer sagt Danke zu Rainer Hönle für den nützlichen Beitrag:

    afk (11.07.2008)

  4. #23
    Registriert seit
    08.08.2007
    Ort
    Dresden
    Beiträge
    9.648
    Danke
    1.059
    Erhielt 2.046 Danke für 1.627 Beiträge

    Standard

    Zitat Zitat von Cerberus Beitrag anzeigen
    Solange die mittlere Bedingung (hier: "Abbruchbedingung") erfüllt ist, wird die Schleife ausgeführt!
    vielen dank für diese wertvolle information!

    ich bleib dabei, break macht sinn!
    [SIGNATUR]
    Ironie setzt Intelligenz beim Empfänger voraus.
    [/SIGNATUR]

  5. Folgender Benutzer sagt Danke zu vierlagig für den nützlichen Beitrag:

    argv_user (11.07.2008)

  6. #24
    Registriert seit
    23.08.2010
    Beiträge
    13
    Danke
    6
    Erhielt 0 Danke für 0 Beiträge

    Standard

    Bin gerade dabei eine Statusmaschine in ST zu programmieren. Um eine Echtzeitfähigkeit herzustellen muss der abzuarbeitende Code in jedem Zyklus ungefähr gleich lang sein, zumindest nicht in besonderen Fällen extrem lang sein. Ohne BREAK (ich kann es leider nicht im Sprachumfang von ST finden) habe ich das Problem, dass die Abarbeitung des INIT States und des darauf folgenden States entsprechend zu lange dauert. Der Sourcecode sollte sich auf zwei Zyklen verteilen. Momentan bekomme ich das nur hin, indem ich die Statusmaschine auf den Kopf stelle:

    CASE iState OF
    30: // Aufräumen
    20: // Abarbeiten
    10: // Initalisieren
    END_CASE

    von daher würde für mich CASE sehr viel Sinn machen und zur Lesbarkeit des Codes beitragen

  7. #25
    Registriert seit
    01.10.2009
    Ort
    Regensburg
    Beiträge
    77
    Danke
    8
    Erhielt 11 Danke für 11 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Hallo,

    Also in ST gibt es für CASE Anweisungen kein Break im Sinne wie bei C. Solange du in deinem State iState nicht änderst, wird die SPS immer wieder in diesen State gehen. (so kenne ich das zumindest bei ST nach IEC61131)


    eine Statemachine hat in ST in etwa so eine Struktur:

    Code:
    CASE iState OF
    
    10:
    (* do something here *)
    iState := !! hier kommt jetzt der state rein, in den du als nächstes wechseln willst !!
    
    20:
    (* do something here *)
    iState := !! hier kommt jetzt der state rein, in den du als nächstes wechseln willst !!
    
    
    END_CASE
    wenn du die Statemachine von oben weg durchlaufen willst, so musst du iState auch so setzten.

    Was mir auch nicht ganz klar ist, was die Echtzeitfähigkeit mit deinem Code zu tun hat. Ich habe Statemachines mit höchst unterschiedlichem Inhalt in den einzelnen States und musste mich um die Einhaltung der Zykluszeit noch nie kümmern. (ausser du hast eine doch wirklich schwache CPU in deiner Steuerung)

    Welche Steuerung setzt du denn ein?

    cheers

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •