Please select To the mobile version | Continue to access the desktop computer version

Electronic Engineer Discuss

12Next
Return to list New
View: 24002|Reply: 18

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

[Copy link]

3

Threads

10

Posts

10

Credits

新手上路

Rank: 1

Credits
10
Post time 2016-10-14 12:54:53 | Show all posts |Read mode
1。可以吗?
2。有做过C#二次开发的吗?官网没有C#。

Reply

Use magic Report

167

Threads

2070

Posts

2232

Credits

版主

Rank: 7Rank: 7Rank: 7

Credits
2232
Post time 2016-10-15 12:24:18 | Show all posts
不能通过 NI measurement Studio控件显示。

3

Threads

10

Posts

10

Credits

新手上路

Rank: 1

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

167

Threads

2070

Posts

2232

Credits

版主

Rank: 7Rank: 7Rank: 7

Credits
2232
Post time 2016-10-19 10:36:29 | Show all posts
请问您的示波器型号是什么?

3

Threads

10

Posts

10

Credits

新手上路

Rank: 1

Credits
10
 Author| Post time 2016-10-19 13:32:08 | Show all posts
您好,是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]);
        }
}


0

Threads

29

Posts

29

Credits

新手上路

Rank: 1

Credits
29
Post time 2016-10-19 16:38:36 | Show all posts
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 不是矫正,只是我们自己为了方便显示 ,可以不调用

3

Threads

10

Posts

10

Credits

新手上路

Rank: 1

Credits
10
 Author| Post time 2016-10-19 20:37:02 | Show all posts
大神,一看您的名字就知道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#开发,可能会有很多问题?





0

Threads

29

Posts

29

Credits

新手上路

Rank: 1

Credits
29
Post time 2016-10-20 16:23:14 | Show all posts
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

3

Threads

10

Posts

10

Credits

新手上路

Rank: 1

Credits
10
 Author| Post time 2016-10-24 12:38:09 | Show all posts
追问几个问题:

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之间了。谢谢。

3

Threads

10

Posts

10

Credits

新手上路

Rank: 1

Credits
10
 Author| Post time 2016-10-24 12:38:47 | Show all posts
追问几个问题:

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之间了。谢谢。
12Next
Return to list New
You have to log in before you can reply Login | Register

Points Rules

Dark room|Mobile|Archiver|Electronic Engineer Discuss

2024-4-19 03:53 GMT+8 , Processed in 0.167871 second(s), 21 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

Quick Reply To Top Return to the list