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

Ergebnis 1 bis 6 von 6

Thema: Anfänger braucht Hilfe mit Programmiersprache Strukturierter Text und Programmablauf

  1. #1
    Registriert seit
    06.08.2012
    Beiträge
    8
    Danke
    6
    Erhielt 2 Danke für 2 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Hallo zusammen!
    Ich habe nicht viel Erfahrung mit SPS Programmierung und vor mir steht folgende Aufgabe, muss ein Programm erstellen, dass die rotierende Spannzangen zwischen zwei Sensoren hin und her laufen lasst bis die eingestellte Anhahl von Windungen nicht erreicht wird, die letzte 10 Windungen sollen langsamm gedreht werden. Für Verstendlichkeit hab ich ein Bild eingefügt, wo mit 'IN' Sensoren genannt sind und mit 'OUT' Ventiele die for Bewegung vor und zurück zustandig sind . Noch mal kurz Spannzangen mussen hin und her zwischen Sensoren IN4 und IN3 bewegen so lang bis die eingestellte Windungszahl bei Zähler nicht erreicht wird IN9 zählt die Windungen, so bald Windungszahl erreicht muss die Spannzanges bis Sensor IN5 fahren, Zähler muss zuruckgesetzt und das selbe Spiel muss jezt zwischen IN5 und IN4 passieren und so insgesamt 4 mal bis Sensor IN7.Hier ist das Quellcode von mir

    CTU1(CU:=IN9 ,RESET:=RES ,PV:= , Q=> , CV=>ZAELER );(*Wicklungszaeler*)
    POSITION1:RS;
    POSITION2:RS;

    IF ZAELER<WINDUNGSZAHL1-10
    THEN

    POSITION1(SET:=IN3 , RESET1:=IN4 , Q1=>OUT7 );
    POSITION2(SET:=IN4 , RESET1:=IN5 , Q1=>OUT6 );
    ELSIF ZAELER>WINDUNGSZAHL 1-10 AND ZAEL ER<WINDUNGSZAHL1
    THEN
    target_velocityARS2108:=500;
    target_velocityARS2305:=50;
    POSITION1(SET:=IN3 , RESET1:=IN4 , Q1=>OUT7 );
    POSITION2(SET:=IN4 , RESET1:=IN5 , Q1=>OUT6 );

    ELSIF ZAELER=WINDUNGSZAHL1 AND IN5=FALSE
    THEN
    target_velocityARS2108:=500;
    target_velocityARS2305:=0;
    OUT6:=FALSE;
    OUT7:=TRUE;
    END_IF;
    TP1(IN:=IN5 , PT:=T#5ms , Q=>RES , ET=> );(*Windungs Zähler auf Null setzen*)
    (*
    IF ZAELER<WINDUNGSZAHL2
    THEN
    target_velocityARS2108:=1500;
    target_velocityARS2305:=100;
    POSITION1(SET:=IN4 , RESET1:=IN5 , Q1=>OUT7 );(*Laufvorgang*)
    POSITION2(SET:=IN5 , RESET1:=IN4 , Q1=>OUT6 );
    *)

    END_IF;

    Es funktioniert akzeptabel, so bald ich nicht diese Teil vom Qellcode einfüge was zur Zeit als Kommentar markiert. Wenn ich diese Teil doch einfüge dann fahren die Spannzangen bis Sensor IN5 und laufen zwischen IN4 und IN5. Für mich ist das verstadlich da die Bedienung ZAELER<WINDUNGSZAHL2 erfühlt ist. Meine Frage wie kann ich mein Proramm verbessern bzw verandern um diese Ablauf zu programmieren? Oder gibts hier im Forum villeicht schon ahnliches Thema ? Denke so was oder ähnliches ist oft zu treffen. Hoffe Sie haben vestanden was ich meine Danke voraus !
    Angehängte Grafiken Angehängte Grafiken
    Zitieren Zitieren Anfänger braucht Hilfe mit Programmiersprache Strukturierter Text und Programmablauf  

  2. #2
    Registriert seit
    22.03.2007
    Ort
    Detmold (im Lipperland)
    Beiträge
    11.728
    Danke
    398
    Erhielt 2.406 Danke für 2.002 Beiträge

    Standard

    Hallo,
    der "Trick" ist, dass du einen Ablauf (Schrittkette) da rein bekommen mußt.
    Ist Zähler < Windungszahl1 dann ist er wahrscheinlich auch < Windungszahl2. Dafür willst du dich (so wie ich das verstanden habe) aber erst interessieren, wenn du >= Windungszahl 1 bist - du drafst diese Funktion also auch dann erst "freischalten".
    Das realisierst du am Besten über eine Schrittkette - dafür gibt es auch (und gerade bei) ST schöne Beispiele (auch in der Forums-Suche), wie man das machen kann ...

    Gruß
    Larry

  3. Folgender Benutzer sagt Danke zu Larry Laffer für den nützlichen Beitrag:

    Impact84 (23.07.2013)

  4. #3
    Impact84 ist offline Neuer Benutzer
    Themenstarter
    Registriert seit
    06.08.2012
    Beiträge
    8
    Danke
    6
    Erhielt 2 Danke für 2 Beiträge

    Standard

    Danke für den Tipp. Schrittkette hab ich mit CASE realesiert. Meine Frage war auch wie ich bie Bedienung für IF Anweisung für Übergang zwischen beide Windungsablaufe mit den Zurverfügungstellung INs und OUTs optimal formuliere.

  5. #4
    Registriert seit
    22.03.2007
    Ort
    Detmold (im Lipperland)
    Beiträge
    11.728
    Danke
    398
    Erhielt 2.406 Danke für 2.002 Beiträge

    Standard

    Naja ... wie schon beschrieben.
    Ich würde der Schrittkette einen Schritt spendieren, der zuständig ist bis Windungszahl1. Nun in den nächsten Schritt wechseln und die Windungszahl2 abfragen.

    Ansonsten solltest du noch einmal etwas weiterführend beschreiben ...

    Gruß
    Larry

  6. #5
    Impact84 ist offline Neuer Benutzer
    Themenstarter
    Registriert seit
    06.08.2012
    Beiträge
    8
    Danke
    6
    Erhielt 2 Danke für 2 Beiträge

    Standard

    CTU1(CU:=IN9 ,RESET:=RES ,PV:= ,Q=>,CV=>ZAELER );

    IF ZAELER<WINDUNGSZAHL1-LETZTEWINDUNGEN1
    THEN SCHRITT:=1;
    ELSIF ZAELER>WINDUNGSZAHL1-LETZTEWINDUNGEN1 AND ZAELER< WINDUNGSZAHL1
    THEN SCHRITT:=2;

    ELSIF ZAELER=WINDUNGSZAHL1 AND IN5=FALSE
    THEN SCHRITT:=3;
    ELSIF ZAELER<WINDUNGSZAHL1+WINDUNGSZAHL2-LETZTEWINDUNGEN2
    THEN SCHRITT:=4;
    ELSIF ZAELER>WINDUNGSZAHL1+WINDUNGSZAHL2-LETZTEWINDUNGEN2 AND ZAELER<WINDUNGSZAHL1+WINDUNGSZAHL2
    THEN SCHRITT:=5;
    END_IF

    CASE SCHRITT OF

    1: target_velocityARS2108:=1000;
    target_velocityARS2305:=200;
    POSITION1(SET:=IN3 , RESET1:=IN4 , Q1=>OUT7 );(*Laufvorgang*)
    POSITION2(SET:=IN4 , RESET1:=IN3 , Q1=>OUT6 );

    2:
    target_velocityARS2108:=500;
    target_velocityARS2305:=100;
    POSITION1(SET:=IN3 , RESET1:=IN4 , Q1=>OUT7 );(*Laufvorgang*)
    POSITION2(SET:=IN4 , RESET1:=IN3 , Q1=>OUT6 );

    3: target_velocityARS2108:=500;
    target_velocityARS2305:=0;

    OUT6:=FALSE;
    OUT7:=TRUE;



    4: target_velocityARS2108:=500;
    target_velocityARS2305:=200;
    POSITION1(SET:=IN4 , RESET1:=IN5 , Q1=>OUT7 );(*Laufvorgang*)
    POSITION2(SET:=IN5 , RESET1:=IN4 , Q1=>OUT6 );
    5:
    target_velocityARS2108:=500;
    target_velocityARS2305:=100;
    POSITION1(SET:=IN4 , RESET1:=IN5 , Q1=>OUT7 );(*Laufvorgang*)
    POSITION2(SET:=IN5 , RESET1:=IN4 , Q1=>OUT6 );
    END_CASE;

    Zur Zeit sieht so aus, aber das was ich rot markiert habe finde ich umständlich . Ich wollte das nach jedem Wickelvorgang (ZAELER=WINDUNGSZAHL) Zähler über RESET auf 0 setzen für nachste Wickelvorgang z.B nach SCHRITT=3 aber dann wird naturlich nicht SCHRITT 4ausgefuhr sondern SCHRITT 1. Die Frage ist wie kann ich das war rot markiert ersetzen und nach dem rucksetzen des Zählers auf 0 die Schritte 4 und 5 trotzdem ausgeführt werden ? Vielleicht mit den Hilfsvariablen, aber wie? Danke voraus!

  7. #6
    Registriert seit
    22.03.2007
    Ort
    Detmold (im Lipperland)
    Beiträge
    11.728
    Danke
    398
    Erhielt 2.406 Danke für 2.002 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Du machst den Teil m.E. genau falsch herum ...
    Nicht der Zähler bestimmt den aktuellen Schritt sondern mit dem aktuellen Schritt muß bestimmt werden, was du mit deinem Zähler (und dem Rest der Anlage) machst.
    Also z.B. :

    Schritt 1 startet den Antrieb - hat der seine Windungszahlö erreich dann nach Schritt 2
    usw. ...

    Gruß
    Larry

  8. Folgender Benutzer sagt Danke zu Larry Laffer für den nützlichen Beitrag:

    Impact84 (24.07.2013)

Ähnliche Themen

  1. Antworten: 2
    Letzter Beitrag: 26.11.2012, 17:34
  2. Anfänger braucht Hilfe!
    Von Kanni im Forum Simatic
    Antworten: 6
    Letzter Beitrag: 10.05.2012, 13:15
  3. Anfänger braucht Hilfe
    Von Micha18 im Forum Stammtisch
    Antworten: 35
    Letzter Beitrag: 09.07.2011, 06:00
  4. Antworten: 12
    Letzter Beitrag: 15.06.2009, 14:42
  5. Antworten: 15
    Letzter Beitrag: 01.03.2005, 22:25

Lesezeichen

Berechtigungen

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