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

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

Thema: Ausgänge im Ausgangsbyte verriegeln

  1. #1
    Registriert seit
    21.10.2013
    Beiträge
    29
    Danke
    2
    Erhielt 1 Danke für 1 Beitrag

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Hallo Leute,

    ich habe beim TIA Portal V12 ein Problem wo ich nicht weiterkomme.
    Ich habe einen Teststand an dem 3 Zylinder angeschlossen werden mit Endschaltern Vorne und Hinten.
    Diese Zylinder werden über Taster angesteuert und fahren dann in die Endlage.
    Die Reienfolge in der die Zylinder angesteuert werden (auch gleichzeitig) ist unterschiedlich.
    Es soll so sein das der Bediener die Reihenfolge einmal aufnimmt, quasi die Zylinder über die Taster ansteuert und dann der Teststand den ablauf selbst wiederholt in einer endlosschleife.
    Ich habe einen entwurf in SCL, dieser funktioniert jedoch nicht einwandfrei.
    In der Aufnahme werden die Endschalter nicht berücksichtigt(Vor bleibt solange gesetzt bis der Zylinder zurück fahren soll),
    ich habe dann versucht bei der Wiedergabe der Kette die Zylinder zu verrigeln, dies funktioniert jedoch nicht so wie ich dachte, habt Ihr eine Idee?

    Code:
    Aufnahme:
    
    Aufnahme:
    
    IF "FlaÄnAufnPos" THEN                                                      //Aufnahme Betätigt
      "Ketten Zeit DB".Kettenart:=1;                                            //Festlegung das Tippenkette gespeichert ist
      "I":=0;                                                                   //I auf "0" Setzen 
      WHILE "I"<=100 DO                                                         //Schleife fürs löschen des Arrays
            "Ketten Zeit DB"."aArray Endlage"["I"]:=16#0;                          //Zeiten im Array löschen
            "Ketten Zeit DB"."Eingnge Endlage"["I"]:=16#0;                         //Ausgangswörter löschen
            "I":="I"+1;                                                         //Hochzählen von I
        END_WHILE;
        "I":=1;                                                                 //I auf "0" Setzen
      ELSE
        IF "FlaÄnAufnNeg" THEN                                                  //Aufnahme wurde gestoppt
          "Ketten Zeit DB"."Schrittzahl Endlage":="I";                          //Schrittzahl in den DB schreiben
        ELSE
       IF "Ketten Zeit DB"."Eingänge Aktuell"<>"Ketten Zeit DB"."Eingnge Endlage"["I"-1]OR "I"=0 THEN    //Änderung eines Endschalters oder I=0
         "Ketten Zeit DB"."Eingnge Endlage"["I"]:="Ketten Zeit DB"."Eingänge Aktuell";                   //Eingangsabbild in den DB schreiben 
          IF "I"=0 THEN                                                                                    //Wenn I=0  
          "Ketten Zeit DB"."aArray Endlage"["I"]:="AusgangsByte2";                                       //Grundlage Speichern
          END_IF;
        "I":="I"+1;                                                                                      //I Hochzählen
        ELSE
          "Ketten Zeit DB"."aArray Endlage"["I"]:="AusgangsByte2";                                        //Ausgangsbyte in Array speichern
          END_IF;
        END_IF;    
    END_IF;
    
    Widergabe der Aufnahme:
    
    IF "FlaÄnMerWied" THEN                                            //Wiedergabe Aktiviert
       "I":=1;                                                //I auf 0 setzen
    ELSE
       IF "Ketten Zeit DB"."Eingänge Aktuell" = "Ketten Zeit DB"."Eingnge Endlage"["I"] THEN        //Wenn der Aktuelle Endschalterzustand= Der im Array Gespeicherte Endschalterzustand
          IF "I"< "Ketten Zeit DB"."Schrittzahl Endlage"-1 THEN                                                //Wenn I<=der Gespeicherten Schrittzahl
             "I":="I"+1;                                                                                                           //Erhöhe I um 1
          ELSE
             "I":=1;                                                                                                                 // I auf 0 setzen (Endlasschleife)
          END_IF;
       END_IF;
          IF "Wiedergabe Merker" THEN                                                                                     //Wenn widergabe noch Aktiv
             "AusgangsByte2":="Ketten Zeit DB"."aArray Endlage"["I"];                    //Ausgangsbyte2 = der Platz im Array
          END_IF;
    END_IF;
    Software:
    TIA V12

    Hardware:
    S7 1200

    Vielen Dank für Eure Hilfe

    Frank
    Geändert von Frank_the_Tank (28.12.2013 um 19:46 Uhr)
    Zitieren Zitieren Ausgänge im Ausgangsbyte verriegeln  

  2. #2
    Registriert seit
    27.06.2009
    Ort
    am Nordharz
    Beiträge
    3.713
    Danke
    443
    Erhielt 914 Danke für 739 Beiträge

    Standard

    Bitte benutz' mal den Code-Button (#) in der 2. Icon-Reihe ganz links. Dann kann der Code auch entsprechend eingerückt werden, was ja so nicht funktioniert. So bekommt man ja Augenkrebs beim Lesen.
    Das kannst Du auch noch nachträglich erledigen. Dann bekommst Du bestimmt auch schneller Hilfe, weil man nicht gleich abgeneigt ist, das Ganze durchzuackern (so wie's mir momentan damit geht).

  3. #3
    Frank_the_Tank ist offline Neuer Benutzer
    Themenstarter
    Registriert seit
    21.10.2013
    Beiträge
    29
    Danke
    2
    Erhielt 1 Danke für 1 Beitrag

    Standard

    Danke für den Tipp, ich hoffe so ist es besser

  4. #4
    Registriert seit
    27.06.2009
    Ort
    am Nordharz
    Beiträge
    3.713
    Danke
    443
    Erhielt 914 Danke für 739 Beiträge

    Standard

    Viel besser (bis auf ein paar Kleinigkeiten).


    Frage: Wie kommt man auf solche Konstrukte:
    Code:
    IF "I"<= "Ketten Zeit DB"."Schrittzahl Endlage"-1 THEN
    anstatt:
    Code:
    IF "I"< "Ketten Zeit DB"."Schrittzahl Endlage" THEN
    ?

  5. #5
    Frank_the_Tank ist offline Neuer Benutzer
    Themenstarter
    Registriert seit
    21.10.2013
    Beiträge
    29
    Danke
    2
    Erhielt 1 Danke für 1 Beitrag

    Standard

    Hatte den Quellcode eigentlich abgeglichen, das hier steht dort im Programm.
    Code:
    IF "I"< "Ketten Zeit DB"."Schrittzahl Endlage"-1 THEN
    Ich weiss halt nicht wo ich hier die Ausgänge sinnvoll gegeneinander verriegeln kann, weil es kann auch passieren das die direkt nacheinander geschaltet werden.
    Danke für die Hilfe!
    MfG
    Geändert von Frank_the_Tank (28.12.2013 um 19:54 Uhr)

  6. #6
    Registriert seit
    27.06.2009
    Ort
    am Nordharz
    Beiträge
    3.713
    Danke
    443
    Erhielt 914 Danke für 739 Beiträge

    Standard

    Zitat Zitat von Frank_the_Tank Beitrag anzeigen
    Ich weiss halt nicht wo ich hier die Ausgänge sinnvoll gegeneinander verriegeln kann, weil es kann auch passieren das die direkt nacheinander geschaltet werden.
    Warum und wogegen willst Du die Zylinder überhaupt verriegeln, wenn sie auch gleichzeitig bewegt werden können?

  7. #7
    Frank_the_Tank ist offline Neuer Benutzer
    Themenstarter
    Registriert seit
    21.10.2013
    Beiträge
    29
    Danke
    2
    Erhielt 1 Danke für 1 Beitrag

    Standard

    Wenn z.B. Zylinder 1 immer Ausfahren und Einfahren soll:
    Wird A1.0 für das Ausfahren angesteuert, nach erreichen der Endlage wird A1.1 für das Einfahren aktiviert.
    Hierbei wird aber A1.0 nicht abgeschaltet und der Zylinder fährt nicht ein.

    MfG
    Geändert von Frank_the_Tank (28.12.2013 um 22:40 Uhr)

  8. #8
    Registriert seit
    27.06.2009
    Ort
    am Nordharz
    Beiträge
    3.713
    Danke
    443
    Erhielt 914 Danke für 739 Beiträge

    Standard

    Die Verriegelung musst Du dort machen, wo Du die Ausgänge per Hand (für die Aufnahme) ansteuerst.
    Wenn sie bei der Aufnahme der Schrittfolge gegeneinander verriegelt sind, können sie diese auch nicht bei der anschließenden Wiedergabe durchbrechen. Denn Du kannst ja nur das wiedergeben, was bei der Aufnahme möglich war.

    Außerdem sollte immer auch eine hardwareseiteige Verriegelung der Zylinderansteuerung vorhanden sein - egal ob elektrisch, pneumatisch oder hydraulisch.

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

    Frank_the_Tank (28.12.2013)

  10. #9
    Frank_the_Tank ist offline Neuer Benutzer
    Themenstarter
    Registriert seit
    21.10.2013
    Beiträge
    29
    Danke
    2
    Erhielt 1 Danke für 1 Beitrag

    Standard

    Danke, ich werde versuchen das Morgen mal umzusetzen!
    Geändert von Frank_the_Tank (28.12.2013 um 23:18 Uhr)

  11. #10
    Registriert seit
    27.06.2009
    Ort
    am Nordharz
    Beiträge
    3.713
    Danke
    443
    Erhielt 914 Danke für 739 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Ich würde übrigens an Deiner Stelle nicht die Auswirkungen (Zylinder-Ausgänge) sondern die Ursache (Taster) aufzeichnen und diese dann wiedergeben. Dann ist die Verriegelung der Ausgänge auch in den Programmzeilen bei der Wiedergabe enthalten.
    Ist aber sicher Ansichtssache.

    Und falls Du die Flankenabfrage für komplette Bytes benötigst, hat PN/DP da 'ne schöne FAQ erstellt.

  12. Folgender Benutzer sagt Danke zu hucki für den nützlichen Beitrag:

    Frank_the_Tank (30.12.2013)

Ähnliche Themen

  1. Steuerung Verriegeln
    Von Adrian561992 im Forum Simatic
    Antworten: 4
    Letzter Beitrag: 17.07.2012, 00:14
  2. Ausgangsbyte, was ist defekt
    Von Pockebrd im Forum Simatic
    Antworten: 12
    Letzter Beitrag: 11.11.2010, 10:07
  3. Schaltfläche Verriegeln
    Von Flash2k1 im Forum HMI
    Antworten: 7
    Letzter Beitrag: 25.09.2008, 16:02
  4. Handbetrieb verriegeln?
    Von Markus im Forum Programmierstrategien
    Antworten: 17
    Letzter Beitrag: 25.03.2008, 21:32
  5. Windows Verriegeln
    Von david.ka im Forum HMI
    Antworten: 2
    Letzter Beitrag: 07.02.2007, 19:04

Lesezeichen

Berechtigungen

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