Пример #1
0
        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();
        }
Пример #3
0
        public ChargerBase RemoveCharger()
        {
            managebleChargeAction.Suspend();

            ChargerBase temp = Charger;

            Charger = null;
            if (temp?.Mobile != null)
            {
                temp.RemovePhone();
            }

            return(temp);
        }
Пример #4
0
        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));
        }
Пример #5
0
        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;
                }
            }
        }
Пример #7
0
        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)));
        }
Пример #8
0
        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();
            }
        }
Пример #9
0
 public void Charge(ChargerBase charger)
 {
     Charger = charger;
     Charger?.Charge(this);
 }