Forum: Mikrocontroller und Digitale Elektronik Verkehrte Welt, Parameter PI-Regler!


von Heisenberg (Gast)


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!

von SPSler (Gast)


Lesenswert?

Du wirst irgendwo einen Fehler haben. Glaskugel ist bis Mittwoch 
ausgeliehen.

von Ulrich B. (utb)


Lesenswert?

Liegt bestimmt an der Unschärfe ;-P .... kleiner Witz am Rande auf 
Kosten des Gastes...
Mein Vorredner hat schon gesagt ohne mehr Infos geht da nix. Das einzige 
STichwort was mir spontan einfällt analog-digital richtig umgerechnet?

von Heisenberg (Gast)


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;

von Heisenberg (Gast)


Lesenswert?

danke für die tipps.
ich muss die regelgröße am ende noch umrechnen. der regle läuft 
prozentual von 0-100.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.