勇哥偶然在硬盘上看到这个项目。
其目的是用A/D采集卡采集基恩士G025激光控制器的模拟输出信号,其目的是实现激光数据的实时读取。
因为G025的批量采集方式是等采集完成才由控制器缓存下载一次性到IPC的,这个过程中无法实时看到激光采集到数据。
这个实验用到的是9111 A/D采集卡,把激光控制器的+-10V的信号转为数字量。
该验证勇哥做了足足半个月,转换结果非常的好,印象中数字量和模拟量转换后的结果其差值好象到了+-0.05um的差别。可以认为完全一致。

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Threading;
using System.IO;
using System.Diagnostics;
namespace sampleLaser
{
public partial class Form1 : Form
{
private List<string> listAry = new List<string>();
public short m_dev;
private Thread t1;
private const int len1 =1024*53; // 119808;// 1024 * 10;
private ushort[] buffer1 = new ushort[len1];
private ushort[] buffer2 = new ushort[len1];
private List<ushort> buffer1List = new List<ushort>();
private List<ushort> buffer2List = new List<ushort>();
double[] m_voltage_array1 = new double[len1];
double[] m_voltage_array2 = new double[len1];
short ret;
public Form1()
{
InitializeComponent();
m_dev = D2KDASK.D2K_Register_Card(D2KDASK.DAQ_2005 , 0);
if (m_dev < 0)
{
MessageBox.Show("Register_Card error!");
}
}
private void Form1_Load(object sender, EventArgs e)
{
ret = D2KDASK.D2K_AI_CH_Config ((ushort)m_dev,-1,D2KDASK.AD_B_10_V);
if (ret < 0)
{
MessageBox.Show("DAQ 2005_Config error!");
}
D2KDASK.D2K_AI_AsyncDblBufferMode((ushort)m_dev, false);
//D2KDASK.AI_AsyncDblBufferMode((ushort)m_dev, false);
}
private bool qFlag=false;
private void fun()
{
int js1 = 0;
while (!qFlag)
{
ushort v1 = 0,v2=0;
//ret = DASK.AI_ReadChannel((ushort)m_dev, 0, DASK.AD_B_10_V, out v1);
//ret = DASK.AI_ReadChannel((ushort)m_dev, 0, DASK.AD_B_10_V, out v1); //out2
//ret = DASK.AI_ReadChannel((ushort)m_dev, 1, DASK.AD_B_10_V, out v2); //out1
//float K = 32768;
//float resv1 = (v1) *(1f / K) * (10f / 1f)-0.01f; //out2
//float resv2 = (v2) *(1f / K) * (10f / 1f)-0.01f; //out1
float resv1, resv2;
//resv1 = buffer.ToList().Reverse();
if (ret < 0)
{
continue;
}
//listAry.Add(resv2.ToString() + "," + resv1.ToString());
Thread.Sleep(2);
if (++js1 > 10000) break;
}
//MessageBox.Show("ok");
var s1=new StringBuilder();
foreach(var m in listAry)
{
s1.Append(m+Environment.NewLine);
}
File.WriteAllText("d:\\test1.csv",s1.ToString());
MessageBox.Show("OK");
}
private void button1_Click(object sender, EventArgs e)
{
var aary = new short[10000];
var dbary=new double[10000];
buffer1List.Clear();
ushort bufid=0;
D2KDASK.D2K_AI_ContBufferSetup((ushort)m_dev, aary,
10000, out bufid);
//D2KDASK.D2K_AI_ContReadChannel((ushort)m_dev, 1,
// bufid, 512, 50 * 1000, 0, D2KDASK.SYNCH_OP);
var s1 = new Stopwatch(); s1.Start();
var chans=new ushort[2]{0,1};
D2KDASK.D2K_AI_ContReadMultiChannels((ushort)m_dev, 2, chans,
bufid, 5000, 80, 0, D2KDASK.SYNCH_OP);
D2KDASK.D2K_AI_ContVScale((ushort)m_dev, D2KDASK.AD_B_10_V,
aary, dbary, 10000);
var t1 = s1.ElapsedMilliseconds; s1.Stop();
//ret = D2KDASK.D2K_AI_ContScanChannels ((ushort)m_dev, 1, aary, 512, 50 * 1000, 0,
// 0);
//ret = DASK.AI_ContVScale((ushort)m_dev, DASK.AD_B_10_V, aary.ToArray(), m_voltage_array1, aary.Count());
var vary = new List<double>();
float K = 32768;
for (int i = 0; i < aary.Length; i++)
{
vary.Add((aary[i]) * (1f / K) * (10f / 1f) - 0.0007);
}
//rtbMsg.AppendText(sw.ElapsedMilliseconds.ToString()+Environment.NewLine);
rtbMsg.AppendText(vary.Average().ToString("0.00000") + Environment.NewLine);
//Stopwatch sw = new Stopwatch();
//sw.Restart();
//var n = len1 / (1024 * 25);
//var ys = len1 % (1024 * 25);
//if (ys > 0) n = n + 1;
//for (int i = 0; i < n; i++)
//{
// var aary = new ushort[512];
// var bary = new ushort[1024 * 25];
// ret = DASK.AI_ContReadChannel(
// (ushort)m_dev, 0, DASK.AD_B_10_V, aary
// , 1024, 50 * 1000, DASK.SYNCH_OP);
// ret = DASK.AI_ContReadChannel(
// (ushort)m_dev, 1, DASK.AD_B_10_V, bary
// , 1024 * 25, 50 * 1000, DASK.SYNCH_OP);
//}
//sw.Stop();
//MessageBox.Show(sw.ElapsedMilliseconds.ToString());
//t1 = new Thread(new ThreadStart(fun));
//t1.IsBackground = true;
//t1.Start();
//button1.Enabled = false;
}
private bool grabIsAOK = false;
private bool grabIsBOK = false;
private void grabA(object n1)
{
grabIsAOK = false;
//var n = len1 / (1024 * 25);
//var ys = len1 % (1024 * 25);
//if (ys > 0) n = n + 1;
////for (int i = 0; i < n; i++)
////{
// var aary = new ushort[1024 * 25];
// ret = D2KDASK.AI_ContScanChannels(
// (ushort)m_dev, 0, D2KDASK.AD_B_10_V, aary
// , 1024, 50 * 1000, D2KDASK.SYNCH_OP);
// buffer1List.AddRange(aary);
////}
//grabIsAOK = true;
}
private void grabB(object n1)
{
//grabIsBOK = false;
//var n = len1 / (1024 * 25);
//var ys=len1%(1024*25);
//if (ys > 0) n = n + 1;
////for (int i = 0; i < n; i++)
////{
// var bary = new ushort[1024 * 25];
// ret = D2KDASK.AI_ContScanChannels(
// (ushort)m_dev, 1, D2KDASK.AD_B_10_V, bary
// , 1024, 50 * 1000, D2KDASK.SYNCH_OP);
// buffer2List.AddRange(bary);
////}
grabIsBOK = true;
}
private void button2_Click(object sender, EventArgs e)
{
if (!grabIsAOK || !grabIsBOK) return;
//ret = D2KDASK.AI_ContVScale((ushort)m_dev, D2KDASK.AD_B_10_V, buffer1List.ToArray(), m_voltage_array1, buffer1List.Count);
//if (ret < 0)
//{
// MessageBox.Show("D2K_AI_ContVScale error!");
// return;
//}
//ret = D2KDASK.AI_ContVScale((ushort)m_dev, D2KDASK.AD_B_10_V, buffer2List.ToArray(), m_voltage_array2, buffer2List.Count);
//if (ret < 0)
//{
// MessageBox.Show("D2K_AI_ContVScale error!");
// return;
//}
//var list1 = m_voltage_array1.ToList();
//var list2 = m_voltage_array2.ToList();
//var list3 = new List<double>();
//for (int i = 0; i < list1.Count; i++)
//{
// list3.Add(list1[i] + list2[i]);
//}
//rtbMsg.AppendText(list3.Average().ToString()+Environment.NewLine);
//var sb1 = new StringBuilder();
//for(int i=0;i<list1.Count();i++)
//{
// sb1.Append((i+1)+","+list1[i].ToString("0.0000")+","+list2[i].ToString("0.0000"));
// sb1.Append(Environment.NewLine);
//}
//rtbMsg.Text = sb1.ToString();
//int js1 = 0;
//foreach (var m in buffer1)
//{
// if (m != 0) ++js1;
//}
//int js2 = 0;
//foreach (var m in m_voltage_array1)
//{
// if (m != 0) ++js2;
//}
//MessageBox.Show(js1 + "," + js2);
//qFlag = true;
//button2.Enabled = false;
//Thread.Sleep(2000);
//var sb1 = new StringBuilder();
//foreach (var m in listAry)
//{
// sb1.Append(m.ToString()+Environment.NewLine);
// sb1.Append(Environment.NewLine);
//}
//rtbMsg.Text = sb1.ToString();
}
private void button3_Click(object sender, EventArgs e)
{
ushort v1 = 0;
ushort v2 = 0;
double v11 = 0, v22 = 0;
ret = D2KDASK.D2K_AI_ReadChannel ((ushort)m_dev, 0, out v1); //out2
ret = D2KDASK.D2K_AI_ReadChannel((ushort)m_dev, 1, out v2); //out1
ret = D2KDASK.D2K_AI_VReadChannel((ushort)m_dev, 0, out v11);
ret = D2KDASK.D2K_AI_VReadChannel((ushort)m_dev, 1, out v22);
float K = 32768; float resv1 = 0; float resv2 = 0;
var rate = 1;
if (v1 < K-20)
{
resv1 = (v1) * (1f / K) * (10f / 1f)*rate - 0.01f; //out2
}
else if (v1 > K)
{
resv1 = (ushort.MaxValue-v1) * (1f / K) * (10f / -1f)*rate - 0.01f; //out2
}
if (v2 < K - 20)
{
resv2 = ((v2)) * (1f / K) * (10f / 1f)*rate - 0.01f; //out1
}
else if (v2 > K)
{
resv2 = (ushort.MaxValue-v2) * (1f / K) * (10f / -1f)*rate - 0.01f; //out1
}
rtbMsg.AppendText(resv2.ToString() + "," + resv1.ToString() + Environment.NewLine+
v11+","+v22+Environment.NewLine
);
}
private void button4_Click(object sender, EventArgs e)
{
// var range = D2KDASK.AD_B_10_V;
// var mode = D2KDASK.ASYNCH_OP;
// uint read_count = 2048;
// var rate = D2KDASK.CLKSRC_EXT_SampRate;
// var buffer=new ushort[10000];
// Array.Clear(buffer,0,buffer.Length-1);
// short res = -1;
// res = D2KDASK.AI_ContReadMultiChannels(
// (ushort)m_dev, 0, new ushort[] { 0, 1 }, new ushort[] { range, range },
// buffer, 1024, rate, mode);
// if (res != 0)
// {
// MessageBox.Show("AI_ContReadMultiChannels Error");
// }
// byte halfReady = 0;
// byte fStop = 0;
// int js1 = 0;
// do
// {
// ++js1;
// do
// {
// D2KDASK.AI_AsyncDblBufferHalfReady((ushort)m_dev, out halfReady, out fStop);
// } while (halfReady == 0);
// D2KDASK.AI_AsyncDblBufferTransfer((ushort)m_dev, buffer);
// } while (js1 < 1);
}
private void Form1_FormClosing(object sender, FormClosingEventArgs e)
{
D2KDASK.D2K_Release_Card((ushort)m_dev);
}
}
}---------------------
作者:hackpig
来源:www.skcircle.com
版权声明:本文为博主原创文章,转载请附上博文链接!
本文出自勇哥的网站《少有人走的路》wwww.skcircle.com,转载请注明出处!讨论可扫码加群:



少有人走的路



















