public TimeSpan TimeToChargeToGivenStateOfCharge(ChargerBase charger, int soc, int chargeLevel = 90) { if (soc < 0 || soc > 100) { throw new ArgumentOutOfRangeException(nameof(soc)); } if (chargeLevel < 0 || chargeLevel > 100 || chargeLevel < soc) { throw new ArgumentOutOfRangeException(nameof(soc)); } if (!ChargingCurves.ContainsKey(charger.CurrentType)) { throw new ArgumentException("this type of current is not compatible", nameof(charger)); } ChargingCurve curve = ChargingCurves[charger.CurrentType]; decimal kwhPct = BatteryCapacity / 100m; int totalSeconds = 0; for (int i = soc; i < chargeLevel; i++) { decimal maxPower = curve.GetMaxChargeRateForSOC(i); if (maxPower > charger.MaxPower) { maxPower = charger.MaxPower; } totalSeconds += (int)(kwhPct / maxPower * HourInSeconds); } return(TimeSpan.FromSeconds(totalSeconds)); }
private void buttonChargerUnplug_Click(object sender, System.EventArgs e) { ChargerBase unpluggedCharger = mobile.Charger; mobile.Charge(null); if (unpluggedCharger != null) { output.WriteLine($"{unpluggedCharger.GetType().Name} unplugged."); } UpdateOutputEnabled(); }
public ChargerBase RemoveCharger() { managebleChargeAction.Suspend(); ChargerBase temp = Charger; Charger = null; if (temp?.Mobile != null) { temp.RemovePhone(); } return(temp); }
public TimeSpan TimeToChargeGivenMileage(ChargerBase charger, int soc, int miles, int?ratedWhMiles = null) { if (ratedWhMiles != null && ratedWhMiles <= 0) { throw new ArgumentOutOfRangeException(nameof(ratedWhMiles), "rated consumption must be greater than 0"); } if (miles <= 0) { throw new ArgumentOutOfRangeException(nameof(miles), "miles must be greater than 0"); } if (soc < 0 || soc > 100) { throw new ArgumentOutOfRangeException(nameof(soc)); } if (!ChargingCurves.ContainsKey(charger.CurrentType)) { throw new ArgumentException("this type of current is not compatible", nameof(charger)); } ChargingCurve curve = ChargingCurves[charger.CurrentType]; decimal rkwhMiles = (ratedWhMiles ?? RatedWhMile) / 1000m; decimal kwhPct = BatteryCapacity / 100m; decimal totalKwh = 0m; decimal totalSeconds = 0; int currentMiles = 0; for (int i = soc; i < 100; i++) { decimal maxPower = curve.GetMaxChargeRateForSOC(i); if (maxPower > charger.MaxPower) { maxPower = charger.MaxPower; } totalSeconds += kwhPct / maxPower * HourInSeconds; totalKwh += kwhPct; currentMiles += (int)(kwhPct / rkwhMiles); if (currentMiles >= miles) { break; } } return(TimeSpan.FromSeconds((double)totalSeconds)); }
public SMSForm() { Mobile = new SimCorpPhone(); InitializeComponent(); MsgEndDateTime.Value = DateTime.Now + TimeSpan.FromHours(1); MessageFormatCB.Items.AddRange(GetMessageFormatCBItems()); MessageFormatCB.SelectedItem = MessageFormatCB.Items[0]; UsersComboBox.Items.Add("All"); UsersComboBox.SelectedItem = UsersComboBox.Items[0]; Mobile.MessageStorage.MessageAdded += OnSMSReceiver; Mobile.Battery.ChargeChanged += RefreshBatteryView; RefreshBatteryView(Mobile.Battery.Charge); Charger = ChargerFactory.GetCharger(Mobile.Battery, ChargerType.Task); }
public static void Main(string[] args) { var mobile = new ModernMobile(output); while (true) { Console.WriteLine("\n============================"); Console.WriteLine("Select device: (Esc to exit)"); Console.WriteLine($"{DEVICE_HEADPHONES} - Headphones"); Console.WriteLine($"{DEVICE_CHARGER} - Charger"); ConsoleKeyInfo userInput = Console.ReadKey(); Console.WriteLine(); if (userInput.Key == ConsoleKey.Escape) { if (!ConfirmationPopup("You are going to exit.")) { continue; } return; } switch (userInput.KeyChar) { case DEVICE_HEADPHONES: AbstractCreator <PlaybackBase> playbackCreator = playbackCreators[ChooseCreator("Choose playback:", playbackCreators)]; mobile.PlaybackComponent = playbackCreator.Creator.Invoke(); mobile.Play(new object()); break; case DEVICE_CHARGER: AbstractCreator <ChargerBase> chargerCreator = chargerCreators[ChooseCreator("Choose charger:", chargerCreators)]; ChargerBase charger = chargerCreator.Creator.Invoke(); charger?.Charge(mobile); break; default: Console.WriteLine("Unexpected input. Please try again."); continue; } } }
public int MilesChargedInTimeSpan(ChargerBase charger, int soc, TimeSpan duration, int?ratedWhMiles = null) { if (ratedWhMiles != null && ratedWhMiles <= 0) { throw new ArgumentOutOfRangeException(nameof(ratedWhMiles), "rated consumption must be greater than 0"); } int rwhMiles = ratedWhMiles ?? RatedWhMile; if (soc < 0 || soc > 100) { throw new ArgumentOutOfRangeException(nameof(soc)); } if (!ChargingCurves.ContainsKey(charger.CurrentType)) { throw new ArgumentException("this type of current is not compatible", nameof(charger)); } ChargingCurve curve = ChargingCurves[charger.CurrentType]; int totalSeconds = 0; decimal totalKwh = 0m; decimal kwhPct = BatteryCapacity / 100m; for (int i = soc; i < 100; i++) { decimal maxPower = curve.GetMaxChargeRateForSOC(i); if (maxPower > charger.MaxPower) { maxPower = charger.MaxPower; } int secondsToCharge = (int)(kwhPct / maxPower * HourInSeconds); if (totalSeconds + secondsToCharge > duration.TotalSeconds) { break; } totalKwh += kwhPct; totalSeconds += secondsToCharge; } return((int)(totalKwh / (rwhMiles / 1000m))); }
public void Charge(ChargerBase charger) { if (charger == null) { RemoveCharger(); return; } Charger = charger; if (Charger != null) { if (Charger.Mobile == null || Charger.Mobile != this) { Charger.Charge(this); } managebleChargeAction.Continue(); } }
public void Charge(ChargerBase charger) { Charger = charger; Charger?.Charge(this); }