public Double[] StartSingleReadingWindow(double time, string output_fmt = "OD") { DaqBoard = new MccDaq.MccBoard(0); MccDaq.ErrorInfo ULStat; int FirstPoint, NumChans = HighChan - LowChan + 1, CurIndex, CurCount; short Status; NumPoints = (int)(time) * Rate * NumChans; MemHandle = MccDaq.MccService.WinBufAllocEx(10 * NumPoints); Thread.Sleep(100); MccDaq.ScanOptions Options = MccDaq.ScanOptions.ConvertData; ULStat = DaqBoard.AInScan(LowChan, HighChan, NumPoints, ref Rate, MccDaq.Range.Bip10Volts, MemHandle, Options); DaqBoard.GetStatus(out Status, out CurCount, out CurIndex, MccDaq.FunctionType.AiFunction); FirstPoint = CurIndex; // recently collected data int N = FirstPoint + NumChans; ushort[] addata = new ushort[N]; MccDaq.MccService.WinBufToArray(MemHandle, addata, 0, N); List <float> channel_data = new List <float>(); for (int i = 0; i <= HighChan; ++i) { //sum = 0; channel_data.RemoveRange(0, channel_data.Count); for (int j = i; j < N; j += NumChans) { //sum += addata[j]; channel_data.Add(addata[j]); } // take median voltage value channel_data.Sort(); ADData[i] = channel_data[(Int32)(channel_data.Count / 2)]; // convert from int to double precision voltage value ADData[i] = (ADData[i] - 32768) / (float)3276.8; } DaqBoard.StopBackground(MccDaq.FunctionType.AiFunction); MccDaq.MccService.WinBufFreeEx(MemHandle); if (output_fmt == "OD") { return(convertADtoOD(ADData)); } else { return(ADData); } }
public void startContinuousRead() { // per channel sampling rate ((samples per second) per channel) MccDaq.ScanOptions Options = MccDaq.ScanOptions.Background | MccDaq.ScanOptions.Continuous; // collect data in background continuously DaqBoard.AInScan(LowChan, HighChan, NumPoints, ref Rate, MccDaq.Range.Bip10Volts, MemHandle, Options); tmrContinuousRead.Start(); }