Ejemplo n.º 1
0
 //every time interval update all of the displays and internal variables, set calculations for real time
 public void updateTime(String time)
 {
     setTimeLabel(time);
     speedLimit   = currentBlock.speedLimit;
     speedLimitms = speedLimit / 3.6;
     //look ahead and find if the next two blocks have a lower speed limit than the current block
     considerSpeedLimit();
     //this section sets the speed limit and the allowed set speed for the train
     if (futureSpeedLimitms < speedLimitms)
     {
         speedLimitms = futureSpeedLimitms;
     }
     if (testMode == 0)
     {
         //figure out setSpeed;
         if (mode == 0)
         {
             setSpeed = driverSetSpeed;
         }
         else
         {
             setSpeed = ctcSetSpeed;
         }
         setSpeedms = setSpeed * 0.44704;
         if (setSpeedms > speedLimitms)
         {
             setSpeedms = speedLimitms;
         }
     }
     //calculate minumum stopping distance for authority and stations. Use this
     //information to figure out when train needs to start stopping
     considerAuthority();
     considerStations();
     resetStation();
     if (distanceToStation < minStopDistanceStation || distanceToAuthority < minStopDistanceAuthority)
     {
         forceStop = true;
     }
     if ((currSpeedms <= setSpeedms) && !forceStop && !emergencyOverride && authority > 0)
     {
         sBreakOFF();
         emergencyOFF();
         power = powerController.getPower(currSpeedms, setSpeedms);
     }
     //else if (forceStop)
     // {
     //
     // }
     else if (emergencyOverride)
     {
         emergencyON();
     }
     else
     {
         sBreakON();
         power = 0;
     }
     //set all control signals and pass them on to the train model so then next unit of time, train
     //model updates with the information
     setThermostat();
     setLights();
     TM.updatePower(power);
     TM.updateThermostat(thermostat);
     TM.updateDoorStatus(doorStatus);
     TM.updateLightStatus(lightStatus);
     //update the GUI with all relevant signals
     trainSpeedLabel.Text      = (currSpeedms * 2.23694).ToString("#.###") + "MPH";
     trainPowerLabel.Text      = (power / 1000).ToString("#.###") + "kW";
     ctcSpeedLabel.Text        = (ctcSetSpeed).ToString("#.###") + "MPH";
     ctcAuthorityLabel.Text    = authority.ToString() + " blocks";
     trainTempLabel.Text       = (temp.ToString()) + "F";
     blockIDLabel.Text         = currentBlock.blockNum.ToString();
     blockSpeedLimitLabel.Text = (speedLimit * 0.621371).ToString("#.##") + "MPH";
     //blockSpeedLimitLabel.Text = minStopDistanceAuthority.ToString();
     //tunnelStatusLabel.Text = distanceToAuthority.ToString();
     distanceLeftLabel.Text = distanceLeft.ToString("#.##");
     distanceToLabel.Text   = (distanceToStation).ToString("#.##");
     stationLabel.Text      = stationName.ToString();
     trainIDLabel.Text      = trainID.ToString();
     if (lightStatus)
     {
         tunnelStatusLabel.Text = "Underground";
     }
     else
     {
         tunnelStatusLabel.Text = "Above";
     }
     if (lightStatus)
     {
         lightsON.Checked = true;
     }
     else
     {
         lightsON.Checked = false;
     }
     //set the door status on the GUI
     if (doorStatus == 0)
     {
         leftClosed.Checked  = true;
         rightClosed.Checked = true;
     }
     else if (doorStatus == 1)
     {
         leftOpen.Checked    = true;
         rightClosed.Checked = true;
     }
     else if (doorStatus == 2)
     {
         leftClosed.Checked = true;
         rightOpen.Checked  = true;
     }
 }