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

Seite 2 von 2 ErsteErste 12
Ergebnis 11 bis 19 von 19

Thema: Flanke in SCL

  1. #11
    Registriert seit
    22.11.2006
    Ort
    CH
    Beiträge
    3.636
    Danke
    786
    Erhielt 654 Danke für 497 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Nunja wenn Bedingung_1 und 2 erfüllt sein müssen wenn der flankenpuls kommt um Kette 8 zu wählen. Dann ist das IF grundsätzlich mal richtig.
    PN/DP hat natürlich recht dass sofort im nächsten Zyklus wieder Kette 13 angewählt wird. Die Frage ist. Reagierst du auf den ein Zyklus anstehenden Kette 8 und führst dann etwas aus oder brichst du sofort wieder ab wenn Kette 13 wieder angewählt wurde.

    Das kommt halt ganz drauf an was man machen will.

    Du könntest auf das Else verzichten und stattdessenw wieder einen Elsif draus machen und weitere Bedingungen an Kette13 knüpfen. z.B. einen Puls der die Endlage bestätigt und eine weitere Kette anfährt.

    Sowas ginge z.B.
    Code:
    IF ZylinderZu AND M_wechsel THEN
        Kette := 8; // Zylinder auffahren
    ELSIF ZylinderOffen AND M_wechsel THEN
        Kette := 9; // Zylinder zufahren
    ELSIF ZylinderStoppenManuell THEN
        Kette := 12; // Zylinder stoppen
    END_IF;
    So kannst du mit dem Puls z.B. den Zylinder immer in die Gegenrichtung fahren lassen und zwar nur wenn er aus dem Endanschlag fahren muss.

    Weiter Unten kannst du z.B. den Zylinder Stoppen wenn er die Endanschläge erreicht.

    Code:
    IF Kette = 8 AND ZylinderOffen THEN    
        Kette := 12; // Zylinder stoppen
    END_IF;
    Jetzt kannst du noch die Zeit des anstehenden Fahrbefehls auswerten an einem TON und einen Alarm auslösen wenn er zu lange ansteht.

    mfG René

  2. #12
    Avatar von spirit
    spirit ist offline Erfahrener Benutzer
    Themenstarter
    Registriert seit
    12.09.2012
    Beiträge
    961
    Danke
    183
    Erhielt 23 Danke für 22 Beiträge

    Standard

    Zitat Zitat von vollmi Beitrag anzeigen
    Nunja wenn Bedingung_1 und 2 erfüllt sein müssen wenn der flankenpuls kommt um Kette 8 zu wählen. Dann ist das IF grundsätzlich mal richtig.
    PN/DP hat natürlich recht dass sofort im nächsten Zyklus wieder Kette 13 angewählt wird. Die Frage ist. Reagierst du auf den ein Zyklus anstehenden Kette 8 und führst dann etwas aus oder brichst du sofort wieder ab wenn Kette 13 wieder angewählt wurde.


    mfG René
    Danke vollmi,

    bin hier jetzt echt überfordert ...

    Wie schon geschrieben soll in Schritt 6 ein Fahrbefehl eines Zylinders ausgelöst werden. Dieser löst (im positiven) Fall während des Fahrens einen Wechsel an einer LS aus.

    In den Schritt 7 wird gesprungen, wenn der INI für die AS des Zylinders erreicht wurde - und meine Idee war nun, in Schritt 7 (neben weiteren Bedingungen) ebenfalls zu prüfen, ob der Zylinder einen Flankenwechsel ausgelöst hat.

    Wenn ja, dann soll in den Schritt 8 gesprungen werden und wenn nicht, dann muss die gesamte Anlage stehen bleiben und eine Meldung ausgegeben werden. Also Sprung in Schritt 0 & Meldung.

    Wie könnte ich das dann in Schritt 7 besser realisieren, als ich es in meinem Eröffnungsthread vorgenommen habe?

    Vielen Dank für eine bessere Idee ...
    LG
    spirit

  3. #13
    Avatar von spirit
    spirit ist offline Erfahrener Benutzer
    Themenstarter
    Registriert seit
    12.09.2012
    Beiträge
    961
    Danke
    183
    Erhielt 23 Danke für 22 Beiträge

    Standard

    Zitat Zitat von PN/DP Beitrag anzeigen
    Vorsicht! Verknüpfen von Signalflanken und weiteren Bedingungen im selben Schritt bringen die SK zum Festhängen in dem Schritt, wenn die Signalflanke schon kommen kann, bevor die anderen Bedingungen vollständig erfüllt sind.
    Harald
    Aber da könnte es doch helfen, wenn ich #M_Wechsel setze und wenn in den Schritt 7 gesprungen wurde, wieder rücksetze. Somit wird das Signal der Flanke gespeichert, bis die restlichen zwei Bedingungen erfüllt sind ... Ist so ein Vorgehen ungewöhnlich?
    LG
    spirit

  4. #14
    Registriert seit
    22.11.2006
    Ort
    CH
    Beiträge
    3.636
    Danke
    786
    Erhielt 654 Danke für 497 Beiträge

    Standard

    Weil ich halt mit den Abkürzungen nicht so zu rande komme aber jetzt mal ohne funktionsprüfung. Das könnte man etwa so angehen.

    Code:
    #M_Wechsel := #LS AND NOT #FM;
    #FM := #LS; // Flankenwechsel wird immer detektiert. Ob jemand drauf reagieren soll muss der Schritt entscheiden.
    
    
    CASE #Schritt OF
        0:
            #init := 1;
            #fahren := false;
            // Scheisse fehler Passiert irgendwas machen
        6:
            #fahren := NOT #INI_für_AS_Erreicht; // Was immer das bedeutet
            IF #M_Wechsel THEN
                #Flanke_Beim_Fahren := true; // Flanke wird also in Schritt 6 gespeichert
            END_IF;
            IF #INI_für_AS_Erreicht THEN
                #Schritt := 7;
            END_IF;
        7:
            IF #Flanke_Beim_Fahren THEN
                // ich hab ne Flanke detektiert tu irgendwas
                // Flanke wird also nur in Schritt 7 verarbeitet
                #Schritt := 8;
                #Flanke_Beim_Fahren := false; // Da Flanke erkannt und irgendwas getan Flankenspeicher zurücksetzen
            ELSE
                #Schritt := 0;
                // irgendwas hat die LS nicht in Schritt 6 ausgelöst
                // Ini für AS wurde aber erreicht
            END_IF;
        8:
            // Flanke detektiert und in Schritt 8 Versetzt
    END_CASE;
    
    
    #Schrittueberwach(IN:=#Schritt = 6,
                      PT:=t#10s);
    IF #Schrittueberwach.Q THEN // #Schritt 6 hat zu lange gebraucht. INI für AS wurde nicht erreicht
        #Schritt := 0;
    END_IF;

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

    spirit (28.04.2016)

  6. #15
    Avatar von spirit
    spirit ist offline Erfahrener Benutzer
    Themenstarter
    Registriert seit
    12.09.2012
    Beiträge
    961
    Danke
    183
    Erhielt 23 Danke für 22 Beiträge

    Standard

    Zitat Zitat von vollmi Beitrag anzeigen
    Code:
    CASE #Schritt OF
    
    ...
        
        7:
            IF #Flanke_Beim_Fahren THEN
                // ich hab ne Flanke detektiert tu irgendwas
                // Flanke wird also nur in Schritt 7 verarbeitet
                #Schritt := 8;
                #Flanke_Beim_Fahren := false; // Da Flanke erkannt und irgendwas getan Flankenspeicher zurücksetzen
            ELSE
                #Schritt := 0;
                // irgendwas hat die LS nicht in Schritt 6 ausgelöst
                // Ini für AS wurde aber erreicht
            END_IF;
        8:
            // Flanke detektiert und in Schritt 8 Versetzt
    END_CASE;
    Lieben Dank für deine Bemühungen mit mir, René!

    Sollte man in deinem Beispiel in dem ELSE-Zweig nicht auch

    #Flanke_Beim_Fahren := false;

    programmieren - also wieder rücksetzen?
    LG
    spirit

  7. #16
    Registriert seit
    22.11.2006
    Ort
    CH
    Beiträge
    3.636
    Danke
    786
    Erhielt 654 Danke für 497 Beiträge

    Standard

    Zitat Zitat von spirit Beitrag anzeigen
    Lieben Dank für deine Bemühungen mit mir, René!

    Sollte man in deinem Beispiel in dem ELSE-Zweig nicht auch

    #Flanke_Beim_Fahren := false;

    programmieren - also wieder rücksetzen?
    Wozu? Der Else zweig wird nur ausgeführt wenn Flanke_Beim_Fahren eh nicht da ist. Wozu was zurücksetzen das nicht gesetzt ist?

    mfG René

  8. #17
    Avatar von spirit
    spirit ist offline Erfahrener Benutzer
    Themenstarter
    Registriert seit
    12.09.2012
    Beiträge
    961
    Danke
    183
    Erhielt 23 Danke für 22 Beiträge

    Standard

    Zitat Zitat von vollmi Beitrag anzeigen
    Wozu? Der Else zweig wird nur ausgeführt wenn Flanke_Beim_Fahren eh nicht da ist. Wozu was zurücksetzen das nicht gesetzt ist?

    mfG René
    Ja stimmt, wie dumm von mir!


    ... versuche das jetzt mal in meinem Programm umzusetzen.


    Eines noch: Meine Überlegung aus Beitrag #13 schon das Signal #M_Wechsel zu speichern ist eher eine schlechte Option, oder?


    Lieben Dank!
    LG
    spirit

  9. #18
    Registriert seit
    22.06.2009
    Ort
    Sassnitz
    Beiträge
    11.290
    Danke
    932
    Erhielt 3.320 Danke für 2.682 Beiträge

    Standard

    Du mußt Dich entscheiden, ob #M_Wechsel einen Zyklus lang anzeigt, daß eine steigende Flanke der Lichtschranke stattgefunden hat (wie die Zuweisung und der Name suggeriert), oder ob Du schon vorher #M_Wechsel rücksetzt und die Programmteile nach dem Rücksetzen die Flanke nie mitkriegen werden. Späteres Rücksetzen eines vorher woanders per = zugewiesenen Signals ist aber ein sehr schlechter Stil. Da leite besser aus dem #M_Wechsel eine zweite Variable ab, mit der Du dann den Flankenwechsel kürzer oder länger als einen Zyklus lang anzeigen/speichern kannst.

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

    FAQ: Linkliste SIMATIC-Kommunikation über Ethernet

  10. #19
    Avatar von spirit
    spirit ist offline Erfahrener Benutzer
    Themenstarter
    Registriert seit
    12.09.2012
    Beiträge
    961
    Danke
    183
    Erhielt 23 Danke für 22 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Zitat Zitat von PN/DP Beitrag anzeigen
    Da leite besser aus dem #M_Wechsel eine zweite Variable ab, mit der Du dann den Flankenwechsel kürzer oder länger als einen Zyklus lang anzeigen/speichern kannst.
    Harald
    Denkst du hier beispielsweise an eine Flanke auf eine Abfallverzögerung (Zeitglied)?
    LG
    spirit

Ähnliche Themen

  1. Flanke SCL
    Von nutellahase im Forum Simatic
    Antworten: 9
    Letzter Beitrag: 16.10.2011, 17:20
  2. Positive Flanke in SCL
    Von onikos im Forum Simatic
    Antworten: 7
    Letzter Beitrag: 14.07.2010, 21:39
  3. SCL- Flanke
    Von hans55 im Forum Simatic
    Antworten: 7
    Letzter Beitrag: 07.02.2008, 20:28
  4. Mit Flanke einen Timer starten in SCL?
    Von hans55 im Forum Simatic
    Antworten: 7
    Letzter Beitrag: 15.01.2008, 21:41
  5. Mit SCL Flanke 0->1 abfragen
    Von Anonymous im Forum Simatic
    Antworten: 3
    Letzter Beitrag: 21.06.2005, 18:07

Lesezeichen

Berechtigungen

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