Example #1
0
        public void SetTriggerModel(ETriggerModel triggerModel)
        {
            lock (lockObject)
            {
                switch (triggerModel)
                {
                case ETriggerModel.CHA:
                    MyDLLimport.USBCtrlTrans(0xE7, 0x01, 1);
                    break;

                case ETriggerModel.Ext:
                    //g_TrigSourceChan = 2;
                    //通道EXT触发
                    MyDLLimport.USBCtrlTrans(0xE7, 0x01, 1);
                    break;

                case ETriggerModel.No:
                    MyDLLimport.USBCtrlTrans(0xE7, 0x00, 1);
                    break;

                default:
                    break;
                }
            }
        }
Example #2
0
        /// <summary>
        /// 读取数据
        /// </summary>
        /// <param name="channelData1">通道1数据</param>
        /// <param name="channelData2">通道2数据</param>
        public void ReadData(out double[] channelData1, out double[] channelData2)
        {
            lock (lockObject)
            {
                channelData1 = new double[0];
                channelData2 = new double[0];

                //获取数据
                int res = MyDLLimport.AiReadBulkData((int)sampleCount * 2, 1, 2000, g_pBuffer);
                if (res == 0)
                {
                    //等待事件
                    var g_CurrentEventID = MyDLLimport.EventCheck(2000);
                    if (g_CurrentEventID == 1365 || g_CurrentEventID == -1)
                    {
                        return;
                    }

                    channelData1 = new double[sampleCount - invalidDataCount];
                    channelData2 = new double[sampleCount - invalidDataCount];
                    unsafe
                    {
                        byte *pData = (byte *)g_pBuffer;
                        for (uint i = invalidDataCount; i < sampleCount; i++)
                        {
                            channelData1[i - invalidDataCount] = (*(pData + i * 2) - currentCHAZero) * currentCHAScale;
                            channelData2[i - invalidDataCount] = (*(pData + i * 2 + 1) - currentCHBZero) * currentCHBScale;
                        }
                    }
                }
            }
        }
Example #3
0
 /// <summary>
 /// 断开连接
 /// </summary>
 public void Disconnect()
 {
     lock (lockObject)
     {
         MyDLLimport.DeviceClose();
         IsConnect = false;
     }
 }
Example #4
0
 public void SetTriggerLevel(byte level)
 {
     lock (lockObject)
     {
         //设置触发数据
         MyDLLimport.USBCtrlTrans(0x16, level, 1);
     }
 }
Example #5
0
 /// <summary>
 /// 创建示波器实例
 /// </summary>
 public LOTOA02()
 {
     //获取数据缓冲区首指针(修改成创建实例时获取)
     g_pBuffer = MyDLLimport.GetBuffer4Wr(-1);
     if (g_pBuffer == IntPtr.Zero)
     {
         throw new Exception("创建示波器内部缓冲区无效");
     }
 }
Example #6
0
        public void SetCoupling(EChannel channel, ECoupling coupling)
        {
            lock (lockObject)
            {
                if (channel == EChannel.CHA)
                {
                    switch (coupling)
                    {
                    case ECoupling.DC:
                        //DC耦合
                        g_CtrlByte0 &= 0xef;
                        g_CtrlByte0 |= 0x10;
                        MyDLLimport.USBCtrlTrans(0x94, g_CtrlByte0, 1);
                        break;

                    case ECoupling.AC:
                        //AC耦合
                        g_CtrlByte0 &= 0xef;
                        MyDLLimport.USBCtrlTrans(0x94, g_CtrlByte0, 1);
                        break;

                    default:
                        break;
                    }
                }
                else
                {
                    switch (coupling)
                    {
                    case ECoupling.DC:
                        //DC耦合
                        g_CtrlByte1 &= 0xef;
                        g_CtrlByte1 |= 0x10;
                        MyDLLimport.USBCtrlTrans(0x24, g_CtrlByte1, 1);
                        break;

                    case ECoupling.AC:
                        //AC耦合
                        g_CtrlByte1 &= 0xef;
                        g_CtrlByte1 |= 0x00;
                        MyDLLimport.USBCtrlTrans(0x24, g_CtrlByte1, 1);
                        break;

                    default:
                        break;
                    }
                }
            }
        }
Example #7
0
        /// <summary>
        /// 读取数据
        /// </summary>
        /// <param name="channelData1">通道1数据</param>
        /// <param name="channelData2">通道2数据</param>
        public void ReadDataBlock(out double[] channelData1, out double[] channelData2)
        {
            lock (lockObject)
            {
                int retryCount = 0;
                channelData1 = new double[0];
                channelData2 = new double[0];

                //开始AD采集
                MyDLLimport.USBCtrlTransSimple((Int32)0x33);

                //等待采集完成
                while (MyDLLimport.USBCtrlTransSimple((Int32)0x50) != 33)
                {
                    Thread.Sleep(10);
                    retryCount++;

                    if (retryCount > 1000)
                    {
                        throw new TimeoutException("采集数据超时");
                    }
                }

                //获取数据
                int res = MyDLLimport.AiReadBulkData((int)sampleCount * 2, 1, 2000, g_pBuffer);
                if (res == 0)
                {
                    //等待事件
                    var g_CurrentEventID = MyDLLimport.EventCheck(2000);
                    if (g_CurrentEventID == 1365 || g_CurrentEventID == -1)
                    {
                        return;
                    }

                    channelData1 = new double[sampleCount - invalidDataCount];
                    channelData2 = new double[sampleCount - invalidDataCount];
                    unsafe
                    {
                        byte *pData = (byte *)g_pBuffer;
                        for (uint i = invalidDataCount; i < sampleCount; i++)
                        {
                            channelData1[i - invalidDataCount] = (*(pData + i * 2) - currentCHAZero) * currentCHAScale;
                            channelData2[i - invalidDataCount] = (*(pData + i * 2 + 1) - currentCHBZero) * currentCHBScale;
                        }
                    }
                }
            }
        }
Example #8
0
        public void SetSampleRate(ESampleRate sampleRate)
        {
            lock (lockObject)
            {
                switch (sampleRate)
                {
                case ESampleRate.Sps_49K:
                    //设置49K Hz 采样率
                    g_CtrlByte0 &= 0xf0;
                    g_CtrlByte0 |= 0x0e;
                    MyDLLimport.USBCtrlTrans(0x94, g_CtrlByte0, 1);
                    break;

                case ESampleRate.Sps_96K:
                    //设置96K Hz 采样率
                    g_CtrlByte0 &= 0xf0;
                    g_CtrlByte0 |= 0x04;
                    MyDLLimport.USBCtrlTrans(0x94, g_CtrlByte0, 1);
                    break;

                case ESampleRate.Sps_781K:
                    //设置781K Hz 采样率
                    g_CtrlByte0 &= 0xf0;
                    g_CtrlByte0 |= 0x0c;
                    MyDLLimport.USBCtrlTrans(0x94, g_CtrlByte0, 1);
                    break;

                case ESampleRate.Sps_12M5:
                    // 设置12.5M Hz 采样率
                    g_CtrlByte0 &= 0xf0;
                    g_CtrlByte0 |= 0x08;
                    MyDLLimport.USBCtrlTrans(0x94, g_CtrlByte0, 1);
                    break;

                case ESampleRate.Sps_100M:
                    //设置100M Hz 采样率
                    g_CtrlByte0 &= 0xf0;
                    g_CtrlByte0 |= 0x00;
                    MyDLLimport.USBCtrlTrans(0x94, g_CtrlByte0, 1);
                    break;

                default:
                    break;
                }
            }
        }
Example #9
0
 /// <summary>
 /// 使能通道B
 /// </summary>
 /// <param name="isEnable"></param>
 public void EnableCHB(bool isEnable)
 {
     lock (lockObject)
     {
         if (isEnable)
         {
             g_CtrlByte1 &= 0xfe;
             g_CtrlByte1 |= 0x01;
             MyDLLimport.USBCtrlTrans(0x24, g_CtrlByte1, 1);
         }
         else
         {
             g_CtrlByte1 &= 0xfe;
             g_CtrlByte1 |= 0x00;
             MyDLLimport.USBCtrlTrans(0x24, g_CtrlByte1, 1);
         }
     }
 }
Example #10
0
        public void SetTriggerEdge(ETriggerEdge triggerEdge)
        {
            lock (lockObject)
            {
                switch (triggerEdge)
                {
                case ETriggerEdge.Rising:
                    MyDLLimport.USBCtrlTrans(0xC5, 0x00, 1);
                    break;

                case ETriggerEdge.Filling:
                    MyDLLimport.USBCtrlTrans(0xC5, 0x01, 1);
                    break;

                default:
                    break;
                }
            }
        }
Example #11
0
        /// <summary>
        /// 开始记录数据
        /// </summary>
        public void StartSample()
        {
            lock (lockObject)
            {
                int retryCount = 0;

                //开始AD采集
                MyDLLimport.USBCtrlTransSimple((Int32)0x33);

                //等待采集完成
                while (MyDLLimport.USBCtrlTransSimple((Int32)0x50) != 33)
                {
                    Thread.Sleep(10);
                    retryCount++;

                    if (retryCount > 1000)
                    {
                        throw new TimeoutException("采集数据超时");
                    }
                }
            }
        }
Example #12
0
        /// <summary>
        /// 连接设备
        /// </summary>
        /// <returns>执行结果</returns>
        public bool Connect()
        {
            lock (lockObject)
            {
                try
                {
                    IsConnect = false;

                    //设置产品编号
                    MyDLLimport.SpecifyDevIdx(6);

                    //打开设备
                    Int32 res = MyDLLimport.DeviceOpen();
                    if (res != 0)
                    {
                        return(false);
                    }

                    //设置默认参数
                    SampleRate    = ESampleRate.Sps_49K;
                    SampleTime    = 200;
                    TriggerModel  = ETriggerModel.No;
                    CHAScale      = EScale.x10;
                    CHBScale      = EScale.x10;
                    CHAVoltageDIV = EVoltageDIV.DIV_2V5;
                    CHBVoltageDIV = EVoltageDIV.DIV_2V5;

                    IsConnect = true;
                }
                catch (Exception)
                {
                    IsConnect = false;
                }
            }

            return(IsConnect);
        }
Example #13
0
        /// <summary>
        /// 开始连续采集
        /// </summary>
        public void StartSerialSample(int serialSampleTime)
        {
            new Thread(() =>
            {
                lock (lockObject)
                {
                    _shouldStop      = false;
                    SampleTime       = serialSampleTime;
                    IsSerialSampling = true;

                    while (!_shouldStop)
                    {
                        //开始AD采集
                        MyDLLimport.USBCtrlTransSimple((Int32)0x33);

                        int eventTimeout      = 2000;
                        double[] channelData1 = new double[sampleCount];
                        double[] channelData2 = new double[sampleCount];
                        uint eventNumber      = CaculateEvtNum((int)sampleCount * 2);

                        //单次包的数据长度
                        uint packetDataLength = sampleCount / eventNumber;

                        //获取数据
                        int res = MyDLLimport.AiReadBulkData((int)sampleCount * 2, eventNumber, eventTimeout, g_pBuffer);

                        while (!_shouldStop)
                        {
                            //获取当前的事件
                            int currentEventID = MyDLLimport.EventCheck(eventTimeout);

                            if ((currentEventID == 1365) || (currentEventID == -1))
                            {
                                break;
                            }

                            if (packetDataLength < invalidDataCount)
                            {
                                throw new Exception("数据异常");
                            }

                            double[] currentChannel1 = new double[packetDataLength];
                            double[] currentChannel2 = new double[packetDataLength];

                            unsafe
                            {
                                byte *pData = (byte *)g_pBuffer;

                                if (currentEventID == 0)
                                {
                                    for (uint i = invalidDataCount; i < packetDataLength; i++)
                                    {
                                        currentChannel1[i] = (*(pData + i * 2) - currentCHAZero) * currentCHAScale;
                                        currentChannel2[i] = (*(pData + i * 2 + 1) - currentCHBZero) * currentCHBScale;

                                        channelData1[i] = currentChannel1[i];
                                        channelData2[i] = currentChannel2[i];
                                    }
                                }
                                else
                                {
                                    for (uint i = 0; i < packetDataLength; i++)
                                    {
                                        currentChannel1[i - 0] = (*(pData + (packetDataLength * currentEventID + i) * 2) - currentCHAZero) * currentCHAScale;
                                        currentChannel2[i - 0] = (*(pData + (packetDataLength * currentEventID + i) * 2 + 1) - currentCHBZero) * currentCHBScale;

                                        channelData1[packetDataLength * currentEventID + i] = currentChannel1[i];
                                        channelData2[packetDataLength * currentEventID + i] = currentChannel2[i];
                                    }
                                }
                            }

                            OnScopeReadDataCompleted(channelData1, channelData2, currentChannel1, currentChannel2, (int)eventNumber, currentEventID + 1);

                            if (currentEventID == (eventNumber - 1))
                            {
                                break;
                            }
                        }
                    }
                    IsSerialSampling = false;
                }
            }).Start();
        }
Example #14
0
        public void SetVoltageDIV(EChannel channel, EVoltageDIV voltageDIV)
        {
            lock (lockObject)
            {
                if (channel == EChannel.CHA)
                {
                    switch (voltageDIV)
                    {
                    case EVoltageDIV.DIV_250MV:
                        g_CtrlByte1 &= 0xF7;
                        MyDLLimport.USBCtrlTrans(0x22, 0x04, 1);
                        MyDLLimport.USBCtrlTrans(0x24, g_CtrlByte1, 1);
                        break;

                    case EVoltageDIV.DIV_500MV:
                        g_CtrlByte1 &= 0xF7;
                        MyDLLimport.USBCtrlTrans(0x22, 0x02, 1);
                        MyDLLimport.USBCtrlTrans(0x24, g_CtrlByte1, 1);
                        break;

                    case EVoltageDIV.DIV_1V:
                        g_CtrlByte1 &= 0xF7;
                        g_CtrlByte1 |= 0x08;
                        MyDLLimport.USBCtrlTrans(0x22, 0x04, 1);
                        MyDLLimport.USBCtrlTrans(0x24, g_CtrlByte1, 1);
                        break;

                    case EVoltageDIV.DIV_2V5:
                        g_CtrlByte1 &= 0xF7;
                        g_CtrlByte1 |= 0x08;
                        MyDLLimport.USBCtrlTrans(0x22, 0x02, 1);
                        MyDLLimport.USBCtrlTrans(0x24, g_CtrlByte1, 1);
                        break;

                    case EVoltageDIV.DIV_5V:
                        g_CtrlByte1 &= 0xF7;
                        g_CtrlByte1 |= 0x08;
                        MyDLLimport.USBCtrlTrans(0x22, 0x00, 1);
                        MyDLLimport.USBCtrlTrans(0x24, g_CtrlByte1, 1);
                        break;

                    default:
                        break;
                    }
                }
                else
                {
                    switch (voltageDIV)
                    {
                    case EVoltageDIV.DIV_250MV:
                        g_CtrlByte1 &= 0xF9;
                        g_CtrlByte1 |= 0x04;    //放大4倍
                        MyDLLimport.USBCtrlTrans(0x23, 0x40, 1);
                        MyDLLimport.USBCtrlTrans(0x24, g_CtrlByte1, 1);
                        break;

                    case EVoltageDIV.DIV_500MV:
                        g_CtrlByte1 &= 0xF9;
                        g_CtrlByte1 |= 0x02;    //放大两倍
                        MyDLLimport.USBCtrlTrans(0x23, 0x40, 1);
                        MyDLLimport.USBCtrlTrans(0x24, g_CtrlByte1, 1);
                        break;

                    case EVoltageDIV.DIV_1V:
                        g_CtrlByte1 &= 0xF9;
                        g_CtrlByte1 |= 0x04;
                        MyDLLimport.USBCtrlTrans(0x23, 0x00, 1);
                        MyDLLimport.USBCtrlTrans(0x24, g_CtrlByte1, 1);
                        break;

                    case EVoltageDIV.DIV_2V5:
                        g_CtrlByte1 &= 0xF9;
                        g_CtrlByte1 |= 0x02;
                        MyDLLimport.USBCtrlTrans(0x23, 0x00, 1);
                        MyDLLimport.USBCtrlTrans(0x24, g_CtrlByte1, 1);
                        break;

                    case EVoltageDIV.DIV_5V:
                        g_CtrlByte1 &= 0xF9;
                        MyDLLimport.USBCtrlTrans(0x23, 0x00, 1);
                        MyDLLimport.USBCtrlTrans(0x24, g_CtrlByte1, 1);
                        break;

                    default:
                        break;
                    }
                }
            }
        }