public static AutomotiveBattery bDeserBattCls()
        {
            AutomotiveBattery abtClassFromStorage = null;

            Debug.WriteLine("++bDeserBattCls()");

            IFormatter formatter = new BinaryFormatter();

            try
            {
                Stream streamFrom = new FileStream(AutomotiveBattery.cstrMyBattClassFileName, FileMode.Open, FileAccess.Read, FileShare.Read);
                abtClassFromStorage = (AutomotiveBattery)formatter.Deserialize(streamFrom);
                streamFrom.Close();
                int jcnt = abtClassFromStorage.m_mapDischrgChrgCyles.Count;
                Debug.WriteLine("bSerBattCls() Also restored " + jcnt.ToString() + " discharge-charge cycles");
                for (int k = 0; k < jcnt; k++)
                {
// element at retrievs a pair, not just an element
                    stDischrgChrgCycle stdchrgclTemp = abtClassFromStorage.m_mapDischrgChrgCyles.ElementAt(k).Value;
                    Debug.WriteLine("bSerBattCls() [" + k.ToString() + "] " + stdchrgclTemp.stbtdtmStarterOn.dtBattDateTime.ToString() +
                                    " CA=" + stdchrgclTemp.dblCA.ToString("000") + " A, R=" + stdchrgclTemp.dblBatteryResistance.ToString("0.0000") + " Ohm at " + stdchrgclTemp.stbtdtmStarterOn.dblBattTemp.ToString("+00.0") + "°C");
                }
                ;
            }
            catch (SerializationException serexp)
            {
                Debug.WriteLine("Form1() ctor: Failed to find saved instance of myAutoBattery." + serexp.ToString());
            }
            catch (IOException ioexp)
            {
                Debug.WriteLine("Form1() ctor: Failed to find saved instance of myAutoBattery." + ioexp.ToString());
            };

            Debug.WriteLine("--bDeserBattCls()=" + ((null == abtClassFromStorage)?"null":abtClassFromStorage.ToString()));
            return(abtClassFromStorage);
        }
Exemple #2
0
        public Form1()
        {
            Debug.WriteLine("++Form1() ctor");

// make some time time-span conversions before we start out charts
            tspn6Sec = new TimeSpan(0, 0, ciZoomTimeSpanSize_inSec);
            dtm6sec  = new DateTime().Add(tspn6Sec);

            tspnSmScrl = new TimeSpan(0, 0, ciZoomTimeScrlSize_inSec);
            dtmSmlScrl = new DateTime().Add(tspnSmScrl);

            tspnTickmark = new TimeSpan(0, 0, 0, ciTickMarkTimeSize_in_mSec);
            dtmTickmark  = new DateTime().Add(tspnTickmark);
// perform container init
            InitializeComponent();
            this.Text = "Battery Monitor";

// initialize all our gauge controls in a single call
            bInitalizeGaugeControls();
//
// Creates and initializes a new concurrent Queue.
            cnquBattDataQueue = new ConcurrentQueue <Generic12Vbattery.strctBattMonData>();
// restore application settings
            m_cBattMonSettings = BattMonSettings.bDeserAppSettings();
// assign these restored settings to controls
            SerPortNameTextBox.Text        = m_cBattMonSettings.strCOMPortName;
            ripple_filterCheckBox1.Checked = m_cBattMonSettings.bRippleFilterOn;

            try
            {
// open battery logging file
                m_OutCSVfile   = new System.IO.StreamWriter(szBatMonCSVFileName, true);
                bLoggingToFile = true;
            }
            catch (IOException ioex)
            {
                Debug.WriteLine("Form1() ctor: Error " + ioex.ToString() + "! Cannot open log file");
                m_OutCSVfile   = null;
                bLoggingToFile = false;
            };
//
// now create new battery class instance or restore from saved
            m_batBattery = AutomotiveBattery.bDeserBattCls();
//
            if (null == m_batBattery)
            {
                Debug.WriteLine("Form1() ctor: do not have saved instance of myAutoBattery, create new !");
// if there is no saved instance of myAutoBattery, then create a new instance
// show new battery intro message first

// first open batt info form to fill up
                BatteryInfoForm btinffrmNewbatteryInfo = new  BatteryInfoForm();

// and wait for [Save] button to be pressed before we continue
                Application.Run(btinffrmNewbatteryInfo);

// now take data from form into our member variables

// now construct it anew using supplied parameters
                m_batBattery = new AutomotiveBattery(btinffrmNewbatteryInfo.strGetBatteryName(),
                                                     btinffrmNewbatteryInfo.strGetBatteryMake(), btinffrmNewbatteryInfo.strGetbatteryModel(),
                                                     btinffrmNewbatteryInfo.strGetBatterySerNo(),
                                                     btinffrmNewbatteryInfo.iGetBatteryCA(), btinffrmNewbatteryInfo.iGetbatteryCCA(),
                                                     btinffrmNewbatteryInfo.iGetBatteryCapacityAHrs(),
                                                     btinffrmNewbatteryInfo.dtmGetbattDateOfManufacture());
                Debug.WriteLine("Form1() ctor: created new instance of myAutoBattery(\"" + btinffrmNewbatteryInfo.strGetBatteryName() + "\")");
                m_lstDischrgChrgCycles = new List <DateTime>(0);
            }
            else
            {
                Debug.WriteLine("Form1() ctor: Restored myAutoBattery from saved.");
// print some info about restored class instance
                Debug.WriteLine("Form1() ctor: max charge current=" + m_batBattery.getMaxDischrgCurrentA().ToString() + " A");
                Debug.WriteLine("Form1() ctor: starting cycles=" + m_batBattery.iGetNumStartingCycles().ToString());
//
                int iInitialNumOfDchrgChrgCycles = m_batBattery.iGetNumStartingCycles();
// initialize listbox view - first create a list of items
                m_lstDischrgChrgCycles = new List <DateTime>(iInitialNumOfDchrgChrgCycles);

                bUpdateListBoxAndCntFromMmapDschrgChrgCycles();
            };

// stop monitoring and display stopped state
            bOnStopMonitoring(false);
            LiveDataRadioButton1.Checked = true;           // changing value of checked will call OnRadioBtnChanged()
            FromFileRadioButton1.Checked = false;
// UI update timer function set up
            m_UIRefreshTimer          = new System.Windows.Forms.Timer();
            m_UIRefreshTimer.Interval = 100; // redraw controls every 100 msec, i.e 10 Hz
            m_UIRefreshTimer.Tick    += new EventHandler(UI_slow_upd_timer);

// fast data update timer set up
            m_DataFastRefreshTimer          = new System.Windows.Forms.Timer();
            m_DataFastRefreshTimer.Interval = 10; // redraw controls every 10 msec, i.e 100 Hz
#if USEFASTANDSLOWTIMERS
            m_DataFastRefreshTimer.Tick += new EventHandler(UI_slow_upd_timer_no_dequeue);
#else
            m_DataFastRefreshTimer.Tick += new EventHandler(data_refresh_fast_timer_Funkt);
#endif
            Debug.WriteLine("Form1() ctor: analog meters timer is up; rate=" + (1000 / m_UIRefreshTimer.Interval).ToString() + " Hz");
//
            System.Reflection.Assembly myAssembly = System.Reflection.Assembly.GetExecutingAssembly();
            Stream StarterOff_bmp_Stream          = myAssembly.GetManifestResourceStream("batt_mon_app.starter_motor_off.jpg");
            Stream StarterOn_bmp_Stream           = myAssembly.GetManifestResourceStream("batt_mon_app.starter_motor_on.jpg");
            bmpStarterMtrOff = new Bitmap(StarterOff_bmp_Stream);
            bmpStarterMtrOn  = new Bitmap(StarterOn_bmp_Stream);

            bSetMotorPict(bmpStarterMtrOff);
            m_slMeasIterCnt = 0;
// ctor will perform autostart - it will try to start serial port worker right away
// which may fail so it may display a message
//			bOnStartMonitoring();
// if autostart here fails, then user may reconfigure serial port and start manually
            Debug.WriteLine("--Form1() ctor");
        } // end Form1() ctor