TIA Ausgänge im Ausgangsbyte verriegeln

Frank_the_Tank

Level-1
Beiträge
29
Reaktionspunkte
1
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
      [COLOR=#333333]IF "I"< "Ketten Zeit DB"."Schrittzahl Endlage"-1 THEN[/COLOR]                                                //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
 
Zuletzt bearbeitet:
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).
;)
 
Viel besser (bis auf ein paar Kleinigkeiten). ;)


Frage: Wie kommt man auf solche Konstrukte:
Code:
[COLOR=#333333]IF "I"<[/COLOR][COLOR=#ff0000]=[/COLOR][COLOR=#333333] "Ketten Zeit DB"."Schrittzahl Endlage"[/COLOR][COLOR=#ff0000]-1[/COLOR][COLOR=#333333] THEN[/COLOR]
anstatt:
Code:
[COLOR=#333333]IF "I"< "Ketten Zeit DB"."Schrittzahl Endlage" THEN[/COLOR]
?
 
Hatte den Quellcode eigentlich abgeglichen, das hier steht dort im Programm.
Code:
[COLOR=#333333]IF "I"< "Ketten Zeit DB"."Schrittzahl Endlage"-1 THEN[/COLOR]
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
 
Zuletzt bearbeitet:
Zuviel Werbung?
-> Hier kostenlos registrieren
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?
 
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
 
Zuletzt bearbeitet:
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.
 
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.
 
Zurück
Oben