Advertisement
agmike

Кран 395

Nov 9th, 2012
96
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 6.50 KB | None | 0 0
  1. class SPAirBrakeValve395 : SPAirObject
  2. {
  3.     public int UR;
  4.     public int TM;
  5.     public int GR;
  6.  
  7.     public int State = 6; // 1, 2, 3, 4, 51, 5, 6
  8.  
  9.     public float ChargePressure;
  10.     public float StabilizerPressure;
  11.  
  12.     int lnRelayTmGr;
  13.     int lnRelayTmAt;
  14.     int lnGrTm;
  15.     int lnTmAt;
  16.     int ndTm;
  17.     int ndD;
  18.     int ndS;
  19.     int ndU;
  20.     int lnGrU;
  21.     int lnGrR;
  22.     int lnUS;
  23.     int lnUrD;
  24.     int lnUrTmOk;
  25.     int lnUrAtSlow;
  26.     int lnUrAt;
  27.     int lnUrAtE;
  28.     int lnUAt;
  29.     int lnDAt;
  30.  
  31.     override public void Init(SPVehicle owner, SPAirScheme scheme)
  32.     {
  33.         base.Init(owner, scheme);
  34.  
  35.         ChargePressure = 500.0f;
  36.         float stabilizerPressureSqrt = 20.0f * 20.0f / 60.0f / SPAirHelper.HoleDiam(0.45f);
  37.         StabilizerPressure = stabilizerPressureSqrt * stabilizerPressureSqrt;
  38.  
  39.         ndTm = scheme.CreateNode(null, 0.0f, 0.1f);
  40.         scheme.CreateLink(null, ndTm, TM, 1.0f, SPAirHelper.HoleDiam(16.0f));
  41.  
  42.         lnRelayTmGr = scheme.CreateLink(null, ndTm, GR, 0.0f, SPAirHelper.HoleDiam(9.0f));
  43.         lnRelayTmAt = scheme.CreateLink(null, ndTm, "at", 0.0f, SPAirHelper.HoleDiam(10.0f));
  44.  
  45.         lnGrTm = scheme.CreateLink(null, GR, ndTm, 0.0f, SPAirHelper.HoleDiam(16.0f));
  46.         lnTmAt = scheme.CreateLink(null, ndTm, "at", 0.0f, SPAirHelper.HoleDiam(16.0f));
  47.  
  48.         ndU = scheme.CreateNode(null, 0.0f, 1.0f);
  49.         scheme.CreateLink(null, UR, ndU, 1.0f, SPAirHelper.HoleDiam(1.6f));
  50.  
  51.         lnGrU = scheme.CreateLink(null, GR, ndU, 0.0f, SPAirHelper.HoleDiam(5.0f));
  52.         lnGrR = scheme.CreateLink(null, GR, ndU, 1.0f, SPAirHelper.HoleDiam(3.0f));
  53.  
  54.         ndD = scheme.CreateNode(null, 0.0f, 0.1f);
  55.         lnUrD = scheme.CreateLink(null, UR, ndD, 0.0f, SPAirHelper.HoleDiam(3.0f));
  56.  
  57.         ndS = scheme.CreateNode(null, 0.0f, 0.1f);
  58.         scheme.CreateLink(null, ndS, "at", 1.0f, SPAirHelper.HoleDiam(0.45f));
  59.         lnUS = scheme.CreateLink(null, ndU, ndS, 0.0f, SPAirHelper.HoleDiam(3.0f));
  60.  
  61.         lnUrTmOk = scheme.CreateLink(null, UR, ndTm, 0.0f, SPAirHelper.HoleDiam(3.0f));
  62.  
  63.         lnUrAtSlow = scheme.CreateLink(null, UR, "at", 0.0f, SPAirHelper.HoleDiam(0.75f));
  64.         lnUrAt = scheme.CreateLink(null, UR, "at", 0.0f, SPAirHelper.HoleDiam(2.3f));
  65.         lnUrAtE = scheme.CreateLink(null, UR, "at", 0.0f, SPAirHelper.HoleDiam(4.0f));
  66.         lnUAt = scheme.CreateLink(null, ndU, "at", 0.0f, SPAirHelper.HoleDiam(5.0f));
  67.         lnDAt = scheme.CreateLink(null, ndU, "at", 0.0f, SPAirHelper.HoleDiam(3.0f));
  68.  
  69.     }
  70.  
  71.     override public void Update(float dt)
  72.     {
  73.         float openRelayTmGr = 0.0f;
  74.         float openRelayTmAt = 0.0f;
  75.         float openGrTm = 0.0f;
  76.         float openTmAt = 0.0f;
  77.         float openGrU = 0.0f;
  78.         float openGrR = 0.0f;
  79.         float openUS = 0.0f;
  80.         float openUrD = 0.0f;
  81.         float openUrTmOk = 0.0f;
  82.         float openUrAtSlow = 0.0f;
  83.         float openUrAt = 0.0f;
  84.         float openUrAtE = 0.0f;
  85.         float openUAt = 0.0f;
  86.         float openDAt = 0.0f;
  87.  
  88.         bool reductor = false;
  89.         bool stabilizer = false;
  90.         bool ok = false;
  91.  
  92.         switch (State)
  93.         {
  94.             case 1:
  95.                 openGrTm = 1.0f;
  96.                 openGrU = 1.0f;
  97.                 reductor = true;
  98.                 break;
  99.             case 2:
  100.                 reductor = true;
  101.                 openUrD = 1.0f;
  102.                 stabilizer = true;
  103.                 break;
  104.             case 3:
  105.                 ok = true;
  106.                 break;
  107.             case 4:
  108.                 break;
  109.             case 51:
  110.                 openUrAtSlow = 1.0f;
  111.                 break;
  112.             case 5:
  113.                 openUrAt = 1.0f;
  114.                 break;
  115.             default:
  116.             //case 6:
  117.                 openDAt = 1.0f;
  118.                 openUAt = 1.0f;
  119.                 openUrAtE = 1.0f;
  120.                 openTmAt = 1.0f;
  121.                 break;
  122.         }
  123.  
  124.         float tmPressure = Scheme.GetPressure(ndTm);
  125.         float uPressure = Scheme.GetPressure(ndU);
  126.  
  127.         if (!ok)
  128.         {
  129.             float relayDelta = uPressure - tmPressure;
  130.             float relaySensivity = 2.0f;
  131.             float relaySensivityMax = 10.0f;
  132.             if (relayDelta > relaySensivity)
  133.             {
  134.                 openRelayTmGr = (relayDelta - relaySensivity) / relaySensivityMax;
  135.                 if (openRelayTmGr > 1.0f)
  136.                     openRelayTmGr = 1.0f;
  137.             }
  138.             else if (relayDelta < -relaySensivity)
  139.             {
  140.                 openRelayTmAt = (-relayDelta + relaySensivity) / relaySensivityMax;
  141.                 if (openRelayTmAt > 1.0f)
  142.                     openRelayTmAt = 1.0f;
  143.             }
  144.         }
  145.  
  146.         if (reductor)
  147.         {
  148.             float reductorDelta = ChargePressure - Scheme.GetPressure(ndD);
  149.             float reductorMaxDelta = 100.0f;
  150.             if (reductorDelta > 0.0f)
  151.             {
  152.                 openGrR = reductorDelta / reductorMaxDelta;
  153.                 if (openGrR > 1.0f)
  154.                     openGrR = 1.0f;
  155.             }
  156.         }
  157.  
  158.         if (stabilizer)
  159.         {
  160.             float stabilizerDelta = StabilizerPressure - Scheme.GetPressure(ndS);
  161.             float stabilizerMaxDelta = 100.0f;
  162.             if (stabilizerDelta > 0.0f)
  163.             {
  164.                 openUS = stabilizerDelta / stabilizerMaxDelta;
  165.                 if (openUS > 1.0f)
  166.                     openUS = 1.0f;
  167.             }
  168.         }
  169.  
  170.         if (ok)
  171.         {
  172.             float okSensivity = 2.0f;
  173.             float okSensivityMax = 10.0f;
  174.             float okDelta = Scheme.GetPressure(UR) - tmPressure - okSensivity;
  175.             if (okDelta > 0.0f)
  176.             {
  177.                 openUrTmOk = okDelta / okSensivityMax;
  178.                 if (openUrTmOk > 1.0f)
  179.                     openUrTmOk = 1.0f;
  180.             }
  181.         }
  182.  
  183.  
  184.         Scheme.SetFlowValue(lnRelayTmGr, openRelayTmGr);
  185.         Scheme.SetFlowValue(lnRelayTmAt, openRelayTmAt);
  186.         Scheme.SetFlowValue(lnGrTm, openGrTm);
  187.         Scheme.SetFlowValue(lnTmAt, openTmAt);
  188.         Scheme.SetFlowValue(lnGrU, openGrU);
  189.         Scheme.SetFlowValue(lnGrR, openGrR);
  190.         Scheme.SetFlowValue(lnUrD, openUrD);
  191.         Scheme.SetFlowValue(lnUS, openUS);
  192.         Scheme.SetFlowValue(lnUrTmOk, openUrTmOk);
  193.         Scheme.SetFlowValue(lnUrAtSlow, openUrAtSlow);
  194.         Scheme.SetFlowValue(lnUrAt, openUrAt);
  195.         Scheme.SetFlowValue(lnUrAtE, openUrAtE);
  196.         Scheme.SetFlowValue(lnUAt, openUAt);
  197.         Scheme.SetFlowValue(lnDAt, openDAt);
  198.     }
  199. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement