勇哥偶然在硬盘上看到这个项目。
其目的是用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,转载请注明出处!讨论可扫码加群: