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

Page 2 of 4 FirstFirst 1234 LastLast
Results 11 to 20 of 35

Thread: V15: In SCL GOTO-Befehl verwenden?

  1. #11
    Join Date
    25.06.2017
    Location
    Oerlinghausen
    Posts
    2,521
    Danke
    262
    Erhielt 477 Danke für 392 Beiträge

    Default


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Quote Originally Posted by PN/DP View Post
    ... das läßt sich prima übersichtlich ohne GOTO programmieren: ...
    "Prima übersichtlich" aber auch nur, weil Du's so schön farbig hervorgehoben und unnötiges Beiwerk weggelassen hast und weil es im Zusammenhang dieses Thread auftaucht.
    Würde man völlig unvorbereitet so etwas in einem Programm lesen ... na, ich möchte nicht wissen, wie viel Kopfzerbrechen dieses Konstrukt so manchem mehr oder weniger aufmerksamen Leser bereiten würde. Das ist doch ganz schön um mehrere Ecken (SpaghettiKnoten) gedacht!
    Und dennoch: chapeau! Endlich eine Anwendung des Continue-Befehls, die erahnen lässt, wie er zu seinem Namen gekommen sein könnte.

    Mir ist immer noch unklar, wieso die ZustandsMaschine durch Einsparung eines Zyklus zur ZustandsZeitmaschine wird, die eine nennenswerte Anzahl (im Beispiel 6) Zyklen einsparen kann.
    Anscheinend benötige ich ein paar Zyklen mehr, bis bei mir der Groschen fällt.
    Gruss, Heinileini

    PS:
    @bike
    Quote Originally Posted by bike View Post
    ... Deshalb wurde ja SCL erfunden ...
    War aber nicht nötig - gab's doch in AWL auch schon!
    Last edited by Heinileini; 09.01.2018 at 21:52. Reason: PS hinzu
    <-- <=2m --> . . . . . . . . vs . . . . . . . . <---------------- >2m ---------------->

  2. #12
    Join Date
    22.06.2009
    Location
    Sassnitz
    Posts
    15,159
    Danke
    1,241
    Erhielt 4,461 Danke für 3,595 Beiträge

    Default

    Wie unterschiedlich die Geschmäcker doch so sind
    Manche bevorzugen ..zig GOTO-Sprünge zu womöglich ..zig verschiedenen Sprungzielen und halten das für übersichtlicher als einen Standard-Sprung ("CONTINUE") zu nur einem vom Compiler automatisch vergebenen Sprungziel (ohne Chance sich beim Ziel zu vertippen). Das scheint mir eher eine Form von "Ich will unbedingt Hochsprache programmieren, will aber nur IF..THEN, FOR..TO, CASE und GOTO benutzen, weil die anderen Konstrukte sind mir zu unverständlich und überhaupt unnütz"

    Gruß Harald
    Es ist immer wieder überraschend, wie etwas plötzlich funktioniert, sobald man alles richtig macht.

    FAQ: Linkliste SIMATIC-Kommunikation über Ethernet

  3. #13
    Join Date
    29.03.2004
    Posts
    7,057
    Danke
    164
    Erhielt 2,135 Danke für 1,523 Beiträge

    Default

    Aber um eine CASE-Anweisung nur weil ich ein GOTO vermeiden will, eine völlig unnütze endlose REPEAT-Schleife bauen? Wo sich jeder fragt, was soll das da denn?

    Ich bin ja ein Freund des Durchfallens bei switch/case in C bei fehlender break Anweisung, da gibt es aber auch Leute die das für einen der Nachteile bei C halten.

  4. #14
    Join Date
    22.06.2009
    Location
    Sassnitz
    Posts
    15,159
    Danke
    1,241
    Erhielt 4,461 Danke für 3,595 Beiträge

    Default

    Quote Originally Posted by Thomas_v2.1 View Post
    Aber um eine CASE-Anweisung nur weil ich ein GOTO vermeiden will, eine völlig unnütze endlose REPEAT-Schleife bauen?
    Es geht nicht nur um ein einziges GOTO sondern um viele, welche vermieden werden können.

    Die REPEAT-Schleife ist dafür da,
    - damit die CASEs in beliebiger Reihenfolge stehen können
    - damit man keine GOTO braucht und keine Sprungmarken für die GOTO verwalten muß - es wird durch den Compiler immer der "Sprungverteiler" (CASE ...) angesprungen
    - damit man sich nicht darum kümmern muß, daß die Zuweisung der nächsten Schrittnummer zum GOTO-Sprungziel passt
    - damit nicht zusätzlich zur Schrittnummer noch eine Variable verwaltet werden muß, welche den Rücksprung zum "Sprungverteiler" (ja/nein) steuert
    - es reicht lediglich, nach der Zuweisung der nächsten Schrittnummer ein CONTINUE zu schreiben (dann wird der nächste Schritt/CASE sofort im selben Zyklus angesprungen), oder kein CONTINUE (oder ein EXIT) zu schreiben (dann wird der nächste Schritt/CASE im nächsten Zyklus angesprungen)
    - für alle Schritte, welche nicht sofort zum nächsten Schritt weiterspringen sollen (z.B. weil sie auf etwas warten) ist das eine EXIT vor dem UNTIL da, wodurch effizient die endlos-REPEAT-Schleife verlassen wird (die UNTIL-Bedingungsprüfung übersprungen wird)

    Man könnte aus der "unnützen endlos-REPEAT-Schleife" eine Schleife mit kontrollierter/variabler Abbruchbedingung machen, doch das wäre aufwändiger.

    Weil hier die Aufgabenstellung ist, im selben Zyklus weitere Schritte auszuführen, finde ich es durchaus berechtigt, für den (wiederholten) Rücksprung zum Sprungverteiler ein REPEAT-Konstrukt zu verwenden. (WHILE könnte man auch nehmen, doch das wird langsamer, weil da immer zuerst die WHILE-Bedingung geprüft wird. FOR könnte man auch nehmen - allerdings nicht bei Siemens-TIA-SCL, weil da der Compiler so doof optimiert)

    PS: Mit so einer REPEAT-Schleife kann man übrigens prima CASE-Abschnitte vorzeitig per EXIT verlassen, ohne nicht mehr auszuführende Anweisungen in IF-Zweige packen zu müssen und ohne GOTO zu verwenden.

    Harald
    Es ist immer wieder überraschend, wie etwas plötzlich funktioniert, sobald man alles richtig macht.

    FAQ: Linkliste SIMATIC-Kommunikation über Ethernet

  5. #15
    Join Date
    17.07.2009
    Location
    Am Rande der Ostalb
    Posts
    7,217
    Danke
    1,439
    Erhielt 1,704 Danke für 1,312 Beiträge

    Default

    "Leere" Repeat oder While Schleifen stehen bei mir auf der gleichen Stufe wie Goto.
    Es sind einfach Anweisungen bei denen mein Gehirn einen Alarm-OB startet und ich weiß, dass hier Vorsicht geboten ist.
    Beim Beispiel von Harald hätte ich wahrscheinlich zum Goto gegriffen.

    Gruß
    Blockmove

  6. #16
    Join Date
    06.10.2003
    Posts
    4,376
    Danke
    605
    Erhielt 750 Danke für 589 Beiträge

    Default

    Vielleicht könnte ein beherzter Moderator der Nachwelt ab Beitrag #7 einen Gefallen tun?
    Der höchste Lohn für unsere Bemühungen ist nicht das, was wir dafür bekommen, sondern das, was wir dadurch werden.
    John Ruskin

  7. #17
    Join Date
    22.06.2009
    Location
    Sassnitz
    Posts
    15,159
    Danke
    1,241
    Erhielt 4,461 Danke für 3,595 Beiträge

    Default

    Quote Originally Posted by Blockmove View Post
    "Leere" Repeat oder While Schleifen stehen bei mir auf der gleichen Stufe wie Goto.
    Es sind einfach Anweisungen bei denen mein Gehirn einen Alarm-OB startet und ich weiß, dass hier Vorsicht geboten ist.
    Beim Beispiel von Harald hätte ich wahrscheinlich zum Goto gegriffen.
    Mein Beispiel ist doch gar keine "leere" REPEAT-Schleife, sondern sie ist genau deshalb drin, weil da tatsächlich ein Programmteil bedingt wiederholt werden soll. Wieso soll man dafür keine REPEAT-Schleife einsetzen dürfen? Mit dem REPEAT hat man wenigstens ein "Achtung!"-Zeichen, daß da ein Rückwärtssprung ist, was man bei mehreren GOTO nicht so deutlich sehen würde.

    Das Ungewöhnliche an der Schleife ist doch lediglich, daß die Abbruchbedingung nicht aufwändig über eine Variable realisiert ist sondern über ein einziges "EXIT". Ist sowas für "Hochsprachen-Programmierer" schon zu hoch?

    Harald
    Es ist immer wieder überraschend, wie etwas plötzlich funktioniert, sobald man alles richtig macht.

    FAQ: Linkliste SIMATIC-Kommunikation über Ethernet

  8. #18
    Join Date
    27.05.2004
    Location
    Thüringen/Berlin
    Posts
    13,579
    Danke
    721
    Erhielt 3,040 Danke für 2,185 Beiträge

    Default

    Quote Originally Posted by Onkel Dagobert View Post
    Vielleicht könnte ein beherzter Moderator der Nachwelt ab Beitrag #7 einen Gefallen tun?
    Nein, abgelehnt! Mit welcher genauen Begründung?

    Beleidigung?
    Rassismus?
    Trumpismus?
    Gotoismus?
    ...
    Gruß
    Ralle

    ... there\'re 10 kinds of people ... those who understand binaries and those who don\'t …
    and the third kinds of people … those who love TIA-Portal

  9. #19
    Join Date
    22.03.2007
    Location
    Detmold (im Lipperland)
    Posts
    12,359
    Danke
    422
    Erhielt 2,517 Danke für 2,095 Beiträge

    Default

    Wenn dann "Gotoismus" ...

    Aber mal im Ernst ... dies ist jetzt wieder so ein "Meinungs-Thread" - man kann also diese und nicht diese Meinung dazu haben ...
    Ich persönlich hatte bisher erst einen einzigen Anwendungsfall für ein GOTO und das habe ich auch nur deshalb gemacht weil der IF-Bereich über so viele Zeilen ging das die Zuordnung IF-END_IF trotz einem entsprechenden Kommentar am END_IF nicht mehr so schön ersichtlich war (für meine Kollegen - ich wäre auch so klar gekommen).
    Die Variante von Harald kannte ich aber gar nicht, würde ich selbst nicht so machen ... aber allein das so zu machen wäre ich nicht drauf gekommen - von daher auf alle Fälle schonmal interessant ...

    Gruß
    Larry

  10. #20
    Join Date
    06.10.2003
    Posts
    4,376
    Danke
    605
    Erhielt 750 Danke für 589 Beiträge

    Default


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Quote Originally Posted by Ralle View Post
    Nein, abgelehnt! Mit welcher genauen Begründung? ...
    Jugendschutz und Nächstenliebe!
    Der höchste Lohn für unsere Bemühungen ist nicht das, was wir dafür bekommen, sondern das, was wir dadurch werden.
    John Ruskin

Similar Threads

  1. TIA SCL Fill Befehl
    By s7Opa in forum Simatic
    Replies: 3
    Last Post: 12.05.2017, 13:46
  2. goto SCL
    By Amzaun in forum Programmierstrategien
    Replies: 36
    Last Post: 15.02.2013, 09:43
  3. Move Befehl in SCL
    By Felse in forum Simatic
    Replies: 11
    Last Post: 03.03.2009, 09:19
  4. PCS7 SCL Befehl
    By Praktikant08 in forum Programmierstrategien
    Replies: 3
    Last Post: 31.10.2008, 15:18
  5. Befehl SAVE für ENO unter SCL
    By Kniffo in forum Programmierstrategien
    Replies: 2
    Last Post: 11.09.2007, 15:44

Tags for this Thread

Bookmarks

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •