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

Seite 2 von 3 ErsteErste 123 LetzteLetzte
Ergebnis 11 bis 20 von 24

Thema: Zyklus-Verständnisproblem in SCL

  1. #11
    anne ist offline Erfahrener Benutzer
    Themenstarter
    Registriert seit
    01.02.2010
    Beiträge
    345
    Danke
    0
    Erhielt 2 Danke für 2 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Hi ihr,
    also es handelt sich um ein Programm für eine Paket-Auslieferungsstation. In den einzelnen Schritten stehen natürlich noch Anweisungen für die Ausgänge der Zylinder und Schleusen entlang dem Fließband...

    Wird nur Status_2 verwendet, so ist mir die Funktionalität nun soweit klar!


    Aber im realen Programm gibt es ja auch noch Status_3, usw.

    Beispiel:

    Code:
    CASE Status_2 OF      
    
    0:  IF ("Eingang_1" = true) THEN
            Status_2 := 2;  
        END_IF;
    
    
    2:  IF ("Eingang_2" = true) THEN
            Status_2 := 3;  
        END_IF;                                                 
    
    
    3:  IF ("Eingang_3" = true) THEN
            Status_2 := 4;  
        END_IF;
          
    END_CASE ;
    
    
    
    CASE Status_3 OF 
    
    0:  IF ("Eingang_7" = true) THEN
            Status_3 := 3;  
        END_IF;
    
    
    3:  IF ("Eingang_5" = true) THEN
            Status_3 := 5;  
        END_IF;                                                 
    
    
    5:  IF ("Eingang_6" = true) THEN
            Status_3 := 0;  
        END_IF;
          
    END_CASE ;
    Frage:

    Angenommen es sind "Eingang_1" = true und "Eingang_7" = true, so würde ja im ersten Zyklus Status_2 der Wert 2 und Status_3 der Wert 3 zugewiesen werden.

    Was passiert nun aber im nächsten Zyklus?

    Springt das Programm jetzt zuerst zu Schritt 2 (in Status_2) und anschließend zu Schritt 3 (in Status_3)?

    Vielen Dank!
    Grüße
    anne

  2. #12
    Registriert seit
    29.07.2008
    Ort
    Stuttgart
    Beiträge
    232
    Danke
    64
    Erhielt 25 Danke für 25 Beiträge

    Standard

    Hi,
    die beiden "CASEs" sind getrennt voneinander zu betrachten, da der eine mit Status_2 der andere mit Status_3 arbeitet.
    Für mich sieht das nach 2 Schrittketten aus die parallel abgearbeitet werden.
    Wenn die Eingänge von Status_2 nacheinander kommen, dann wird die Schrittkette abgearbeitet. Gleichzeitig kann die 2.Schrittkette einfach "stehen" weil z.B. der Eingang_7 nicht kommt.

  3. #13
    Registriert seit
    18.01.2011
    Ort
    Mainz
    Beiträge
    42
    Danke
    0
    Erhielt 4 Danke für 4 Beiträge

    Standard

    Wie Günni schon sagte, jede CASE Anweisung ist da separat zu betrachten. Es wird in jedem Zyklus der Wert der Variable geprüft (in deinem Fall Status_2 für die erste CASE-Anweisung und nachdem diese komplett abgearbeitet wurde Status_3 für die zweite CASE-Anweisung). Je nach dem welchen Wert die Variable hat, wird der entsprechende Programmzweig abgearbeitet. Dieser Programmzweig wird nach der Abarbeitung verlassen (es werden in diesem Zyklus keine anderen Programmzweige dieser CASE Anweisung ausgeführt) und die CASE-Anweisung im nächsten Zyklus erneut aufgerufen.

    In deinem Beispiel bedeutet das (angenommen Status_2 und Status_3 sind beim Programmstart wirklich Null und nicht mit einem Startwert definiert):
    In der ersten CASE-Anweisung wird der Programmzweig für Status_2 = 0
    Code:
    IF ("Eingang_1" = true) THEN
        Status_2 := 2;  
    END_IF;
    so lange jeden Zyklus ausgeführt, bis Eingang_1 TRUE wird und dadurch Status_2 auf 2 gesetzt wird. Wenn dieser Fall eingetreten ist, wird im nächsten SPS Zyklus der Programmzweig für Status_2 = 2 abgearbeitet, also:
    Code:
    IF ("Eingang_2" = true) THEN
        Status_2 := 3;  
    END_IF;
    Dieser wird wieder so lange abgearbeitet, bis irgendwann Eingang_2 TRUE wird. Usw.. In der zweiten CASE-Anweisung ist das natürlich analog

    Zurück zur Frage
    Zitat Zitat von anne Beitrag anzeigen
    Was passiert nun aber im nächsten Zyklus?
    In der ersten CASE Anweisung wird der Programmzweig für Status_2 = 2 und in der zweiten CASE Anweisung der Programmzweig für Status_3 = 3 abgearbeitet..

  4. #14
    anne ist offline Erfahrener Benutzer
    Themenstarter
    Registriert seit
    01.02.2010
    Beiträge
    345
    Danke
    0
    Erhielt 2 Danke für 2 Beiträge

    Standard

    Für mich sieht das nach 2 Schrittketten aus die parallel abgearbeitet werden...
    Vielen Dank für eure Mühe mit mir...


    Parallel heißt aber trotzdem, dass im ersten Zyklus zunächst

    1) in der ersten CASE-Anweisung der Programmzweig für Status_2 = 0

    Code:
        
    0:  IF ("Eingang_1" = true) THEN
            Status_2 := 2;  
        END_IF;
    ausgeführt wird und dann gleich danach

    2) in der zweiten CASE-Anweisung der Programmzweig für Status_3 = 0

    Code:
    0:  IF ("Eingang_7" = true) THEN
            Status_3 := 3;  
        END_IF;
    ausgeführt wird, oder?

    Das geht dann auch in den nächsten Zyklen so weiter, bis entweder Eingang_1 TRUE UND/ODER Eingang_2 TRUE wird...

    In den darauffolgenden Zyklen wird dann, entsprechend dem Ergebnis der beiden Eingänge, zu den entsprechenden Schritten (erst immer im Case für Status_2 und dann im Case für Status_3) "gesprungen"...

    Stimmt das so?
    Grüße
    anne

  5. #15
    Registriert seit
    18.01.2011
    Ort
    Mainz
    Beiträge
    42
    Danke
    0
    Erhielt 4 Danke für 4 Beiträge

    Standard

    Zitat Zitat von anne Beitrag anzeigen
    Parallel heißt aber trotzdem, dass im ersten Zyklus zunächst

    1) in der ersten CASE-Anweisung der Programmzweig für Status_2 = 0
    ausgeführt wird und dann gleich danach

    2) in der zweiten CASE-Anweisung der Programmzweig für Status_3 = 0
    ausgeführt wird, oder?
    Ja, genau so ist es.
    Zitat Zitat von anne Beitrag anzeigen
    Das geht dann auch in den nächsten Zyklen so weiter, bis entweder Eingang_1 TRUE UND/ODER Eingang_2 TRUE wird...
    Falls du Eingang_1 und/oder Eingang_7 meinst: Ja. Denn dann werden die Variablen Status_2 bzw. Status_3 geändert die für die jeweiligen CASE-Sprünge verantwortlich sind.
    Zitat Zitat von anne Beitrag anzeigen
    In den darauffolgenden Zyklen wird dann, entsprechend dem Ergebnis der beiden Eingänge, zu den entsprechenden Schritten (erst immer im Case für Status_2 und dann im Case für Status_3) "gesprungen"...
    Stimmt das so?
    Jein, es wird nicht in Abhängigkeit der Eingänge "gesprungen" sondern in Abhängigkeit des aktuellen Wertes der Variablen Status_2 bzw. Status_3

  6. #16
    anne ist offline Erfahrener Benutzer
    Themenstarter
    Registriert seit
    01.02.2010
    Beiträge
    345
    Danke
    0
    Erhielt 2 Danke für 2 Beiträge

    Standard

    Vielen Dank für deine Unterstützung "mainzelmann"!

    Falls du Eingang_1 und/oder Eingang_7 meinst: Ja. Denn dann werden die Variablen Status_2 bzw. Status_3 geändert die für die jeweiligen CASE-Sprünge verantwortlich sind.
    Ja genau, meinte Eingang_1 und/oder Eingang_7.

    Jein, es wird nicht in Abhängigkeit der Eingänge "gesprungen" sondern in Abhängigkeit des aktuellen Wertes der Variablen Status_2 bzw. Status_3

    Ja, stimmt - aber ich wollte damit eigentlich ausdrücken, dass zyklusbedingt (von oben nach unten) immer erst
    Case Status_2 und erst danach Case Status_3 "abgescannt" wird; und zwar unabhängig von den aktuellen Werten der Variablen Status_2 bzw. Status_3.


    Stimmt doch, oder?
    Grüße
    anne

  7. #17
    Registriert seit
    18.01.2011
    Ort
    Mainz
    Beiträge
    42
    Danke
    0
    Erhielt 4 Danke für 4 Beiträge

    Standard

    Zitat Zitat von anne Beitrag anzeigen
    Stimmt doch, oder?
    Ja, ich glaub jetzt hast du es

  8. #18
    anne ist offline Erfahrener Benutzer
    Themenstarter
    Registriert seit
    01.02.2010
    Beiträge
    345
    Danke
    0
    Erhielt 2 Danke für 2 Beiträge

    Standard

    Zitat Zitat von mainzelmann Beitrag anzeigen
    Ja, ich glaub jetzt hast du es
    Na bei dem Lehrer...


    Aber eine Frage ist mir doch noch eingefallen:

    Es wird ja zyklusbedingt zuerst der Wert der Variable für Status_2 und anschließend für Status_3 überprüft und gespeichert. Diese Werte stehen ja dann im nächsten Zyklus wieder zur Verfügung...

    Werden diese Werte im Prozessabbild gespeichert oder sonst wo?

    Lieben Dank!
    Grüße
    anne

  9. #19
    Registriert seit
    22.03.2007
    Ort
    Detmold (im Lipperland)
    Beiträge
    11.716
    Danke
    398
    Erhielt 2.399 Danke für 1.999 Beiträge

    Standard

    naja ... eher da, wo die beiden Variablen landen.

    Hast du hier einen FB, dann sind die sehr wahrscheinlich im STAT-Bereich desselben deklariert und werden somit in dem Instanz-DB zu dem FB gesichert.
    Hast du einen FC so müßten es Variablen der IN_OUT-Schnittstelle sein, die dann wieder in globalen Variablen (z.B. in einem DB) landen.

    Gruß
    Larry

  10. #20
    anne ist offline Erfahrener Benutzer
    Themenstarter
    Registriert seit
    01.02.2010
    Beiträge
    345
    Danke
    0
    Erhielt 2 Danke für 2 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Hi LL,

    das Programm ist in einem FB mit Instanz-DB angelegt.

    Wir "reden" aber schon über die einzelnen Werte, die in jedem Zyklus Status_2, bzw. Status_3 zugewiesen und gespeichert werden, oder?
    Grüße
    anne

Ähnliche Themen

  1. Verständnisproblem bei DB aufruf im FC
    Von S7online im Forum Simatic
    Antworten: 17
    Letzter Beitrag: 13.02.2017, 13:57
  2. Verständnisproblem S7 400 H FH usw.
    Von Bender25 im Forum Simatic
    Antworten: 6
    Letzter Beitrag: 09.06.2015, 21:24
  3. AWL Verständnisproblem
    Von invoices im Forum Simatic
    Antworten: 12
    Letzter Beitrag: 12.08.2010, 11:35
  4. Verständnisproblem mit pointer ?
    Von Waelder im Forum Simatic
    Antworten: 1
    Letzter Beitrag: 03.08.2009, 09:02
  5. Profibus-DP-Zyklus mit OB1-Zyklus synchronisieren?
    Von Supervisor im Forum Simatic
    Antworten: 2
    Letzter Beitrag: 08.06.2006, 13:09

Lesezeichen

Berechtigungen

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