Forum: PC-Programmierung PID Controller in MatLAb


von PID (Gast)


Lesenswert?

Hallo,

ich hoffe hier kann mir jemand helfen.
Ich muss in MatLab die Temperatur eines Durchlauferhitzers über einen 
PID-Controller regeln. Nun habe ich leider nicht so viel Erfahrung im 
Programmieren und die Umsetzung fällt mir dementsprechend schwer.

Wenn jemand über meinen Code schauen könnte und mir sagen kann ob der 
logische Aufbau so weit ersteinmal stimmt oder nicht wäre mir schon sehr 
geholfen.

Vielen Dank!



T_HM_soll ist die Führunsgröße

while T_HM < T_HM_soll

    k=k + 1;

        error=T_HM_soll-T_HM;

        %integration
        int_error = int_error + (error * Dt);

        if int_error > 2                       %I-Anteil begrenzen
            int_error = int_error + error;

        end

        % differentiation
        diff_error = (error-prev_error) / Dt;

            % scaling
            p_term = (Kp * error);
            i_term = (Ki * int_error);
            d_term = (Kd * diff_error);

            % Summe
            control = p_term + i_term + d_term;

        % alten Fehler mit aktuellem Fehler überschreiben
        prev_error = error;

        dT_HM = control;

    time = time + Dt;
    T_HM = T_HM_V + dT_HM;

    disp(T_HM)
    Results(k,:)=[ T_HM, time];
    disp(Results)

end

von Mostpfeife (Gast)


Lesenswert?

Also. Schreib den Regler zuerst mal als P-Regler. Den kannst du 
durchsteppen, bis er das tut was er soll. Dann fuegst du einen I-Anteil 
hinzu. Und setzt den P-Anteil auf Null. Wieder durchsteppen, bis es tut 
was es soll. Dann beides kombinieren.

Allenfalls kannst du die Werte auch als Graph in ein Fenster malen.

von Anonymus (Gast)


Lesenswert?

PID schrieb:
> while T_HM < T_HM_soll

TROLL Dein Code ist bullshit! Deine 'Regelung' funktioniert nur 
solange T_HM (aktuelle Temperatur?) kleiner als die Führungsgroße ist; 
oberhalb findet keine Regelung statt!!!

Meine TROLL Meinung:

MATLAB besitzt Module die für die Auslegung von Regelungen gedacht sind! 
- Wenn du diese besitzt (muss man extra kaufen) dann benütz sie, 
ansonsten verwende besser Scilab!

Dort heist das irgendwie computer aided control design oder so. - Die 
Parameter der Regelstrecke erst mal bestimmen und dann dafür eine 
passende Regelung entwerfen, die dann ganz hübsch mit besagter Software 
simuliert werden kann.

Wie's scheint würd's nicht schaden, wenn dich ein bisschen über 
Regelungen schlau machen würdest! Wikipedia hat da einiges zu bieten ;) 
- probiers mal mit Regelung, Regelstrecken usw.

lg

von Mostpfeife (Gast)


Lesenswert?

> TROLL Dein Code ist bullshit! Deine 'Regelung' funktioniert nur
solange T_HM (aktuelle Temperatur?) kleiner als die Führungsgroße ist;
oberhalb findet keine Regelung statt!!!


Naja. Wenn die Solltemperatur ueberschritten ist, schaltet das 
Kuehlagregat zu, resp, wird die Dusche eingeschaltet. Das wird hier 
nicht betrachtet.

von Ben Z. (grubenfeuer)


Lesenswert?

Vielen Dank für die Antworten.

Wenn es die Nachwelt interessiert, hier ist der Code welcher nun bei mir 
wie gewünscht funktioniert hat.

Viele Grüße

%% Integration Loop
while abs(T_soll-T_ist) > error_max


    %% PID
    error = (T_soll-T_ist);


    error_int= error + error_int;


    error_diff= (pre_error-error)/Dt;

    T_ist=T_ist+(error*Kp + error_int*Ki + error_diff*Kd);


    pre_error=error;




end

: Bearbeitet durch User
von Pandur S. (jetztnicht)


Lesenswert?

Der Integration Loop laeft auch nur bis er aufgeheizt hat, bis

T_soll - T_ist <= error_max

erreicht ist, dann fliegt er raus und beendet. Da ist nichts mit 
Temperatur halten oder so ... eigentlich ist ein Zweipunkt Regler, der 
oben ausschaltet, und ausgeschaltet bleibt, genauso gut.

: Bearbeitet durch User
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.