mit neuem Cursor (mit Mausbedienung)

Werbung
Prof. Dr. R. Kessler, FH-Karlsruhe, Sensorsystemtechnik, 68613211, S. 1/7
Hubschrauber-Simulation mit Simulink (Matlab 5.3),
mit Cursor und Funktion Fragtext
homepage: http://www.home.hs-karlsruhe.de/~kero0001/
zum konstruktiven Aufbau und zum Chaos-Effekt siehe.
http://www.home.hs-karlsruhe.de/~kero0001/hubschrauber/hubteph4HS.html
In diesem Text wird ein neuentwickelter Cursor zum Abfragen der Matlab-Bilder
eingeführt und dessen Funktionsweise wird beschrieben.
Außerdem werden die zu variierenden Parameter mit einer neuen Eingabefunktion
(fragtext) eingegeben
Datei hub_60.mdl
Kessler, 1.12. 2002
5.5.2005
Hubschrauber mit realen Parametern, vgl. Tephys hubrep5.txt
hub_60.mdl: Weg-Integrierer mit Startwert xst
W
i
Fa
W-periodisch
UnivRegler
t
Clock
+-Umax
HubiMotor
uM
kx
G
konv
outports mit 20000 Punkten
ux
tst
HubiMasse
Aufruf mit rhub_PID: Für PID-Dimens., mit Cursor und Parameterabfrage.
Aufruf mit hubParx (x=1,2, 6,7,10,11..) ; Variation Ap, xst, rGL -->CHAOS-Effekt
1
Subsystem Hubi-Masse
in_Fa
1/m
2
Last
G
3
in_tst
1
s
0
rv*u+rGL*sgn(u)+rt*u*abs(u)
v
1
s
1
out_x
Starwert xst
Weg-Integrierer
hat Startwert xst
reib
Bis zur Zeit tst wird Masse festgehalten auf Position xst
DGLn:
dx/dt = v
m*dv/dt = Fa-G -( rV* v + rGL*sign(v) +rtu*v*abs(v)
Prof. Dr. R. Kessler, FH-Karlsruhe, Sensorsystemtechnik, 68613211, S. 2/7
Subsystem Hubi-Motor
Strom i
UM
1
out_1
1/R
in_1
1
kg
1/J
1/s
+-imax
u = Winkelgeschwind.
des Motors
2.219
kg
Kraft Fa
2
ka*u*abs(u)*( (u>0) +eta*(u<0 ) )
out_2
uM= Motorspannung, w = Winkelgeschwind., J = Träghmoment
Strom i = (uM - kg * w), aber Strom ist begrenzt auf +- imax
Auftriebskraft Fa = ka * w*abs( u ) * ( (w > 0) + eta *( w < 0 ) )
man beachte: w > 0 ist =1, wenn w >0, sonst =0
DGL: J*dw/dt = kg* (i - 2.219 * Fa)
"Universal"-PID-Regler
1
X
kW
2
W
kW*W
1/Ti
1/s
Ap
3
konv -1
Td
du/dt
Bei konv = 1 wird W-X differenziert, bei konv = 0 nur -X
mit kW < 1 wird P-Kanal abgeschwächt
1
Y
Prof. Dr. R. Kessler, FH-Karlsruhe, Sensorsystemtechnik, 68613211, S. 3/7
Subsystem
W-periodisch
Quelle für Sollwert W, anstiegsbegrenzt u. verrundet
1
1/tW
+- vmax
1
W
s
Wmax * sgn ( sin ( 2 *pi* f * u ) )
Clock
Fcn
Zunächst zwei der mit obiger Simulink-Datei erzeugten Bilder.
Später weitere Matlab-Bilder, vorher aber die drei benötigten MatlabDateien zum Aufrufen:
10
Nr
Zeit
1 3.8
2 10.9
8
W
2
2
ux
3.93
4.81
uM/10,
FA
-1.5
-1.5
0
0
W
ux
uM/10
Fa
6
4
2
0
,Ap=20,Td=0,konv=0,Ti=400000,kW=1,vmax=20
-2
0
5
10
15
20
25
30
35
40
45
50
Matlab-Bild 1:P-Regler. Erkenntnis: Regelkreis ist total instabil. Ablesen der „Periode“ der
Regelschwingung aus den beiden Cursorwerten T= 10.9-3.8= 7.1sec, ==> nach Tietze-Schenk Td =T/6.28 =
1.13 sec
10
Nr
Zeit
1 11.5
2 23.9
3 36.1
8
W
2
-2
2
ux
1.93
-1.99
1.97
uM/10,
0.968
0.502
0.968
FA
W
ux
uM/10
Fa
0.3
0.0998
0.3
6
4
2
0
,Ap=20,Td=0.8,konv=0,Ti=6,kW=0.85,vmax=1
-2
0
5
10
15
20
25
30
35
40
45
50
Matlab-Bild 2 „Optimale“ PID- Dimensionierung, vgl. Parameterausdruck im Bild: Ap=20; Td=0.8;
konv=0; Ti=6; kW=0.85: vnmax=1
Prof. Dr. R. Kessler, FH-Karlsruhe, Sensorsystemtechnik, 68613211, S. 4/7
Anschließend die Datei zum Aufrufen obiger Simulink-Schaltung.
Darin Aufruf des Cursors und neue Funktion fragtext
% Datei rhub_PID.m
R. Kessler FH-Karlaruhe, 5.5.2005
% Ziele: 1. neue Funktion fragtext zur Eingabe von Parametern
%
2. neuer Cursor simcurs2
% Mehrfach-Lauf mit Tastaturabfrage einiger Parameter
% Hinweis: bei Eingabe "RETURN" bleibt Wert unverändert
% Variation der PID-Parameter TD, Ti, vmax, kon um "optimale"
% PID-Dimensionierunjg zu erhalten
%
format compact; % verhindert unnötigen Zeilenvorschub
clear; % Löscht alle Variablen. So sollte man jedes Programm beginnen!!
% Vorschlagswerte für die Parameter:
f=0.04; % Frequenz der Führgröße
Wmax=2;
tW =
0.1;
vmax=
20;
dt = 0.0100;
kg = 0.02102;
R
= 3.53;
imax= 2.5;
J
= 6.0274E-5; tst = 1.00000;
xst = 0;
kx =
14.00000
Ti = 4.0E+5;
konv =
0;
Td =
0;
kW = 1;
Ap
= 20;
rGL = 0.10000; % entspricht dem Experiment
Umax = 15.00000;
eta = 0; % bei eta =0 hat der Propeller rückwärts keinen Auftrieb
ka
= 2.46E-6; % für Auftriebskraft Fa
G
= 0.20000; % Gewichtskraft (ist erforderlich bei eta =0, weil
% Hubi bei Rückwärts-Drehrichtung keinen Auftrieb hat
rv
= 0;
rt
= 0;
m
=
1.92700; % Masse
tmax = 50.00000;
% Anschließend Schleife zur Eingabe der zu variierenden Parameter:
nr=0; weiter =1;
% Bei nr = 0 die Schaltung des Modells auf Bildschirm darstellen:
if nr == 0 hub_60; input(''); end;
while weiter == 1,
[Ap,SAp]=fragtext(' Ap', 'Ap', Ap);
[Td,STd]=fragtext(' Td', 'Td', Td);
[konv,Skonv]=fragtext(' D-Anteil konventionell (1/0)', 'konv', konv);
[Ti,STi]=fragtext(' Ti', 'Ti', Ti);
[kW,SkW]=fragtext(' AbschwächFaktor kW im P-Kanal ', 'kW', kW);
[vmax,Svmax]=fragtext(' Geschwind. Sollwertsprung +-vmax ', 'vmax',
vmax);
% Ende der Abfragen, jetzt rechnen:
tic; % Stoppuhr startet
sim('hub_60'); % Simulation ausführen
toc; % Stoppuhr endet
nr = nr +1;
figure(nr); clf reset; % ruft Figur nr auf und löscht Inhalt
set(0,'DefaultLineLineWidth', 1.5); % Kurven dick
plot(t,W, t,ux,'m', t, uM/10+4,'k', t,Fa+6,'r' ); grid on;
axis([0,tmax,-3,10 ]); % sorgt für vorgegebene Achsenbereiche
legend('W','ux','uM/10','Fa');
%/////
Start Cursor: //////
Prof. Dr. R. Kessler, FH-Karlsruhe, Sensorsystemtechnik, 68613211, S. 5/7
tc= t; yc= [W'; ux'; uM'/10; Fa']; % Wichtig: die Vektoren transponiert
übergeben
ofsc= [0, 0 ,4,6];
% Wichtig: die Grafik-Offsets wie im plot-Befehl
Stry=['
Zeit
W
ux
uM/10,
FA']; % Tabellenkopf
tab=1; while 1 Simcurs2; end;
%///// Ende Cursor: //////
% Parameter als Text aufs Bild schreiben:
text(0,-0.9,([SAp,STd,Skonv,STi,SkW, Svmax ]));
input(' '); % wartet auf Return
weiter = input('weiter?? (1/0) ');
if
isempty(weiter), weiter = 1;end;
end; % von while und Ende der Matlab-Datei rhub_PID.m
Anschließend die Datei simCurs2.m, die den Cursor realisiert
%
%
%
%
%
%
%
%
%
%
%
Datei SimCurs2.m Zeitcursor für Matlab-Bilder
R. Kessler FH-Karlsruhe, 23.10.2003, Endfassúng 12.5.2004, 5.5.2005
Cursor-Abfrage mit linker Maustaste,
Ende mit rechter Maustaste (oder Esc)
Zeit-Cursor: wird aufgerufen von "beliebigem" Programm
übergabewerte:
xVektor tc, DatenMatrix yc, OffsetVektor ofsc, string Tabellenkopf
Bei Simulink sind die to workspace Felder Spaltenvektoren,
also müssen die to workspace-Vektoren transponiert übertragen werden
axen=axis; % V = AXIS returns a row vector containing the scaling
% for the
current plot.
ystep = 0.06 * ( axen(4)-axen(3) ); % ySchrittweite der Tabelle
ystep = 0.04 * ( axen(4)-axen(3) ); % ySchrittweite der Tabelle
ytext = 0.93* (axen(4)-axen(3)) + axen(3); % y-Position Tabelle neu 4.5.05
ytext = 0.98* (axen(4)-axen(3)) + axen(3); % y-Position Tabelle neu 5.5.05
xtext = 0.1 * (axen(2)-axen(1));
[zeil,spalt]=size(yc); % zeil = Anzahl Zeilen, spalt=Anzahl Spalten
kzeil=1:zeil;
% Vektor
clear Zeittab; % Zunächst Löschen, damit bei Mehrfach-Aufruf
% dieses Cursorprogramms die Tabelle leer ist !!
N=0; weiter=1;
xlabel('
');
xlabel('Cursorwerte in Tabelle schreiben? linke Maus, Ende Esc od. rechte
Maus')
disp('---------------------------------------------------------------------')
while weiter > 0 %N < 10 % maximal N-1 Cursor-Klicks möglich
[Xcurs,Ycurs,button]= ginput(1); % Fadenkreuz will 1 Taste
if button ==1 % linke Maustaste hat die Nummer 1,rechte die Nummer 3
% Abfangen Klicken ausserhalb zulässigem x-y-Bereich:
N=N+1; % oben nach hier verlegt
OK=1;
if ( Xcurs < min(tc)), OK =-1; N=N-1; end;
if ( Xcurs > max(tc)), OK =-1; N=N-1; end;
if ( Ycurs < axen(3)), OK =-1; N=N-1; end;
if ( Ycurs > axen(4)), OK =-1; N=N-1; end;
if OK >0 % wenn im zulässigen Zeitbereich geklickt wurde
if N == 1,
text(xtext,ytext,['Nr ',Stry]); % Tabellenkopf aufs Bild
schreiben
end; % if N == 1
% Kurvenzeichen unter die Kopfzeile plotten:
KZ= ['s', 'o', '<' ,'^', '<','>' ,'+', 'x'];
Prof. Dr. R. Kessler, FH-Karlsruhe, Sensorsystemtechnik, 68613211, S. 6/7
hold on;
for kzeil =1:zeil
plot(xtext/5+xtext+xtext+kzeil*xtext,ytext-1*ystep,[KZ(kzeil)]);
end; % kzeil ...
[wert,NrX]= min( abs( Xcurs- tc) ); % Finden des Zeitwertes
zeit= tc(NrX);
Zeittab(N,1)= zeit;
% 1. Spalte der Zeit-Tabelle
for ktab=1:zeil
Zeittab(N,ktab+1)= yc(ktab, NrX) ;
end; % ktab...
% Zeile N der Tabelle aufs Bild schreiben:
text(xtext/5 +xtext,ytext - (N+1)*ystep,...
[num2str(N),' ',num2str(Zeittab(N,1:1+zeil),3)]);
% Jetzt vertikale Linien bei den selektierten Zeiten:
hold on;
Lix(N,:)= [tc(NrX),tc(NrX)];
y_li_max=max(ytext,0.9*axen(4));
y_li_max=max(ytext,0.8*axen(4));
Liy=[0.9*axen(3),y_li_max];
plot(Lix(N,:),Liy,':m');hold on; % Vertikale punktierte Linien
for kzeil =1:zeil,
% Kurvenzeichen KZ an den Cursor-Klick-Stellen
plot(Lix(N,:), yc(kzeil,(NrX))+ofsc(kzeil),KZ(kzeil));
end; % kzeil..
hold off
end; % if OK > 0
end; %
if button ==1
% Taste Esc oder rechte Maustaste zum Beenden des Cursors:
if (button== 27)| (button == 3) weiter= 0; % Ende Cursor
% Jetzt Tabelle auf Bildschirm schreiben:
if (tab > 0) & (N > 1)
disp(Stry); % Tabellenkopfauf Bildschirm schreiben
disp( Zeittab(:,:) );
end; % if (tab...
break, % Cursor beenden
end; % if button == 27 oder 3,
end;% while weiter > 0 while N < 10
xlabel('
')
break; % Rückkehr zur Aufrufstelle
%
%
%
%
%
%
%
Hinweis:
Die Tabelle im Bild ist eine Datei mit Namen Zeittab.
Speichern der Tabelle mit dem neuem Namen Zeittab1:
save Zeittab1 Zeittab - ascii ;
Laden der Tabelle:
Tab1=load('Zeittab1'),
sie heißt jetzt Tab1
Ende Matlab-Datei SimCurs2.m
Anschließend die Funktion fragtext:
function
[Neuwert,Stringwert]= fragtext(text,Name,Altwert);
%
[Neuwert,Stringwert]= fragtext(text,Name,Altwert);
% für Für Eingaben von Zahlen für Parameter,%
% neu mit Ausgabe von Text (ASpril2005)
% Beispiel: [Ap,S1]=frag('Ap',Ap);
% [J,SJ]=fragtext( 'Trägheitsmoment', 'J', J);
Ax=input([text,' ',Name,'= ',num2str(Altwert,10),', neuer Wert ?? ']);
Neuwert=Altwert;
if ~isempty(Ax), Neuwert=Ax; end; % Neu für Matlab 5.3
Stringwert=[',',Name,'=',num2str(Neuwert,10)] ;
Prof. Dr. R. Kessler, FH-Karlsruhe, Sensorsystemtechnik, 68613211, S. 7/7
Anschließend weitere Matlab-Bilder mit Variation der Regler-Parameter
10
Nr
Zeit
1 7.03
2 13.6
3 16.8
8
W
2
-2
-2
ux
uM/10,
FA
1.51
1.24
-3.02
0.967
-1.5
1.44
0.3
0
0.581
W
ux
uM/10
Fa
6
4
2
0
,Ap=20,Td=1.1,konv=0,Ti=400000,kW=1,vmax=20
-2
0
5
10
15
20
25
30
35
40
45
50
Matlab-Bild 3:Td= 1.1, Sollwert W sprunghaft, dadurch bei abfallendem Sollwert starker Überschwinger der
Regelgröße ux
10
Nr
Zeit
1 7.26
2 13.3
3 25.7
8
W
ux
uM/10,
FA
2
1.25
-1.31
1.51
1.51
-2.24
0.968
-0.296
1.5
0.3
0.0119
0.45
W
ux
uM/10
Fa
6
4
2
0
,Ap=20,Td=1.1,konv=0,Ti=400000,kW=1,vmax=1
-2
0
5
10
15
20
25
30
35
40
45
50
Matlab-Bild 4: Td= 1.1, Sollwert W anstiegsbegrenzt (vmax=1), dadurch bei abfallendem Sollwert kein
Überschwinger der Regelgröße mehr. Aber natürlich noch Regelabweichung, weil I-Anteil fehlt
10
Nr
Zeit
1 11.2
2 22
3 33.9
8
W
ux
uM/10,
FA
W
ux
uM/10
Fa
2
1.99
0.969
0.3
-2
-2.31
0.844
0.226
2
2.26
0.717
0.196
6
4
2
0
,Ap=20,Td=0.8,konv=0,Ti=6,kW=1,vmax=1
-2
0
5
10
15
20
25
30
35
40
45
50
Matlab-Bild 5: Jetzt mit I-Anteil: Ti = 6 Td= 0.8, Infolge I-Anteil Regelgröße zu groß: Abhilfe kW kleiner 1
wählen, s. Matlab-Bild 2.
Herunterladen