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
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.
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
> 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.
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
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.