PI-Regler in C

Hallo Leute,

ich habe folgenden Quellcode für einen PI-Regler verwendet:

int druck_regler(void)
{
kp=0.890909;
ki=1.15888;
ta=0.25; //soll 0.25 ms entsprechen
esum=esum+regdiffp;
if (esum 2.75) {esum= 2.75;}
// printf("\n esum hat folgenden Wert: %3.3f", esum);
regaus=kp*regdiffp + ki*ta*esum; //Reglergleichung
if (regaus regausbegrenz) {regaus=regausbegrenz;}
// printf("\n Der Regler gibt folgenden Wert aus: %3.3f", regaus);
return 0;
}

Die Regelung tut auch das was sie soll, nun aber meine Frage:
Hat jemand ne Ahnung wie das mit dem ta ist und ob das wirklich so 0,25ms entspricht??? Hab nicht so die Ahnung von Regelungstechnik, soll aber eine Regelung programmieren (Vorlage ist ein fertiges Labview-Programm). Der erste Teil der Regelung steht und funktioniert, auch sind mir alle Programmdurchlaufzeiten (meines C-Codes) bekannt. Nur das ta macht mir Kopfzerbrechen, da ich nicht weiss ob dies so stimmt und funktioniert oder ich das mit dem ta völlig falsch verstehe.
(Abtastzeit???)

Danke

MfG
Ronny

Hallo Leute,

ich habe folgenden Quellcode für einen PI-Regler verwendet:


Die Regelung tut auch das was sie soll, nun aber meine Frage:
Hat jemand ne Ahnung wie das mit dem ta ist und ob das
wirklich so 0,25ms entspricht??? Hab nicht so die Ahnung von
Regelungstechnik, soll aber eine Regelung programmieren
(Vorlage ist ein fertiges Labview-Programm). Der erste Teil
der Regelung steht und funktioniert, auch sind mir alle
Programmdurchlaufzeiten (meines C-Codes) bekannt. Nur das ta
macht mir Kopfzerbrechen, da ich nicht weiss ob dies so stimmt
und funktioniert oder ich das mit dem ta völlig falsch
verstehe.
(Abtastzeit???)

Danke

Hallo,

Abtastzeit wird schon stimmen, bloss hat dein Programm ja bisher überhaupt keinen Bezug zu irgendeiner Zeit. Ein Programm regelt auch nicht kontinuierlich, weil das garnicht geht, sondern in bestimmten Zeitabständen, was du geschrieben hast, ist die Befehlsfolge für 1 solche „Abtastung“. Du müsstest jetzt noch dafür sorgen, dass diese Routine alle ta Millisekunden ausgeführt wird, z.B. mit einem Windows-Timer.

Und wenn du aus irgendwelchen Gründen stattdessen 10 ms brauchst, must du eben dein Programm alle 10 ms ausführen UND ta auf diesen Wert ändern.

In Labview gibt es sicher eine einfache Möglichkeit, eine solche Regelroutine zyklisch auszuführen, das ist ja der Normalfall für solche Software.

Gruss Reinhard