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; } } }
/// <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; } } } } }
/// <summary> /// 断开连接 /// </summary> public void Disconnect() { lock (lockObject) { MyDLLimport.DeviceClose(); IsConnect = false; } }
public void SetTriggerLevel(byte level) { lock (lockObject) { //设置触发数据 MyDLLimport.USBCtrlTrans(0x16, level, 1); } }
/// <summary> /// 创建示波器实例 /// </summary> public LOTOA02() { //获取数据缓冲区首指针(修改成创建实例时获取) g_pBuffer = MyDLLimport.GetBuffer4Wr(-1); if (g_pBuffer == IntPtr.Zero) { throw new Exception("创建示波器内部缓冲区无效"); } }
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; } } } }
/// <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; } } } } }
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; } } }
/// <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); } } }
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; } } }
/// <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("采集数据超时"); } } } }
/// <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); }
/// <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(); }
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; } } } }