Beispiel #1
0
        /// <summary>
        /// Do work - process sensor data
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void AcquisitionWorker_DoWork(object sender, DoWorkEventArgs e)
        {
            backgroundIsFinished_ = false;
            BackgroundWorker worker = sender as BackgroundWorker;

            while (!worker.CancellationPending) //Do the work
            {
                foreach (USBdevice_GUI USB in USBdevices)
                {
                    SingleTact      singleTact = USB.singleTact;
                    SingleTactFrame newFrame   = singleTact.ReadSensorData(); //Get sensor data

                    if (null != newFrame)                                     //If we have data
                    {
                        USB.addFrame(newFrame);

                        // use first timestamp only to quantise readings and match csv output
                        AddData(USBdevices[0].lastTimeStamp, newFrame.SensorData, USB);     //Add to stripchart
                    }
                    else  // USB has been unplugged
                    {
                        new Thread(() =>
                        {
                            guiTimer_.Stop();
                            backgroundIsFinished_ = true;
                            var index             = USBdevices.IndexOf(USB);
                            var comPort           = comPortList[index];
                            var result            = MessageBox.Show(
                                comPort.ToString() + " has been unplugged.\nWould you like to save your data before exiting?",
                                "Error!",
                                MessageBoxButtons.YesNo,
                                MessageBoxIcon.Error);
                            if (result == DialogResult.Yes)
                            {
                                buttonSave_Click(this, null);
                            }
                            Application.Exit();
                        }).Start();
                        backgroundIsFinished_ = false;
                        StopAcquisitionThread();
                        break;
                    }

                    //Calculate rate
                    double delta = newFrame.TimeStamp - USB.lastTimeStamp; // calculate delta relative to previous sensor's last reading
                    if (delta != 0)
                    {
                        measuredFrequency_ = measuredFrequency_ * 0.95 + 0.05 * (1.0 / (delta));      //Averaging
                    }
                    //measuredFrequency_ = 1/delta;
                    USB.setTimestamp(newFrame.TimeStamp);
                }
            }
        }