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

Results 1 to 9 of 9

Thread: Zwei Timer in einer Schleife - Steuerung für Pneumatik Prüfstand

  1. #1
    Join Date
    21.07.2020
    Posts
    6
    Danke
    11
    Erhielt 0 Danke für 0 Beiträge

    Default


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Hallo zusammen,

    bin gerade in meinem Hauptpraktikum und nach der Konstruktion des Prüfstandes (Möbelprüfung nach Norm) befasse ich mich jetzt mit der Steuerung dafür.


    • Der Prüfstand hat 3 Zylinder die über Magnetventile gesteuert werden (Achse 1,2 und 3)
    • Folgende Parameter will ich für den "Handbetrieb" einstellen können:
      • Ax - Auswahl der Achse
      • W - Anzahl von Wiederholungen
      • DF - Dauer der Kraftaufbringung
      • DFp - Dauer der Kraftpausen


    Es gibt Prüfungen wo bis zu 10.000 exakt gleiche Wiederholungen gemacht werden müssen mit den vorher genannten Parametern.

    Wie würdet ihr da vorgehen?

    Ich habe mir als Konstrukt jetzt gedacht eine Schleife zu machen in der zwei Timer laufen.


    For i:= 1 TO W by 1 DO

    i := i + 1;
    A1 := TRUE;

    Timer 1 läuft

    Nach abgelaufenem Timer
    A1:= FALSE;


    Timer 2 läuft

    Nach abgelaufenem Timer
    Schleife wieder von vorne
    Das habe ich in der Funktionsbausteinsprache angefangen und komme gerade nicht wirklich weiter.

    Die Code Bescheibung mit den Timern habe ich dafür in ein "Execute" Baustein gepackt und vor den Eingang ein UND-Glied mit Starttaster UND Auswahl der Achse

    Kennt ihr eine einfachere Lösung?

    Hier meine bisherige Visualisierung und Testweise für den ersten Zylinder. Zum Testen habe ich einfach Lampen genommen die erstmal zur Veranschaulichung sind.
    SPS.jpg




    Dazu bin ich in SPS Programmierung noch nicht sehr erfahren und hoffe ihr könnt mir helfen.



    MfG
    Steffen
    Reply With Quote Reply With Quote Zwei Timer in einer Schleife - Steuerung für Pneumatik Prüfstand  

  2. #2
    Join Date
    14.01.2015
    Posts
    5,597
    Danke
    1,227
    Erhielt 1,224 Danke für 909 Beiträge

    Default

    i := i + 1;
    Unabhängig von der Frage, warum wird i manipuliert?
    Last edited by DeltaMikeAir; 21.07.2020 at 14:59.
    Mit Grüßen

    Gesendet von meinem Nokia 6310

  3. #3
    Join Date
    13.12.2011
    Location
    Bückeburg
    Posts
    2,941
    Danke
    380
    Erhielt 463 Danke für 387 Beiträge

    Default

    Quote Originally Posted by Dr Peat View Post
    Wie würdet ihr da vorgehen?
    Zum Beispiel eine Schrittkette mit CASE-Anweisung erstellen. Übrigens, wenn Du schon ST-Code über Execute nutzt, warum schreibst Du das Programm nicht gleich ganz in ST.
    Quote Originally Posted by Dr Peat View Post
    Dazu bin ich in SPS Programmierung noch nicht sehr erfahren und hoffe ihr könnt mir helfen.
    Bitte nicht böse sein, aber ich unterstelle einmal, dass Du grundsätzlich in der Programmierung nicht ganz fit bist. Die Art wie Du eine FOR-Schleife nutzen möchtest zeigt es hier ganz deutlich.
    Übrigens startet CONTINUE die Schleife nicht neu, sondern überspringt alle weiteren Befehle in der Schleife. Außerdem musst Du Dich unbedingt mit den Besonderheiten einer SPS (Stichwort: zyklische Abarbeitung) auseinandersetzen.
    Last edited by oliver.tonn; 21.07.2020 at 15:25.

  4. #4
    Dr Peat is offline Neuer Benutzer
    Themenstarter
    Join Date
    21.07.2020
    Posts
    6
    Danke
    11
    Erhielt 0 Danke für 0 Beiträge

    Default

    Unabhängig von der Frage, warum wird i manipuliert?
    Danke, gute Frage, habe jetzt gemerkt das die Schleife ja schon in der ersten Zeile definiert ist

    Bitte nicht böse sein, aber ich unterstelle einmal, dass Du grundsätzlich in der Programmierung nicht ganz fit bist. Die Art wie Du eine FOR-Schleife nutzen möchtest zeigt es hier ganz deutlich.
    Mit der Unterstellung hast du auf jeden Fall Recht

    Zum Beispiel eine Schrittkette mit CASE-Anweisung erstellen. Übrigens, wenn Du schon ST-Code über Execute nutzt, warum schreibst Du das Programm nicht gleich ganz in ST.
    Okay eine Schrittkette hört sich interessant an, ich versuchs mal.
    Und ganz in ST Schreiben geht nicht, eigentlich dachte ich mir das mit den Bausteinen zu vereinfachen aber dann hab ich gemerkt das ich das meiste sowieso in den Execute Baustein setzten muss.

    Was genau heißt Schrittkette mit CASE-Anweisung?
    Wird die CASE-Anweisung nicht bei Fällen genutzt wo mehrere Anweisungen mit derselben Bedingungsvariable angewendet? In meinem Fall gibt es doch mehrere Bedingungsvariablen und im Prinzip die selbe Anweisung oder versteh ich was falsch?

    MfG
    Steffen

  5. #5
    Join Date
    13.12.2011
    Location
    Bückeburg
    Posts
    2,941
    Danke
    380
    Erhielt 463 Danke für 387 Beiträge

    Default

    Naja, was heißt das? Man realisiert eine Schrittkette mit Hilfe einer CASE-Anweisung. Es gibt eine Variable, den Schrittzähler und in jeder CASE-Anweisung wird geprüft, ob die Bedingung erfüllt ist und der Zähler entsprechend hochgezählt, wobei man da anstatt von Zahlen Enums nehmen kann/sollte um die Übersicht zu behalten. Das ganze ginge auch in AS.

  6. Folgender Benutzer sagt Danke zu oliver.tonn für den nützlichen Beitrag:

    Dr Peat (21.07.2020)

  7. #6
    Join Date
    13.12.2011
    Location
    Bückeburg
    Posts
    2,941
    Danke
    380
    Erhielt 463 Danke für 387 Beiträge

    Default

    Quote Originally Posted by Dr Peat View Post
    Wird die CASE-Anweisung nicht bei Fällen genutzt wo mehrere Anweisungen mit derselben Bedingungsvariable angewendet? In meinem Fall gibt es doch mehrere Bedingungsvariablen und im Prinzip die selbe Anweisung oder versteh ich was falsch?
    Der Ablauf ist der Selbe egal welche Achse genommen wird, aber die Achse unterscheidet sich. Die einzelnen Schritte, Zylinder ausfahren, warten, wieder einfahren usw. definierst Du als einzelnen Schritte. Die Achsen kannst Du in ein Array packen und die Auswahl als Radio-Button gestalten, dann erhältst Du einen Index den Du direkt für den Zugriff auf das Array verwenden kannst und somit die passende Achse auswählen.

  8. Folgender Benutzer sagt Danke zu oliver.tonn für den nützlichen Beitrag:

    Dr Peat (21.07.2020)

  9. #7
    Join Date
    25.06.2017
    Location
    Oerlinghausen
    Posts
    2,690
    Danke
    288
    Erhielt 510 Danke für 423 Beiträge

    Default

    Quote Originally Posted by Dr Peat View Post
    Das habe ich in der Funktionsbausteinsprache angefangen und komme gerade nicht wirklich weiter.
    Habe schon überlegt, was eine Funktionsbausteinsprache sein mag ... und hab die Aufgabe mit der LOGO! in Angriff genommen.
    Das hat leider nur entfernte Ähnlichkeit mit FUP, könnte aber vielleicht als Anregung dienen.
    MultiVib3Axen.jpg
    MultiVib2.lsc.pdf >>>===> nach dem Herunterladen '.pdf' entfernen!

    Gibt an Q1 oder Q2 oder Q3 zehn 0,5 s Impulse gefolgt von jeweils 1 s Pause aus.
    Starten mit I1 oder I2 oder I3 löscht den Zähler und beginnt die ImpulsFolge. Mit I4 kann man sie vorzeitig stoppen.
    Achtung! Wählt man bei laufender ImpulsFolge eine andere Achse, so wird der Zähler nicht gelöscht.

  10. Folgender Benutzer sagt Danke zu Heinileini für den nützlichen Beitrag:

    Dr Peat (23.07.2020)

  11. #8
    Dr Peat is offline Neuer Benutzer
    Themenstarter
    Join Date
    21.07.2020
    Posts
    6
    Danke
    11
    Erhielt 0 Danke für 0 Beiträge

    Default

    Wow vielen Dank für die Mühe!!
    In Codesys kann ich auch mit CFC (Continuous Function Chart) arbeiten (Wenn ich das jetzt nicht mit meinem Anfänger-Halbwissen verwechsele)
    Zurzeit arbeite ich daran die Steuerung nach dem Vorschlag von oliver.tonn zu realisieren, als Anregung dient mir das definitif!
    MfG

  12. #9
    Join Date
    24.10.2007
    Location
    Niederlande
    Posts
    831
    Danke
    31
    Erhielt 179 Danke für 170 Beiträge

    Default


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Hier ein Siemens FuctionBlock in SCL Siemens Code,
    Code:
    FUNCTION_BLOCK "Execute"{ S7_Optimized_Access := 'TRUE' }
    VERSION : 0.1
       VAR_INPUT 
          Start : Bool;   // Start prufung
          Stop : Bool;   // Stop prufung
          W : UInt;   // Anzahl wiederholungen
          DF : Time;   // DruckZeit
          DFp : Time;   // PauseZeit
       END_VAR
    
    
       VAR_OUTPUT 
          Valve : Bool;   // Actor
          Busy : Bool;   // Prufung Lauft
       END_VAR
    
    
       VAR 
          DF_Timer {InstructionName := 'TON_TIME'; LibVersion := '1.0'; S7_SetPoint := 'False'} : TON_TIME;   // Timer Prufzeit
          DFp_Timer {InstructionName := 'TON_TIME'; LibVersion := '1.0'; S7_SetPoint := 'False'} : TON_TIME;   // Timer_Pause_Zeit
          Countwert : UInt;   // Counterwert Anzahl wiederholungen
          WechelBit : Bool;
          FlankStart : Bool;
          FlankStop : Bool;
       END_VAR
    
    
    
    
    BEGIN
        // Start Prufung  bei Positve Flanke Start
        IF #Start AND NOT #FlankStart THEN
            #Countwert := #W;  //Counterwert setzen
            #WechelBit := FALSE; //Timers
            #Busy := TRUE;
        END_IF;
        #FlankStart := #Start;
        
        // Stop Prufung bei Positve Flanke Stop
        IF #Stop AND NOT #FlankStop THEN
            #Countwert := 0;
            #WechelBit := FALSE;
            #Busy := False;
        END_IF;
        #FlankStop := #Stop;
        
        // Timer Druck prufung
        #DF_Timer(IN :=NOT #WechelBit AND #Countwert > 0,
                  PT := #DF);
        IF #DF_Timer.Q THEN
            #WechelBit := TRUE;
        END_IF;
        
        // Pause Timer Wenn Timer.Q  Counterwert -1 , wenn Counterwert<= 0 wurde Counter_0 True.
        #DFp_Timer(IN := #WechelBit,
                   PT := #DFp);
        IF #DFp_Timer.Q THEN
            #WechelBit := FALSE;
            #Countwert := #Countwert - 1;
            #Busy := NOT (#Countwert <= 0);
        END_IF;
        
        // Actor on/off
        #Valve := NOT #WechelBit AND #Busy;
               
        
    END_FUNCTION_BLOCK
    Und hier wie diese FB für Ventil 1 und 2 aufgeruffen wurde in Main

    Execute OB1.JPG

  13. Folgender Benutzer sagt Danke zu JoopB für den nützlichen Beitrag:

    Dr Peat (24.07.2020)

Similar Threads

  1. Pneumatik steuerung fehler im schaltkreis
    By fred_burton in forum Sonstige Steuerungen
    Replies: 16
    Last Post: 23.09.2019, 07:56
  2. Prüfstand-Steuerung
    By Beg in forum Sonstige Steuerungen
    Replies: 17
    Last Post: 13.03.2018, 09:18
  3. Step 7 suche S7-Steuerung für zwei-achsige Solar Nachführung
    By Techniker PV-Anlage in forum Simatic
    Replies: 10
    Last Post: 06.03.2015, 08:31
  4. Zwei OP177b an einer Steuerung
    By mobileme in forum HMI
    Replies: 4
    Last Post: 18.06.2012, 17:27
  5. Zwei Identische TP277 auf einer Steuerung
    By Trötschi in forum HMI
    Replies: 12
    Last Post: 12.12.2008, 12:46

Bookmarks

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •