baidu_37617089 2018-08-28 02:37 采纳率: 70%
浏览 715
已结题

USB_2066数据采集卡ReadAD()函数读取的数据为什么全是32767啊?

USB-2066数据采集卡,用自带的程序能够正常读取到数据,而我自己用它给的ReadAD()函数也能成功运行,但是读上来的数据全是32767(换算下就是0),这是为什么啊?代码基本一致,设置也没差,我2个程序同时运行,自带的程序读取的数据是正常的,而我的依旧是32767。

就是这个函数:
USB2066__ReadAD(hDevice, inBuffer, samcnt);
hDevice是设备编号,samcnt是采样数,inBuffer是数据存储数组,3个都没问题,函数也正常运行了,就是读上来的数据不对。自带的代码这段函数前后都没有其他任何东西,就单纯这个函数,我断点进去看,函数运行完,inBuffer里面就有正常的数据,而我的函数进去看就全是32767.

自带程序代码截取部分(C++语言写的):
typedef struct _USB2066_PARA_INIT

{
LONG lADFreq; //采样率
LONG TriggerMode; //触发模式
LONG TriggerSource; //触发源
LONG TriggerDelay; //触发延时
LONG TriggerLength; //触发长度
LONG TriggerLevel; //模拟触发电平
LONG lEnCh[8]; //通道使能

} USB2066_PARA_INIT,*PUSB2066_PARA_INIT;
main()里面:
hDevice = USB2066_Link(0);//连接采集卡
USB2066_PARA_INIT para_init;//初始化数组
赋值部分就不贴上了,都一样的。
USB2066_InitAD(hDevice,&para_init)//初始化
PUSHORT inBuffer = NULL;
ULONG status=FALSE;
inBuffer = new USHORT[samcnt];
USB2066_ReadAD(hDevice,inBuffer,samcnt);

我的代码(C# 写的)
[DllImport("USB2066.dll", SetLastError = true, EntryPoint = "USB2066_Link")]
public static extern IntPtr USB2066_Link(uint i);
[DllImport("USB2066.dll", SetLastError = true, EntryPoint = "USB2066_InitAD")]
public static extern bool USB2066_InitAD(IntPtr hDevice, IntPtr para_init);
[DllImport("USB2066.dll", SetLastError = true, EntryPoint = "USB2066_ReadAD")]
public static extern bool USB2066_ReadAD(IntPtr hDevice, ushort[] inBuffer, uint nCount);

public struct _USB2066_PARA_INIT
{
public int lADFreq; //采样率
public int TriggerMode; //触发模式
public int TriggerSource; //触发源
public int TriggerDelay; //触发延时
public int TriggerLength; //触发长度
public int TriggerLevel; //模拟触发电平
public int[] lEnCh;
}
main()里面:
hDevice = USB2066_Link(0);
_USB2066_PARA_INIT para_init = new _USB2066_PARA_INIT
{
lADFreq = 1000000, //采样率
TriggerMode = 0,
TriggerSource = 0,
TriggerDelay = 0, //触发延时,仅延时触发有效,以基准时钟为单位
TriggerLength = 6912,//6912, //触发长度
TriggerLevel = 2457,//触发电平
lEnCh = new int[8]
};
para_init.lEnCh[0] = 1;
int psize = Marshal.SizeOf(para_init);
IntPtr ptrIn = Marshal.AllocHGlobal(psize);
Marshal.StructureToPtr(para_init, ptrIn, true);
USB2066_InitAD(hDevice, ptrIn)
ushort[] inBuffer = new ushort[samcnt];
USB2066_ReadAD(hDevice, inBuffer, samcnt);

求救!!!

  • 写回答

3条回答 默认 最新

  • 白色一大坨 2018-08-28 02:57
    关注

    虽然没接触过那个采集卡,但根据我用过一些板卡的经验,比如凌华板卡等,一般这种api里面,都是有初始化设备和释放设备,以及一些在读取之前设置的属性。
    你可以看看这个采集卡提供的接口,有没有接口说明书,好好看一下,还有就是,在厂家提供的示例程序的入口和出口看一下,是否存在初始化和释放的接口,搜索一下程序,直接搜索前缀“USB2066__”来看一下程序里面是不是还有其他接口。
    我觉得你目前这个状况,肯定是没有调用厂家提供的一些前置接口,导致读取失败。

    评论

报告相同问题?

悬赏问题

  • ¥15 安卓adb backup备份应用数据失败
  • ¥15 eclipse运行项目时遇到的问题
  • ¥15 关于#c##的问题:最近需要用CAT工具Trados进行一些开发
  • ¥15 南大pa1 小游戏没有界面,并且报了如下错误,尝试过换显卡驱动,但是好像不行
  • ¥15 没有证书,nginx怎么反向代理到只能接受https的公网网站
  • ¥50 成都蓉城足球俱乐部小程序抢票
  • ¥15 yolov7训练自己的数据集
  • ¥15 esp8266与51单片机连接问题(标签-单片机|关键词-串口)(相关搜索:51单片机|单片机|测试代码)
  • ¥15 电力市场出清matlab yalmip kkt 双层优化问题
  • ¥30 ros小车路径规划实现不了,如何解决?(操作系统-ubuntu)