
% Quelltext  "LFM_Waveform_tapers_sfun_m" (Name des Funktionsaufrufes)

% M-Files für die Programmierung von einer S-Function zur automatischen 
% Anpassung des Drucks im Trommel an die momentane Zyklusphase.

% "LFM_Waveform_tapers_sfun_m" : Name von der verwendeten S-function.

% t,x,u,flag stehen der S-function automatisch von Simulink zur Verfügung
% t:    Die momentane Simulationszeit.
% x:    Die Vektor für die Zustandsgröße.
% u:    Vektor für die Eingangsgröße hier in diesem Fall ein Vektor(d.h mehrere Eingangsgrößen) 
% u(1): erste Variable des Eingangsvektors steht für den Druck im Trommel(Blasphase) 
% u(2): zweite Variable des Eingangsvektors steht für den Druck im Trommel(Blaspause)
% flag: Dieser Parameter korrespondiert mit den aufgerufenen Routinen und wird von Simulink an die M-File
% der S-function übergeben.

% Extra-Parameter der S-function:(Diese Parameter können zusätzlich vom
% Benutzer eingefügt werden).

% Delta_T :          Dauer einer Blasphase.





  
function [sys, x0 , str , ts ]= LFM_Waveform_tapers_sfun_m(t,x,u,flag,T,f_0,Alpha,k,n,a)                           % Kopfzeile(S-function)
                                                                                                       

switch flag                    % verwendete Verzweigungsbefehl zur Fallunterscheidungen
    
    case 0                     % Initialisierungsphase in dieser Routine,die S-function muss Informationen 
                               % über sich selbst an Simulink melden.
        
        sys = [0,              % Anzahl der kontinuierlichen Variablen für die Zustandsgröße (Laplace-Bereich)
               0,              % Anzahl der diskreten Variablen für die Zustandsgröße (Z-Bereich)
               1,              % Anzahl der Ausgänge, hier " y " genannt. 
               0,              % Anzahl der Eingänge , keine Eingänge 
               0,              % reservierte Stelle,also muß null sein.
               0,              % Anzahl der "direct feedthrough-Größen"
                               % (Anzahl der Ausgänge,die direkt von Eingangsgrößen abhängen)
               0];             % Größe des Vektors für Abtastwerte
                               % (In diesem Fall gibt es sowieso keine diskrete Variable,darum null)   
           
         x0 = [];              % Anfangsbedingungen, leer weil keine Zustandsvariablen(wird von Simulink ignoriert)  
         str = [];             % in M-Files nicht verwendet
         ts = [];              % Vektor zur Festlegung der Abtastzeit ,leer hier da es kein Abtastsystem .
        
    case 1                     % die zeitl. berechneten Ableitungen ggf.der Zustandsvariablen angeben. 
        
        sys = [];              % hier leer , da keine Zustandsvariable.
        
    case 2                     % Berechnung der aktuellen diskreten Zustände und beim Aufruf dieser Routine angeben.
        
        sys = [];              % hier leer, da keine diskrete Größe.
        
    case 3                     % Berechnung des Ausgangsvektors in y durch die S-Function
        
    global y;                  % Variable für berechnete Ausgangswerte.  
        
         
      
                                  
      t_cos = ( cos( (pi*t) / T ) )^n ;                       % Variable steht für die während einer Dampferzeugung alle 35 min
      
      t_f = ( k + (1-k)*t_cos ) ;                            %     t_Betrag
      
      t_phi = (2*pi*f_0*t) + (pi*Alpha*t^2) ;
      
      t_exp = cos ( t_phi ) ;                         % veränderliche Differenz zw.der aktuellen Zeit und Zeitpunkt vom Blasbeginn) 
                                
       
                
       if ( abs(t) <= ( 0.5 * T ) ) ;                                
                    
                    
               y = 1 * t_exp ;                    
                                             
                     
           elseif ( (0.5 * T) <= abs(t) <= ( (0.5 + a) * T ) ) ;
                    
               y = t_f * t_exp ;        
               
           
               else ;
            
               
                  y = 0 ;  
                  
                   
        end;              
       
      
      
      sys = [y] ;       % berechnete Ausgangsgröße y wird jeweils über die Variable sys an S-function übergeben u nacher vom Simulink erwartet.
      
      
      
    end;         
       
         
               
             
      
                
                  
            
                

      
         
             
                        
            
           
             
       
            
                 
      
            
          
        
        

        
        
    
       
        
        
        
            
            
             
            
            
            
        
        
        
        
        


        
        
       
