//程序代码
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;
}
}
}