Verkehrte Welt, Parameter PI-Regler!

Gast #2763049
Lesenswert?

servus,
ich arbeite mich gerade in das thema regelungstechnik ein.
ich möchte den wasserdruck (0-2 bar) mit einer pumpe (1-5V bzw 0- 16300 
DA Wandler) regeln die errechneten parameter stimmen jedoch nicht mit 
den funktionierenden parametern überein.
realisiert wird das ganze mittels sps (codesys) und ethercat klemmen, 
sowie einer kreiselpumpe.

zuerst nehme ich die sprungantwort in einem array auf.
250 druckwerte, wenn die pumpe von 8000-12000 erhöht wird und 5 sekunden 
läuft.
aus den messwerten errechne ich dann mittels wendetangente die werte kp 
und ki.
die parameter gebe ich dann an einen pi-reglerbaustein aus der 
oscat-lib.
die erechneten werte liegen bei kp ca 1 , ki ca 117.

wenn ich nun aber mit diesen werten den regler betreibe er ist super 
langsam.

mit werten wie ki = 10000 und kp = 0.5 läuft alles prima.

was übersehe ich? was mache ich falsch?
helft mir azubi auf die sprünge!
Gast #2763134
Lesenswert?

ok hier etwas quellcode, scheint vom prinzip aber ja schon mal richtig 
gedacht zu sein.
1
(****Regelstrecke aufnehmen****)
2
IF isAufnahme = true THEN
3
  DuoPumpe:=6000;
4
  MyTrigger(IN:= DoTrig , PT:= T#5S , Q=> OutTrig, ET=> Zeit2);
5
  DoTrig:= TRUE;
6
  IF OutTrig = TRUE AND Messdurchgang <=250 THEN
7
    DuoPumpe:= 12000;
8
    Regelstrecke[Messdurchgang]:= Druck1;
9
    Messdurchgang := Messdurchgang +1;
10
    ELSE
11
    DuoPumpe:=0;
12
  END_IF
13
END_IF
14

15
(****Regelparameter errechnen****)
16
IF isBerechnung = TRUE AND SollDruck > 0 THEN
17
//Messdurchgang := 200;
18
ZEIT := TIME_TO_LREAL(Zeit2); //Gesamtzeit umwandeln
19
//Zeit:= 2;
20
tangente_m:=0;
21
tangente_t:=0;
22
tangente_wert:=0;  
23
    
24
    FOR i:=0 TO Messdurchgang BY 1 DO 
25
        steigung := Regelstrecke[i+1]-Regelstrecke[i];
26
        IF tangente_m<steigung THEN
27
            tangente_m:=steigung;
28
            tangente_t:=i;
29
            tangente_wert:=Regelstrecke[i];
30
        END_IF;
31
     END_FOR;
32
    
33
    
34
    tu_t:=(Regelstrecke[0]+tangente_m*(tangente_t)-tangente_wert)/tangente_m;
35
    tu_tg_t:=(Regelstrecke[Messdurchgang-1]+tangente_m*(tangente_t)-tangente_wert)/tangente_m;
36
    
37
    tu:= tu_t/(Messdurchgang)*ZEIT;
38
    
39
    tg:= tu_tg_t/(Messdurchgang)*ZEIT - tu;             
40
    delta_x:=Regelstrecke[Messdurchgang-1]-Regelstrecke[0];    
41
    delta_y := SollDruck;    
42
    ks:=delta_x/delta_y;    
43
    k_welle:= tg / (ks*tu);
44
  
45
  //Faktoren siehe http://de.wikipedia.org/wiki/Faustformelverfahren_(Automatisierungstechnik)
46
  kp:= 0.7 *k_welle;
47
  tn:=  2.3* tu;
48
  //ki:= 1 / kp; //?
49
  ki:= tn/kp;
50

51
(****Regler****)
52
IF isRegler = TRUE THEN
53

54

55

56
PiRegler(
57
    ACT:= Druck1, 
58
    SET:= SollDruck, 
59
    SUP:= 0.02, 
60
    OFS:= 6000, 
61
    M_I:=0 , 
62
    MAN:= FALSE, 
63
    RST:= FALSE, 
64
    KP:= kp , 
65
    KI:= ki, 
66
    LL:= 0, 
67
    LH:= 16300 , 
68
    Y=> Regelgroesse, 
69
    DIFF=> , 
70
    LIM=> );
71
    
72
DuoPumpe := REAL_TO_INT(Regelgroesse);
73
END_IF;
74
END_IF;

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren