'##############
'Getriebe-Script
'##############

'D506-Gearbox

'(c) 2008-2010 Rüdiger Hülsmann

'Script Version: 1.0
'Omsi release: 1.0

'Needs:
'- engine
'- bremse

'Revision History:
'- Kyle Ortiz - Rework Transmission


'----------------------
'   Init
'----------------------

{macro:antrieb_init}
   1 (S.L.antrieb_getr_gangwahl) (S.L.antrieb_getr_gangvorwahl)
   1 (S.L.antrieb_getr_aktugang)
   
   0 (S.L.antrieb_wandler_moment)
{end}

'----------------------
'   Frame
'----------------------

{macro:antrieb_frame}

'Berechnen der Abtriebsdrehzahl
   (L.L.Wheel_RotationSpeed_1_L) (L.L.Wheel_RotationSpeed_1_R) + 2 / (C.L.antrieb_i_achse) * (S.L.antrieb_n_kardanwelle)

'Einlegen der Fahrstufe

   (L.S.GetTime) (L.L.antrieb_getr_gangwahlzeitpunkt) - (C.L.antrieb_gangwahlzeit) >
   (L.L.antrieb_getr_gangvorwahl) (L.L.antrieb_getr_gangwahl) = ! &&
   (L.L.antrieb_failure_general) ! &&
   {if}
         
      (L.L.antrieb_getr_gangwahl) 1 =
      {if}
         (L.L.engine_on) 1 =
         {if}
            (L.L.engine_n) (S.L.antrieb_rucksoundvol)
            (C.L.antrieb_kuppl_M_dn_min) (S.L.antrieb_schaltmoment_soll)

            (L.L.antrieb_getr_gangvorwahl) 1 >
            {if}
            
                  (L.L.antrieb_n_kardanwelle) (C.L.antrieb_getr_autoSwDnMinSpd2) >
                  {if}
                     2 (S.L.antrieb_getr_aktugang)
                     (T.L.ev_schaltruck)
                  {else}
                     1 (S.L.antrieb_getr_aktugang)
                     0 (S.L.antrieb_gear_engaged_timer)
                     (T.L.ev_schaltruck)
                  
               {endif}
            {else}
               (L.L.velocity) 5 <
               {if}
                  1 (S.L.antrieb_getr_aktugang)
                  0 (S.L.antrieb_gear_engaged_timer)
                  (T.L.ev_schaltruck)
               {endif}
            {endif}
         {endif}
      {endif}   
      (L.L.antrieb_getr_gangvorwahl) (S.L.antrieb_getr_gangwahl)
   {endif}

'Gang rausnehmen, wenn Neutral angefordert

   (L.L.antrieb_getr_gangwahl) 1 =
   {if}
      0 (S.L.antrieb_getr_aktugang)
   {endif}
'Verhindern, dass der Rückwärtsgang oberhalb von 5 km/h eingelegt werden kann

   (L.L.antrieb_getr_gangvorwahl) 0 =
   (L.L.velocity) 5 >= &&
   {if}
      1 (S.L.antrieb_getr_gangwahl)
   {endif}







'Prüfen, ob Gang gewechselt wird - aber nur, wenn Getriebe heil ist:

   (L.L.antrieb_failure_general) !
   {if}
      (M.L.antrieb_getr_chkNxtGear)
   {endif}

'Berechnung des aktuellen Motordrehmoments:

   (M.L.engine_moment)



'Berechnung des dynamischen Schaltmoments

   (L.L.antrieb_getr_fest) !
   {if}
      (L.L.antrieb_schaltmoment) (L.S.Timegap) 1000 * + (L.L.antrieb_schaltmoment_soll) min (S.L.antrieb_schaltmoment)
   {endif}





'Fallunterscheidung, ob Getriebe reibt oder wandelt oder nicht:

   (L.L.antrieb_getr_fest)
   {if}

'#################################################################################
'   Berechnung der Beschleunigung des Antriebsstrangs (am Motorflansch)
'#################################################################################


      (L.L.n_Wheel) (L.L.antrieb_getr_ratio) * (L.L.engine_n) - 2 * pi * 60 / (L.S.Timegap) /

'   Berechnung des Momentes am Motor durch Trägheit:

      (C.L.engine_J) * s0

'   Berechnung des vom Antriebsstrang durchgeleiteten Momentes

      l0 /-/ (L.L.engine_M) (L.L.engine_M_additional_load) - + s1


'   Wenn das Antriebsmoment zu groß ist oder ein Wandlergang eingelegt wird, rutscht die Kupplung durch:

      l1 abs (L.L.antrieb_schaltmoment) > (L.L.antrieb_getr_gangwahl) 1 <= || (L.L.antrieb_wandler_engage) 1 = ||


      {if}

         0 (S.L.antrieb_getr_fest)

      {else}

'      Setzen des Momentes

         l1 (S.L.antrieb_getr_M_an)


'      Berechnung des Getriebeabtriebmomentes:

         (L.L.antrieb_getr_M_an) (L.L.antrieb_getr_ratio) * (C.L.gear_efficiency) * (S.L.M_Wheel)

'      Drehzahl des Motors ergibt sich aus der Getriebeabtriebswelle:

         (L.L.antrieb_getr_ratio) (L.L.n_Wheel) * (S.L.engine_n)      
      {endif}


      0 (S.L.antrieb_wandler_moment)

   {else}

'#################################################################################
'   Bestimmen, ob Leerlauf ist...:
'#################################################################################

      (L.L.antrieb_getr_gangwahl) 1 = (L.L.antrieb_getr_aktugang) 0 = ||

      {if}

'      ... Antriebs- und Getriebeantriebsmoment sind 0:
         0 (S.L.M_Wheel) (S.L.antrieb_getr_M_an)

         (M.L.engine_acceleration)
         0 (S.L.antrieb_wandler_moment)

'         Wenn Neutralgang beim Bremsen eingelegt wird
         (L.L.antrieb_getr_gangwahl) 1 =
         {if}
            0 (S.L.antrieb_retarder_wasrunning) (S.L.antrieb_gear_engaged_timer)
         {endif}

      {else}

'#################################################################################
'      Bestimmen, ob ein Wandlergang eingelegt ist...:
'#################################################################################

	(L.L.antrieb_getr_aktugang) -1 = (L.L.antrieb_wandler_engage) 1 = || 
		

			
			{if}

				(L.L.antrieb_wandler_moment) abs (L.L.antrieb_getr_M_an) abs >
				{if}
					(L.L.antrieb_wandler_moment) 0 >
					{if}
						(L.L.antrieb_getr_M_an) (C.L.antrieb_wandler_fillrate) (L.S.Timegap) * + (S.L.antrieb_getr_M_an)
						(L.L.antrieb_wandler_moment) (L.L.antrieb_getr_M_an) <
						{if}
							(L.L.antrieb_wandler_moment) (S.L.antrieb_getr_M_an)
						{endif}
					{else}
						(L.L.antrieb_getr_M_an) (C.L.antrieb_wandler_fillrate) (L.S.Timegap) * - (S.L.antrieb_getr_M_an)
						(L.L.antrieb_wandler_moment) (L.L.antrieb_getr_M_an) >
						{if}
							(L.L.antrieb_wandler_moment) (S.L.antrieb_getr_M_an)
						{endif}
					{endif}
				{else}
					(L.L.antrieb_wandler_moment) (S.L.antrieb_getr_M_an)
				{endif}
	
			
			
					(L.L.n_Wheel) (L.L.antrieb_getr_ratio) * (S.L.antrieb_getr_n_ab) (L.L.engine_n) / (S.L.antrieb_wandler_ny)

						 						

'					Berechnung des Motor-Antriebsmomentes

						(L.L.engine_n) 2 * 3.14 * 60 / (L.L.engine_n) 2 * 3.14 * 60 / * s1
						0.0042 (L.L.antrieb_wandler_ny) (F.L.antrieb_wandler_lambda) * l1 * (L.L.engine_n) (F.L.antrieb_wandler_lowrpmsoftness) * (S.L.antrieb_wandler_moment)


'					Berechnung des Rad-Abtriebsmomentes
		
						(L.L.antrieb_wandler_ny) (F.L.antrieb_wandler_my) (L.L.antrieb_getr_M_an) * (L.L.antrieb_getr_ratio)  * 0.85 * (L.L.engine_n) (F.L.antrieb_wandler_lowrpmsoftness) * (C.L.gear_efficiency) * (S.L.M_Wheel) 
					
				

'			Vergleich der Ein- und Ausgangsleistungen:
				(L.L.M_Wheel) (L.L.n_Wheel) * 3.14 * 30000 / (S.L.antrieb_gesamtleistung)
				(L.L.antrieb_gesamtleistung) (L.L.antrieb_motorleistung) / (S.L.antrieb_eta)

	
				(M.L.engine_acceleration)


         



'#################################################################################
'         Sonst ist ein normaler Gang eingelegt:
'#################################################################################

         {else}


'         Berechnung der Drehzahldifferenz:

            (L.L.antrieb_getr_ratio) (L.L.n_Wheel) * (L.L.engine_n) - s0



'         An dieser Stelle muss ggf. noch das unterschiedliche Kupplungsmoment eingesetzt werden:

            l0 0 <
            {if}
               (L.L.antrieb_schaltmoment)
            {else}
               (L.L.antrieb_schaltmoment) /-/
            {endif}
            (S.L.antrieb_getr_M_an)
            (L.L.antrieb_getr_ratio) *
            (C.L.gear_efficiency) * (S.L.M_Wheel)

            (M.L.engine_acceleration)

'         Prüfen, ob sich das Vorzeichen der Drehzahldifferenz umgekehrt hat:

            (L.L.antrieb_getr_ratio) (L.L.n_Wheel) * (L.L.engine_n) - l0 * 0 <= (L.L.engine_n) 560 > &&
            {if}
               (L.L.antrieb_getr_ratio) (L.L.n_Wheel) * (S.L.engine_n)
               (L.L.n_Wheel) (L.L.antrieb_getr_ratio) * (L.L.engine_n) - 2 * pi * 60 / (L.S.Timegap) /

'               Berechnung des Momentes am Motor durch Trägheit:

               (C.L.engine_J) * s0

'               Berechnung des vom Antriebsstrang durchgeleiteten Momentes

               l0 /-/ (L.L.engine_M) (L.L.engine_M_additional_load) - + (S.L.antrieb_getr_M_an)


'               Berechnung des Getriebeabtriebmomentes:

               (L.L.antrieb_getr_M_an) abs (L.L.antrieb_schaltmoment) abs <
               {if}
                  (L.L.antrieb_getr_M_an) (L.L.antrieb_getr_ratio) * (C.L.gear_efficiency) * (S.L.M_Wheel)
                  1 (S.L.antrieb_getr_fest)
                  (C.L.antrieb_kuppl_M_up_max) (S.L.antrieb_schaltmoment)
               {else}
                  (L.L.antrieb_schaltmoment) /-/ (S.L.antrieb_getr_M_an) (L.L.antrieb_getr_ratio) * (C.L.gear_efficiency) * (S.L.M_Wheel)
               {endif}
               


            {endif}

            0 (S.L.antrieb_wandler_moment)

         {endif}
      {endif}

   {endif}


















'#################################################################################
'   Planetengetriebe-Wendesatz (Fjü-Sound)
'#################################################################################
   
   (L.L.antrieb_retarder) 
   (L.L.antrieb_getr_gangwahl) 0 = ||
   {if}
      1 (S.L.antrieb_wendesatz) (S.L.antrieb_retarder_volume)
'      Rücksetzen auf 0 erfolgt beim Fadeout des Retarderbremsmoments
   {endif}
{end}



'#################################################################################
'   Bestimmung der Schaltgeschwindigkeiten
'#################################################################################

{macro:antrieb_getr_chkNxtGear}

'   Höchster Gang: s0!

'   Verzögerung der Kickdown-Schaltung:

   (L.L.throttle) 1 =
   {if}
      (L.L.antrieb_kickdown_stellglied) (L.S.Timegap) 2 * + 1 min (S.L.antrieb_kickdown_stellglied)
      1 =
      {if}
         1 (S.L.antrieb_kickdown)
      {endif}
   {else}
      (L.L.antrieb_kickdown_stellglied) (L.S.Timegap) 1 * - 0 max (S.L.antrieb_kickdown_stellglied)
      0 =
      {if}
         0 (S.L.antrieb_kickdown)
      {endif}
   {endif}

'   Verzögerung der gaspedalabhängigen Schaltschwelle:

   
   (L.L.throttle) (L.L.antrieb_throttle_stellglied) >
   {if}
      (L.L.antrieb_throttle_stellglied) (L.S.Timegap) 1 * + (L.L.throttle) min (S.L.antrieb_throttle_stellglied)
   {else}
      (L.L.antrieb_throttle_stellglied) (L.S.Timegap) 0.5 * - (L.L.throttle) max (S.L.antrieb_throttle_stellglied)
   {endif}
   
'   Berechnen der aktuellen Beschleunigung:
   
   (L.L.Velocity) (L.L.antrieb_last_geschwindigkeit) - 3.6 / (L.S.Timegap) / (S.L.antrieb_beschleunigung)
   (L.L.Velocity) (S.L.antrieb_last_geschwindigkeit)
   
   



	(L.L.antrieb_getr_gangwahl) 0 =
	{if}
		-1 (S.L.antrieb_getr_aktugang)
	{endif}
		
	(L.L.antrieb_getr_gangwahl) 1 =
	{if}
		1 s0
	{endif}

	(L.L.antrieb_getr_gangwahl) 2 =
	{if}
		2 s0
	{endif}

	(L.L.antrieb_getr_gangwahl) 3 =
	{if}
		3 s0
	{endif}

	(L.L.antrieb_getr_gangwahl) 4 =
	{if}
		4 s0
	{endif}

	(L.L.antrieb_getr_gangwahl) 5 =
	{if}
		5 s0
	{endif}

	(L.L.antrieb_getr_gangwahl) 6 =
	{if}
		6 s0
	{endif}


         (L.L.antrieb_getr_aktugang) s1

         1 =
         {if}
            (C.L.antrieb_getr_ratio1) (C.L.antrieb_i_achse) * (S.L.antrieb_getr_ratio)
	     (L.L.antrieb_n_kardanwelle) 590 > l0 3 < &&
	     {if}
	     0 (S.L.antrieb_wandler_engage)
		
	     {endif}

	     (L.L.antrieb_n_kardanwelle) 490 < 
	     {if}
	     1 (S.L.antrieb_wandler_engage)
		
	     {endif}

            (L.L.antrieb_kickdown)
            {if}
               (C.L.antrieb_getr_autoSwUpkickdnSpd1) s3 s4
            {else}
               (C.L.antrieb_getr_autoSwUpMinSpd1) s4
               (C.L.antrieb_getr_autoSwUpMaxSpd1) s3
            {endif}
      
            (M.L.antrieb_getr_chkCh) (L.L.antrieb_n_kardanwelle) < l0 3 > && (L.L.antrieb_beschleunigung) 0 > &&
            {if}
               2 (S.L.antrieb_getr_aktugang)
               (C.L.antrieb_kuppl_M_up_max) s6
               (C.L.antrieb_kuppl_M_up_min) s7
               (M.L.antrieb_getr_schaltmoment) (S.L.antrieb_schaltmoment_soll) (S.L.antrieb_schaltmoment)            
               (T.L.ev_gear_upshift2)
            {endif}

            
         {endif}


			l1 -1 =
			{if}
				-3.45 (C.L.antrieb_i_achse) * (S.L.antrieb_getr_ratio)
		

			{endif}
      l1 2 =
         {if}
            (C.L.antrieb_getr_ratio2) (C.L.antrieb_i_achse) * (S.L.antrieb_getr_ratio)
      	   	     (L.L.antrieb_n_kardanwelle) 1290 > 
	     {if}
	     0 (S.L.antrieb_wandler_engage)
		
	     {endif}

	     (L.L.antrieb_n_kardanwelle) 1190 < 
	     {if}
	     1 (S.L.antrieb_wandler_engage)
		
	     {endif}
            (L.L.antrieb_kickdown) l0 3 <= ||
            {if}
               (C.L.antrieb_getr_autoSwDnkickdnSpd2) s3 s4
            {else}
               (C.L.antrieb_getr_autoSwDnMinSpd2) s4
               (C.L.antrieb_getr_autoSwDnMaxSpd2) s3
            {endif}
            (M.L.antrieb_getr_chkCh) (L.L.antrieb_n_kardanwelle) > (L.L.antrieb_retarder_armed) ! &&
            (L.L.antrieb_n_kardanwelle) (C.L.antrieb_getr_autoSwDnMinSpd2) < ||
            {if}
               1 (S.L.antrieb_getr_aktugang)
               0 (S.L.antrieb_schaltmoment)
            {endif}
         {endif}
   {endif}
   {endif}


'   Testweise: Differenzialdrehzahlpfeifen

   (L.L.engine_n) (L.L.antrieb_n_kardanwelle) 2 * - (S.L.antrieb_n_differenz)





{end}

{macro:antrieb_getr_chkCh}
'   Berechnung der aktuellen Hochschaltschwelle: (l3 = bei Vollgas, l4 = bei Leergas)
   (L.L.antrieb_throttle_stellglied) s2 l3 * 1 l2 - l4 * +
{end}

{macro:antrieb_getr_schaltmoment}
'   Berechnung des Schaltmomentes (l6 = bei Vollgas, l7 = bei Leergas)
   (L.L.antrieb_throttle_stellglied) s5 l6 * 1 l5 - l7 * +
{end}