Zeilen Überspringen bei Erreigniss

  • Hallo....


    Ich habe ein Programm mit festgelegte Bahn-Bewegungen.
    Einige diese Bahne sind Überflüssig und bei eine Bestimmte eingangs Signal (Lichtschranke) möchte ich das diese Bewegungen nicht durchgeführt werden, sondern das das Programm auf eine Bestimmte Zeile springt.
    ich hatte mir das so gedacht :


    If in[30] = true then
    go to zeile 50
    else just carry on
    endif


    Vielleicht kann eine von Euch diese Falsche Zeilen in richtige KRL umschreiben.


    Vielen Dank vorab


    Robo-Rich


    KR 15/2
    KRC 1

  • Schritt für Schritt zum Roboterprofi!
  • Hallo,


    vom Syntax her musst du schreiben


    If ($in[30] == true) THEN
    GOTO Sprungzielname
    else
    ;just carry on
    PTP
    LIN
    ...
    endif


    Sprungzielname:
    ;Hier geht weiter


    Du kannst das ganze aber auch drehen
    IF ($IN[30]==FALSE) THEN
    ;Hier die nicht benötigten Bewegungen eintragen
    ENDIF



    Gruß
    Thilbi

  • Ja - es ist mein erster Roboter, und


    ich glaube meine Letzte Frage war etwas unüberlegt.


    Ich verstehe jetzt wie die Lösung gemeint ist.


    Werde gleich umsetzen.


    Vielen Dank für die Unterstützung


    Gruß
    Robo-Rich


  • Ja so könnte man das machen, aber in der heutigen Zeit sollte man doch GOTO Anweisungen vermeiden. Zeugt von nicht alt zu guter Programmierung! :down:


    Ach, da war es wieder, mein Lieblingsthema beim Programmieren! Es fasziniert mich immer wieder, mit welcher Verbissenheit an Dogmen festgehalten wird, ohne den Sinn zu hinterfragen! :wallbash: :mrgreen: :zwink:
    Es zeugt immer von guter Programmierung, einen Code so einfach und überschaubar wie möglich zu halten! Wenn dabei ein GOTO Sinn macht, macht er halt Sinn! :genau:


    P.S. Was nicht heisst, dass es an der oben beschriebenen Stelle Sinn macht! Da ist das "Umdrehen" natürlich besser!

    Gruss<br /><br />Dodo

    Einmal editiert, zuletzt von Dodo ()


  • Ach, da war es wieder, mein Lieblingsthema beim Programmieren! Es fasziniert mich immer wieder, mit welcher Verbissenheit an Dogmen festgehalten wird, ohne den Sinn zu hinterfragen! :wallbash: :mrgreen: :zwink:
    Es zeugt immer von guter Programmierung, einen Code so einfach und überschaubar wie möglich zu halten! Wenn dabei ein GOTO Sinn macht, macht er halt Sinn! :genau:


    Na ja jedem das seine und manche Sachen muß man ja auch nicht kommentieren!!

  • Hallo,


    ein Goto ist das simpelste Konstrukt, in einer Hochsprache.
    Damit kann man fast alles machen, genau das ist das Problem.


    Fuer einen Aussprung aus einer Prozedur aber vollkommen OK.


    Gruss Stefan


  • Nö.


    Wie schon gesagt jedem das seine.


    In diesem Sinne bis dann...


    Ohne das Thema allzu breit treten zu wollen: Hast Du denn eine Ahnung, WARUM der GOTO Befehl immer als "böse" hingestellt wird? :denk: :kopfkratz:
    Da gibt es einen klar definierten "historischen" Hintergrund dazu. Den kennt heute nur fast keiner mehr! Aber wie gesagt, das Dogma hält sich!
    Das ist wie "Freitag der 13te"! Jeder "weiss", dass das ein "Unglückstag" ist, aber keiner weiss, warum! :wallbash:


    Aber wie Du schon sagst: Jedem das seine! :lol::beerchug: :liebe024:

    Gruss<br /><br />Dodo


  • Also meint ihr nicht das es eigentlich völlig egal ist und es hier etwas zu weit abdriftet?


    Abdriften ja, egal nein. Ich persönlich versuche "GOTO"-Befehle auch zu vermeiden. Aber wenn es sein muss dann muss es sein. Oder wenn´s einfacher ist als alles Andere das da möglich wäre.



    Ich klinke mich damit jetzt hier bei dieser Diskusion aus....


    Gruß...


    Na aber den historischen Hintergrund wirst du dem Fragensteller und den anderen Teilnehmern an dieser Runde doch noch erklären.
    Ich zum Beispiel kenne ihn nicht.

    Gruß Roland


    Wie poste ich falsch?

    Nachdem ich die Suche und die FAQ erfolgreich ignoriert habe, erstelle ich das gleiche Thema in mehreren Unterforen, benutze einen sehr kreativen Titel wie "Hilfe", am Besten noch mit mehreren Ausrufezeichen, und veröffentliche einen so eindeutigen Text, dass sich jeder etwas Anderes darunter vorstellt.


    Ich bin wie ich bin. Die Einen kennen mich, die Anderen können mich.

    Konrad Adenauer

    Einmal editiert, zuletzt von Roboman ()


  • Wenn ich mich mal einmischen darf, ich glaube mit "historischem Hintergrund" meint Ihr diesen Herrn hier:


    http://en.wikipedia.org/wiki/Edsger_W._Dijkstra



    Cool! In Wikipedia gibt's nen eigenen Artikel über den GOTO Befehl! Und es gibt sogar Abhandlungen, warum man ihn nicht benutzen soll!
    Muss ich mal lesen, wenn ich Zeit hab!


    Die Abhandlungs stammt übrigens aus dem Jahr 1968, somit hab ich ne tolle Überleitung zu dem Thema "historsicher Hintergrund": Falls es jemanden interessiert:


    Früher (als z.B. Twix noch Raider hiess und Telefone noch Kabel hatten) wurden Programme mit Zeilennummern geschrieben, aber anders, als das z.B. der KUKA heute noch macht.
    Damals "zeigten" GOTO Befehle auf Zeilennummern, also z.B.


    50 MAch irgendwas
    60 IF .... THEN GOTO 100
    ...



    100 Mach sonstwas
    ...


    Wollte man jetzt eine Zeile einfügen, konnte (musste nicht unbedinbgt) es vorkommen, dass sich die Zeilennummern veränderten. Damit "zeigte" der Sprungbefehl an ein falsches Sprungziel und schon war das Programm versaut.


    Manchmal musste man mit GOTOs "hin- und her" springen, sozusagen von "oben nach unten" und wieder von unten nach oben". Da war es mit der natürlich mit der Übersicht schnell vorbei! In manchen Sprachen gab es aber einfach keine Unterporgramme, oder eine IF Then Anweisdung konnte nur einen Befehl haben, da ging das nicht anders!!
    Als dann struktrierte Programmiersprachen aufkamen, war natürlich der bisherige Programmierstil veraltet und man hat Programme ganz anders aufgebaut. In dieser Zeit entstand das Dogma "GOTO=Böse".


    Heute verwendet man natürlich Sprungmarken, die sich nicht "verschieben" können, wie früher die Zeilennummern.
    Und wenn man jetzt den GOTO gezielt einsetzt, um z.B. aus ner Schleife rauszuspringen oder einen Teil eines Programmes zu überspringen sehe ich nicht, was daran so schlimm sein soll.


    Ich hab früher Assembler programmiert und programmier heute noch viel SPS in AWL (ob das gut oder schlecht ist,wird auch gerne in anderen Foren diskutiert, auch ein Dogma, manche Kunden verlangen es halt einfach), da sind Sprungbefehle einer der Hauptbestandteile der Programmierung.


    Ich programmier auch Hochsprachen, da würd ich' auch nie GOTO verwenden, aber gerade bei Robbis macht's m.E. ab und zu Sinn. Einerseits vermeidet es Probleme (Ich sag nur "Kontrollstruktur nächster Satz" :wallbash: ) und andererseits ist es für einen Bediener, der nicht so viel mit Programmierung zu tun hat, manchmal einfacher nachzuvollziehen.



    Fazit: Wer will, kann GOTO vermeiden, wer's nicht tut, ist nicht automatisch ein schlechter Programmierer! :dance2:



    Jetzt geb ich Ruhe zu dem Thema, es hat nämlich wirklich nix mit der eigentlichen Frage zu tun! Ich finde nur solche Pauschalisierungen und Dogmen nervig!


    Jetzt haben wir uns aber alle wieder lieb! :blumen: :blumen: :blumen: :blumen: :peace:

    P.S.: Wie kann ich nen Smiley basteln, der ein "GOTO" Schild hochhält ? :huh: :kopfkratz: :denk: :zwink: :angel: :angel:



    :backtotopic:

    Gruss<br /><br />Dodo

Erstelle ein Benutzerkonto oder melde dich an um zu kommentieren

Du musst ein Benutzerkonto haben um einen Kommentar hinterlassen zu können

Benutzerkonto erstellen
Neues Benutzerkonto für unsere Community erstellen. Geht einfach!
Neues Benutzerkonto erstellen
Anmelden
Du hast bereits ein Benutzerkonto? Melde dich hier an.
Jetzt anmelden