function [ParMa,VarMa]=bran_aut(TM,TF,TL,VT,VTel)
%BRAN_AUT Zustandsregelstruktur 1; 3 Koeff.; Parametervar.: hier T, Tel
%        [ParMa(,VarMa)] =bran_aut(TM,TF,TL(,VT,VTel))
% Berechnung der Koeffizienten eines digitalen Zustandsreglers fuer Beispiel
% nach Brandenburg at 35(1987)7, S. 275/83; mit BOD;  T=Abtastzeit;
% *** Hier: Variation von Abtastzeit, Restzeitkonstante Ggstrom ***
% (,VT,VTel):  Wahlweise koennen Vektoren mit den - gegebenenfalls nicht-
%              linear unterteilten - Definitionsbereichen fuer die zwei
%              variierten Parameter extern vorgegeben werden.
% ParMa:       Parametermatrix mit berechneten Rueckfuehrkoeffizienten
%              1.Zeile: Kd; 2.Zeile: Km; 3.Zeile: Kn;
% (,VarMa):    Variablenmatrix mit zugehoerigen Zeitkonstanten
%              1.Zeile: T;  2.Zeile: Tel - fuer graphische Darstellung
% Hinweis: Soll bei menuegefuehrter Definitionsbereichsvorgabe ein Parameter
%          n i c h t variiert werden, dann Minimum=Maximum setzen.

% SCHLUESSELWORTE: Digitales Betragsoptimum, Zustandsregelstruktur,
%		   Parametervariation, Abtastzeit, Stromrestzeitkonstante

%  ***** Voraussetzungen: Vorhandensein von bran_au, branaug ****

%  Copyright (c) 1995 Dr. Gert-Helge Geitner; TU Dresden, Fak. ET,
%                     Elektrotechnisches Institut (ETI); Mommsenstr. 13;
%                     D-01062 Dresden, Germany;
%                     Tel./Fax (0351)-463-2917/7280
%                     e-mail: geitner@eeiwzb.et.tu-dresden.de
%  Literatur zum Digitalen Betragsoptimum: Geitner, G.-H.:
%                     Entwurf digitaler Regler fuer elektrische Antriebe.
%                     VDE-Verlag GmbH Berlin und Offenbach 1995

if nargin~=3&nargin~=5 error('Falsche Eingangsargumenteanzahl'); end
if length(TM)~=1|length(TF)~=1|length(TL)~=1
   error('Falsche Dimension in den ersten drei Eingangswerten!'); end
if nargin==5  %Berechnung der Schleifenzaehler
   SZT=length(VT); SZE=length(VTel);
else
   VT  =input('Abtastzeit/ms [Minimalwert Maximalwert]=');
   VTel=input('Restzeitkonstante Ggstrom/ms [Minimalwert Maximalwert]=');
   if length(VT)~=2|length(VTel)~=2 error('Falsche Werteanzahl'); end
   if VT(1)>VT(2)|VTel(1)>VTel(2) error('Min/Max vertauscht'); end
   if VT(1)<0|VT(2)<0|VTel(1)<0|VTel(2)<0
				error('Negative Werte sind nicht real'); end
   if VT(1)==VT(2) SZT=1; VT=VT*[1 0]'; else
      input('Schrittweite fuer T: Standard 50% (bel.) / Eingabe(0) ? =');
      if ans==0
	 swT=input('Vorgabe der Schrittweite fuer T in % =');
	 if swT<=0|swT>100 error('Unzulaessiger Wert!'); end
      else swT=50; end
      SZT=ceil(100/swT)+1;       %Schleifenzaehler
      dT=(VT(2)-VT(1))*swT/100;  %Definitionsbereiche
      for i=1:SZT-1 VT(i+1)=VT(1)+i*dT; end
   end
   if VTel(1)==VTel(2) SZE=1; VTel=VTel*[1 0]'; else
      input('Schrittweite fuer Tel: Standard 50% (bel.) / Eingabe(0) ? =');
      if ans==0
	 swE=input('Vorgabe der Schrittweite fuer Tel in % =');
	 if swE<=0|swE>100 error('Unzulaessiger Wert!'); end
      else swE=50; end
      SZE=ceil(100/swE)+1;          %Schleifenzaehler
      dTE=(VTel(2)-VTel(1))*swE/100;  %Definitionsbereiche
      for i=1:SZE-1 VTel(i+1)=VTel(1)+i*dTE; end
   end
end
disp('Anzahl der zu berechnenden Parameterkombinationen ='); disp(SZE*SZT);
input('Pro Berechnung ca. 10s: Start (bel.) / Abbruch (0) ? =');
if ans==0 error('Abbruch'); end
i=0;
for j=1:SZE
    for k=1:SZT
	erg=bran_au(VT(k),VTel(j),TM,TF,TL);
	i=i+1;
	ParMa(1,i)=erg(1); ParMa(2,i)=erg(2); ParMa(3,i)=erg(3);
	VarMa(1,i)=VT(k);  VarMa(2,i)=VTel(j);
    end
end
piep=ones(1,200); piep=piep*7; setstr(piep)
