NI LabVIEW,CVI,数据采集等产品讨论区

取消
显示结果 
搜索替代 
您的意思是: 

C# USB 6366

项目描述:通过C#开发数据采集软件。APFI连接外部触发信号(START TRIG,频率1000),检测到APFI触发信号之后,通道1~通道6每个通道均采集500个点(外部触发源PFI7,频率500K),同时将采样数据保存至txt,依次循环。 代码: private void buttonX1_Click(object sender, EventArgs e) { analogInTask= new Task(); AIChannel myChannel; //封装一个或多个模拟输入虚拟通道以及模拟输入虚拟通道的属性。 myChannel = analogInTask.AIChannels.CreateVoltageChannel("Dev1/ai1:6", "myChannel", (AITerminalConfiguration)(-1), -0.5, 0.5, AIVoltageUnits.Volts); //创建用于测量电压的模拟输入通道。此方法将一个或多个物理通道添加到AIChannelCollection analogInTask.Timing.ConfigureSampleClock("PFI7",500000, SampleClockActiveEdge.Rising, SampleQuantityMode.FiniteSamples,500); //设置采样时钟的来源、采样时钟的速率以及要采集或生成的采样数。 analogInTask.Triggers.StartTrigger.ConfigureAnalogEdgeTrigger("APFI0", AnalogEdgeStartTriggerSlope.Rising, 1.0); //将任务配置为在模拟信号超过指定电平时开始采集或生成样本。 analogInTask.Triggers.StartTrigger.Retriggerable = true; StartTask(); analogInTask.Start(); Callback = new AsyncCallback(AnalogRead); analogReader = new AnalogUnscaledReader(analogInTask.Stream); analogReader.SynchronizeCallbacks = true; analogReader.BeginReadInt16(512, Callback, analogInTask); } private void AnalogRead(IAsyncResult ar) { try { if (runningAnalogTask != null && runningAnalogTask == ar.AsyncState) { // 读取数据 short[,] data = analogReader.EndReadInt16(ar); //保存数据 string ss1; string ss2 = null; for (int j = 0; j < 512; j++) { for (int i = 0; i < 6; i++) { ss1 = data[i, j].ToString(); ss2 = ss2 + " " + data[i, j]; } ss2 = ss2 + " " + count.ToString(); count = count + 1; FileStream fs1 = new FileStream(@"D:\\AA1.txt", FileMode.Append, FileAccess.Write); StreamWriter sw = new StreamWriter(fs1); sw.WriteLine(ss2); sw.Close(); fs1.Close(); ss2 = null; } Set up next callback analogReader.BeginReadInt16(512, Callback, analogInTask); } } catch (Exception ex) { StopTask(); MessageBox.Show(ex.Message); } } private void StartTask() { if (runningAnalogTask == null) { // Change state runningAnalogTask = analogInTask; } } private void StopTask() { // Change state runningAnalogTask = null; // Stop tasks analogInTask.Stop(); analogInTask.Dispose(); } 问题描述:程序运行10几秒之后, analogInTask.Stop();报错,错误代码200361,不知道如何改正。项目开发很急,烦请技术支持人员帮助,非常感谢!
0 项奖励
1 条消息(共 2 条)
946 次查看

//程序代码

 

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading;
using System.Windows.Forms;
using NationalInstruments;
using NationalInstruments.DAQmx;

namespace Radar
{
public partial class MainForm : Form
{
public MainForm()
{
InitializeComponent();
}

private Task analogInTask ;
private Task runningAnalogTask;
private int count = 0;
//创建NAQmx任务
private AsyncCallback Callback;
private AnalogUnscaledReader analogReader;
private void StartTask()
{
if (runningAnalogTask == null)
{
// Change state
runningAnalogTask = analogInTask;
}
}
private void StopTask()
{
// Change state
runningAnalogTask = null;

// Stop tasks
analogInTask.Stop();
analogInTask.Dispose();
}
private void AnalogRead(IAsyncResult ar)
{
try
{
if (runningAnalogTask != null && runningAnalogTask == ar.AsyncState)
{
// 读取数据
short[,] data = analogReader.EndReadInt16(ar);
//保存数据
string ss1;
string ss2 = null;

for (int j = 0; j < 512; j++)
{
for (int i = 0; i < 6; i++)
{

ss1 = data[i, j].ToString();
ss2 = ss2 + " " + data[i, j];
}
ss2 = ss2 + " " + count.ToString();
count = count + 1;
FileStream fs1 = new FileStream(@"D:\\AA1.txt", FileMode.Append, FileAccess.Write);
StreamWriter sw = new StreamWriter(fs1);
sw.WriteLine(ss2);
sw.Close();
fs1.Close();
ss2 = null;
}
//设置下一次回调
analogReader.BeginReadInt16(512, Callback, analogInTask);
}
}
catch (Exception ex)
{
StopTask();
MessageBox.Show(ex.Message);
}
}

private void buttonX1_Click(object sender, EventArgs e)
{
analogInTask= new Task();

AIChannel myChannel;
//封装一个或多个模拟输入虚拟通道以及模拟输入虚拟通道的属性。
myChannel = analogInTask.AIChannels.CreateVoltageChannel("Dev1/ai1:6", "myChannel", (AITerminalConfiguration)(-1), -0.5, 0.5, AIVoltageUnits.Volts);
//创建用于测量电压的模拟输入通道。此方法将一个或多个物理通道添加到AIChannelCollection
analogInTask.Timing.ConfigureSampleClock("PFI7",500000, SampleClockActiveEdge.Rising, SampleQuantityMode.FiniteSamples,500);
//设置采样时钟的来源、采样时钟的速率以及要采集或生成的采样数。
analogInTask.Triggers.StartTrigger.ConfigureAnalogEdgeTrigger("APFI0", AnalogEdgeStartTriggerSlope.Rising, 1.0);
//将任务配置为在模拟信号超过指定电平时开始采集或生成样本。
analogInTask.Triggers.StartTrigger.Retriggerable = true;
//指定有限任务是否在任务完成后重置并等待另一个启动触发器,如果设备正在获取或生成信号,则会忽略触发器。
//analogInTask.Triggers.StartTrigger.ConfigureDigitalEdgeTrigger("PFI7", DigitalEdgeStartTriggerEdge.Rising);
StartTask();
analogInTask.Start();
Callback = new AsyncCallback(AnalogRead);
analogReader = new AnalogUnscaledReader(analogInTask.Stream);
analogReader.SynchronizeCallbacks = true;
analogReader.BeginReadInt16(500, Callback, analogInTask);
}

private void buttonX2_Click(object sender, EventArgs e)
{
StopTask();
}
public static string GetDeviceName(string deviceName)
{
Device device = DaqSystem.Local.LoadDevice(deviceName);
if (device.BusType != DeviceBusType.CompactDaq)
return deviceName;
else
return device.CompactDaqChassisDeviceName;
}
}
}

0 项奖励
2 条消息(共 2 条)
917 次查看