Sie sind auf Seite 1von 4

Reglerberechnung mit der TMethode

Reglerberechnung mit der T ∑ Methode
Reglerberechnung mit der T ∑ Methode
T-Summen-Regel Diese Regel gilt für Strecken mit Tiefpassver halten, die eine S-förmige Sprungantwort aufweisen. Sie

T-Summen-Regel

Diese Regel gilt für Strecken mit Tiefpassverhalten, die eine S-förmige Sprungantwort aufweisen. Sie sind durch die Übertragungsfunktion

aufweisen. Sie sind durch die Übertragungsfunktion beschrieben sind, wird die Summenzeitkonstante
aufweisen. Sie sind durch die Übertragungsfunktion beschrieben sind, wird die Summenzeitkonstante

beschrieben sind, wird die Summenzeitkonstante

Zeitkonstanten abzüglich aller differenzierenden Zeitkonstanten gebildet: [4]

als Summe aller verzögernden

gebildet: [ 4 ] als Summe aller verzögernden Die Summenzeitkonstante kann auch direkt aus der

Die Summenzeitkonstante kann auch direkt aus der experimentell ermittelten Übergangsfunktion ermittelt werden. Es gilt

ermittelten Übergangsfunktion ermitt elt werden. Es gilt mit Sprungantwortfunktion der Regelstrecke . Für die

mit

Übergangsfunktion ermitt elt werden. Es gilt mit Sprungantwortfunktion der Regelstrecke . Für die

Sprungantwortfunktion der Regelstrecke.

Für die Reglereinstellungen gilt dann folgendes:

. Für die Reglereinstellungen gilt dann folgendes:  PI-Regler:  PID-Regler: oder für schnelleren

PI-Regler:

PID-Regler:

gilt dann folgendes:  PI-Regler:  PID-Regler: oder für schnelleren Regelverlauf:  PI-Regler: 

oder für schnelleren Regelverlauf:

gilt dann folgendes:  PI-Regler:  PID-Regler: oder für schnelleren Regelverlauf:  PI-Regler:  PID-Regler:

PI-Regler:

PID-Regler:

gilt dann folgendes:  PI-Regler:  PID-Regler: oder für schnelleren Regelverlauf:  PI-Regler:  PID-Regler:

using System;

using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Windows.Forms; using System.IO;

namespace TSummenRegler

{

public partial class Form1 : Form

{

public Form1()

{

InitializeComponent();

}

int AnzahlMesswerte;

float fSummeA1, fSummeA2 = 0;

float TSumme, fMax, fMin, Ks, Kp, Ki, Kd, Tn, Tv, fMaxStellwert = 0;

float[] messdaten;

float[] FlaecheA1, FlaecheA2;

private void Form1_Load(object sender, EventArgs e)

{

}

// Einlesen der Messwerte und im Array messdaten abspeichern // den ersten und den letzten Messwert sowie // die Anzahl der Messwerte in den Textboxen ausgeben private void button1_Click(object sender, EventArgs e)

{

 

textBox1.Clear();

string[] asciimesswerte = File.ReadAllLines(@"messwerte.txt", Encoding.Default);

AnzahlMesswerte = asciimesswerte.Length; messdaten = new float[AnzahlMesswerte];

float f = 0;

for (int l = 0; l < AnzahlMesswerte; l++)

{

float.TryParse(asciimesswerte[l], out f); messdaten[l] = f; textBox1.Text += f.ToString() + Environment.NewLine;

}

fMax = messdaten[AnzahlMesswerte - 1]; fMin = messdaten[0];

txtMax.Text = fMax.ToString(); txtMin.Text = fMin.ToString(); txtAnzahl.Text = AnzahlMesswerte.ToString();

}

// Die Flächen berechnen und vergleichen, wenn die Werte gleich

// sind ergibt die Positition auf der Zeitachse (x) das Ergebnis private void btnTSumme_Click(object sender, EventArgs e)

{

textBox2.Clear();

textBox3.Clear();

float f = 0; fSummeA1 = 0; fSummeA2 = 0;

FlaecheA1 = new float[AnzahlMesswerte];

FlaecheA2 = new float[AnzahlMesswerte];

for (int loop = 0; loop < AnzahlMesswerte; loop++)

{

f = messdaten[loop];

fSummeA1 = fSummeA1 + (f - fMin); FlaecheA1[loop] = fSummeA1;

textBox2.Text += "l=" + loop.ToString() + " A1=" + fSummeA1.ToString() + Environment.NewLine;

}

int max = AnzahlMesswerte - 1;

for (int loop = 0; loop < AnzahlMesswerte; loop++)

{

f = messdaten[AnzahlMesswerte - 1 - loop]; fSummeA2 = fSummeA2 + (fMax - f); FlaecheA2[loop] = fSummeA2;

textBox2.Text += "l=" + loop.ToString() + " A2=" + fSummeA2.ToString() + Environment.NewLine;

}

// textBox3.Clear(); int ergebnis = 0; float a1, a2, diff, diffalt, ttemp = 0; diff = 0; diffalt = 0;

for (int loop = 0; loop < AnzahlMesswerte; loop++)

{

a1 = FlaecheA1[loop]; a2 = FlaecheA2[AnzahlMesswerte - 1 - loop]; if ((a1 < a2) && (loop > 20)) { ttemp = diff; ergebnis = loop; } diffalt = diff; diff = a1 - a2;

textBox3.Text += "l=" + loop.ToString() + " Diff=" + diff.ToString() + Environment.NewLine;

}

f = (fSummeA1 + fSummeA2); txtTSumme.Text = ergebnis.ToString();

}

// Berechnen der Reglerparameter

private void btnParameter_Click(object sender, EventArgs e)

{

float.TryParse(txtMaxStell.Text, out fMaxStellwert); Ks = (fMax - fMin) / fMaxStellwert; txtKs.Text = Ks.ToString();

if (chkSchnell.Checked) Kp = 2 / Ks; else Kp = 1 / Ks; txtKp.Text = Kp.ToString();

if (chkSchnell.Checked) Kp = 2 / Ks; else Kp = 1 / Ks; txtKp.Text = Kp.ToString();

fMax = messdaten[AnzahlMesswerte - 1]; fMin = messdaten[0];

TSumme = 0; float fx = 0; float fy = 0; float.TryParse(txtTSumme.Text, out TSumme); if (chkSchnell.Checked) float.TryParse("0,8", out fx); else float.TryParse("0,66",

out fx);

if (chkSchnell.Checked) float.TryParse("0,194", out fy); else float.TryParse("0,167", out fy); Tn = TSumme * fx; txtTn.Text = Tn.ToString(); Tv = TSumme * fy; txtTv.Text = Tv.ToString(); Ki = Kp / Tn; txtKi.Text = Ki.ToString(); Kd = Kp * Tv; txtKd.Text = Kd.ToString();

}

}

}