发 帖  
[问答] Labview提示错误1097,调用库函数节点中的外部节点出现异常,附程序图和dll函数代码。
2018-3-8 10:12:15  1216 错误 调用 库函数 节点
收藏 1 收藏 推荐 0 推荐
分享
使用LabVIEW软件做一个数据采集程序,其中要用动态库的调用,提示“调用库函数节点调用的外部节点中出现一个异常。该异常可能引起LabVIEW内存坏块。在新位置保存工作并重启LabVIEW。”错误出现在“USB9825_ReadAD”函数这里,附上程序框图和原函数...
无标题.png





1.png 2.png








3.png 4.png
程序.rar (124.61 KB, 下载次数: 4)






补充内容 (2018-3-9 09:05):
//AD初始化参数
#ifndef _USB9825_PARA_INIT
typedef struct _USB9825_PARA_INIT   
{
        LONG    lSelADClk;           //时钟选择
        LONG    lChCnt;              //通道选择
        LONG    ClkDeci;             //分频因子
        LONG        TriggerMode;         //触发模式
        LONG        TriggerSource;             //触发源
        LONG    TriggerDelay;        //触发延时
        LONG    TriggerLength;       //触发长度
        LONG    TriggerLevel;        //模拟触发电平
        LONG    lADFmt;              //AD输出数据格式   
} USB9825_PARA_INIT,*PUSB9825_PARA_INIT;
#endif

//时钟选择
typedef enum EmADClkSel
{
        ADCLK_INT        = 0, //板上时钟
        ADCLK_EXT        = 1  //板外时钟
} ADCLK_SEL;

//触发模式
typedef enum EmTriggerMode
{
        TRIG_MODE_CONTINUE        = 0, //连续采集
        TRIG_MODE_POST            = 1, //后触发               
        TRIG_MODE_DELAY           = 2, //延时触发
        TRIG_MODE_PRE                          = 3, //前触发,USB9825不支持               
        TRIG_MODE_MIDDLE          = 4  //中触发,USB9825不支持               
} TRIGGER_MODE;

//触发源
typedef enum EmTriggerSource
{
        TRIG_SRC_EXT_RISING      = 0,  //外正沿触发
        TRIG_SRC_EXT_FALLING     = 1,  //外负沿触发       
        TRIG_SRC_SOFT_RISING     = 2,   //软件正沿触发
        TRIG_SRC_SOFT_FALLING    = 3,   //软件负沿触发
        TRIG_SRC_CH1_RISING      = 4,   //CH1正沿触发       
        TRIG_SRC_CH1_FALLING     = 5,   //CH1负沿触发
        TRIG_SRC_CH2_RISING      = 6,   //CH2正沿触发
        TRIG_SRC_CH2_FALLING     = 7,   //CH2负沿触发
        TRIG_SRC_CH3_RISING      = 8,   //CH3正沿触发       
        TRIG_SRC_CH3_FALLING     = 9,   //CH3负沿触发
        TRIG_SRC_CH4_RISING      = 10,   //CH4正沿触发
        TRIG_SRC_CH_FALLING      = 11,   //CH4负沿触发
        TRIG_SRC_INT_RISING      = 12,   //PWM正沿触发
        TRIG_SRC_INT_FALLING     = 13    //PWM负沿触发       
} TRIGGER_SOURCE;

//AD数据输出格式
typedef enum EmADFormat
{
        ADFMT_STBIN    = 0, //直接二进制输出
        ADFMT_2SBIN    = 1  //二进制补码输出
} AD_FORMAT;

//读/写零偏
#define WRITEOFFSET 0 //写零偏
#define READOFFSET  1 //读零偏

//触发长度单位
#define   TRIG_UNIT   32

#define READ_MAX_LEN   1572864L     //最大读取长度

/***********************************************************/
#ifndef DEFINING
#define DEVAPI __declspec(dllimport)
#else
#define DEVAPI __declspec(dllexport)
#endif

#ifdef __cplusplus
extern "C" {
#endif

        //判断是否为高速USB设备
        DEVAPI BOOL FAR PASCAL USB9825_IsHighDevice(HANDLE hDevice,PUCHAR pDat);
        //根据设备号打开设备
        DEVAPI HANDLE FAR PASCAL USB9825_Link(UCHAR DeviceNO);
        //断开设备
        DEVAPI BOOL FAR PASCAL USB9825_UnLink(HANDLE hDevice);
        //初始化参数并开始采集
        DEVAPI BOOL FAR PASCAL USB9825_InitAD(HANDLE hDevice, PUSB9825_PARA_INIT para_init);
        //读取AD数据
        DEVAPI BOOL FAR PASCAL USB9825_ReadAD(HANDLE hDevice,PUSHORT pBuf, ULONG nCount);
        //结束采集
        DEVAPI BOOL FAR PASCAL USB9825_StopAD(HANDLE hDevice, UCHAR devNum);
        //设置DO
        DEVAPI BOOL FAR PASCAL USB9825_SetDO(HANDLE hDevice, LONG byDO);
        //读取DI
        DEVAPI BOOL FAR PASCAL USB9825_GetDI(HANDLE hDevice, PLONG pDI);
        //设置AD零偏
        DEVAPI BOOL FAR PASCAL USB9825_ADoffset(HANDLE hDevice, LONG lselAD,
                BOOL bWtRd,PLONG plADoffset);
        //读取硬件FIFO溢出位
        DEVAPI BOOL FAR PASCAL USB9825_GetBufOver(HANDLE hDevice, PLONG pBufOver);
        //软件触发
        DEVAPI BOOL FAR PASCAL USB9825_ExeSoftTrig(HANDLE hDevice);
        //读取设备信息
        DEVAPI BOOL FAR PASCAL USB9825_GetDevInfo(HANDLE hdl,LONG* devFifoSize,LONG* devADbit);
        //读写用户存储器
        DEVAPI BOOL FAR PASCAL USB9825_WrRdUsrMem(HANDLE hDevice, BOOL bWtRd, PLONG pMem);
        //设置PWM脉冲发生器
        DEVAPI BOOL FAR PASCAL USB9825_SetPulGen(HANDLE hDevice, ULONG lAllcnt, ULONG lHighCnt, BOOL bEnable);

#ifdef __cplusplus
}
#endif


已退回5积分
2018-3-8 10:12:15   评论 邀请回答
9个回答
2018-3-8 11:30:11 评论

举报

难道是FCFR-USB9825采集卡?
2018-3-8 12:13:22 评论

举报

有没有头文件?然后,是不是先读数据再Stop AD?
2018-3-8 12:28:39 评论

举报


具体是在哪错误了?那就是只能修改动态链接库了?
2018-3-9 08:49:27 评论

举报

老蜗牛 发表于 2018-3-8 12:13
难道是FCFR-USB9825采集卡?

是的,就是这张卡
2018-3-9 08:49:52 评论

举报

老蜗牛 发表于 2018-3-8 12:28
有没有头文件?然后,是不是先读数据再Stop AD?

//头文件
//AD初始化参数
#ifndef _USB9825_PARA_INIT
typedef struct _USB9825_PARA_INIT   
{
        LONG    lSelADClk;           //时钟选择
        LONG    lChCnt;              //通道选择
        LONG    ClkDeci;             //分频因子
        LONG        TriggerMode;         //触发模式
        LONG        TriggerSource;             //触发源
        LONG    TriggerDelay;        //触发延时
        LONG    TriggerLength;       //触发长度
        LONG    TriggerLevel;        //模拟触发电平
        LONG    lADFmt;              //AD输出数据格式   
} USB9825_PARA_INIT,*PUSB9825_PARA_INIT;
#endif

//时钟选择
typedef enum EmADClkSel
{
        ADCLK_INT        = 0, //板上时钟
        ADCLK_EXT        = 1  //板外时钟
} ADCLK_SEL;

//触发模式
typedef enum EmTriggerMode
{
        TRIG_MODE_CONTINUE        = 0, //连续采集
        TRIG_MODE_POST            = 1, //后触发               
        TRIG_MODE_DELAY           = 2, //延时触发
        TRIG_MODE_PRE                          = 3, //前触发,USB9825不支持               
        TRIG_MODE_MIDDLE          = 4  //中触发,USB9825不支持               
} TRIGGER_MODE;

//触发源
typedef enum EmTriggerSource
{
        TRIG_SRC_EXT_RISING      = 0,  //外正沿触发
        TRIG_SRC_EXT_FALLING     = 1,  //外负沿触发       
        TRIG_SRC_SOFT_RISING     = 2,   //软件正沿触发
        TRIG_SRC_SOFT_FALLING    = 3,   //软件负沿触发
        TRIG_SRC_CH1_RISING      = 4,   //CH1正沿触发       
        TRIG_SRC_CH1_FALLING     = 5,   //CH1负沿触发
        TRIG_SRC_CH2_RISING      = 6,   //CH2正沿触发
        TRIG_SRC_CH2_FALLING     = 7,   //CH2负沿触发
        TRIG_SRC_CH3_RISING      = 8,   //CH3正沿触发       
        TRIG_SRC_CH3_FALLING     = 9,   //CH3负沿触发
        TRIG_SRC_CH4_RISING      = 10,   //CH4正沿触发
        TRIG_SRC_CH_FALLING      = 11,   //CH4负沿触发
        TRIG_SRC_INT_RISING      = 12,   //PWM正沿触发
        TRIG_SRC_INT_FALLING     = 13    //PWM负沿触发       
} TRIGGER_SOURCE;

//AD数据输出格式
typedef enum EmADFormat
{
        ADFMT_STBIN    = 0, //直接二进制输出
        ADFMT_2SBIN    = 1  //二进制补码输出
} AD_FORMAT;

//读/写零偏
#define WRITEOFFSET 0 //写零偏
#define READOFFSET  1 //读零偏

//触发长度单位
#define   TRIG_UNIT   32

#define READ_MAX_LEN   1572864L     //最大读取长度

/***********************************************************/
#ifndef DEFINING
#define DEVAPI __declspec(dllimport)
#else
#define DEVAPI __declspec(dllexport)
#endif

#ifdef __cplusplus
extern "C" {
#endif

        //判断是否为高速USB设备
        DEVAPI BOOL FAR PASCAL USB9825_IsHighDevice(HANDLE hDevice,PUCHAR pDat);
        //根据设备号打开设备
        DEVAPI HANDLE FAR PASCAL USB9825_Link(UCHAR DeviceNO);
        //断开设备
        DEVAPI BOOL FAR PASCAL USB9825_UnLink(HANDLE hDevice);
        //初始化参数并开始采集
        DEVAPI BOOL FAR PASCAL USB9825_InitAD(HANDLE hDevice, PUSB9825_PARA_INIT para_init);
        //读取AD数据
        DEVAPI BOOL FAR PASCAL USB9825_ReadAD(HANDLE hDevice,PUSHORT pBuf, ULONG nCount);
        //结束采集
        DEVAPI BOOL FAR PASCAL USB9825_StopAD(HANDLE hDevice, UCHAR devNum);
        //设置DO
        DEVAPI BOOL FAR PASCAL USB9825_SetDO(HANDLE hDevice, LONG byDO);
        //读取DI
        DEVAPI BOOL FAR PASCAL USB9825_GetDI(HANDLE hDevice, PLONG pDI);
        //设置AD零偏
        DEVAPI BOOL FAR PASCAL USB9825_ADoffset(HANDLE hDevice, LONG lselAD,
                BOOL bWtRd,PLONG plADoffset);
        //读取硬件FIFO溢出位
        DEVAPI BOOL FAR PASCAL USB9825_GetBufOver(HANDLE hDevice, PLONG pBufOver);
        //软件触发
        DEVAPI BOOL FAR PASCAL USB9825_ExeSoftTrig(HANDLE hDevice);
        //读取设备信息
        DEVAPI BOOL FAR PASCAL USB9825_GetDevInfo(HANDLE hdl,LONG* devFifoSize,LONG* devADbit);
        //读写用户存储器
        DEVAPI BOOL FAR PASCAL USB9825_WrRdUsrMem(HANDLE hDevice, BOOL bWtRd, PLONG pMem);
        //设置PWM脉冲发生器
        DEVAPI BOOL FAR PASCAL USB9825_SetPulGen(HANDLE hDevice, ULONG lAllcnt, ULONG lHighCnt, BOOL bEnable);

#ifdef __cplusplus
}
#endif


2018-3-9 08:57:29 评论

举报

老蜗牛 发表于 2018-3-8 12:28
有没有头文件?然后,是不是先读数据再Stop AD?

头文件补充在帖子上面了
2018-3-9 09:06:07 评论

举报

ki_happy 发表于 2018-3-9 09:06
头文件补充在帖子上面了

最好上传采集卡附送光盘中的USB9825.h文档
2018-3-9 11:16:23 评论

举报

ki_happy 发表于 2018-3-9 08:49
是的,就是这张卡

附件最好转成低版本的
2018-3-9 11:18:33 评论

举报

撰写答案

你正在撰写答案

如果你是对答案或其他答案精选点评或询问,请使用“评论”功能。

高级模式
您需要登录后才可以回帖 登录 | 注册

提问题
关闭

站长推荐 上一条 /9 下一条

快速回复 返回顶部 返回列表