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

Seite 2 von 5 ErsteErste 1234 ... LetzteLetzte
Ergebnis 11 bis 20 von 42

Thema: Bahn berechnen - Sollposition

  1. #11
    Registriert seit
    06.07.2007
    Beiträge
    2.811
    Danke
    174
    Erhielt 274 Danke für 253 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Wenn ich deine Daten und meine Formeln nehm, dann hab ich folgendes:

    Vsoll = 50 mm/s
    a = 20 mm/s²
    s = Vsoll * t - 0,5 * a * t²
    v = Vsoll - a * t

    Da die Endgeschwindigkeit null sein soll, kannst du aus der unteren Formel die Bremszeit ausrechnen:

    v = Vsoll - a * t
    0 = 50 - 20 * t
    t = 2,5 s

    Aus t und den anderen Werten kann man dann mit Hilfe der oberen Fromel den Bremsweg ausrechnen:

    s = Vsoll * t - 0,5 * a * t²
    s = 50 * 2,5 - 0,5 * 20 * 6,25
    s = 62,5 mm

    Daraus folgt dann, dass du 62,5 mm vor deiner gewünschten Endposition deine Bremse anschmeißen musst.
    A programmer is just a tool which converts caffeine into code.

  2. #12
    Registriert seit
    21.01.2008
    Beiträge
    70
    Danke
    0
    Erhielt 15 Danke für 15 Beiträge

    Standard

    Ich finde es ja echt schade, dass ihr die interessanten Themen immer mittags diskutiert, wo normale Leute arbeiten . Zum Thema, Beschleunigungskonstant ist das alles schön machbar, ruckkonstant wird ecklig...

    @Markus: Da du ein zeitdiskretes System hast variieren die Ergebnisse leicht, wenn du vom Integral auf die (reale) Summenformel übergehst. Ist aber zu vernachlässigen, wenn du kleine Zykluszeiten hast und sich die Geschwindigkeiten in Grenzen halten. Es sei noch erwähnt, dass üblicherweise nach der Geschwindigkeit "0" ein kleines Fester existiert, indem ein einfacher P-Regler verwendet wird für die Endpositionierung. Kannst dir ja vorstellen: Du hast eine Zykluszeit T. Jetzt berechnest du, dass du mit der angegeben negativen Beschleunigung 80.4*T zum stoppen brauchst. Wann fängst nun an zu bremesen? 80T oder 81T vorher? egal was du machst, entweder stoppst du kurz vorher oder kurz hinterher. Und das auch wenn du ständig ein Zustandsmodell mitlaufen hast...

    Gruß von Andy

  3. #13
    Registriert seit
    21.01.2008
    Beiträge
    70
    Danke
    0
    Erhielt 15 Danke für 15 Beiträge

    Standard

    Für den Fall, dass sich jemand für ruckkonstante Positionierung interessiert:
    Der Witz dabei ist, dass T (die Zykluszeit) eben nicht klein ist, in dem Fall unten 4s !!!
    Alle Formel als Summe, keine Integrale(das wäre einfacher zu rechnen bei T->0)


    Code:
    function ret=a_f(a0,j,T,k)
     ret=a0+j*T*k;
    endfunction
    
    function ret=v_f(a0,v0,j,T,k)
     ret=v0+a0*T*k+(j*T^2*k.*(k+1))/2;
    endfunction
    
    function ret=s_f(a0,v0,s0,j,T,k)
     ret=s0+v0*T*k+(T^3*k.^3*j)/6+(T^3*k.^2*j)/2+(T^3*k*j)/3+(T^2*k.^2*a0+T^2*k*a0)/2.0;
    endfunction
    
    #Bei gegebenen Anfangsbedingungen zurückgelegter Weg bis Stop
    #Phase 1 :bis auf mimal negative Beschleunigung
    #Phase 2 :mit konstanter Beschleunigung weiter
    #Phase 3 :bis auf Beschleunigung 0 und Geschwindigkeit 0
    
    function ret=s_stop_dist(jm,am,a,v,T)
     #Zeit bis mimale negative Beschleunigung aufgebaut wurde
     k1=(am-a)/(jm*T);
     #Geschwindigkeit, bei der mimale Bremsbeschleunigung aufgebaut wurde
     v1=v_f(a,v,-jm,T,k1);
     #Weg der bis dorthin zurückgelegt wurde
     s1=s_f(a,v,0,-jm,T,k1);
    
     #"von hinten" Phase 3 berechnen
     k3=am/(jm*T);
     v2=v_f(0,0,jm,T,k3-1);
     s3=s_f(0,0,0,jm,T,k3-2);
    
     #Wie lange dauert die Phase mit mimaler Bremsbeschleunigung?
     k2=(v1-v2)/(am*T);
     s2=s_f(-am,v1,0,0,T,k2);
     #printf("k1=%f  k2=%f  k3=%f\n",k1,k2,k3);
     ret=s1+s2+s3;
    endfunction
    
    Pos_Soll= 3046.2; #slog(13)*2
    
    max_v=44.8; # in 1/s
    max_a=1.6;  # in 1/s²
    max_j=0.1;  # in 1/s^3
    
    j=0;a=0;v=0;s=0;    #Anfangsbedingungen / Initialisierung
    
    T=4.0 ; 
    
    #Abtastpunkte bis max Beschleunigung
    k_start= max_a/(max_j*T);
    
    #Geschwindigkeit, beim Erreichen der maximalen Beschleunigung
    v_accel=v_f(0,0,max_j,T,k_start); 
    v_decel=v_f(max_a,0,-max_j,T,k_start);
     
    s_accel=s_stop_dist(max_j,max_a,0,max_v,T)
    
    for i=1:30
    
     s_accel_log(i)=s_stop_dist(max_j,max_a,a,v,T); #Nur debugging
    
     bremsen=(Pos_Soll-s)<=s_accel+v*T*0; 
    
     if (bremsen && (Pos_Soll-s) > (s_f(0,0,0,max_j,T,k_start-2)))
       #negative Beschleunigung aufbauen 
       a_faktor=-1;
     elseif ((Pos_Soll-s)>s_accel && v < (max_v - v_decel)) 
       #positive Beschleunigung aufbauen
       a_faktor=1;
     else
       #Beschleunigung auf 0 vermindern
       a_faktor=0;
     endif
    
     #Wenn a_faktor positiv mit max_j bis max_a erhöhen,
     #wenn negativ mit -max_j bis -max_a senken,
     #wenn 0 dann wenn a positiv mit -max_j senken,
     #            wenn a negativ mit max_j erhöhen bis max_a=0
    
     da=max_j*T*a_faktor;
     if (abs(a+da)<=max_a)
      a=a+da;
     endif
    
     if (a_faktor==0)    
        a=a-(max_j*T)*sign(a);
        if (abs(a)<max_j*T)
        a=0;
        endif
     endif
    
     v=v+a*T;
     s=s+v*T;
    
     slog(i)=s; alog(i)=a; vlog(i)=v; #Nur für debugging
    endfor
    
    plot(alog,"-o;a;",vlog/20,"-o;v;",slog/1000,"-o;s;")

  4. Folgender Benutzer sagt Danke zu wwwandy für den nützlichen Beitrag:

    Markus (30.09.2009)

  5. #14
    Avatar von Markus
    Markus ist offline Administrator
    Themenstarter
    Registriert seit
    16.06.2003
    Ort
    88356 Ostrach
    Beiträge
    4.812
    Danke
    1.231
    Erhielt 1.101 Danke für 527 Beiträge

    Standard

    Also seit man es mir erklärt verstehe ich es nicht mehr...

    Mein Ziel:
    Ein Baustein der eine folgende Parameter bekommt:
    - Istposition [mm]
    - Zielposition [mm]
    - Beschleunigung (a) [mm/s²]
    - Verzögerung (a) [mm/s²]
    - Geschwindigkeit (v) [mm/s]

    Daraus soll er die Bahn generieren, nach der ein nachgeschalteter Drehzahlregler P-Regler (ggf. noch mit I-Anteil) abhänig von der Aktuellen Bahnsollposition und der Istposition (Schleppabstand) eine Drehzhal für den Antrieb generiert.

    Mein Ansatz:

    Code:
    U Neuer_Fahrauftrag
    FP HM_1
    SPBN CAL1
     
    // Beschleunigungszeit und Weg berechnen
    t = v / a
    s = v * t / 2
     
    // Verzögerungszeit und Weg berechnen
    t = v / a
    s = v * t / 2
     
    // Verfahrzeit Konstantfahrt berechnen
    s = ABS(Istpos-Zielpos) - Beschleunigungsweg - Verzögerungsweg
    t = s / v
     
    // Gesamtzeit für Fahrauftrag
    t = Beschleunigunszeit + Verzögerungszeit + Verfahrzeit Konstantfahrt
     
    L 0
    T Istzeit
     
    CAL1: nop 0
     
    L Istzeit
    T t
     
     
     
    // -->- Sollposition für Verzögunsrampe berechnen
    L Istzeit
    L Gesamtzeit - Verzögerungszeit
    >=R
    SPBN V_AC
     
    s = V * t - 0,5 * a * t²
    
     
    SPA END1 
    V_AC: nop 0
    // --<-------------------------------------------------
     
     
     
     
    // -->- Sollposition für Beschleunigunsrampe berechnen
    L Istzeit
    L Beschleunigunszeit
    <=R
    SPBN V_DE
     
    s = v * t / 2
     
    SPA END1
    V_DE: nop 0
    // --<-------------------------------------------------
     
     
     
     
    // -->- Sollposition für Konstantfahrt berechnen
     
    s = v * t
     
    // --<-------------------------------------------------
     
     
    END1: nop 0
     
     
     
    // Istzeit Integrieren
     
    L Istzeit
    L letzter Zyklus
    +R
    T Istzeit

    //edit
    - Verzögerungsrampe hat Vorrang (hatte voher zuerst den Spung in die Beschleunigungsrampe)
    - Hatte die falsche Formel zur berechnung der Verzögerungsbahn
    Geändert von Markus (01.10.2009 um 12:29 Uhr)
    "Es ist weit besser, große Dinge zu wagen, ruhmreiche Triumphe zu erringen, auch wenn es manchmal bedeutet, Niederlagen einzustecken, als sich zu den Krämerseelen zu gesellen, die weder große Freude noch großen Schmerz empfinden, weil sie im grauen Zwielicht leben, das weder Sieg noch Niederlage kennt." Theodore Roosevelt - President of the United States (1901-1909)

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

    SPS-freak1 (02.03.2016)

  7. #15
    Registriert seit
    21.01.2008
    Beiträge
    70
    Danke
    0
    Erhielt 15 Danke für 15 Beiträge

    Standard

    Zitat Zitat von Markus Beitrag anzeigen
    Mein Ziel:
    Ein Baustein der eine folgende Parameter bekommt:
    - Istposition [mm]
    - Zielposition [mm]
    - Beschleunigung (a) [mm/s²]
    - Verzögerung (a) [mm/s²]
    - Geschwindigkeit (v) [mm/s]
    Maximale Beschleunigung und Verzögerung getrennt?
    Ich gehe auch mal davon aus, dass du den maximalen Betrag der Geschwindigkeit meinst (|v_max|).

    Ausgang des Bausteins soll also die Sollposition für den aktuellen Zyklus sein? Nicht eher die Geschwindigkeit?

  8. #16
    Registriert seit
    06.10.2003
    Beiträge
    3.414
    Danke
    451
    Erhielt 506 Danke für 408 Beiträge

    Standard

    Hallo Markus,

    Zitat Zitat von Markus Beitrag anzeigen
    ...
    Mein Ziel:
    Ein Baustein der eine folgende Parameter bekommt:
    - Istposition [mm]
    - Zielposition [mm]
    - Beschleunigung (a) [mm/s²]
    - Verzögerung (a) [mm/s²]
    - Geschwindigkeit (v) [mm/s]..
    Ist es für dich von Bedeutung, die Beschleunigung vor zu geben? Mir steht ein Projekt bevor, bei dem ich mehrere hydraulische Achsen steueren bzw, positionieren muß. Ich denke daran, den Sollwert der Bahn aus Start- und Endposition und einer vorgegebenen Laufzeit zu berechnen. Istposition, Zielposition und Laufzeit werden geteacht. Über einen P-Regler wird ein Proportionalventil angesteuert. Zusätzlich wird die Geschwindigkeit begrenzt. Die Beschleunigung/Verzögerung ergibt sich dann abhängig von der Proportionalverstärkung und der Maximalgeschwindigkeit. So stelle ich es mir jedenfalls vor. Programmtechnisch wäre es relativ einfach. Wie's funktioniert, wird sich noch zeigen.

    Der Baustein könnte dann folgende Eingangs-Parameter bekommen:
    - Istposition
    - Zielposition
    - Laufzeit
    - maximale Geschwindigkeit

    Würde dir das etwas nützen?


    Gruß, Onkel
    Es gibt viel mehr Leute, die freiwillig aufgeben, als solche, die echt scheitern.
    Henry Ford

  9. #17
    Avatar von Markus
    Markus ist offline Administrator
    Themenstarter
    Registriert seit
    16.06.2003
    Ort
    88356 Ostrach
    Beiträge
    4.812
    Danke
    1.231
    Erhielt 1.101 Danke für 527 Beiträge

    Standard

    Zitat Zitat von wwwandy Beitrag anzeigen
    Maximale Beschleunigung und Verzögerung getrennt?
    in der plc open haben die das auch so, finde ich nicht schlecht.


    Ich gehe auch mal davon aus, dass du den maximalen Betrag der Geschwindigkeit meinst (|v_max|).
    wie meinen?
    die sollgeschwindigkeit eben mit der zwischen den beiden rampen während der konstantfahrt gefahren werden soll.

    Ausgang des Bausteins soll also die Sollposition für den aktuellen Zyklus sein? Nicht eher die Geschwindigkeit?
    ja am ende schon die geschwindigkeit...

    s = Sollpos aktueller Zyklus - Sollpos letzter zyklus

    v = s / t



    zu diesem v soll dann später der n-regler seinen korrekturfaktor addieren...
    "Es ist weit besser, große Dinge zu wagen, ruhmreiche Triumphe zu erringen, auch wenn es manchmal bedeutet, Niederlagen einzustecken, als sich zu den Krämerseelen zu gesellen, die weder große Freude noch großen Schmerz empfinden, weil sie im grauen Zwielicht leben, das weder Sieg noch Niederlage kennt." Theodore Roosevelt - President of the United States (1901-1909)

  10. #18
    Avatar von Markus
    Markus ist offline Administrator
    Themenstarter
    Registriert seit
    16.06.2003
    Ort
    88356 Ostrach
    Beiträge
    4.812
    Danke
    1.231
    Erhielt 1.101 Danke für 527 Beiträge

    Standard

    Zitat Zitat von Onkel Dagobert Beitrag anzeigen
    Hallo Markus,



    Ist es für dich von Bedeutung, die Beschleunigung vor zu geben? Mir steht ein Projekt bevor, bei dem ich mehrere hydraulische Achsen steueren bzw, positionieren muß. Ich denke daran, den Sollwert der Bahn aus Start- und Endposition und einer vorgegebenen Laufzeit zu berechnen. Istposition, Zielposition und Laufzeit werden geteacht. Über einen P-Regler wird ein Proportionalventil angesteuert. Zusätzlich wird die Geschwindigkeit begrenzt. Die Beschleunigung/Verzögerung ergibt sich dann abhängig von der Proportionalverstärkung und der Maximalgeschwindigkeit. So stelle ich es mir jedenfalls vor. Programmtechnisch wäre es relativ einfach. Wie's funktioniert, wird sich noch zeigen.

    Der Baustein könnte dann folgende Eingangs-Parameter bekommen:
    - Istposition
    - Zielposition
    - Laufzeit
    - maximale Geschwindigkeit

    Würde dir das etwas nützen?


    Gruß, Onkel

    hm aber du hast ja dann weder eine start- noch eine stoprampe?

    in deinem falle wäre das bei einem "idealen" zylinder ja:

    s = ABS(Istpos-Zielpos)
    t = laufzeit

    v = s/t

    ne "richtige" bahn gibt das ja dann nicht, oder habe ich es nicht begriffen?

    also ich habe in dem projekt hier an die 30 achsen die ich so gassi führen will, darunter auch ein paar hydraulische...

    easy-motion-controll, beckhoff, sew,... und wie sie alle heissen die ihre MC bausteine nach PLC_OPEN gemacht haben machen das im prinzip auch so.

    später will ich so ggf. auch zwei achsen über positionstabellen verschleifen, so eine art kurvenscheibe um zb ein portal zu fahren... deshlab der ansatz erst mal ne bahn zu generieren...
    "Es ist weit besser, große Dinge zu wagen, ruhmreiche Triumphe zu erringen, auch wenn es manchmal bedeutet, Niederlagen einzustecken, als sich zu den Krämerseelen zu gesellen, die weder große Freude noch großen Schmerz empfinden, weil sie im grauen Zwielicht leben, das weder Sieg noch Niederlage kennt." Theodore Roosevelt - President of the United States (1901-1909)

  11. #19
    Registriert seit
    06.10.2003
    Beiträge
    3.414
    Danke
    451
    Erhielt 506 Danke für 408 Beiträge

    Standard

    Zitat Zitat von Markus Beitrag anzeigen
    hm aber du hast ja dann weder eine start- noch eine stoprampe?...
    Nein, die hätte ich so nicht, jedenfalls nicht "definiert". Ich berechne lediglich meinen Sollwert zwischen Start- und Endposition über der Zeit. Den Rest macht der P-Regler und eine Geschwindigkeitbegrenzung.

    v = P * (Istpos-Sollpos) // Sollpos ist mein berechneter Wert

    Ich merke schon, du brauchst es exakter. Für meinen Fall müsste es jedoch ausreichen, hoffe ich.


    Gruß, Onkel
    Es gibt viel mehr Leute, die freiwillig aufgeben, als solche, die echt scheitern.
    Henry Ford

  12. #20
    Avatar von Markus
    Markus ist offline Administrator
    Themenstarter
    Registriert seit
    16.06.2003
    Ort
    88356 Ostrach
    Beiträge
    4.812
    Danke
    1.231
    Erhielt 1.101 Danke für 527 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    ich gehe davon aus das dein unterer grenzwert wür die positionierzeit duch die v-max gerechnet wird, eine zeitvorgabe die mit v-max nicht erreicht werden kann macht ja keinen sinn, somit wäre der parameter sinnlos.

    in deinem fall wäre ggf. dann auch das interessant, damit habe ich inzwischen auch einige sps-positionierungen sauber am laufen:

    Zitat Zitat von HMI-Muckel Beitrag anzeigen
    Hallo Markus,

    ich würd es so machen:
    v = sqrt(2*a*(Sist-Ssoll))
    anschliessend mit v auf einen Rampenbaustein gehen
    dessen Rampensteigung "a" entspricht.
    Das daraus resultierende V ist die gesuchte Sollgeschwindigkeit.
    Es fellen nur noch die nötigen Verriegelungen zum Start der
    Positionierung

    Beste Grüsse
    Martin

    einen P-Regler schalte ich ja auch nach, der ist auch wichtig!
    Ggf. noch mit einem I-Anteil, falls bei kleinen Positionsänderungen das Moment zum anfahren nicht ausreicht.

    P = (Sollpos_Zyklus - Istpos_Zyklus) * P-Faktor
    "Es ist weit besser, große Dinge zu wagen, ruhmreiche Triumphe zu erringen, auch wenn es manchmal bedeutet, Niederlagen einzustecken, als sich zu den Krämerseelen zu gesellen, die weder große Freude noch großen Schmerz empfinden, weil sie im grauen Zwielicht leben, das weder Sieg noch Niederlage kennt." Theodore Roosevelt - President of the United States (1901-1909)

Ähnliche Themen

  1. CRC berechnen
    Von H.Scorpio im Forum Simatic
    Antworten: 6
    Letzter Beitrag: 20.01.2011, 18:05
  2. 2^x berechnen
    Von TimoK im Forum Simatic
    Antworten: 4
    Letzter Beitrag: 23.02.2010, 09:31
  3. Kontrolle der Verfahrbereiches 2er Achsen auf einer Bahn
    Von dborn im Forum Programmierstrategien
    Antworten: 9
    Letzter Beitrag: 24.08.2008, 21:09
  4. K-Zahl im Gas berechnen.
    Von Bender25 im Forum Simatic
    Antworten: 6
    Letzter Beitrag: 07.06.2007, 13:56
  5. Kalenderwoche berechnen
    Von Simatics im Forum Simatic
    Antworten: 1
    Letzter Beitrag: 06.05.2007, 21:59

Lesezeichen

Berechtigungen

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