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

Seite 1 von 2 12 LetzteLetzte
Ergebnis 1 bis 10 von 18

Thema: Lesen dieses SCL Programmteils

  1. #1
    Registriert seit
    16.08.2012
    Beiträge
    25
    Danke
    14
    Erhielt 0 Danke für 0 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Hallo, ich habe 1-2 Fragen:

    Wie lese ich das untenstehende Programm?
    Deute ich das richtig wenn ich sage:

    U za.pospal41=1
    UN esteine41
    U epalbe41

    L za.pakofo41
    T za.abbe41
    usw
    usw
    usw


    ODER:

    O za.pospal41=1
    ON esteine41
    O epalbe41

    L za.pakofo41
    T za.abbe41
    usw
    usw
    usw

    Mein Problem ist es das ich nicht genau weiß ob ich die aufeinanderfolgenden IF-Anweisungen als ODER bzw UND Verknüpfung betrachten kann.
    Oder kann man das so Pauschal gar nicht sagen ?

    Frage 2:

    Ist das richtig:
    Wenn die erste IF Anweisung nicht erfüllt wird, dann ist EndIf.
    Wenn die erste erfüllt wird aber die zweite nicht, dann ist EndIf.
    wird die erste und die zweite erfüllt aber die dritte nicht, dann (aber auch nur dann) ist ELSE und der Teil nach ELSE wird ausgeführt?
    werden alle 3 Ifs erfüllt werden die Befehle nach dem dritten IF ausgeführt.

    ist das korrekt?

    Danke schon mal!

    pal41:
    IF sm(p:=za.pospal41 ,s:=za.stom41) = 1 THEN //wenn Linie B Abgabepos. Steine ist frei(DB1.DBW640) dann
    IF aba (p:=esteine41 ,s:=za.stom41) = aus THEN //wenn E16.0(esteine41) ist 0 dann
    IF abe (p:=epalbe41 , s:=za.stom41) = ein THEN //wenn E16.2(epalbe41) ist 1 dann
    za.abbe41:=za.pakfo41; //setze Linie B Abgabe(DB1.DBW652)= Kette B Palette vorfahren Linie B(DB1.DBW650)
    za.start41:=1; //setze Kette B Startsignal an Paketierung(DB1.DBW644)auf 1
    za.frei41:=0; //setze Freigabe von Paketierung(DB1.DBW642)auf 0
    mstart_lb := aus; //setze M122.3 Linie B Start Fremdförderer MSK auf 0
    GOTO inf41; //nächster Schritt
    ELSE //ansonsten
    za.abbe41:=za.pakfo41; //setze Linie B Abgabe(DB1.DBW652)= Kette B Palette vorfahren Linie B(DB1.DBW650)
    za.pakfo41:=0 ; //setze Kette B Palette vorfahren Linie B(DB1.DBW650)auf 0
    za.frei41:=0; //setze Freigabe von Paketierung(DB1.DBW642)auf 0
    GOTO inf41; //nächster Schritt
    END_IF;
    END_IF;
    END_IF;
    Zitieren Zitieren Lesen dieses SCL Programmteils  

  2. #2
    Registriert seit
    06.10.2009
    Ort
    NRW
    Beiträge
    1.572
    Danke
    63
    Erhielt 259 Danke für 219 Beiträge

    Standard

    Code:
    IF sm(p:=za.pospal41 ,s:=za.stom41) = 1 THEN            //wenn Linie B Abgabepos. Steine ist frei(DB1.DBW640) dann
            IF aba (p:=esteine41 ,s:=za.stom41) = aus THEN      //wenn E16.0(esteine41) ist 0 dann
                IF abe (p:=epalbe41 , s:=za.stom41) = ein THEN  //wenn E16.2(epalbe41) ist 1 dann
                    za.abbe41:=za.pakfo41;                      //setze  Linie B Abgabe(DB1.DBW652)= Kette B Palette vorfahren Linie  B(DB1.DBW650)
                    za.start41:=1;             //setze Kette B Startsignal an Paketierung(DB1.DBW644)auf 1
                    za.frei41:=0;              //setze Freigabe von Paketierung(DB1.DBW642)auf 0
                    mstart_lb := aus;          //setze M122.3 Linie B Start Fremdförderer MSK auf 0
                    GOTO inf41;                //nächster Schritt
            ELSE                               //ansonsten
                    za.abbe41:=za.pakfo41;     //setze Linie B Abgabe(DB1.DBW652)= Kette B Palette vorfahren Linie B(DB1.DBW650)
                    za.pakfo41:=0 ;            //setze Kette B Palette vorfahren Linie B(DB1.DBW650)auf 0
                    za.frei41:=0;              //setze Freigabe von Paketierung(DB1.DBW642)auf 0
                    GOTO inf41;                //nächster Schritt
                END_IF;
            END_IF;
        END_IF;
    Code bitte immer mit dem #-Symbol einfügen.

    Zu Frage 1: Zuerst 2x UND, dann ODER. So wie Du es in Frage 2 schilderst

    Zu Frage 2: Das ist so richtig.
    Meine Motivation läuft nackig mit einem Cocktail über eine Wiese.

  3. #3
    Registriert seit
    27.05.2004
    Ort
    Thüringen/Berlin
    Beiträge
    12.222
    Danke
    533
    Erhielt 2.698 Danke für 1.950 Beiträge

    Standard

    So sieht das mit Einrückung aus
    Code:
    IF sm(p:=za.pospal41 ,s:=za.stom41) = 1 THEN //wenn Linie B Abgabepos. Steine ist frei(DB1.DBW640) dann
       IF aba (p:=esteine41 ,s:=za.stom41) = aus THEN //wenn E16.0(esteine41) ist 0 dann
          IF abe (p:=epalbe41 , s:=za.stom41) = ein THEN //wenn E16.2(epalbe41) ist 1 dann
             za.abbe41:=za.pakfo41; //setze Linie B Abgabe(DB1.DBW652)= Kette B Palette vorfahren Linie B(DB1.DBW650)
             za.start41:=1; //setze Kette B Startsignal an Paketierung(DB1.DBW644)auf 1
             za.frei41:=0; //setze Freigabe von Paketierung(DB1.DBW642)auf 0
             mstart_lb := aus; //setze M122.3 Linie B Start Fremdförderer MSK auf 0
             GOTO inf41; //nächster Schritt
          ELSE //ansonsten
             za.abbe41:=za.pakfo41; //setze Linie B Abgabe(DB1.DBW652)= Kette B Palette vorfahren Linie B(DB1.DBW650)
             za.pakfo41:=0 ; //setze Kette B Palette vorfahren Linie B(DB1.DBW650)auf 0
             za.frei41:=0; //setze Freigabe von Paketierung(DB1.DBW642)auf 0
             GOTO inf41; //nächster Schritt
          END_IF;
       END_IF;
    END_IF;
    Daraus kann man dann viel besser sehen, dass

    1. alle 3 IF-Abfragen erfüllt sein müssen (alle UND), damit der rote Teil abgearbeitet wird.

    2. die ersten 2 If-Abfragen erfüllt sein müssen und die 3. nicht erfüllt sein darf, damit der blaue Teilabgearbeitet wird.

    Zusammengenommen:

    IF1 UND IF2 UND IF3 --> roter Teil
    IF1 UND IF UND NICHT IF3 --> blauer Teil

    PS. GOTO zu verwenden ist m.E. kein guter Programmierstil.
    Geändert von Ralle (19.02.2013 um 15:29 Uhr)
    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

  4. #4
    Registriert seit
    17.07.2009
    Ort
    Am Rande der Ostalb
    Beiträge
    5.480
    Danke
    1.141
    Erhielt 1.242 Danke für 973 Beiträge

    Standard

    Verschachtelte IF-Amweisungen entsprechen Und-Verknupfungen.
    Insofern bist du mit deiner 1. Variante wohl richtig.
    Du musst dir aber auch noch die Funktionen "sm" "aba" und "abe" anschauen.
    Denn das Ergebnis dieser Funktionen besatimmt eigentlich das Ergebnis der IF-Abfragen.

    Deine Aussagen zu Frage 2 stimmen

    Aber ehrlich gesagt, ist der Code ein richtig gutes Beispiel wie SCL nicht aussehen soll!
    Üblich sind eigentlich Einrückungen im Code

    Code:
    pal41:
      IF sm(p:=za.pospal41 ,s:=za.stom41) = 1 THEN            //wenn Linie B Abgabepos. Steine ist frei(DB1.DBW640) dann
        IF aba (p:=esteine41 ,s:=za.stom41) = aus THEN      //wenn E16.0(esteine41) ist 0 dann
          IF abe (p:=epalbe41 , s:=za.stom41) = ein THEN  //wenn E16.2(epalbe41) ist 1 dann
            za.abbe41:=za.pakfo41;                      //setze  Linie B Abgabe(DB1.DBW652)= Kette B Palette vorfahren Linie  B(DB1.DBW650)
            za.start41:=1;             //setze Kette B Startsignal an Paketierung(DB1.DBW644)auf 1
            za.frei41:=0;              //setze Freigabe von Paketierung(DB1.DBW642)auf 0
            mstart_lb := aus;          //setze M122.3 Linie B Start Fremdförderer MSK auf 0
            GOTO inf41;                //nächster Schritt
          ELSE                               //ansonsten
            za.abbe41:=za.pakfo41;     //setze Linie B Abgabe(DB1.DBW652)= Kette B Palette vorfahren Linie B(DB1.DBW650)
            za.pakfo41:=0 ;            //setze Kette B Palette vorfahren Linie B(DB1.DBW650)auf 0
            za.frei41:=0;              //setze Freigabe von Paketierung(DB1.DBW642)auf 0
            GOTO inf41;                //nächster Schritt
          END_IF;
        END_IF;
      END_IF;
    Dann wird die Sache übersichtlicher
    Gruß
    Dieter
    Geändert von Blockmove (19.02.2013 um 15:29 Uhr)

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

    azza (19.02.2013)

  6. #5
    Registriert seit
    17.03.2011
    Ort
    im Wald
    Beiträge
    284
    Danke
    11
    Erhielt 36 Danke für 35 Beiträge

    Standard

    Hallo,

    eine Vergleich einer IF-Anweisung mit UND und ODER ist meines erachtens nicht pauschal möglich. Eine einzelne IF-Anweisung kann ja schon ein ODER und ein UND enhalten.

    Gruß

  7. Folgender Benutzer sagt Danke zu Voxe für den nützlichen Beitrag:

    azza (19.02.2013)

  8. #6
    Registriert seit
    17.07.2009
    Ort
    Am Rande der Ostalb
    Beiträge
    5.480
    Danke
    1.141
    Erhielt 1.242 Danke für 973 Beiträge

    Standard

    Zitat Zitat von Voxe Beitrag anzeigen
    Hallo,

    eine Vergleich einer IF-Anweisung mit UND und ODER ist meines erachtens nicht pauschal möglich. Eine einzelne IF-Anweisung kann ja schon ein ODER und ein UND enhalten.

    Gruß
    Doch natürlich ist das möglich. Du musst halt die komplette IF-Anweisung betrachen.
    Der Compiler macht auch nix anderes. Schau dir mal den AWL-Code eines SCL-Bausteins an.

    Gruß
    Dieter

  9. Folgender Benutzer sagt Danke zu Blockmove für den nützlichen Beitrag:

    azza (19.02.2013)

  10. #7
    azza ist offline Neuer Benutzer
    Themenstarter
    Registriert seit
    16.08.2012
    Beiträge
    25
    Danke
    14
    Erhielt 0 Danke für 0 Beiträge

    Standard

    Hallo,

    erstmal danke für eure Hilfe!

    Zu meiner Verteidigung wegen des Programms und dessen Struktur, Ausdrücke Art und Weise sei folgendes gesagt.

    Meine Aufgabe besteht darin es in FUP umzuschreiben da SCL nicht wirklich bei uns verwendet wird AUSSER in dieser Anlage. Diese Anlage wurde vor ca 7 Jahren geliefert so wie Ihr es hier seht (kleiner Teil). Ich denke wenn ich euch andere SCL Bausteine in kompletter Pracht zeige dann schlackert ihr mit den Ohren....falls einer es sehen will dann bitte anmailen . Das gesamte Programm ist meiner Meinung nach so was von kompliziert und undurchsichtig (eine Mischung aus SCL-AWL-FUP und KOP Bausteinen) geschrieben das eine Fehlersuche immer damit endet das man im SCL Baustein nicht mehr weiter weiß! Zumal wir alle keine SCL Cracks sind. Ich hatte mal son kleinen Siemens Crashkurs aber das richtige lesen bzw verstehen und lernen erfolgt halt jetzt erst.
    Für mich heißt das Step by Step einen kleinen Teil umzuschreiben, schauen was passiert und somit zu "wachsen" bis die dicken Brocken kommen, hehe

    DANKE

  11. #8
    azza ist offline Neuer Benutzer
    Themenstarter
    Registriert seit
    16.08.2012
    Beiträge
    25
    Danke
    14
    Erhielt 0 Danke für 0 Beiträge

    Standard

    Was meintet ihr mit Code #?

  12. #9
    Registriert seit
    27.05.2004
    Ort
    Thüringen/Berlin
    Beiträge
    12.222
    Danke
    533
    Erhielt 2.698 Danke für 1.950 Beiträge

    Standard

    Zitat Zitat von azza Beitrag anzeigen
    Was meintet ihr mit Code #?
    Wenn du einen neuen Beitrag mit Programmcode erstellst, kannst du im erweiterten Editor oben in der Zeile das Pragma # auswählen. Vorher den Programmiercode im Editor markieren, dann wird der Code im Forum richtig lesbar dargestellt.
    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

  13. Folgender Benutzer sagt Danke zu Ralle für den nützlichen Beitrag:

    azza (19.02.2013)

  14. #10
    Registriert seit
    15.01.2005
    Ort
    In der Mitte zwischen Bayreuth/Weiden
    Beiträge
    6.732
    Danke
    314
    Erhielt 1.520 Danke für 1.282 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Ob SCL jetzt bei dem Codeschnippsel das Mittel der Wahl ist, sei mal dahingestellt ...

    Aber das dein Programm lesbarer oder noch wichtiger nachvollziehbarer wird, nur weil du die SCL Konstruckte einzeln und händsich auf FUP übersetzt,
    kann ich mir irgendwie nicht vorstellen.
    Die Bedingung der 3 Ifs sind ja scheinbar auch noch Bausteinaufrufe, von "sm, aba, abe", düften wohl FC-Aufrufe sein, deren RET_VAL Wert damit ausgewertet wird ...

    Mfg
    Manuel
    Warum denn einfach, wenn man auch Siemens einsetzen kann!

    Wer die grundlegenden Freiheiten aufgibt, um vorübergehend ein wenig Sicherheit zu bekommen, verdient weder Freiheit noch Sicherheit (B. Franklin).

Ähnliche Themen

  1. SCL - Fehler, Bereichslängenfehler beim Lesen
    Von Limette im Forum Simatic
    Antworten: 9
    Letzter Beitrag: 20.04.2012, 07:27
  2. Wie heisst dieses Bauteil ?
    Von ToBo im Forum Elektronik
    Antworten: 5
    Letzter Beitrag: 11.11.2010, 07:47
  3. Antworten: 2
    Letzter Beitrag: 11.12.2009, 11:27
  4. Antworten: 4
    Letzter Beitrag: 01.09.2008, 12:45
  5. Antworten: 5
    Letzter Beitrag: 15.07.2008, 16:38

Lesezeichen

Berechtigungen

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