Electronic Engineer Discuss

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

Author: wangerpang    Time: 2016-10-14 12:54
Title: 汉泰虚拟示波器(2次开发)检测结果能否将通过 NI measurement Studio控件显示
1。可以吗?
2。有做过C#二次开发的吗?官网没有C#。


Author: amy    Time: 2016-10-15 12:24
不能通过 NI measurement Studio控件显示。

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

Author: amy    Time: 2016-10-19 10:36
请问您的示波器型号是什么?

Author: wangerpang    Time: 2016-10-19 13:32
您好,是6074。

dsoHTGetData(m_nDeviceIndex,pReadData[CH1],pReadData[CH2],pReadData[CH3],pReadData[CH4],&m_stControl);

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


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


2,DEMO中有这样一段注释:pReadData[CH1]每通道i第j个点的实际电压值=(pReadData[i][j]-m_nLeverPos[i])*8*电压值/255
是不是说,我在显示波形时,要用用公式pReadData[i][j]-m_nLeverPos[i])*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[nCH]+i) = *(pData+i)-(MAX_DATA - m_nLeverPos[nCH]);
        }
}



Author: Hantek_Zhang    Time: 2016-10-19 16:38
wangerpang replied at 2016-10-19 13:32
您好,是6074。

dsoHTGetData(m_nDeviceIndex,pReadData[CH1],pReadData[CH2],pReadData[CH3],pReadData[C ...

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

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


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

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

        m_nLeverPos[CH1] = 192;        m_nLeverPos[CH2] = 160;
        m_nLeverPos[CH3] = 96;
        m_nLeverPos[CH4] = 64;
        ULONG i = 0;
        m_nDeviceIndex = 0;
        m_nDeviceNum = 0;
        for(i=0;i<MAX_CH_NUM;i++)
        {
                m_pSrcData = new short[BUF_4K_LEN];
        }
        m_clrRGB[CH1] = RGB(255,255,0);
        m_clrRGB[CH2] = RGB(0,255,255);
        m_clrRGB[CH3] = RGB(255,0,255);
        m_clrRGB[CH4] = 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[CH1];//垂直触发位置和通道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[j]-m_nLeverPos)*8*电压值/255
   这个电压值就是SDK手册中 表3(电压档位与索引关系对应表)中的索引取值?
   表中:索引取5表示电压档位100mV,取8表示1V,取2表示10mV. 比如, RelayControl.nCHVoltDIV = 8,那么(pReadData[j]-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#开发,可能会有很多问题?






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

(1)执行完dsoHTGetData后,pReadData[CH1]中的数在校正已前就应该是0-255之间的 对的
2 参照 C++ 初始化就可以
3 :索引取5表示电压档位100mV,取8表示1V,取2表示10mV. 比如, RelayControl.nCHVoltDIV = 8,那么(pReadData[j]-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[CH1] = 192;      m_nLeverPos[CH2] = 160;
m_nLeverPos[CH3] = 96;
m_nLeverPos[CH4] = 64;
4 497420651@qq.com

Author: wangerpang    Time: 2016-10-24 12:38
追问几个问题:

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

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

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

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


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

两个式子哪个正确?


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

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

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

Author: wangerpang    Time: 2016-10-24 12:38
追问几个问题:

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

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

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

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


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

两个式子哪个正确?


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

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

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

Author: Hantek_Zhang    Time: 2016-10-28 10:11
wangerpang replied at 2016-10-24 12:38
追问几个问题:

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

100mV不等于0.1V吗?

Author: wangerpang    Time: 2016-11-1 21:12
100mV是等于0.1V。

我想问的是:

(pReadData[j]-m_nLeverPos)*8*电压值/255    假如 nCHVoltDIV=5时,公式中的电压值是取100,还是0.1?


Author: Hantek_Zhang    Time: 2016-11-2 09:40
wangerpang replied at 2016-11-1 21:12
100mV是等于0.1V。

我想问的是:

100 没有单位?
0.1 没有单位?
你公式取100 ,100的单位呢? 仔细看二次开发说明

Author: wangerpang    Time: 2016-11-2 20:34
1那公式中的电压单位是多少呢?不可能是我自己定吧,是V还是mV还是其它?

2二次开发文档里只有dsoHTGetState函数中说明如下:
pCH%n%Data   WORD 型变量指针,长度为 pControl-> nReadDataLen,用来存放通道 n 的采集数据数据范围0-255 也没有提到要对数据进行校正


3我是在开发DEMO的注释里看到有这么一句:每通道i第j个点的实际电压值=(pReadData[j]-m_nLeverPos)*8*电压值/255。才知道pReadData中的数值还需要经过校正,至于电压值的单位是多少,并没有说。
DEMO中也没有用这个公式,而是用了个SourceToDisplay(USHORT* pData,ULONG nDataLen,USHORT nCH)函数。


4之前我就已经问了单位该怎么取,您也没有回答。


如果nCHVoltDIV 5呢,(pReadData[j]-m_nLeverPos)*8*电压值/255     nCHVoltDIV=5时电压值是100mV,代入公式中用100,还是0.1?
1(pReadData[j]-m_nLeverPos)*8*100/255  单位mV
2(pReadData[j]-m_nLeverPos)*8*0.1/255   单位V

两个式子哪个正确?

5说实话,二次开发文档和DEMO也太简单了,不然也不会越看不明白的地方越多。


Author: 4fun    Time: 2017-2-10 10:08
我也遇到同样的问题,楼主的问题解决了么?

Author: rokiluo    Time: 2017-11-7 18:25
楼主请教一下:每通道i第j个点的实际电压值=(pReadData [j] -m_nLeverPos )* 8 *电压值/ 255公式中的 m_nLeverPos 是该通道的零电平值,怎么我读取的数据所生成的曲线零电平位置并不在 m_nLeverPos 位置的呢?

Author: rokiluo    Time: 2017-11-7 18:53
请教hantek的工程师居然都不回复的

Author: Hantek_Zhang    Time: 2017-11-8 10:01
wangerpang replied at 2016-11-1 21:12
100mV是等于0.1V。

我想问的是:

都可以
假设pReadData[j]=200;m_nLeverPos=125;nCHVoltDIV=5;
用毫伏=(200-125)*100mV=7500mV
用伏=(200-125)*0.1V=7.5V
7500mV=7.5V
没有区别

Author: Hantek_Zhang    Time: 2017-11-8 10:07
rokiluo replied at 2017-11-7 18:25
楼主请教一下:每通道i第j个点的实际电压值=(pReadData [j] -m_nLeverPos )* 8 *电压值/ 255公式中的 m_n ...

在又有任何信号输入情况pReadData 的均值与m_nLeverPos相减绝对值应该不超过10,
如果超过10,请在我们官方上位机中用你二次开发所设置的通道开关,垂直位置,时基查看是否零点平邮偏移
如果没有偏移说明二次开发代码有问题,有偏移说明0电平需要校准,依次点击:辅助>校准。





Welcome to Electronic Engineer Discuss (https://www.eediscuss.com/) Powered by Discuz! X3.2