Hallo Gerne würde ich einmal wissen wie man am besten einen digitalen PI Regelalgorithmus in Maltlab testen kann. Und zware möchte ich den programmierten PI-Regler mit der entsprechenden Strecke in Matlab simulieren um die Regelparameter einstellen zu können. Ideal wäre es wenn man für die Strecke nicht extra eine DGL austellen müsste und die diskret durchrechnen sondern die Matlab Befehle wie TF() usw brauchen könnte. Hat jemand von euch schoneinmal so etwas realisiert?
Na ja freut mich zu höhren. Kannst du mir hier ein paar tips geben wie du das realisiert hast? oder ein entsprechendes matlab file? gruss
Hallo Gabi Ehrlich gesagt eine nicht sehr hilfreiche Antwort! Ich verstehe nicht so recht was du mit diesen Antworten bezweckst. Wenn du keine Auskunft geben willst, kannst dann musst du ja nicht zwingend Antworten. Ich kenne Matlab und ich kenne Simulink. Mir ist aber nicht klar wie ich in Simulink einen Regel-Algorithmus einbinden kann, das war ja meine Frage. Dazu wäre ich froh ein paar tips oder bsp. zu bekommen. Gruss Tobias
ok... das ist ein konkretes problem. wie lautet dein regel-algorithums? um was für eine regelstrecke handelt es sich?
>wie lautet dein regel-algorithums? normaler PI regler >um was für eine regelstrecke handelt es sich? um anzufangen und einarbeitung in matlab einfache PT1 strecke
Danke für den Link. Was ich jetzt noch vermisse wie binde ich meinen algorithmus den ich ja programmiere in das simulink model(anstelle der simulink blöcke) ein? Es gibt sicherlich eine möglichkeit einen Simulink Block selbst zu erstellen der dann meine programmierte funktion aufruft.
im einfachsten fall -> transfer funktion... wo du dann zähler, nenner nach doppelklick eingeben kannst (num, den)!
meine idee: in matlab programmiere ich den pi-regler gleich wie ich den in meinem zielsystem prozessor porgrammieren würde. das ist ja eigentlich der sinn der ganzen geschichte. in simulink arbeite ich mit den blöcken transferfkt. für die strecke oszilloskop für die ausgabe usw. damit muss ich in matlab weniger programmieren. kann man diese module zusammenschalten wie ich mir das vorstelle? wenn ja wie?
du kannst mit gedrückter linker maustaste von den ausgängen der blöcke verbindungen zu den eingängen anderer blöche ziehen (abzweigungen mit zusätzlich gedrückter strg-taste)... kannst dir dann beliebige regelkreise aufbauen. im einfachten fall: sollwert -> summierstelle -> regler -> strecke -> rückkopplung auf summierstelle (vorzeichen beachten)...
wie kann ich selbst einen block programmieren? bzw. wie kann ich dann die verbindung von simulink zu meinem programmcode herstellen?
@Thomas Das ist genau was ich gesucht habe, funktioniert bestens. Besten Dank
Hallo Nun bin ich ein bisschen am Üben. Das erste Beispiel Programm sollte ein einfaches RC-Glied sein das ich wie folgt in die Funktion PT1 programmiert habe.
1 | function y = pt1(u) |
2 | |
3 | dt = 0.001; |
4 | tau = 0.02; |
5 | |
6 | uc_1 = 0; |
7 | |
8 | for k=1:length(u) |
9 | y(k) = 1/tau*(u(k)-uc_1)*dt + uc_1; |
10 | uc_1 = y(k); |
11 | end
|
uc_1 sollte in dieser funktion eingentlich gespeichert werden bis zum nächsten aufruf von Simulink. Das funktioniert jedoch noch nicht so richtig. Hat jemand eine Idee wie ich das richtig realisieren kann? Im Anhang das Simulink Model.
1 | persistent uc_1; |
2 | if isempty(uc_1) |
3 | uc_1 = 0; |
4 | end |
deinen Code solltest du aber auch nochmal überarbeiten, in deiner Embedded Matlab Function sind u und y Skalare.
Hallo Thomas Besten dank funtioniert, der Code für alles diese Interessiert sieht folgendermassen aus:
1 | function y = pt1(u) |
2 | |
3 | dt = 0.001; |
4 | tau = 0.02; |
5 | |
6 | persistent uc_1; |
7 | if isempty(uc_1) |
8 | uc_1 = 0; |
9 | end
|
10 | |
11 | y = 2*1/tau*(u-uc_1)*dt + uc_1; |
12 | uc_1 = y; |
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.