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

Ergebnis 1 bis 2 von 2

Thema: Rampengenerator

  1. #1
    Registriert seit
    28.08.2009
    Beiträge
    15
    Danke
    1
    Erhielt 0 Danke für 0 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Hallo Ihr!

    Ich muß euch mal wieder was fragen.
    Und zwar habe ich einen Rampenbaustein, welcher eigentlich sehr gut funktioniert.

    Ich habe eine Beschleunigungsphase - Konstantfahrt - und Abbremsphase.
    Schön und gut.
    Jetzt bin ich leider gezwungen worden, während meiner Konstantfahrt die Geschwindigkeit zu verändern.
    Das geht leider nicht so einfach.
    Ich habe schon probiert rumzudoktorn, aber klappt nicht.
    fVelocity : bekommt einen anderen Wert...

    Vielleicht könnt ihr mir weiter helfen:


    INFO:
    Am besten alle IN/Out-Variablen mal zu dem Baustein:

    VAR_INPUT
    bStart : BOOL;
    bStop : BOOL;
    fStartPos : LREAL;
    fTargetPos : LREAL;
    fVelocity : LREAL; (* > 0 *)
    fAcceleration : LREAL; (* > 0 *)
    fDeceleration : LREAL; (* > 0 *)
    END_VAR
    VAR_OUTPUT
    bDone : BOOL; (*fertig*)
    fSetPos : LREAL; (* generierter Sollposition *)
    fSetVelo : LREAL; (* generierte Sollgeschwindigkeit *)
    END_VAR



    Hier der Baustein (nur der wichtige Teil):
    ..

    ...

    MOVE_CONSTANT: (*Phase 2*)
    (* weiter mit konstanter Geschwindigkeit *)
    fTimePhase2 := fTimePhase2 + FastCycleTime; (*Zähler für Phase 2 = t+Zykluszeit *)
    fDistancePhase2 := fDistancePhase1 + fSetVelo * fTimePhase2 * diSetDirection; (* s = v * t + s0 *)
    fSetPos := fPosPhase1 + fSetVelo * fTimePhase2; (* s = v * t + s0 *)
    fSetVelo := fVelocity * diSetDirection;
    fSetAcc := 0;

    fBreakTime := ABS(fSetVelo / fDeceleration); (* t = v / a *)
    fBreakDistance := ABS(fDeceleration/2 * fBreakTime * fBreakTime); (* s = 1/2 a * t^2 *)
    fDistanceLeft := fSetDistance - fDistancePhase2;

    IF (fBreakDistance < fDistanceLeft) AND NOT bStop THEN
    (* weiter mit konstanter Geschwindigkeit *)
    fVeloPhase2 := fSetVelo; (*setze aktuelle Geschw. = Geschwind. Phase 2*)
    fPosPhase2 := fSetPos; (*setze aktuelle Position = Position. Phase 2*)
    ELSE
    bAborted := bStop; (*abgebrochen*)
    fPosPhase2 := fSetPos; (*setze aktuelle Geschw. = Geschwind. Phase 2*)
    fVeloPhase2 := fSetVelo;(*setze aktuelle Position = Position. Phase 2*)
    state := DECELERATE; (*wechsel zu Abbremsen*)

    END_IF
    Zitieren Zitieren Rampengenerator  

  2. #2
    Registriert seit
    16.06.2003
    Ort
    88356 Ostrach
    Beiträge
    4.811
    Danke
    1.231
    Erhielt 1.101 Danke für 527 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    "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. Rampengenerator S7-200
    Von leonhard_II im Forum Simatic
    Antworten: 5
    Letzter Beitrag: 09.05.2008, 11:41

Lesezeichen

Berechtigungen

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