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

Page 3 of 4 FirstFirst 1234 LastLast
Results 21 to 30 of 35

Thread: V15: In SCL GOTO-Befehl verwenden?

  1. #21
    Join Date
    03.04.2008
    Posts
    6,464
    Danke
    238
    Erhielt 825 Danke für 698 Beiträge

    Default


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Es ist für mich immer wieder lustig, wie Programmierer über Programmierer urteilen.
    Sollte das Wort Toleranz in die Bedienungsanleitung von z.B. TIA einführt und erklärt werden?
    Ich versuche auch ein GOTO zu vermeiden, obschon es vor vierzig Jahren bei IBM PC mit eingebautem Basic oder Pascal oder Fortran nicht immer möglich war.

    Aber ein vernünftig programmiertes PLC Programm, das klar dokumentiert ein paar GOTOs hat, was ist daran so schlecht?
    Ist es besser mit komplizierten IF THEN ELSE oder CASE Konstruktionen ein GOTO zu umgehen?
    Ist es nicht besser vernünftig zu programmieren, dokumentieren, auch zusätzlich zum Programmcode, und zu akzeptieren, dass nicht jeder geistiger Durchfall in ein Programm muss?
    Neben mir sitzen einige Freunde, die den selben Beruf wie ich haben, und die anders als ich ticken, doch zu klassifizieren was ist besser oder schlechter ist masse ich mir nicht an.
    Solange ein Programm das macht wozu es erstellt wurde ist es ein gutes Programm.
    @ralle: löschen nur wegen bikeismus


    bike
    "Any fool can write code that a computer can understand.
    Good programmers write code that humans can understand."
    --Martin Fowler

  2. Folgender Benutzer sagt Danke zu bike für den nützlichen Beitrag:


  3. #22
    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

    Quote Originally Posted by PN/DP View Post
    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
    Sorry "leere Schleife" war der falsche Ausdruck. Ich meine damit einfach Schleifen bei denen die Bedingung immer erfüllt ist.
    Hier steckt die Logik eben irgendwo anders. Verwende ich auch und ist völlig legitim. Ich weiß halt, dass man bei sowas genauso wie bei Goto den Code genauer anschauen muss wie bei einer "normalen" Schleife.

    Gruß
    Blockmove

  4. #23
    Automatinator is offline Erfahrener Benutzer
    Themenstarter
    Join Date
    11.09.2014
    Posts
    115
    Danke
    17
    Erhielt 2 Danke für 2 Beiträge

    Default

    Danke für die Vielen Antworten und darin enthaltenen Meinungen.

    Diese zeigen mir, dass die Antwort auf meine Frage nicht so einfach ist. Ich erhoffte (er-)schlagende Argumente, die klar die Nachteile von GOTO aufzeigen.

    Ich persönlich finde es von Nachteil, dass bei Verwendung von CASE-Schritten in einer Trace-Aufzeichnung mehrere Schritte bearbeitet wurden und das Fehlersuchen so verkomplizieren kann...
    Du hast schlecht angefangen doch gegen Ende stark nachgelassen,
    aber auch ein blindes Huhn kann die Zeit nicht zurück drehen,
    denn Schweizerische Wissenschaftler haben herausgefunden
    nachdem man ihnen den Ausgang zeigte.

  5. #24
    Join Date
    12.04.2005
    Location
    Black Forest
    Posts
    1,422
    Danke
    28
    Erhielt 139 Danke für 126 Beiträge

    Default

    Quote Originally Posted by Automatinator View Post
    Danke für die Vielen Antworten und darin enthaltenen Meinungen.

    Diese zeigen mir, dass die Antwort auf meine Frage nicht so einfach ist. Ich erhoffte (er-)schlagende Argumente, die klar die Nachteile von GOTO aufzeigen.
    Wenn man GOTOs Strukturiert einsetzt kann es auch ein Programm ggf. leserlicher machen, z.B. bei Hochsprachen mit dem "On Error GOTO" oder wenn man auf einen definierten Punkt im Programm springt um dort definiert eine Funktion zu beenden.
    Teils ist halt GOTO die einzigste Möglichkeit bestimmt Funktionen vorab zu beenden (glaube ist ja bei For-Schleifen der Fall).
    Würde man im Compiler entsprechende Möglichkeiten schaffen, könnte man auf GOTO bestimmt verzichten.
    Aber im Maschinencode wird man bestimmt sehr viele Jumps finden, was ja auch nur GOTOs sind

    Problematisch ist es halt, wenn GOTO's einsetzt anstatt Strukturiert zu programmieren und den Code dadurch unleserlich macht.



    Quote Originally Posted by Automatinator View Post
    Ich persönlich finde es von Nachteil, dass bei Verwendung von CASE-Schritten in einer Trace-Aufzeichnung mehrere Schritte bearbeitet wurden und das Fehlersuchen so verkomplizieren kann...
    Hierzu kann man ohne den Code zu kennen auch kaum eine Aussage treffen.
    Man könnte auch sagen, das halt ggf. an der Fehlerbehandlung wegen schlechtem Still gespart wurde, oder Du die falschen Variablen aufgezeichnet hast!
    Aber wie geschrieben, müsste man den Code sowie den Fehler und die Aufzeichnung kennen um hier genaueres Aussagen zu können ...

    „Eine Frage raubt mir den Verstand bin ich verrückt oder sind es die Anderen ?“

    Albert Einstein

  6. Folgender Benutzer sagt Danke zu Boxy für den nützlichen Beitrag:

    Automatinator (11.01.2018)

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

    Default

    Im MISRA-C Standard (Motor Industry Software Reliability Association) gibt es übrigens auch Regeln die nicht nur goto, sondern auch continue und break (außer zum Beendigen eines case in C) verbieten. Genauso ist nur ein einziges return pro Funktion erlaubt.
    Was man von Programmierern hört die sich daran halten müssen, ist es aber alles andere als schön wenn wirklich alle Regeln verpflichtend eingehalten werden müssen.

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

    Default

    Hier die selbe Lösung wie #7 mit ohne GOTO, aber ohne die bösen CONTINUE und EXIT und mit nur ganz einfachen Hochsprachen-Anweisungen ist doch gleich viel verständlicher
    Code:
    REPEAT //eine Schleife für den Rückwärtssprung zur sofortigen Schrittweiterschaltung
      xExitLoop := TRUE;       //Voreinstellung: bei den meisten Durchläufen Schleife nicht wiederholen
    
      CASE Schrittnummer OF
        1: TuWas1();
           Schrittnummer := 2; //mit Schrittnummer 2 im nächsten Zyklus fortsetzen
    
        2: TuWas2();
           Schrittnummer := 3; //mit Schrittnummer 3 fortsetzen sofort
           xExitLoop := FALSE; //Schleife wiederholen für sofortige Schrittweiterschaltung
    
        3: ...
    
      END_CASE;
    
    UNTIL xExitLoop = TRUE
    END_REPEAT; //ggf. Rückwärtssprung zurück zu REPEAT wenn xExitLoop = FALSE
    
    //weiter...
    Harald
    Es ist immer wieder überraschend, wie etwas plötzlich funktioniert, sobald man alles richtig macht.

    FAQ: Linkliste SIMATIC-Kommunikation über Ethernet

  9. Folgende 3 Benutzer sagen Danke zu PN/DP für den nützlichen Beitrag:

    Automatinator (11.01.2018),Blockmove (11.01.2018),LargoD (11.01.2018)

  10. #27
    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

    Nicht falsch verstehen Harald ... ich fand das (Beitrag #7) nicht böse - ich kannte die Variante nur nicht ...

    Gruß
    Larry

  11. #28
    Join Date
    21.10.2010
    Posts
    744
    Danke
    77
    Erhielt 63 Danke für 60 Beiträge

    Default

    Hi
    Ich muss sagen, das mit dem Repeat ist eigentlich eine intressante Lösung. Wäre jetzt mir nicht in den Sinn gekommen. Allerdings musste ich jetzt auch noch nie im CASE wieder im selben Zyklus in eine andere Nummer springen.
    Aber sicher gut zu wissen. V15: In SCL GOTO-Befehl verwenden?

    Gesendet von meinem BLN-L21 mit Tapatalk

  12. #29
    Join Date
    30.06.2006
    Location
    Deutschland
    Posts
    220
    Danke
    33
    Erhielt 16 Danke für 14 Beiträge

    Default

    Hallo zusammen,
    generell versuche ich Sprünge auch zu vermeiden, aber in meinen Automatikabläufen nutze ich den Goto an einer Stelle gerne und finde das auch deutlich übersichtlicher als ein IF.
    Im Automatik gibt es 2-3 Netzwerke die Zyklisch aufgerufen werden danach kommt der Goto der alle anderen Netzwerke überspringt wenn Einrichten aktiv ist.... d.h. Ich habe ein Sprunglabel ENDE und bei Bedarf kann ich immer zu diesem Springen und wo Ende dran steht ist auch Ende drin

    Gruß Softi

  13. #30
    Join Date
    04.03.2015
    Posts
    91
    Danke
    13
    Erhielt 34 Danke für 12 Beiträge

    Default


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Quote Originally Posted by Softi79 View Post
    Hallo zusammen,
    generell versuche ich Sprünge auch zu vermeiden, aber in meinen Automatikabläufen nutze ich den Goto an einer Stelle gerne und finde das auch deutlich übersichtlicher als ein IF.
    Im Automatik gibt es 2-3 Netzwerke die Zyklisch aufgerufen werden danach kommt der Goto der alle anderen Netzwerke überspringt wenn Einrichten aktiv ist.... d.h. Ich habe ein Sprunglabel ENDE und bei Bedarf kann ich immer zu diesem Springen und wo Ende dran steht ist auch Ende drin

    Gruß Softi
    Warum benutzt du dafür nicht den Return Befehl ? Der beendet die Bearbeitung des aktuellen Bausteins.
    Finde ich besser weil das halt definitiv Ende bedeutet


    Der Aussage das viele if Elsif Anweisungen unübersichtlich werden stimme ich zu, nutze um es übersichtlich zu gestalten aber lieber die Möglichkeit mit REGION / END_REGION die einzelnen Anweisungen im Baum links kurz zu erläutern.

    Wenn ich goto Befehle sehe läuft es mir immer kalt den Rücken runter aber jedem das seine.

    Grüße

    Balu

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
  •