I am using the M-Series Card NI PCI-6251 with Measurement Studio 8.0.1 and Visual Studio 2005 C# and I want to start a DI, a DO, an AI and an AO - Task simultaneously. Therefore I tried to trigger the DI, DO and the AO on the ai/StartTrigger. With the AO this works fine - but with the DI and DO it gives me error message "Specified property is not supported by the device or is not applicable to the task." with the Status Code: -200452.
The NI Support in Germany suggested me to use ai/SampleClock but the same error accurs. After that I tried to trigger the DO with any other source - and every source gave the error. So how to trigger digital channels.
Here is a part of the Source Code:
DOutTask = new Task("DOutTask");
AOutTask = new Task("AOutTask");
DInTask = new Task("DInTask");
AInTask = new Task("AInTask");
DOutTask.DOChannels.CreateChannel("Dev1/port0/line2:4", "", ChannelLineGrouping.OneChannelForAllLines);
AOutTask.AOChannels.CreateVoltageChannel("Dev1/ao0", "", -10, 10, AOVoltageUnits.Volts);
DInTask.DIChannels.CreateChannel("Dev1/port0/line0:1", "", ChannelLineGrouping.OneChannelForAllLines);
AInTask.AIChannels.CreateVoltageChannel("Dev1/ai0:8", "", AITerminalConfiguration.Rse, -5, 5, AIVoltageUnits.Volts);
DOutTask.Timing.ConfigureSampleClock("100kHzTimebase", rate, SampleClockActiveEdge.Rising, SampleQuantityMode.FiniteSamples, (int)(MeasurementTimeEdit.Value / 1000 * rate + 1));
AOutTask.Timing.ConfigureSampleClock("100kHzTimebase", rate, SampleClockActiveEdge.Rising, SampleQuantityMode.FiniteSamples, (int)(MeasurementTimeEdit.Value / 1000 * rate + 1));
DInTask.Timing.ConfigureSampleClock("100kHzTimebase", rate, SampleClockActiveEdge.Rising, SampleQuantityMode.FiniteSamples, (int)(MeasurementTimeEdit.Value / 1000 * rate + 1));
AInTask.Timing.ConfigureSampleClock("100kHzTimebase", rate, SampleClockActiveEdge.Rising, SampleQuantityMode.FiniteSamples, (int)(MeasurementTimeEdit.Value / 1000 * rate + 1));
DOutTask.Triggers.StartTrigger.ConfigureDigitalEdgeTrigger("ai/StartTrigger", DigitalEdgeStartTriggerEdge.Rising);
DInTask.Triggers.StartTrigger.ConfigureDigitalEdgeTrigger("ai/StartTrigger", DigitalEdgeStartTriggerEdge.Rising);
AOutTask.Triggers.StartTrigger.ConfigureDigitalEdgeTrigger("ai/StartTrigger", DigitalEdgeStartTriggerEdge.Rising);
//AInTask.Triggers.StartTrigger.ConfigureDigitalEdgeTrigger("/Dev1/PFI0", DigitalEdgeStartTriggerEdge.Rising);
DOutTask.Control(TaskAction.Verify);
AOutTask.Control(TaskAction.Verify);
DInTask.Control(TaskAction.Verify);
AInTask.Control(TaskAction.Verify);
byte[] DOwavebarray = new byte[(int)(MeasurementTimeEdit.Value / 1000 * rate + 1)];
for (int i = 0; i < (int)(MeasurementTimeEdit.Value / 1000 * rate); i++)
{
DOwavebarray[i] = 4;
}
DigitalWaveform DOwave = new DigitalWaveform((int)(MeasurementTimeEdit.Value / 1000 * rate), 1, DigitalState.ForceDown);
DOwave = NationalInstruments.DigitalWaveform.FromPort(DOwavebarray,4+8+16);
DigitalSingleChannelWriter DOwriter = new DigitalSingleChannelWriter(DOutTask.Stream);
DOwriter.WriteWaveform(false, DOwave);
FunctionGenerator fGen;
if (ExcComboBox.SelectedIndex == (int)IndForms.EldecLockIn )
fGen = new FunctionGenerator(AOutTask.Timing, FrequencyEdit.Value, WaveformType.SineWave, PowerEdit.Value);
else
fGen = new FunctionGenerator(AOutTask.Timing,PowerEdit.Value);
AnalogSingleChannelWriter AOwriter = new AnalogSingleChannelWriter(AOutTask.Stream);
AOwriter.WriteMultiSample(false, fGen.Data);
DOutTask.Start();
DInTask.Start();
AOutTask.Start();
AInTask.Start();
DIreader = new DigitalSingleChannelReader(DInTask.Stream);
AIreader = new AnalogMultiChannelReader(AInTask.Stream);
AnalogWaveform<double>[] data = new AnalogWaveform<double>[9];
data = AIreader.ReadWaveform((int)(MeasurementTimeEdit.Value / 1000 * rate));
DigitalWaveform DIwave = new DigitalWaveform((int)(MeasurementTimeEdit.Value / 1000 * rate), 1, DigitalState.ForceDown);
DIwave = DIreader.ReadWaveform((int)(MeasurementTimeEdit.Value / 1000 * rate));
//DOutTask.WaitUntilDone();
DOutTask.Stop();
AOutTask.Stop();
DInTask.Stop();
AInTask.Stop();
AInTask.Dispose();
DInTask.Dispose();
AOutTask.Dispose();
DOutTask.Dispose();
waveformGraph1.PlotWaveforms(data);
waveformGraphPower.PlotWaveform(data[1]);
digitalWaveformGraph1.PlotWaveform(DIwave);