function [Xsoll, vXsoll, aXsoll, Tsoll]=Positioniersteuerung(xpos,vbahn,amax,Tgrob)
% Sollgrössengenerator zur Erzeugung einer beschleunigungsbegrenzten
% Positionierbewegung
% Eingangsparameter:   xpos     - Positionierschrittweite x2-x1
%                                   vbahn   - Bahngeschwindigkeit
%                                   amax    - Maximalbeschleunigung
%                                   Tgrob   - Interpolationszeit
% Ausgangsparameter:  Xsoll     - Sollposition 
%                                   vXsoll   - Sollgeschwindigkeit
%                                   aXsoll   - Sollbeschleunigung
%                                   Tsoll     - Zeitbasis der Sollwerte
% Zirn 29.09.04
if (xpos > (vbahn^2/amax))  % Beschleunigung auf vbahn möglich?
    t1=vbahn/amax;              % Beschleunigungszeit
    s1=0.5*vbahn^2/amax;    % Beschleunigungsweg
    s2=xpos-s1;                     % Verfahrweg mit konst. Geschwindigkeit
    T=(s2-s1)/vbahn+2*t1;      % Gesamte Zeit zur Positionierung
    t2=T-t1;                            % Verfahrzeit mit konst. Geschwindigkeit
    N1=round(t1/Tgrob);         % Ermittlung der Interpolationspunktzahlen
    N2=round(t2/Tgrob);         % für die Bewegungsabschnitte
    NG=round(T/Tgrob);
else
    t1=sqrt(xpos/amax);   % Beschleunigungszeit
    s1=0.5*amax*t1^2;    % Beschleunigungsweg
    s2=s1;                       % kein Verfahrweg mit konst. Geschwindigkeit
    T=2*t1;                      % Gesamte Zeit zur Positionierung
    t2=t1;                         % keine Verfahrzeit mit konst. Geschwindigkeit
    vbahn=amax*t1;          % angepasste Maximalgeschwindigkeit
    N1=round(t1/Tgrob);         % Ermittlung der Interpolationspunktzahlen
    N2=round(t2/Tgrob);         % für die Bewegungsabschnitte
    NG=round(T/Tgrob);
end % of if
% Erzeugung der beschleunigungsbegrenzten Bewegung
for i=1:1:N1            % Beschleunigungsphase
    Tsoll(i)=i*Tgrob;
    Xsoll(i)=0.5*amax*Tsoll(i)^2;
    vXsoll(i)=amax*Tsoll(i);
    aXsoll(i)=amax;
end   
for i=N1+1:1:N2         % gleichförmige Bewegung
    Tsoll(i)=i*Tgrob;
    Xsoll(i)=s1+vbahn*(Tsoll(i)-t1);
    vXsoll(i)=vbahn;
    aXsoll(i)=0;
end
for i=N2+1:1:NG         % Bremsphase
    Tsoll(i)=i*Tgrob;
    Xsoll(i)=s2+vbahn*(Tsoll(i)-t2)-0.5*amax*(Tsoll(i)-t2)^2;
    vXsoll(i)=vbahn-amax*(Tsoll(i)-t2);
    aXsoll(i)=-amax;
end
% Stillstand 
for i=NG+1:1:7*NG
    Tsoll(i)=i*Tgrob;
    Xsoll(i)=xpos;
    vXsoll(i)=0;
    aXsoll(i)=0;
end
% Ausgangspunkt einfügen (Tsoll=0s)
for i=1:1:length(Tsoll)
    Tsollh(i+1)=Tsoll(i);
    Xsollh(i+1)=Xsoll(i);
    vXsollh(i+1)=vXsoll(i);
    aXsollh(i+1)=aXsoll(i);
end
Tsollh(1)=0;
Xsollh(1)=0;
vXsollh(1)=0;
aXsollh(1)=0;
    
Tsoll=Tsollh;
Xsoll=Xsollh;
vXsoll=vXsollh;
aXsoll=aXsollh;


    



