wangerpang Publish time 2016-10-14 12:54:53

汉泰虚拟示波器(2次开发)检测结果能否将通过 NI measurement Studio控件显示

1。可以吗?
2。有做过C#二次开发的吗?官网没有C#。

amy Publish time 2016-10-15 12:24:18

不能通过 NI measurement Studio控件显示。

wangerpang Publish time 2016-10-17 13:25:14

答案是可以,也可以显示了,现在的问题是:
调用dsoHTGetData函数后,执行正常,不过pReadData通道中的数很大,是一个七八位>0的整数,是不是还要对这个数进行校正再显示。

amy Publish time 2016-10-19 10:36:29

请问您的示波器型号是什么?

wangerpang Publish time 2016-10-19 13:32:08

您好,是6074。

dsoHTGetData(m_nDeviceIndex,pReadData,pReadData,pReadData,pReadData,&m_stControl);

1 程序执行dsoHTGetData函数正常。2 实测中(调试过程中),发现pReadData中的数是一个8位>0的整数,显示出来非常大。


问题:
1,如果我要显示pReadData通道中的数,是不是还要对该值进行一个校正?


2,DEMO中有这样一段注释:pReadData每通道i第j个点的实际电压值=(pReadData-m_nLeverPos)*8*电压值/255
是不是说,我在显示波形时,要用用公式pReadData-m_nLeverPos)*8*电压值/255进行读数校正?公式中的电压值又应该取多少呢?是个常量还是什么别的变量?


3,DEMO中执行dsoHTGetData后,调用下面的函数对pReadData中的读数进行了校正,这个SourceToDisplay是什么意思?
void CHard::SourceToDisplay(USHORT* pData,ULONG nDataLen,USHORT nCH)
{
      for(ULONG i=0;i<nDataLen;i++)
      {
                *(m_pSrcData+i) = *(pData+i)-(MAX_DATA - m_nLeverPos);
      }
}


Hantek_Zhang Publish time 2016-10-19 16:38:36

wangerpang replied at 2016-10-19 13:32
您好,是6074。

dsoHTGetData(m_nDeviceIndex,pReadData,pReadData,pReadData,pReadData

1 pReadDate默认是长度为4096长度的数组,数组中每个元素范围0-255 ,如果不是请检查自己的初始化控制
2 (pReadData-m_nLeverPos)*8*电压值/255 电压值指的是出事化设置的电压值 假设初始化设置为“6” 经过查阅官网下的PDF文档后 “6”对应 500mV侧电压值=500mV
3 SourceToDisplay 不是矫正,只是我们自己为了方便显示 ,可以不调用

wangerpang Publish time 2016-10-19 20:37:02

大神,一看您的名字就知道DEMO是您写的了,哈哈。


1.pReadDate默认是长度为4096长度的数组,数组中每个元素范围0-255 ,如果不是请检查自己的初始化控制.

(1)执行完dsoHTGetData后,pReadData中的数在校正已前就应该是0-255之间的?
(2)初始化如何控制呢?在哪里进行设置呢?或者设置哪些属性?我是仿着DEMO里的写的:

      m_nLeverPos = 192;        m_nLeverPos = 160;
        m_nLeverPos = 96;
        m_nLeverPos = 64;
        ULONG i = 0;
        m_nDeviceIndex = 0;
        m_nDeviceNum = 0;
        for(i=0;i<MAX_CH_NUM;i++)
        {
                m_pSrcData = new short;
        }
        m_clrRGB = RGB(255,255,0);
        m_clrRGB = RGB(0,255,255);
        m_clrRGB = RGB(255,0,255);
        m_clrRGB = RGB(0,255,0);
        memset(m_nCalLevel,0,sizeof(m_nCalLevel));
        m_nTimeDIV = 12;
        m_nYTFormat = YT_NORMAL;
        m_stControl.nCHSet = 0x0F;//所有通道打开
        m_stControl.nTimeDIV = m_nTimeDIV;//Factory Setup
        m_stControl.nTriggerSource = CH1;//通道1为触发通道
        m_stControl.nHTriggerPos = 50;//水平触发位置(0-100)
        m_stControl.nVTriggerPos = m_nLeverPos;//垂直触发位置和通道1相同
        m_stControl.nTriggerSlope = RISE;//边沿触发的触发方式:上升沿
        m_stControl.nBufferLen = BUF_4K_LEN;//采集深度
        m_stControl.nReadDataLen = BUF_4K_LEN;//读取长度<=采集深度
        m_stControl.nAlreadyReadLen = 0;//只在扫描滚动情况下有效,用来记录已经读取的长度
        m_stControl.nALT = 0;//Factory Setup
        for(i=0;i<MAX_CH_NUM;i++)
        {
                RelayControl.bCHEnable = 1;
                RelayControl.nCHVoltDIV = 8;
                RelayControl.nCHCoupling = DC;
                RelayControl.bCHBWLimit = 0;
        }       
        RelayControl.nTrigSource = CH1;
        RelayControl.bTrigFilt = 0;
        RelayControl.nALT = 0;
        m_nTriggerMode = EDGE;
        m_nTriggerSlope = RISE;
        m_nTriggerSweep = AUTO;

        m_bCollect=TRUE;
        m_nReadOK = 0;

        for(i=0;i<AMPCALI_Len;i++){pAmpLevel=1024;}//所有幅度修正设置为1024/1024=1.0

2 (pReadData-m_nLeverPos)*8*电压值/255
   这个电压值就是SDK手册中 表3(电压档位与索引关系对应表)中的索引取值?
   表中:索引取5表示电压档位100mV,取8表示1V,取2表示10mV. 比如, RelayControl.nCHVoltDIV = 8,那么(pReadData-m_nLeverPos)*8*8/255    此时电压值就用8来计算?


3 dsoHTSetAmpCalibrate 中的WORD *pLevel, WORD *nVoltDiv, WORD *pCHPos
WORD *pLevel,指向幅度校准数据。是这个pAmpLevel吗? for(i=0;i<AMPCALI_Len;i++){pAmpLevel=1024;}//所有幅度修正设置为1024/1024=1.0
WORD *nVoltDiv,是RelayControl.nCHVoltDIV这个吗?
WORD *pCHPos,是指每个通道的垂直位置?在DEMO里就是m_stControl.nVTriggerPos的值? ??   


4 能否给我留个EMAIL啊?谢谢。
我在用C#开发,可能会有很多问题?





Hantek_Zhang Publish time 2016-10-20 16:23:14

wangerpang replied at 2016-10-19 20:37
大神,一看您的名字就知道DEMO是您写的了,哈哈。




(1)执行完dsoHTGetData后,pReadData中的数在校正已前就应该是0-255之间的 对的
2 参照 C++ 初始化就可以
3 :索引取5表示电压档位100mV,取8表示1V,取2表示10mV. 比如, RelayControl.nCHVoltDIV = 8,那么(pReadData-m_nLeverPos)*8*1V/255    此时电压值就用1V来计算

dsoHTSetAmpCalibrate 中的WORD *pLevel, WORD *nVoltDiv, WORD *pCHPos
WORD *pLevel,指向幅度校准数据。是这个pAmpLevel
for(i=0;i<AMPCALI_Len;i++){pAmpLevel=1024;}//所有幅度修正设置为1024/1024=1.0
WORD *nVoltDiv,是RelayControl.nCHVoltDIV这个。
WORD *pCHPos,是指每个通道的垂直位置。在DEMO里就是   m_nLeverPos = 192;      m_nLeverPos = 160;
m_nLeverPos = 96;
m_nLeverPos = 64;
4 497420651@qq.com

wangerpang Publish time 2016-10-24 12:38:09

追问几个问题:

1。(pReadData-m_nLeverPos)*8*电压值/255   电压值的单位是多少啊??

索引取5表示电压档位100mV,取8表示1V,取2表示10mV.

比如, RelayControl.nCHVoltDIV = 8,那么(pReadData-m_nLeverPos)*8*1V/255    此时电压值就用1V来计算

如果nCHVoltDIV 取5呢,(pReadData-m_nLeverPos)*8*电压值/255   nCHVoltDIV=5时电压值是100mV,代入公式中用100,还是0.1?


1(pReadData-m_nLeverPos)*8*100/255   单位mV
2(pReadData-m_nLeverPos)*8*0.1/255    单位V

两个式子哪个正确?


2 WORD *pCHPos,是指每个通道的垂直位置。在DEMO里就是   
m_nLeverPos = 192;      
m_nLeverPos = 160;
m_nLeverPos = 96;
m_nLeverPos = 64;

m_nLeverPos不是水平位置吗?
另:这个水位位置的含义是不是说:确保每通道的检测值不会叠加。如果都设成0,有可能显示出来的波形就是一条???是这个目的吗?

3 之前我把pReadData的类型声明大了。C#中我开始声明成 UINT,执行完dsoHTGetData后数值很大。现在改在ushort了,执行完dsoHTGetData后pReadData的数在0-255之间了。谢谢。

wangerpang Publish time 2016-10-24 12:38:47

追问几个问题:

1。(pReadData-m_nLeverPos)*8*电压值/255   电压值的单位是多少啊??

索引取5表示电压档位100mV,取8表示1V,取2表示10mV.

比如, RelayControl.nCHVoltDIV = 8,那么(pReadData-m_nLeverPos)*8*1V/255    此时电压值就用1V来计算

如果nCHVoltDIV 取5呢,(pReadData-m_nLeverPos)*8*电压值/255   nCHVoltDIV=5时电压值是100mV,代入公式中用100,还是0.1?


1(pReadData-m_nLeverPos)*8*100/255   单位mV
2(pReadData-m_nLeverPos)*8*0.1/255    单位V

两个式子哪个正确?


2 WORD *pCHPos,是指每个通道的垂直位置。在DEMO里就是   
m_nLeverPos = 192;      
m_nLeverPos = 160;
m_nLeverPos = 96;
m_nLeverPos = 64;

m_nLeverPos不是水平位置吗?
另:这个水位位置的含义是不是说:确保每通道的检测值不会叠加。如果都设成0,有可能显示出来的波形就是一条???是这个目的吗?

3 之前我把pReadData的类型声明大了。C#中我开始声明成 UINT,执行完dsoHTGetData后数值很大。现在改在ushort了,执行完dsoHTGetData后pReadData的数在0-255之间了。谢谢。
Pages: [1] 2
View full version: 汉泰虚拟示波器(2次开发)检测结果能否将通过 NI measurement Studio控件显示