Esempio n. 1
0
        /// <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;
        }
Esempio n. 2
0
        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;
          
        }        
Esempio n. 3
0
        /// <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);
        }