Step 7 PT1-Glied

Stadi

Level-1
Beiträge
16
Reaktionspunkte
0
Guten Tag zusammen,

Ich bräuchte ein PT1-Glied für die Programmierung einer Regelung. Ich möchte einen fertigen verwenden und habe eigentlich nur diesen gefunden.
http://support.automation.siemens.c...objaction=csview&extranet=standard&viewreg=WW

Aber mir kommt die Gleichung, die hier als Grundlage dient, etwas komisch vor. Kann ich dieses Projekt verwenden ?

Mfg Stadi

Hallo

ich habe die zeitdiskrete Formel von Wikipedia, mit sehr gutem Ergebnis genutzt.
http://de.wikipedia.org/wiki/PT1-Glied

Gruß

Es gibt verschiedene Möglichkeiten, eine Funktion zu diskretisieren. Für nen PT1 war da auch etwas mit ner Exponentialfunktion dabei. Ob die von Siemens jetzt stimmt, hab ich auch nicht im Kopf. Kannst ja mal beide in Excel oder Matlab nachprogrammieren und schaun, ob was ähnliches rauskommt.

Was hast Du denn mit dem PT1 bei der Regelung vor?

Gruß.
 
Die Formeln von Siemens und Wikipedia sind eigentlich identisch. Wenn man mal für die Faktoren Werte einsetzt und ausrechnet, kommt bei der e-Funktion in etwa das selbe raus wie bei dem Bruch von Wikipedia.

Gruß.

PS: bei der Formel von Siemens fehlt der Verstärkungsfaktor K (bzw. K=1), somit ist der Baustein wie dort auch beschrieben nur als Filter einsetzbar und kein vollständiges PT1. Wenn Du das K brauchst, musst Du es noch nachträglich in den Baustein einbauen.
 
Zuletzt bearbeitet:
Zuviel Werbung?
-> Hier kostenlos registrieren
Pefekt, danke für die schnellen Antworten!
Verstärkungsfakor werde ich nicht brauchen, da ich diesen als Filter verwenden werde. Also werde ich wahrscheinlich diesen von siemens verwenden.
Einsetzen werde ich ihn, um kurzzeitige Kraftsprünge, die ich mit einem Kraftsensor messe, wegzuschneiden.

Eine weitere Frage noch, weiß zufällig wer wie ich eine lineare Rampenfunktion programmieren kann bzw. müsste diese eigentlich auch schon fertig wo zu finden sein oder ?
Den Endwert und die Zeit die er dabei benötigt möchte ich vorgeben.

Nachtrag:
Dieser müsste eigentlich passen oder ?
http://www.goetz-automation.de/SPS/Rampe_FB19.htm

Danke für eure Antworten !
Mfg
 
Zuletzt bearbeitet:
Pefekt, danke für die schnellen Antworten!
Verstärkungsfakor werde ich nicht brauchen, da ich diesen als Filter verwenden werde. Also werde ich wahrscheinlich diesen von siemens verwenden.
Einsetzen werde ich ihn, um kurzzeitige Kraftsprünge, die ich mit einem Kraftsensor messe, wegzuschneiden.

Eine weitere Frage noch, weiß zufällig wer wie ich eine lineare Rampenfunktion programmieren kann bzw. müsste diese eigentlich auch schon fertig wo zu finden sein oder ?
Den Endwert und die Zeit die er dabei benötigt möchte ich vorgeben.

Nachtrag:
Dieser müsste eigentlich passen oder ?
http://www.goetz-automation.de/SPS/Rampe_FB19.htm

Danke für eure Antworten !
Mfg
 
Eine weitere Frage noch, weiß zufällig wer wie ich eine lineare Rampenfunktion programmieren kann bzw. müsste diese eigentlich auch schon fertig wo zu finden sein oder ?
Den Endwert und die Zeit die er dabei benötigt möchte ich vorgeben.

Manchmal ist es schneller, einen Zehnzeiler mal eben selbst zu schreiben. Etwas Nachdenken hat auch noch nie geschadet ;)

hier mal die Lösung in SCL in einem Weckalarm-OB:

Code:
FUNCTION_BLOCK FB999
TITLE   = 'RAMPE'
// Rampenfunktion
NAME    : RAMPE
FAMILY  : xyz
AUTHOR  : xyz
VERSION : '0.1'

VAR_INPUT
    INfVal       :REAL :=0.0;     //Eingangswert
    T_Ramp       :REAL :=1.0;     //Änderungsgeschwindigkeit [1/s]
    SAMPLE_T     :REAL := 1.0; //sample time
END_VAR

VAR_OUTPUT
    QfVal    :REAL :=0.0;  //Ausgangswert  
END_VAR
VAR
   Step      : REAL := 0.0;  // Schrittweite
   QfVal_int : REAL := 0.0;  // Ausgangswert intern  
END_VAR

BEGIN;
    
// Rampenberechnung ====================
Step:= T_Ramp * Sample_T;
         
IF  QfVal_int >  INfVal + Step THEN         
    QfVal_int := QfVal_int - Step;
ELSIF QfVal_int <  INfVal - Step THEN        
    QfVal_int := QfVal_int + Step;
ELSE
    QfVal_int := INfVal;
END_IF;    
  
// Zuweisung der Ausgänge
QfVal := QfVal_int;
    
END_FUNCTION_BLOCK

Gruß.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Danke ! :)

Hab jetzt nur noch das Problem, dass ich nicht weiß wie ich fg nun in die Formel des PT1 Glieds einbeziehen kann.
Sollte um die 500mHz sein.
Wahrscheinlich muss ich fg in F_tau umrechen oder ?
Zusammenhang ?

Mfg
 
Hätte ich bei Google etwas gefunden, würde ich jetzt nicht fragen...

Richtig ? :
f_Tau=1/(2*pi*fg)
 
Zuletzt bearbeitet:
ja meine Hauptsorge war ob, T= mein f_Tau von dem Projekt ist.
Glaube mittlerweile, dass es das selbe ist.
Danke
 
Die Grenzfrequenz bezieht sich auf deine Abtastfrequenz.
Mal angenommen du programmierst einen zeitdiskretes PT1-Glied mit

y = yalt + c * (x - yalt)

x ist der Eingangswert (Messwert)
y ist der Ausgangswert
yalt ist der Ausgangswert des letzten Aufrufs
c ist die Zeitkonstante

Diese Funktion wird nun in einem zyklischen Task wie dem OB35 im 100ms Zyklus aufgerufen, mit c=0,1

c ist zusammengesetzt aus:

c = 1 / (T / tAbtast + 1)

tAbtast ist der Aufrufzyklus mit 100ms, also 0,1s.
Jetzt möchtest du die -3db Grenzfrequenz bestimmen.

obiges umgestellt nach T
T = tAbtast * ( 1/c - 1)

Werte einsetzen:
T = 0,1s * (1/0,1 - 1)
T = 0,9s

Mit:
omega = 1 / T
und
omega = 2 * pi * f

kommt man an die Frequenz mit
f = (1 / T) / (2 * pi)

eingesetzt
f = (1 / 0,9s) / (2 * pi)
f = 0,177 Hz

Kann man sich auch zu einer griffigen Formen nur mit c und fAbtast vereinfachen.

Im Anhang der Frequenzgang bei drei verschiedenen Werten für c.

Wenn du aber wirklich mit einer definierten Grenzfrequenz filtern und nicht nur grob glätten willst (sonst hättest du wohl keine Angabe von 0,5 Hz), würde ich einen Filter mit einer größeren Flankensteilheit verwenden.
 

Anhänge

  • IIR_Filter_C01_C001_C0001.png
    IIR_Filter_C01_C001_C0001.png
    7,8 KB · Aufrufe: 47
Zurück
Oben