Beispiel #1
0
        public int basicconfig()//基本配置函数体
        {
            ret = 0;
            ret = WD_DASK.WD_AI_CH_Config((ushort)m_dev, -1, WD_DASK.AD_B_1_V);
            //-1代表所有信道,0-7信道
            //+-5V
            if (ret < 0)
            {
                //   MessageBox.Show("WD_AI_CH_Config error!\r\n"+ret.ToString());
                return(-1);
            }

            ret = WD_DASK.WD_AI_Config((ushort)m_dev, WD_DASK.WD_IntTimeBase, true, WD_DASK.WD_AI_ADCONVSRC_TimePacer, false, true);
            //参数2 选择时钟源,此处为内部时钟源
            //参数3 是否激活 ad duty循环恢复
            //参数4 ad转换源的选择
            //参数5 是否开启ad ping pong模式
            //参数6 模拟输入完成后,是否重置模拟ai的缓存
            if (ret < 0)
            {
                //             MessageBox.Show("WD_AI_Config error!\r\n"+ret.ToString());
                return(-1);
            }
            ret = WD_DASK.WD_AI_Trig_Config((ushort)m_dev, 0, 2, 1, 0, 1.0, 0, 0, 0, 1);
            //设置触发源 模式 性能,必须在任何ai之前调用该函数
            //2触发模式只能选择delay 或者post 触发0x00是post 0x03是delay
            //3 触发源 可选soft触发 外部触发 ssi触发(两种) 参数对应0 2 3 4
            //4 上升或下降沿触发 1上升沿 0下降沿
            //5 信道选择
            //6 触发阈值选择 数字信号输入阈值选择是0-3.3.默认1.67
            //7 仅用于中间触发。表明了触发时间传递来的数据量
            //8 没看懂
            //9 事件触发后,延迟x个tick后执行?
            //10
            if (ret < 0)
            {
                //           MessageBox.Show("Trigger error\r\n"+ret.ToString());
                return(-1);
            }

            ret = WD_DASK.WD_AI_ContBufferSetup((ushort)m_dev, data_buffer, buffernum, out buf_id);//对接模拟数据的buffer
            //每调用一次该函数,产生一个ai缓存,用来保存连续不断的ai。最多两个
            //2.存储数据的缓存首地址,该地址需要16字节对齐。
            //3.缓存的大小(in sample)
            //4 当前建立的缓存索引
            if (ret < 0)
            {
                WD_DASK.WD_Buffer_Free((ushort)m_dev, data_buffer);     //这里设置失败尝试把buffer大小设置大一点
                WD_DASK.WD_AI_ContBufferReset((ushort)m_dev);
                WD_DASK.WD_Release_Card((ushort)m_dev);
                //           MessageBox.Show("WD_AI_ContBufferSetup error!\r\n"+ret.ToString());
                return(-1);
            }
            return(0);
        }
Beispiel #2
0
        public void CollectionDatasyn()//异步采集函数(0异常)
        {
            int noupdata = 0;
            int updata   = 0;
            int i        = 0;

            ret = 0;
            ret = WD_DASK.WD_AI_ContReadChannel((ushort)m_dev, 0, buf_id, buffernum, scantlv, samptvl, WD_DASK.ASYNCH_OP);
            do
            {
                iscompleted = false;
                ret         = WD_DASK.WD_AI_AsyncCheck((ushort)m_dev, out stopped, out access_cnt);//stop为true代表异步模拟输入结束,执行异步操作
                //此函数消耗时间约0.006ms,此函数调用一次,只做一次检测
                //参数2 true时,代表异步模拟输入结束或发生错误,可以取数据了。false代表异步输入还没有结束
                if (ret < 0)//函数出错
                {
                    MessageBox.Show("WD_AI_AsyncCheck error!\r\n" + ret.ToString());
                    break;
                }
                if (stopped == 1)                         //异步输入结束,处理数据
                {
                    for (short x = 0; x < buffernum; x++) //数据放回内存数组
                    {
                        cache_buffer[x] = data_buffer[x];
                    }
                    timeCount++;   //时间增加
                    if (timeCount > startTime && timeCount <= endTime)
                    {
                        storeData.Add(cache_buffer);
                    }
                    if (timeCount == endTime)
                    {
                        // 保存数据
                        foreach (short[] temData in storeData)
                        {
                            TextInput(temData);
                            LogClass.WriteInforLognotime("\r\n", "实时数据");
                        }
                        DataList.Text += "数据保存完成\r\n";;
                    }
                    ret = WD_DASK.WD_AI_ContReadChannel((ushort)m_dev, 0, buf_id, buffernum, scantlv, samptvl, WD_DASK.ASYNCH_OP);
                    //在指定的频道以接近指定的速率,执行连续不断的ad转换,双缓存模式的连续不断的ad转换仅仅支持post触发和延时触发模式
                    //参数1 执行该操作的卡id
                    //参数2 模拟频道id
                    //参数3 由buffersetup函数返回的一个参数,id索引的缓存数组,包含了捕获的数据
                    //参数4 扫描的总个数,应该是8的倍数
                    //参数5 扫描间隔的长度/计数值 1-65535
                    //参数6 采样间隔的长度/计数值 1-65535
                    //参数7 声明同步或者异步执行。打开pre-/middle trigger时,该函数是异步执行的
                    //同步转换时,函数会阻塞,直到ad转换完成。异步转换时,函数正常返回
                    stopped = 0; //置0
                }
            } while (true);
        }
Beispiel #3
0
 private void ServerForm_FormClosing(object sender, FormClosingEventArgs e)//窗口关闭事件
 {
     if (m_dev >= 0)
     {
         //功能:停止异步模拟输入
         //如果是pre或者middle触发模式,startpos返回ad buffer第一个数据的位置
         //如果是pre或者middle触发模式,access_cnt返回ad buffer的数据个数。如果是双buffer,返回第二个buffer的数据首位置
         //    WD_DASK.WD_Buffer_Free((ushort)m_dev, data_buffer);
         //     WD_DASK.WD_AI_AsyncClear((ushort)m_dev, out StartPos, out access_cnt);
         WD_DASK.WD_Release_Card((ushort)m_dev);//释放卡
     }
 }
Beispiel #4
0
        }//窗口加载事件

        private void StartBand_Click(object sender, EventArgs e)//板卡注册
        {
            m_dev = 0;
            uint sdramsize = 0;

            m_dev = WD_DASK.WD_Register_Card(WD_DASK.PCI_9842, 0);
            if (m_dev < 0)
            {
                MessageBox.Show("注册失败!" + m_dev.ToString());
            }
            else
            {
                //           MessageBox.Show("WD_Register_Card Success!");
                WD_DASK.WD_Get_SDRAMSize((ushort)m_dev, out sdramsize);
                DataList.Text += "注册成功!板载SDRAM大小是:" + sdramsize + "MB\r\n";
            }
        }
Beispiel #5
0
        private void toolStripMenuItem2_Click(object sender, EventArgs e)//启动板卡
        {
            m_dev = 0;
            uint sdramsize = 0;

            m_dev = WD_DASK.WD_Register_Card(WD_DASK.PCI_9842, 0);
            if (m_dev < 0)
            {
                MessageBox.Show("注册失败!");
                LogClass.WriteErrorLog("注册失败!");
            }
            else
            {
                //           MessageBox.Show("WD_Register_Card Success!");
                WD_DASK.WD_Get_SDRAMSize((ushort)m_dev, out sdramsize);
                DataList.Text += "注册成功!板载SDRAM大小是:" + sdramsize + "MB\r\n";
                LogClass.WriteErrorLog("注册成功!板载SDRAM大小是:" + sdramsize + "MB\r\n");
                toolStripMenuItem2.Enabled    = false;
                基本配置ToolStripMenuItem.Enabled = true;
                参数设置ToolStripMenuItem.Enabled = true;
            }
        }