コード例 #1
0
ファイル: MainWindow.xaml.cs プロジェクト: kjlopin/bqev23k
        /// <summary>
        /// Initialize when main window was loaded.
        /// </summary>
        /// <param name="sender">Not used.</param>
        /// <param name="e">Not used.</param>
        private void MainWindow_Loaded(object sender, RoutedEventArgs e)
        {
            CfgCycleCellCount.Text           = Properties.Settings.Default.CellCount;
            CfgCycleTaperCurr.Text           = Properties.Settings.Default.TaperCurrent;
            CfgCycleTermVolt.Text            = Properties.Settings.Default.TerminationVoltage;
            CfgCycleChargeRelaxHours.Text    = Properties.Settings.Default.ChargeRelaxHours;
            CfgCycleDischargeRelaxHours.Text = Properties.Settings.Default.DischargeRelaxHours;

            try
            {
                int    BrdsNumber = 0;
                string BrdsName   = "";

                if (board.Connect(out BrdsNumber, out BrdsName) != 0)
                {
                    throw new ArgumentException("EV2300 not found.");
                }

                LogView.AddEntry("EV2300 connected...");
                Console.WriteLine(BrdsName);

                EV23KError err = board.CheckForError();
                gauge = new GaugeInfo(board);

                UpdateGui(null, null);
            }
            catch (Exception ex)
            {
                Console.WriteLine(ex.Message);
            }
        }
コード例 #2
0
ファイル: MainWindow.xaml.cs プロジェクト: kjlopin/bqev23k
        /// <summary>
        /// Start new learning or GPC cycle on button click.
        /// </summary>
        /// <param name="sender">Not used.</param>
        /// <param name="e">Not used.</param>
        private async void ButtonCycleStart_Click(object sender, RoutedEventArgs e)
        {
            int cellCount = 0;

            int.TryParse(CfgCycleCellCount.Text, out cellCount);

            if (cellCount <= 0 || cellCount > 7)
            {
                LogView.AddEntry("Invalid cell count!");
                return;
            }

            int termVoltage = 0;

            int.TryParse(CfgCycleTermVolt.Text, out termVoltage);

            int ctv = (termVoltage / cellCount);

            if (termVoltage <= 0 || (ctv < 2500) || (termVoltage / cellCount > 4200))
            {
                LogView.AddEntry("Invalid termination voltage! (" + ctv.ToString() + "mV/cell)");
                return;
            }

            int taperCurrent = 0;

            if (!int.TryParse(CfgCycleTaperCurr.Text, out taperCurrent))
            {
                taperCurrent           = 100; // mA
                CfgCycleTaperCurr.Text = taperCurrent.ToString("D");
            }

            if (taperCurrent <= 0)
            {
                LogView.AddEntry("Invalid taper current!");
                return;
            }

            /* See TI SLUA848, chapter 4.2.1 */
            LogView.AddEntry("Preparing...");
            /* Clear FET_EN to be able to set charge and discharge FETs */
            if (gauge.FlagFET_EN == true)
            {
                gauge.CommandToogleFETenable();
            }

            await Task.Delay(CmdExecDelayMilliseconds);

            if (gauge.FlagFET_EN == true)
            {
                LogView.AddEntry("Failed to clear FET_EN.");
                return;
            }

            if (selectedCycleType == CycleType.LearningCycle)
            {
                /* Enable gauging mode */
                if (gauge.FlagGAUGE_EN == false || gauge.FlagQEN == false)
                {
                    gauge.CommandSetGaugeEnable();
                }

                await Task.Delay(CmdExecDelayMilliseconds);

                if (gauge.FlagGAUGE_EN == false || gauge.FlagQEN == false)
                {
                    LogView.AddEntry("Failed to enable gauging mode.");
                    return;
                }

                /* Reset to disable resistance update */
                gauge.CommandReset();
                await Task.Delay(ResetCmdExecDelayMilliseconds);

                if (gauge.FlagRDIS == false)
                {
                    LogView.AddEntry("Error: RDIS not set after reset.");
                    return;
                }

                if (gauge.GetReadValue("LStatus") != 0x04)
                {
                    LogView.AddEntry("Error: LStatus != 0x04.");
                    return;
                }
            }
            else if (selectedCycleType == CycleType.GpcCycle)
            {
                /* Disable gauging mode */
                if (gauge.FlagGAUGE_EN == true || gauge.FlagQEN == true)
                {
                    gauge.CommandSetGaugeEnable();
                }

                await Task.Delay(CmdExecDelayMilliseconds);

                if (gauge.FlagGAUGE_EN == true || gauge.FlagQEN == true)
                {
                    LogView.AddEntry("Failed to disable gauging mode.");
                    return;
                }
            }

            if (gauge.FlagDSG == false)
            {
                gauge.CommandToggleDischargeFET();
            }

            /* Set charge and discharge FETs */
            if (gauge.FlagCHG == false)
            {
                gauge.CommandToggleChargeFET();
            }

            await Task.Delay(CmdExecDelayMilliseconds);

            if (gauge.FlagCHG == false && gauge.FlagDSG == false)
            {
                LogView.AddEntry("Failed to set charge and discharge FETs.");
                return;
            }

            LogView.AddEntry("Device preparation successful.");

            int relaxTimeCharge    = 0;
            int relaxTimeDischarge = 0;

            if (int.TryParse(CfgCycleChargeRelaxHours.Text, out relaxTimeCharge))
            {
                relaxTimeCharge *= 60; // Convert to minute
            }
            else
            {
                relaxTimeCharge = 120;
            }

            if (int.TryParse(CfgCycleDischargeRelaxHours.Text, out relaxTimeDischarge))
            {
                relaxTimeDischarge *= 60; // Conver to minutes
            }
            else
            {
                relaxTimeDischarge = 300;
            }

            Properties.Settings.Default.CellCount           = CfgCycleCellCount.Text;
            Properties.Settings.Default.TaperCurrent        = CfgCycleTaperCurr.Text;
            Properties.Settings.Default.TerminationVoltage  = CfgCycleTermVolt.Text;
            Properties.Settings.Default.ChargeRelaxHours    = CfgCycleChargeRelaxHours.Text;
            Properties.Settings.Default.DischargeRelaxHours = CfgCycleDischargeRelaxHours.Text;
            Properties.Settings.Default.Save();

            List <GenericTask> tl = new List <GenericTask>();

            if (selectedCycleType == CycleType.LearningCycle)
            {
                tl = new List <GenericTask> {
                    new DischargeTask(termVoltage),
                    new RelaxTask(relaxTimeDischarge),
                    new ChargeTask(taperCurrent),
                    new RelaxTask(relaxTimeCharge),
                    new DischargeTask(termVoltage),
                    new RelaxTask(relaxTimeDischarge)
                };

                if (true)
                { // Perform field update cycle to reach LStatus 0x0E
                    tl.AddRange(new GenericTask[] {
                        new ChargeTask(taperCurrent),
                        new RelaxTask(relaxTimeCharge),
                        new DischargeTask(termVoltage),
                        new RelaxTask(relaxTimeDischarge)
                    });
                }
            }
            else if (selectedCycleType == CycleType.GpcCycle)
            {
                tl = new List <GenericTask> {
                    new ChargeTask(taperCurrent),
                    new RelaxTask(relaxTimeCharge),
                    new DischargeTask(termVoltage),
                    new RelaxTask(relaxTimeDischarge)
                };

                gpcLog = new GpcDataLog(cellCount);
            }

            cycle = new Cycle(tl, gauge);
            cycle.CycleModeType   = selectedCycleModeType;
            cycle.LogWriteEvent  += LogView.AddEntry;
            cycle.CycleCompleted += OnCycleCompleted;
            cycle.StartCycle();

            timerUpdatePlot.Start();

            ButtonCycleStart.IsEnabled  = false;
            ButtonCycleCancel.IsEnabled = true;
        }