/// <summary> /// Create DAQ Task with trigger /// </summary> /// <param name="properties">The properties of the task</param> /// <returns>The task to be activated</returns> public Task CreateTriggeredTask(TriggeredTaskProperties properties) { // // Create anaglog input task with the specified name // Task analogInputTask = new Task(c_refTriggeredTask); // // Define a voltage channel // AIChannel anaglogChannel = analogInputTask.AIChannels.CreateVoltageChannel(Settings.Default.DAQPhysicalChannelName0, string.Empty, GetAITerminalConfiguration(), -10, 10, AIVoltageUnits.Volts); // // Configure sampling rate // analogInputTask.Timing.ConfigureSampleClock(string.Empty, properties.SampleRate, SampleClockActiveEdge.Falling, SampleQuantityMode.FiniteSamples, properties.SamplesPerChannel); // // Configure the trigger // analogInputTask.Triggers.ReferenceTrigger.ConfigureAnalogEdgeTrigger(anaglogChannel.VirtualName, properties.TriggerSlope, properties.TriggerLevel, properties.PreTriggerSamples); analogInputTask.Stream.ReadRelativeTo = ReadRelativeTo.FirstPretriggerSample; analogInputTask.Stream.ReadOffset = 0; analogInputTask.Stream.Timeout= 600000; analogInputTask.Stream.ReadAllAvailableSamples = false; return analogInputTask; }
public Task CreateMultipleChannelsTriggeredTask(TriggeredTaskProperties properties) { // // Create anaglog input task with the specified name // string name = properties.TaskName != null ? properties.TaskName : c_refTriggeredTask; Task analogInputTask = new Task(name); // // Construct the the physical channel name according to the desired inputs. // StringBuilder physicalChannelName = new StringBuilder(); foreach (var channel in properties.ActiveChannels) { physicalChannelName.Append(channel.PhysicalName); physicalChannelName.Append(","); } // // Remove last ':' from channel name // physicalChannelName.Remove(physicalChannelName.Length - 1, 1); // // Define a voltage channel // AIChannel anaglogChannel = analogInputTask.AIChannels.CreateVoltageChannel(physicalChannelName.ToString(), string.Empty, GetAITerminalConfiguration(), -10, 10, AIVoltageUnits.Volts); // // Configure sampling rate // Buffer's minimum size is 17 // int bufferSize = properties.SamplesPerChannel > 17 ? properties.SamplesPerChannel : 20; analogInputTask.Timing.ConfigureSampleClock(string.Empty, properties.SampleRate, SampleClockActiveEdge.Falling, SampleQuantityMode.FiniteSamples, bufferSize); // // Configure the trigger according to channel 1 // analogInputTask.Triggers.ReferenceTrigger.ConfigureAnalogEdgeTrigger(analogInputTask.AIChannels[0].VirtualName, properties.TriggerSlope, properties.TriggerLevel, properties.PreTriggerSamples); analogInputTask.Stream.ReadRelativeTo = ReadRelativeTo.FirstPretriggerSample; analogInputTask.Stream.ReadOffset = 0; analogInputTask.Stream.Timeout = 600000; analogInputTask.Stream.ReadAllAvailableSamples = false; return analogInputTask; }
/// <summary> /// Get the task for the data aquisition /// </summary> /// <param name="settings"></param> /// <param name="worker"></param> /// <param name="e"></param> /// <returns></returns> private Task GetMultipleChannelsTriggeredTask(SBJControllerSettings settings, string taskName, RunDirection runDirection, AnalogEdgeReferenceTriggerSlope triggerSlope, double triggerVoltage, BackgroundWorker worker, DoWorkEventArgs e) { AnalogEdgeReferenceTriggerSlope localTriggerSlope; double localTriggerVoltage; // // Determine the trigger slope direction and voltage according to sign of the measured signal. // if (triggerSlope > 0) { localTriggerSlope = triggerSlope; localTriggerVoltage = triggerVoltage; } else { // // Reach to contact in order to retrieve the signal. // if (settings.ElectromagnetSettings.IsEMEnable) { EMTryObtainShortCircuit(settings.ElectromagnetSettings.EMShortCircuitDelayTime, settings.GeneralSettings.ShortCircuitVoltage, worker, e); } else { TryObtainShortCircuit(settings.GeneralSettings.ShortCircuitVoltage, settings.GeneralSettings.UseShortCircuitDelayTime, settings.GeneralSettings.ShortCircuitDelayTime, worker, e); } // // Determines the direction of the current - // Either positive (then voltage is negative) or negative (then voltage is positive number) // bool isPositiveVoltage = AnalogIn(0) > 0; // // Trigger's slope depends both on voltage sign and also on the direction of measurement - break or make junction. // if (isPositiveVoltage) { localTriggerSlope = (runDirection == RunDirection.Break) ? AnalogEdgeReferenceTriggerSlope.Falling : AnalogEdgeReferenceTriggerSlope.Rising; } else { localTriggerSlope = (runDirection == RunDirection.Break) ? AnalogEdgeReferenceTriggerSlope.Rising : AnalogEdgeReferenceTriggerSlope.Falling; } localTriggerVoltage = isPositiveVoltage ? settings.GeneralSettings.TriggerVoltage * (-1) : settings.GeneralSettings.TriggerVoltage; // // Before re-openning the junction set auto range off // so we can stay at high range suitable to E5 gain. // if (settings.GeneralSettings.UseKeithley) { m_sourceMeter.SetAutoRange(false); } // // Open the junction once again as if we didn't do anything. // if (settings.ElectromagnetSettings.IsEMEnable) { EMTryObtainOpenCircuit(settings.ElectromagnetSettings.EMShortCircuitDelayTime, settings.GeneralSettings.OpenCircuitVoltage, worker, e); } else { TryObtainOpenCircuit(settings.GeneralSettings.OpenCircuitVoltage, worker, e); } } // // Create the task with its propertites // TriggeredTaskProperties taskProperties = new TriggeredTaskProperties(taskName, settings.ChannelsSettings.ActiveChannels, settings.GeneralSettings.SampleRate, settings.GeneralSettings.TotalSamples, localTriggerVoltage, settings.GeneralSettings.PretriggerSamples, localTriggerSlope); return m_daqController.CreateMultipleChannelsTriggeredTask(taskProperties); }