本文整理汇总了C#中System.Threading.Task.Dispose方法的典型用法代码示例。如果您正苦于以下问题:C# Task.Dispose方法的具体用法?C# Task.Dispose怎么用?C# Task.Dispose使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类System.Threading.Task
的用法示例。
在下文中一共展示了Task.Dispose方法的15个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C#代码示例。
示例1: StartAcquisition
private void StartAcquisition()
{
if (runningTask == null)
{
try
{
// Create a new task
myTask = new Task();
// Create a virtual channel
myTask.AIChannels.CreateVoltageChannel(channelName, "",
(AITerminalConfiguration)(-1), Convert.ToDouble(minimumValue),
Convert.ToDouble(maximumValue), AIVoltageUnits.Volts);
// Configure the timing parameters
myTask.Timing.ConfigureSampleClock("", Convert.ToDouble(sampleRate),
SampleClockActiveEdge.Rising, SampleQuantityMode.ContinuousSamples, 1000);
// Verify the Task
myTask.Control(TaskAction.Verify);
runningTask = myTask;
analogInReader = new AnalogMultiChannelReader(myTask.Stream);
analogCallback = new AsyncCallback(AnalogInCallback);
// Use SynchronizeCallbacks to specify that the object
// marshals callbacks across threads appropriately.
analogInReader.SynchronizeCallbacks = true;
analogInReader.BeginReadWaveform(Convert.ToInt32(sampleRead),
analogCallback, myTask);
bitsPerSample = myTask.AIChannels[0].Resolution;
}
catch (DaqException exception)
{
// Display Errors
MessageBox.Show(exception.Message);
runningTask = null;
myTask.Dispose();
}
}
}
示例2: Configure
public void Configure(double __dCycleTimeMilisec, int __iSteps, bool master, bool continuous)
{
_logger.Info("Configuring stage timing....");
this.m_samplePeriod = __dCycleTimeMilisec / 1000;
if (this.m_bMaster && this.m_sampleClock == null)
{
this.m_sampleClock = new NISampleClock(this.m_sDevice, "Ctr2");
}
if (this.m_daqtskLineTrigger != null)
{
if (this.m_daqtskLineTrigger.IsDone != true)
{
this.m_daqtskLineTrigger.Stop();
}
this.m_daqtskLineTrigger.Control(TaskAction.Unreserve);
}
Task _lineTask = new Task();
try
{
if (this.m_daqtskMoveStage == null)
{
this.Initialize();
}
this.m_daqtskMoveStage.Timing.SampleTimingType = SampleTimingType.SampleClock;
this.m_daqtskMoveStage.Timing.ConfigureSampleClock(
this.m_bMaster ? this.m_sampleClock.Terminal : this.m_sTimingSource,
1000 / __dCycleTimeMilisec,
SampleClockActiveEdge.Rising,
continuous ? SampleQuantityMode.ContinuousSamples : SampleQuantityMode.FiniteSamples,
__iSteps);
_lineTask.DOChannels.CreateChannel(
this.m_sDevice + "/port0",
"test",
ChannelLineGrouping.OneChannelForAllLines);
_lineTask.Timing.SampleTimingType = SampleTimingType.SampleClock;
_lineTask.Timing.ConfigureSampleClock(
this.m_bMaster ? this.m_sampleClock.Terminal : this.m_sTimingSource,
1000 / __dCycleTimeMilisec,
SampleClockActiveEdge.Rising,
continuous ? SampleQuantityMode.ContinuousSamples : SampleQuantityMode.FiniteSamples,
__iSteps);
_lineTask.Control(TaskAction.Verify);
_lineTask.Control(TaskAction.Commit);
}
catch (DaqException ex)
{
if (_lineTask != null)
{
_lineTask.Dispose();
}
_logger.Error("Error while setting timing!", ex);
}
if (_lineTask != null)
{
this.m_daqtskLineTrigger = _lineTask;
}
}
示例3: resetFlipFlop
public void resetFlipFlop()
{
ResetSignal = new Task("Reset Signal");
DOChannel myDOChannel;
myDOChannel = ResetSignal.DOChannels.CreateChannel(
prevodnikId + "/port0",
"write0",
ChannelLineGrouping.OneChannelForAllLines
);
writer = new DigitalSingleChannelWriter(ResetSignal.Stream);
writer.WriteSingleSamplePort(true, 127);//nastavit P0 na 01111111, => reset
Thread.Sleep(100);
writer.WriteSingleSamplePort(true, 255);//nastavit P0 na 11111111, => reset resetu
ResetSignal.Dispose();
}
示例4: startButton_Click
private static void startButton_Click()
{
try
{
continuousTask = DaqSystem.Local.LoadTask(taskName);
runningTask = continuousTask;
continuousTask.Start();
reader = new AnalogMultiChannelReader(continuousTask.Stream);
callBack = new AsyncCallback(ReadCallBack);
reader.SynchronizeCallbacks = true;
reader.BeginReadWaveform(Convert.ToInt32(continuousTask.Timing.SamplesPerChannel), callBack, continuousTask);
while (true)
{
}
}
catch (DaqException ex)
{
continuousTask.Dispose();
}
}
示例5: radioButton_stimCurrentControlled_Click
private void radioButton_stimCurrentControlled_Click(object sender, EventArgs e)
{
if (radioButton_stimCurrentControlled.Checked)
{
Properties.Settings.Default.StimVoltageControlled = false;
if (Properties.Settings.Default.UseStimulator)
{
stimIvsVTask = new Task("stimIvsV");
//stimIvsVTask.DOChannels.CreateChannel(Properties.Settings.Default.StimIvsVDevice + "/Port0/line8:15", "",
// ChannelLineGrouping.OneChannelForAllLines);
stimIvsVTask.DOChannels.CreateChannel(Properties.Settings.Default.StimIvsVDevice + "/Port1/line0", "",
ChannelLineGrouping.OneChannelForAllLines);
stimIvsVWriter = new DigitalSingleChannelWriter(stimIvsVTask.Stream);
//stimIvsVTask.Timing.ConfigureSampleClock("100kHztimebase", 100000,
// SampleClockActiveEdge.Rising, SampleQuantityMode.FiniteSamples);
stimIvsVTask.Control(TaskAction.Verify);
//byte[] b_array = new byte[5] { 255, 255, 255, 255, 255 };
//DigitalWaveform wfm = new DigitalWaveform(5, 8, DigitalState.ForceDown);
//wfm = NationalInstruments.DigitalWaveform.FromPort(b_array);
//stimIvsVWriter.WriteWaveform(true, wfm);
stimIvsVWriter.WriteSingleSampleSingleLine(true, true);
stimIvsVTask.WaitUntilDone();
stimIvsVTask.Stop();
stimIvsVTask.Dispose();
}
radioButton_impCurrent.Checked = true;
}
}
示例6: radioButton_stimVoltageControlled_Click
private void radioButton_stimVoltageControlled_Click(object sender, EventArgs e)
{
if (radioButton_stimVoltageControlled.Checked)
{
Properties.Settings.Default.StimVoltageControlled = true;
if (Properties.Settings.Default.UseStimulator)
{
//this line goes high (TTL-wise) when we're doing current-controlled stim, low for voltage-controlled
stimIvsVTask = new Task("stimIvsV");
stimIvsVTask.DOChannels.CreateChannel(Properties.Settings.Default.StimIvsVDevice + "/Port1/line0", "",
ChannelLineGrouping.OneChannelForAllLines);
stimIvsVWriter = new DigitalSingleChannelWriter(stimIvsVTask.Stream);
stimIvsVTask.Control(TaskAction.Verify);
stimIvsVWriter.WriteSingleSampleSingleLine(true, false);
stimIvsVTask.WaitUntilDone();
stimIvsVTask.Stop();
stimIvsVTask.Dispose();
}
radioButton_impVoltage.Checked = true;
}
}
示例7: IV_AcquireDataWithoutMoving
//.........这里部分代码省略.........
dataAcquired = null;
try
{
while (!m_quitRealTimeOperation)
{
try
{
dataAcquired = reader.ReadMultiSample(-1);
}
catch (DaqException)
{
continue;
}
}
if (dataAcquired != null)
{
if (settings.ChannelsSettings.ActiveChannels.Count != dataAcquired.GetLength(0))
{
throw new SBJException("Number of data channels doesn't fit the recieved data.");
}
}
}
catch (DaqException ex)
{
//
// Probably timeout.
// Ignore this cycle and rerun.
//
m_ivInputTask.Stop();
continue;
}
//
// At this point the reader has returned with all the data and we can stop the input task.
//
m_ivInputTask.Stop();
//
// if we didn't acquire any data, there's no need to save anything.
//
if (dataAcquired == null)
{
continue;
}
//
// Assign the aquired data for each channel.
// First clear all data from previous interation.
//
ClearRawData(settings.ChannelsSettings.ActiveChannels);
AssignRawDataToChannels(settings.ChannelsSettings.ActiveChannels, dataAcquired);
//
// physical channel will include both simple and complex channels.
//
physicalChannels = GetChannelsForDisplay(settings.ChannelsSettings.ActiveChannels);
//
// calculate the physical data for each channel
//
GetPhysicalData(physicalChannels);
//
// the IV acquisition is done, we need to return the output to constant voltage for the next cycle
//
writer.BeginWriteMultiSample(false, m_functionGenerator.ConstWave, null, null);
//
// Increase file number by one
// Save data if needed
//
finalFileNumber++;
if (settings.IVGeneralSettings.IsFileSavingRequired)
{
finalFileNumber = SaveData(settings.IVGeneralSettings.Path, settings.ChannelsSettings.ActiveChannels, physicalChannels, finalFileNumber);
}
//
// Signal UI we have the data
//
if (DataAquired != null)
{
DataAquired(this, new DataAquiredEventArgs(physicalChannels, finalFileNumber));
}
}
//
// Finish the measurement properly
//
if (settings.IVSteppingMethodSettings.SteppingDevice == SteppingDevice.ElectroMagnet)
{
m_electroMagnet.Shutdown();
}
m_ivInputTask.Dispose();
m_ivInputTask = null;
m_outputTask.Dispose();
m_outputTask = null;
m_stepperMotor.Shutdown();
}
示例8: updateStim
//call this method after changing stimulation settings, or finishing a stimulation experiment
//includes code to set dc offsets back to zero
private void updateStim()
{
lock (this)
{
bool placedzeros = false;
if (stimPulseTask != null || stimDigitalTask != null)
{
try
{
// If we were ruuning a closed loop or open-loop protocol, this will zero the outputs
double[,] AnalogBuffer = new double[stimPulseTask.AOChannels.Count, STIMBUFFSIZE]; // buffer for analog channels
UInt32[] DigitalBuffer = new UInt32[STIMBUFFSIZE];
stimPulseTask.Stop();
stimDigitalTask.Stop();
stimPulseWriter.WriteMultiSample(true, AnalogBuffer);
stimDigitalWriter.WriteMultiSamplePort(true, DigitalBuffer);
stimPulseTask.WaitUntilDone(20);
stimDigitalTask.WaitUntilDone(20);
stimPulseTask.Stop();
stimDigitalTask.Stop();
placedzeros = true;
}
catch (Exception ex)
{
placedzeros = false;
}
}
if (stimDigitalTask != null)
{
stimDigitalTask.Dispose();
stimDigitalTask = null;
}
if (stimPulseTask != null)
{
stimPulseTask.Dispose();
stimPulseTask = null;
}
if (Properties.Settings.Default.UseStimulator)
{
stimPulseTask = new Task("stimPulseTask");
stimDigitalTask = new Task("stimDigitalTask");
if (Properties.Settings.Default.StimPortBandwidth == 32)
stimDigitalTask.DOChannels.CreateChannel(Properties.Settings.Default.StimulatorDevice + "/Port0/line0:31", "",
ChannelLineGrouping.OneChannelForAllLines); //To control MUXes
else if (Properties.Settings.Default.StimPortBandwidth == 8)
stimDigitalTask.DOChannels.CreateChannel(Properties.Settings.Default.StimulatorDevice + "/Port0/line0:7", "",
ChannelLineGrouping.OneChannelForAllLines); //To control MUXes
if (Properties.Settings.Default.StimPortBandwidth == 32)
{
stimPulseTask.AOChannels.CreateVoltageChannel(Properties.Settings.Default.StimulatorDevice + "/ao0", "", -10.0, 10.0, AOVoltageUnits.Volts); //Triggers
stimPulseTask.AOChannels.CreateVoltageChannel(Properties.Settings.Default.StimulatorDevice + "/ao1", "", -10.0, 10.0, AOVoltageUnits.Volts); //Triggers
stimPulseTask.AOChannels.CreateVoltageChannel(Properties.Settings.Default.StimulatorDevice + "/ao2", "", -10.0, 10.0, AOVoltageUnits.Volts); //Actual Pulse
stimPulseTask.AOChannels.CreateVoltageChannel(Properties.Settings.Default.StimulatorDevice + "/ao3", "", -10.0, 10.0, AOVoltageUnits.Volts); //Timing
}
else if (Properties.Settings.Default.StimPortBandwidth == 8)
{
stimPulseTask.AOChannels.CreateVoltageChannel(Properties.Settings.Default.StimulatorDevice + "/ao0", "", -10.0, 10.0, AOVoltageUnits.Volts);
stimPulseTask.AOChannels.CreateVoltageChannel(Properties.Settings.Default.StimulatorDevice + "/ao1", "", -10.0, 10.0, AOVoltageUnits.Volts);
}
if (Properties.Settings.Default.UseCineplex)
{
stimPulseTask.Timing.ReferenceClockSource = videoTask.Timing.ReferenceClockSource;
stimPulseTask.Timing.ReferenceClockRate = videoTask.Timing.ReferenceClockRate;
}
else
{
stimPulseTask.Timing.ReferenceClockSource = "OnboardClock";
//stimPulseTask.Timing.ReferenceClockRate = 10000000.0; //10 MHz timebase
}
stimDigitalTask.Timing.ConfigureSampleClock("100kHzTimebase", STIM_SAMPLING_FREQ,
SampleClockActiveEdge.Rising, SampleQuantityMode.FiniteSamples);
stimPulseTask.Timing.ConfigureSampleClock("100kHzTimebase", STIM_SAMPLING_FREQ,
SampleClockActiveEdge.Rising, SampleQuantityMode.FiniteSamples);
stimDigitalTask.SynchronizeCallbacks = false;
stimPulseTask.SynchronizeCallbacks = false;
stimDigitalWriter = new DigitalSingleChannelWriter(stimDigitalTask.Stream);
stimPulseWriter = new AnalogMultiChannelWriter(stimPulseTask.Stream);
stimPulseTask.Triggers.StartTrigger.ConfigureDigitalEdgeTrigger(
"/" + Properties.Settings.Default.StimulatorDevice + "/PFI6", DigitalEdgeStartTriggerEdge.Rising);
stimDigitalTask.Control(TaskAction.Verify);
stimPulseTask.Control(TaskAction.Verify);
//Check to ensure one of the I/V buttons is checked
if (!radioButton_impCurrent.Checked && !radioButton_impVoltage.Checked)
{
radioButton_impCurrent.Checked = true;
radioButton_impVoltage.Checked = false;
radioButton_stimCurrentControlled.Checked = true;
//.........这里部分代码省略.........
示例9: AquireDataManually
//.........这里部分代码省略.........
// were not read so far.
//
dataAquired = reader.ReadMultiSample(-1);
//
// Get average for the acquired the data and assign to variable
//
List<double> averageDataValues = GetAverageDataValue(dataAquired);
for (int i = 0; i < averageDataValues.Count; i++)
{
averagedData[i].Add(averageDataValues[i]);
}
dataAquired = null;
//
// Cancel the operatin if user asked for
// We do it at the end of the loop to make sure we
// saved all the data we have available.
//
if (worker.CancellationPending == true)
{
e.Cancel = true;
break;
}
}
}
catch (DaqException)
{
//
// In case of an error just return
//
m_activeTriggeredTask.Stop();
m_activeTriggeredTask.Dispose();
if (m_LaserController != null)
{
m_LaserController.TurnOff();
}
if (m_taborFirstEOMController != null)
{
m_taborFirstEOMController.TurnOff();
}
if (m_taborSecondEOMController != null)
{
m_taborSecondEOMController.TurnOff();
}
return false;
}
//
// At this point the user had requested to stop the data aquisition.
// By signaling "stop". We can stop the task.
//
m_activeTriggeredTask.Stop();
//
// Assign the aquired data for each channel after an average process
//
AssignRawDataToChannels(settings.ChannelsSettings.ActiveChannels, ConvertDataToMatrix(GetAveragedData(averagedData, 5000)));
//
// physical channel will include both simple and complex channels.
//
physicalChannels = GetChannelsForDisplay(settings.ChannelsSettings.ActiveChannels);
//
示例10: AquireDataContinuously
//.........这里部分代码省略.........
{
fullData.Add(new List<double>());
}
try
{
//
// Before getting all the data clear the lists.
//
ClearRawData(settings.ChannelsSettings.ActiveChannels);
//
// As long as the user didn't ask to stop the acquisition
// (which is signaled by the stop of the stepper motion)
// we coninue sampling.
//
while (!worker.CancellationPending)
{
//
// Read all available data points in the buffer that
// were not read so far.
//
dataAquired = reader.ReadMultiSample(-1);
fullData = AccumulateData(fullData, dataAquired);
dataAquired = null;
}
}
catch (DaqException)
{
//
// In case of an error just return
//
m_activeTriggeredTask.Stop();
m_activeTriggeredTask.Dispose();
if (m_LaserController != null)
{
m_LaserController.TurnOff();
}
if (m_taborFirstEOMController != null)
{
m_taborFirstEOMController.TurnOff();
}
if (m_taborSecondEOMController != null)
{
m_taborSecondEOMController.TurnOff();
}
return false;
}
//
// At this point the user had requested to stop the data aquisition.
// By signaling "stop". We can stop the task.
//
m_activeTriggeredTask.Stop();
//
// Assign the aquired data for each channel after an average process
//
AssignRawDataToChannels(settings.ChannelsSettings.ActiveChannels, ConvertDataToMatrix(fullData));
//
// physical channel will include both simple and complex channels.
//
physicalChannels = GetChannelsForDisplay(settings.ChannelsSettings.ActiveChannels);
//
示例11: AquireData
/// <summary>
/// Data aquisition
/// </summary>
/// <param name="settings">The settings for running the aquisition</param>
/// <returns>True whether the operation was cacled by the user. False otherwise.</returns>
public bool AquireData(SBJControllerSettings settings, BackgroundWorker worker, DoWorkEventArgs e)
{
bool isCancelled = false;
//
// Apply voltage with desired tool: Task or Keithley
//
ApplyVoltageIfNeeded(settings.GeneralSettings.UseKeithley,
settings.GeneralSettings.Bias,
settings.GeneralSettings.BiasError,
settings.GeneralSettings.Range,
settings.GeneralSettings.AutoRange);
//
// Use Lambda Zup to apply constant voltage on external electromagnet if needed
//
UseLambdaZupIfNeeded(settings.LambdaZupSettings.IsLambdaZupEnable,
settings.LambdaZupSettings.OutputVoltage);
//
// Configure the laser if needed for this run
//
ConfigureLaserIfNeeded(settings);
//
// Save this run settings if desired
//
SaveSettingsIfNeeded(settings, settings.GeneralSettings.IsFileSavingRequired, settings.GeneralSettings.Path);
//
//apply initial voltage on the EM
//
ApplyVoltageOnElectroMagnetIfNeeded(settings.ElectromagnetSettings.IsEMEnable);
//
// Change to E5 gain to determine current sign (+/-) in order to configure the task correctly
// This is also used to disable auto range once reached to contact.
//
m_amplifier.ChangeGain(5);
//
// Create the task
//
switch (settings.GeneralSettings.RunDirection)
{
case RunDirection.Both:
//TODO: Add implementation for both direction measurement
break;
case RunDirection.Break:
m_firstTriggeredTask = GetMultipleChannelsTriggeredTask(settings, "firstTriggeredTask" ,RunDirection.Break, 0, 0, worker, e);
m_firstTriggeredTask.Control(TaskAction.Verify);
double level = m_firstTriggeredTask.Triggers.ReferenceTrigger.AnalogEdge.Level * -1;
AnalogEdgeReferenceTriggerSlope slope = m_firstTriggeredTask.Triggers.ReferenceTrigger.AnalogEdge.Slope == AnalogEdgeReferenceTriggerSlope.Falling ? AnalogEdgeReferenceTriggerSlope.Rising : AnalogEdgeReferenceTriggerSlope.Falling;
m_secondaryTriggeredTask = GetMultipleChannelsTriggeredTask(settings, "secondaryTriggeredTask", RunDirection.Break, slope, level , worker, e);
isCancelled = PerformBreakJunctionCycles(settings, worker, e);
break;
case RunDirection.Make:
m_activeTriggeredTask = GetMultipleChannelsTriggeredTask(settings, null,RunDirection.Make, m_triggerSlope, m_triggerVoltage, worker, e);
isCancelled = PerformMakeJunctionCycles(settings, worker, e);
break;
}
//
// Finish the measurement properly
//
if (settings.LaserSettings.IsLaserOn)
{
m_LaserController.TurnOff();
}
if (settings.ElectromagnetSettings.IsEMEnable)
{
m_electroMagnet.Shutdown();
}
if (settings.LaserSettings.IsFirstEOMOn)
{
m_taborFirstEOMController.TurnOff();
}
if (settings.LaserSettings.IsSecondEOMOn)
{
m_taborSecondEOMController.TurnOff();
}
if (settings.LambdaZupSettings.IsLambdaZupEnable)
{
m_lambdaZup.TurnOffOutput();
}
m_activeTriggeredTask.Dispose();
m_firstTriggeredTask.Dispose();
m_secondaryTriggeredTask.Dispose();
m_stepperMotor.Shutdown();
return isCancelled;
}
示例12: ReachToPositionByMovingUp
//.........这里部分代码省略.........
{
BeginOpenJunction(settings, worker, e);
}
//
// Cancel the operatin if user asked for
//
if (worker.CancellationPending == true)
{
e.Cancel = true;
break;
}
//
// Start the triggered task.
//
m_activeTriggeredTask.Start();
//
// If the user asked to stop the operation on the external thread then
// WaitUntilDone will throw an expection. We can ignore that and return.
//
try
{
m_activeTriggeredTask.WaitUntilDone();
}
catch (DaqException)
{
//
// We got here if the user asked to stop the operation
//
break;
}
//
// We reach this point only after we reached the desired conductance value.
// As long as the user didn't ask to stop the operation continue recording the data.
//
while (!m_quitRealTimeOperation)
{
//
// Read operation implicity start the task without the need to call Start() method.
//
try
{
dataAcquired = realTimeReader.ReadMultiSample(-1);
}
catch (DaqException)
{
continue;
}
if (dataAcquired.Length == 0)
{
continue;
}
//
// Assign the aquired data for each channel.
//
AssignRawDataToChannels(settings.ChannelsSettings.ActiveChannels, dataAcquired);
//
// calculate the physical data for each channel
//
GetPhysicalData(physicalChannels);
//
// Signal UI we have the data
//
if (DataAquired != null)
{
DataAquired(this, new DataAquiredEventArgs(physicalChannels, finalFileNumber));
}
}
if (DoneReadingData != null)
{
DoneReadingData(this, null);
}
m_realTimeTask.Stop();
m_realTimeTask.Dispose();
//
// Increase file number by one
// Save data if needed
//
finalFileNumber++;
if (settings.GeneralSettings.IsFileSavingRequired)
{
finalFileNumber = SaveData(settings.GeneralSettings.Path, settings.ChannelsSettings.ActiveChannels, physicalChannels, finalFileNumber);
}
}
m_activeTriggeredTask.Dispose();
m_realTimeTask.Dispose();
m_triggerSlope = 0;
m_triggerVoltage = 0;
return e.Cancel;
}
示例13: UpdateStimulationSettings
// Look at the stimulation hardware settings and create NI Tasks that reflect the user's choices
private void UpdateStimulationSettings()
{
try
{
if (stimPulseTask != null) { stimPulseTask.Dispose(); stimPulseTask = null; }
if (stimDigitalTask != null) { stimDigitalTask.Dispose(); stimDigitalTask = null; }
if (Properties.Settings.Default.UseStimulator)
{
if (stimDigitalTask == null)
{
stimDigitalTask = new Task("stimDigitalTask");
stimPulseTask = new Task("stimPulseTask");
if (Properties.Settings.Default.StimPortBandwidth == 32)
stimDigitalTask.DOChannels.CreateChannel(Properties.Settings.Default.StimulatorDevice + "/Port0/line0:31", "",
ChannelLineGrouping.OneChannelForAllLines); //To control MUXes
else if (Properties.Settings.Default.StimPortBandwidth == 8)
stimDigitalTask.DOChannels.CreateChannel(Properties.Settings.Default.StimulatorDevice + "/Port0/line0:7", "",
ChannelLineGrouping.OneChannelForAllLines); //To control MUXes
if (Properties.Settings.Default.StimPortBandwidth == 32)
{
stimPulseTask.AOChannels.CreateVoltageChannel(Properties.Settings.Default.StimulatorDevice + "/ao0", "", -10.0, 10.0, AOVoltageUnits.Volts); //Triggers
stimPulseTask.AOChannels.CreateVoltageChannel(Properties.Settings.Default.StimulatorDevice + "/ao1", "", -10.0, 10.0, AOVoltageUnits.Volts); //Triggers
stimPulseTask.AOChannels.CreateVoltageChannel(Properties.Settings.Default.StimulatorDevice + "/ao2", "", -10.0, 10.0, AOVoltageUnits.Volts); //Actual Pulse
stimPulseTask.AOChannels.CreateVoltageChannel(Properties.Settings.Default.StimulatorDevice + "/ao3", "", -10.0, 10.0, AOVoltageUnits.Volts); //Timing
}
else if (Properties.Settings.Default.StimPortBandwidth == 8)
{
stimPulseTask.AOChannels.CreateVoltageChannel(Properties.Settings.Default.StimulatorDevice + "/ao0", "", -10.0, 10.0, AOVoltageUnits.Volts);
stimPulseTask.AOChannels.CreateVoltageChannel(Properties.Settings.Default.StimulatorDevice + "/ao1", "", -10.0, 10.0, AOVoltageUnits.Volts);
}
if (Properties.Settings.Default.UseCineplex)
{
stimPulseTask.Timing.ReferenceClockSource = videoTask.Timing.ReferenceClockSource;
stimPulseTask.Timing.ReferenceClockRate = videoTask.Timing.ReferenceClockRate;
}
else
{
string tmp1 = Properties.Settings.Default.StimulatorDevice.ToString();
string tmp2 = Properties.Settings.Default.AnalogInDevice[0].ToString();
if (tmp1.Equals(tmp2))
{
stimPulseTask.Timing.ReferenceClockSource = "OnboardClock";
}
else
{
stimPulseTask.Timing.ReferenceClockSource = "/" + Properties.Settings.Default.StimulatorDevice.ToString() + "/PFI0";
stimPulseTask.Timing.ReferenceClockRate = 10000000.0; //10 MHz timebase
}
}
stimDigitalTask.Timing.ConfigureSampleClock("100KHzTimebase", STIM_SAMPLING_FREQ,
SampleClockActiveEdge.Rising, SampleQuantityMode.FiniteSamples);
stimPulseTask.Timing.ConfigureSampleClock("100KHzTimebase", STIM_SAMPLING_FREQ,
SampleClockActiveEdge.Rising, SampleQuantityMode.FiniteSamples);
stimDigitalTask.SynchronizeCallbacks = false;
stimPulseTask.SynchronizeCallbacks = false;
stimDigitalWriter = new DigitalSingleChannelWriter(stimDigitalTask.Stream);
stimPulseWriter = new AnalogMultiChannelWriter(stimPulseTask.Stream);
stimPulseTask.Triggers.StartTrigger.ConfigureDigitalEdgeTrigger(
"/" + Properties.Settings.Default.StimulatorDevice + "/PFI6", DigitalEdgeStartTriggerEdge.Rising);
stimDigitalTask.Control(TaskAction.Verify);
stimPulseTask.Control(TaskAction.Verify);
//Check to ensure one of the I/V buttons is checked
if (!radioButton_impCurrent.Checked && !radioButton_impVoltage.Checked)
{
radioButton_impCurrent.Checked = true;
radioButton_impVoltage.Checked = false;
radioButton_stimCurrentControlled.Checked = true;
radioButton_stimVoltageControlled.Checked = false;
}
if (Properties.Settings.Default.UseStimulator)
{
stimIvsVTask = new Task("stimIvsV");
stimIvsVTask.DOChannels.CreateChannel(Properties.Settings.Default.StimIvsVDevice + "/Port1/line0", "",
ChannelLineGrouping.OneChannelForAllLines);
stimIvsVWriter = new DigitalSingleChannelWriter(stimIvsVTask.Stream);
stimIvsVTask.Control(TaskAction.Verify);
if (radioButton_impCurrent.Checked) stimIvsVWriter.WriteSingleSampleSingleLine(true, true);
else stimIvsVWriter.WriteSingleSampleSingleLine(true, false);
stimIvsVTask.WaitUntilDone();
//stimIvsVTask.Stop();
stimIvsVTask.Dispose();
}
}
button_stim.Enabled = true;
button_stimExpt.Enabled = true;
openLoopStart.Enabled = true;
radioButton_impCurrent.Enabled = true;
radioButton_impVoltage.Enabled = true;
radioButton_stimCurrentControlled.Enabled = true;
radioButton_stimVoltageControlled.Enabled = true;
button_impedanceTest.Enabled = true;
//.........这里部分代码省略.........
示例14: Initialize
public void Initialize()
{
_logger.Info("Initializing analog Stage....");
// Setup an Analog Out task to move the stage along X and Y.
Task _daqtskTask = new Task();
try
{
// Add AO channels.
_daqtskTask.AOChannels.CreateVoltageChannel("/" + this.m_sDevice + "/ao0", "aoChannelX", m_dVoltageMin, m_dVoltageMax, AOVoltageUnits.Volts);
_daqtskTask.AOChannels.CreateVoltageChannel("/" + this.m_sDevice + "/ao1", "aoChannelY", m_dVoltageMin, m_dVoltageMax, AOVoltageUnits.Volts);
_daqtskTask.AOChannels.CreateVoltageChannel("/" + this.m_sDevice + "/ao2", "aoChannelZ", m_dVoltageMin, m_dVoltageMax, AOVoltageUnits.Volts);
// checked IFilteredTypeDescriptor everything is OK.
_daqtskTask.Control(TaskAction.Verify);
// Assign the task.
this.m_daqtskMoveStage = _daqtskTask;
// Return a status indication for the stage.
this.m_bIsInitialized = true;
}
catch (DaqException exception)
{
if (_daqtskTask != null)
{
_daqtskTask.Dispose();
}
this.m_bIsInitialized = false;
_logger.Error("Unable to connect set up AO channels for Move task!" + exception.Message);
}
// If everything went well, tell everyone.
if (EngagedChanged != null)
{
EngagedChanged(this, new EventArgs());
}
_logger.Info("Init Stage Done!");
}
示例15: IV_AcquireData
//.........这里部分代码省略.........
//
// start reading continuously.
// when the junction is opened, the opening thread will change m_quitJuncctionOpeningOperation to true.
// set dataAquired to null otherwise it saves last cycle's data.
//
reader = new AnalogMultiChannelReader(m_ivInputTask.Stream);
dataAcquired = null;
try
{
while (!m_quitJunctionOpenningOperation)
{
dataAcquired = reader.ReadMultiSample(-1);
}
if (dataAcquired != null)
{
if (settings.ChannelsSettings.ActiveChannels.Count != dataAcquired.GetLength(0))
{
throw new SBJException("Number of data channels doesn't fit the recieved data.");
}
}
}
catch (DaqException)
{
//
// Probably timeout.
// Ignore this cycle and rerun.
//
m_ivInputTask.Stop();
continue;
}
//
// At this point the reader has returned with all the data and we can stop the input task.
//
m_ivInputTask.Stop();
//
// if we didn't acquire any data, there's no need to save anything.
//
if (dataAcquired == null)
{
continue;
}
//
// Assign the aquired data for each channel.
// First clear all data from previous interation.
//
ClearRawData(settings.ChannelsSettings.ActiveChannels);
AssignRawDataToChannels(settings.ChannelsSettings.ActiveChannels, dataAcquired);
//
// physical channel will include both simple and complex channels.
//
physicalChannels = GetChannelsForDisplay(settings.ChannelsSettings.ActiveChannels);
//
// calculate the physical data for each channel
//
GetPhysicalData(physicalChannels);
//
// the IV acquisition is done, we need to return the output to constant voltage for the next cycle
//
writer.BeginWriteMultiSample(false, m_functionGenerator.ConstWave, null, null);
//
// Increase file number by one
// Save data if needed
//
finalFileNumber++;
if (settings.IVGeneralSettings.IsFileSavingRequired)
{
finalFileNumber = SaveData(settings.IVGeneralSettings.Path, settings.ChannelsSettings.ActiveChannels, physicalChannels, finalFileNumber);
}
//
// Signal UI we have the data
//
if (DataAquired != null)
{
DataAquired(this, new DataAquiredEventArgs(physicalChannels, finalFileNumber));
}
}
//
// Finish the measurement properly
//
if (settings.IVSteppingMethodSettings.SteppingDevice == SteppingDevice.ElectroMagnet)
{
m_electroMagnet.Shutdown();
}
m_ivInputTask.Dispose();
m_ivInputTask = null;
m_outputTask.Dispose();
m_outputTask = null;
m_stepperMotor.Shutdown();
}