Labwindows、研华PCI板卡

我现在有一张研华的PCI1710L板卡,需要用Labwindows/cvi2020对其进行开发。
我在CVI工程中添加了adsapi32.dll、adsapi32.lib以及Driver.h等相关头文件。使用Driver.h文件中的DRV_DeviceOpen()函数打开板卡,错误码为2,弹出错误提示为Configuration data lost,其中的DeviceNum为2。
如何使用labwindows/cvi对研华板卡进行开发,刚刚入行请多多指教。

img

PCI1710L可能需要一个配置文件来正确初始化。确保该文件位于正确的位置,并且没有被损坏。

题主,这个问题我来替你解决(参考结合AI智能、文心一言),若有帮助,还望采纳,点击回答右侧采纳即可。


针对您的错误提示“Configuration data lost”,建议您先检查一下以下几个可能的原因:

  1. 检查板卡是否安装正确并正确连接到电脑中。

  2. 检查您所使用的驱动程序是否正确安装。可以尝试重新安装此驱动程序或从厂商处下载更新版本的驱动程序。

  3. 检查设备的配置信息是否存在问题。检查设备的配置文件是否已丢失或已损坏。您可以尝试重新配置设备或重新安装设备驱动程序来解决该问题。

为了使用Labwindows/cvi2020对研华板卡进行开发,您可以按照以下步骤进行:

  1. 在CVI工程中添加ADS(Automation Device Specification)库文件和头文件。ADS库文件是用于访问研华设备的API库。

  2. 在您的代码中初始化ADS库。

  3. 使用ADS库中的函数打开相应设备并进行数据采集和控制。

以下是一个使用Labwindows/cvi2020与研华设备进行通信的简单示例:

#include "ADSapi.h"
#include "ADSdef.h"
#include "ADSlib.h"

int main(int argc, char *argv[])
{
    double data;
    long err=0;
    
    //初始化ADS库
    AdsInit();
    
    //打开设备
    err = AdsSyncOpenPort(0, 0, &port);
    if(err)
    {
        printf("OpenPort failed.\n");
        return -1;
    }
    
    //获取数值
    err = AdsSyncReadReq(port, 0x4020, 0x0, sizeof(double), &data);
    if(err)
    {
        printf("ReadReq failed.\n");
        AdsSyncClosePort(port);
        return -1;
    }
    
    //关闭设备
    AdsSyncClosePort(port);
    
    return 0;
}

注意:此示例仅为演示如何使用ADS库来访问研华设备,并不具有实际意义。您需要根据您的具体应用场景进行修改和优化。

结合GPT给出回答如下请题主参考
首先,要使用LabWindows/CVI对研华PCI1710L板卡进行开发,需要安装正确的驱动程序和相关的DLL文件。在安装完成后,需要在CVI工程中添加ADS库的头文件和库文件,以便可以调用ADS库中提供的函数来访问研华PCI1710L板卡。

在使用CVI编写程序时,需要注意以下几点:

  1. 打开ADS连接:在使用ADS库中的函数之前,需要通过ADS函数AdsOpenPort()打开ADS连接。

  2. 设置访问方式:可以通过ADS函数AdsSyncReadWriteReqEx(), AdsSyncReadReqEx()和AdsSyncWriteReqEx()等函数进行数据读写操作,需要根据实际情况设置访问方式。

  3. 关闭ADS连接:在程序结束时,需要通过ADS函数AdsPortClose()关闭ADS连接,以释放资源。

以下是一个简单的LabWindows/CVI程序示例代码,可以用于读取研华PCI1710L的模拟量输入:

#include <cvirte.h>
#include <userint.h>
#include <ansi_c.h>
#include "AdsAPI.h"

#define PORT_NAME "172.16.1.1.1.1"   // ADS端口名称
#define ADS_ERR_NOERROR 0           // ADS操作成功

int main (int argc, char *argv[])
{
    long    hPort;
    ULONG   ulIndexGroup, ulIndexOffset;
    float   fValue;
    int     i, nCount;

    // 打开ADS连接
    if (AdsOpenPort() != ADS_ERR_NOERROR)
    {
        printf("打开ADS连接失败!\n");
        return -1;
    }

    // 设置端口名称
    if (AdsSetTargetName(hPort, PORT_NAME) != ADS_ERR_NOERROR)
    {
        printf("设置端口名称失败!\n");
        AdsPortClose();
        return -1;
    }

    // 设置访问方式为实时数据访问
    if (AdsSyncSetTimeoutEx(5000, TRUE) != ADS_ERR_NOERROR)
    {
        printf("设置访问方式失败!\n");
        AdsPortClose();
        return -1;
    }

    // 读取指定的模拟量输入信号
    ulIndexGroup = 0x4020;
    ulIndexOffset = 16;
    nCount = 6;

    for (i = 0; i < nCount; i++)
    {
        if (AdsSyncReadWriteReqEx(hPort, ADSIGRP_SYM_VALBYHND, ulIndexGroup, ulIndexOffset, sizeof(float), &fValue) != ADS_ERR_NOERROR)
        {
            printf("读取模拟量输入失败!\n");
            AdsPortClose();
            return -1;
        }

        printf("模拟量输入%d:%f\n", i, fValue);
        ulIndexOffset++;
    }

    // 关闭ADS连接
    AdsPortClose();

    return 0;
}

需要注意的是,以上代码仅供参考,具体实现还需根据实际情况进行修改。

LabVIEW编程LabVIEW开发研华PCI-1710 数据采集卡例程与相关资料
可以参考下

LabVIEW编程LabVIEW开发研华PCI-1710 数据采集卡例程与相关资料_研华板卡labview编程_LabVIEW开发的博客-CSDN博客 LabVIEW编程LabVIEW开发研华PCI-1710 数据采集卡例程与相关资料PCI-1710是一款PCI总线的多功能数据采集卡。其先进的电路设计使得它具有更高的质量和更多的功能。这其中包括五种最常用的测量和控制功能:12位A/D转换,D/A转换,数字量输入,数字量输出及计数器/定时其功能。采集卡如下图所示。这是廊坊一家公司自动测试装置中用的,除了采集卡,还有流量计、压力传感器、调节阀等装置。组成了一个完整的测试系统。这家公司技术负责人是一位退伍的老兵,公司上上下下都叫他张部,应该是技术._研华板卡labview编程 https://blog.csdn.net/bjcyck/article/details/122004658

LabWindows/CVI入门之第一章:LabWindows/CVI开发环境_labwindows是什么_飘香一剑的博客-CSDN博客 转自:http://blog.sina.com.cn/s/blog_6373e9e60101bps4.html1.1 LabWindows/CVI 1.1.1 LabWindows/CVI概述 LabWindows/CVI是美国NI(National Instruments)公司开发的面向计算机测控领域的虚拟仪器软件开发平台,可以在多种操作系统(W_labwindows是什么 https://blog.csdn.net/scliu12345/article/details/50541711/

公司有两个不同域名的域控,如何才能将旧域控的用户改到新域控中,且不影响旧域控用户的正常运行,也不会改变用户原先的一个桌面信息。
检查你的头文件和库文件是否完整且没有损坏。
不行的话,联系研华的技术支持寻求帮助。

已解决,
先使用bdaqctrl.h中的InstantAiCtrl_Create()、InstantDiCtrl_Create()、InstantAoCtrl_Create()、InstantDoCtrl_Create()创建对应通道的句柄,再使用InstantAiCttrl_setSelectedDevice()、InstantDiCttrl_setSelectedDevice()、InstantAoCttrl_setSelectedDevice()、InstantDoCttrl_setSelectedDevice()打开对应设备。
读取输入为InstantAiCtrl_ReadAny()、InstantDiCtrl_ReadAny()。
输出为InstantAiCtrl_WriteAny()、InstantDiCtrl_WriteAny()。
研华自带的标准C例程都有对应的例子,由于基础不扎实移植到Labwindows中出现了很多问题,感谢各位的指导。

引用 皆我百晓生 小程序回复内容作答:

对于LabWindows/CVI2020开发研华PCI板卡,您可以按照以下步骤进行操作:

  1. 确保您已经正确安装了LabWindows/CVI2020软件,并且已经将研华PCI1710L板卡正确安装在计算机上。

  2. 在CVI工程中添加相关文件:
    a. 首先,将adsapi32.dll和adsapi32.lib文件添加到CVI项目中,方法是右键单击项目,在弹出的菜单中选择“Add/Remove Files”,然后选择对应的dll和lib文件进行添加。
    b. 接下来,将Driver.h头文件添加到CVI项目中,方法是右键单击源文件夹,选择“Add File”,然后选择Driver.h进行添加。

  3. 调用DRV_DeviceOpen()函数打开板卡:
    a. 在您的代码中,添加以下代码行来调用DRV_DeviceOpen()函数:

    DWORD DeviceNum = 2;  // 指定您要打开的设备号
    DWORD ErrorCode = DRV_DeviceOpen(DeviceNum);
    if (ErrorCode == 0) {
        printf("设备打开成功!\n");
    } else {
        printf("设备打开失败,错误码:%d\n", ErrorCode);
    }
    

    b. 确保您在调用DRV_DeviceOpen()函数之前,已经设置好正确的设备号DeviceNum。

  4. 如果在调用DRV_DeviceOpen()函数时出现错误码2(Configuration data lost),可能是由于您的PCI板卡的配置数据丢失所致。
    a. 检查您的PCI板卡是否正确安装在计算机上,并且已经连接好了相应的电缆和设备。
    b. 如果您刚刚入行,建议参考研华官方的开发文档或咨询研华的技术支持,以获取更详细的配置和使用说明。

希望以上信息能帮到您,祝您开发顺利!如有更多问题,请随时提问。

该回答通过自己思路及引用到GPTᴼᴾᴱᴺᴬᴵ搜索,得到内容具体如下:
在使用 LabWindows/CVI 进行研华 PCI1710L 板卡开发时,错误码 2 并伴随着 "Configuration data lost" 错误提示通常表示在打开板卡时出现了配置数据丢失的情况。这可能是由于板卡驱动程序没有正确加载或配置文件丢失导致的。

以下是一些可能的解决方案和建议:

  1. 确认驱动程序安装:确保已正确安装了研华 PCI1710L 板卡的驱动程序。您可以从研华的官方网站或提供驱动程序的其他来源下载并安装最新的驱动程序。
  2. 检查配置文件:确保所需的配置文件存在并位于正确的位置。这些文件通常包括 .ini.cfg 文件,用于配置板卡的参数和选项。检查这些文件是否存在,并确保它们与您的板卡兼容。
  3. 检查硬件连接:确保研华 PCI1710L 板卡已正确连接到计算机的 PCI 插槽上,并且没有松动或接触不良的情况。检查电缆连接、供电等方面,确保硬件连接正确。
  4. 确认设备号:在使用 DRV_DeviceOpen() 函数打开板卡时,确保传递正确的设备号(DeviceNum)。设备号通常是一个整数值,标识要打开的板卡在系统中的位置。您可以尝试使用其他设备号进行测试,或者使用研华提供的工具或示例代码来获取正确的设备号。
  5. 联系研华技术支持:如果您尝试了上述步骤仍然无法解决问题,建议您联系研华的技术支持团队。他们可以提供更详细的指导和帮助,以解决与研华 PCI1710L 板卡开发相关的问题。

请注意,由于我无法直接访问您的实际硬件和环境,以上建议仅供参考。确保在进行任何更改之前备份您的代码和配置文件,并小心操作以避免可能的问题。


如果以上回答对您有所帮助,点击一下采纳该答案~谢谢

参考gpt:
结合自己分析给你如下建议:
确保板卡已经牢固地插入到PCI插槽中,并且电源已经关闭。
确保您已经安装了最新版本的DAQNavi软件包,包括ADSAPI32.DLL和Driver.h等相关文件。您可以从研华官网下载最新的DAQNavi软件包。
确保您在CVI工程中正确地添加了ADSAPI32.DLL、ADSAPI32.LIB和Driver.h等相关头文件,并且路径设置正确。
确保您在调用DRV_DeviceOpen()函数时,使用了正确的设备号。设备号是从0开始的,与板卡上的DIP开关设置相对应。例如,如果您的板卡上的DIP开关设置为0000,则设备号为0;如果设置为0001,则设备号为1,以此类推。
如果以上步骤都无法解决问题,您可以尝试重新安装板卡或者更换其他PCI插槽,并且重新配置驱动程序。

以PCI-1710为例,如何获取研华数据采集卡的驱动、SDK以及产品手册_pci1710驱动_douyutop的博客-CSDN博客 以PCI-1710为例,如何获取研华数据采集卡的驱动、SDK以及产品手册看了这位老哥的文章(研华数据采集卡PCI-1710多通道数据采集),很有收获,兴致勃勃去官网下载驱动,结果没有找到相关的驱动文件,我晕~上正题吧,给大家介绍一种十分高效的查找你需要的驱动的方法叮咚~没错,就是技术支持里的“QQ在线咨询”,想要驱动直接咨询,他会给你发一份驱动、SDK以及手册。初次之外你还可以咨询技术小哥哥任何技术上的问题,比自己无脑百度强太多,十分高效!最后,感谢技术小哥哥提供的驱动文件和耐心解答。.._pci1710驱动 https://blog.csdn.net/douyutop/article/details/111884779

PCI-1710_PCI-1710HG_中文使用手册 - 研华技术支持 - 研华 研华科技是全球智能系统产业的领导厂商,以先进技术和可靠品质成为客户值得信赖的国际品牌,专注于自动化市场,嵌入式电脑市场及智能服务市场,联合多家合作伙伴形成了强大的技术服务和营销网络,为客户提供本土化的便捷服务.研华以智能地球的推手为企业使命,立志成为智能城市及物联网领域中最具关键影响力的全球企业. https://www.advantech.com.cn/zh-cn/support/details/manual?id=1-HU5F9G

LabVIEW编程LabVIEW开发研华PCI-1710 数据采集卡例程与相关资料 - 知乎 LabVIEW编程LabVIEW开发研华PCI-1710 数据采集卡例程与相关资料 PCI-1710是一款PCI总线的多功能数据采集卡。其先进的电路设计使得它具有更高的质量和更多的功能。这其中包括五种最常用的测量和控制功能:12位A/D转… https://zhuanlan.zhihu.com/p/446787526

援引讯飞星火:
首先,确保您已经安装了研华的驱动和库。然后,按照以下步骤进行操作:

  1. 打开LabWindows/CVI2020,创建一个新的工程。
  2. 在“项目”菜单中,选择“添加文件到项目”,然后浏览到您的Driver.h文件和其他相关头文件,将它们添加到项目中。
  3. 在“项目”菜单中,选择“添加设备”,然后从列表中选择您的研华PCI1710L板卡。如果您不确定板卡的确切名称,请查阅研华的文档或联系研华技术支持。
  4. 在“项目”菜单中,选择“配置驱动程序”,然后设置驱动程序的名称、描述和路径。确保这些设置与您的系统和研华驱动的要求相匹配。
  5. 在“项目”菜单中,选择“添加函数文件到项目”,然后浏览到您的adsapi32.dll和adsapi32.lib文件,将它们添加到项目中。
  6. 在“项目”菜单中,选择“添加变量到项目”,然后创建以下变量:
    • DRV_DEVICEINFO_DATA:用于存储设备信息的数据结构。
    • DRV_DEVICEOPEN_PARAMS:用于存储打开设备所需的参数的结构。
    • DRV_DEVICEOPEN_RESULT:用于存储打开设备结果的结构。
  7. 编写一个函数,使用DRV_DeviceOpen()函数打开研华板卡。例如:
#include "vi.h"
#include "adsapi32.h"

void OpenDevice(vi *viParent, int DeviceNum) {
    DWORD dwResult;
    DWORD dwSize = sizeof(DWORD);
    DWORD dwDeviceInfoDataSize = sizeof(DWORD);
    DWORD dwDeviceOpenParamsSize = sizeof(DWORD);
    DWORD dwDeviceOpenResultSize = sizeof(DWORD);

    vi->Log(VI_LOG_LEVEL_INFO, "Entering OpenDevice");

    // 初始化结构体
    vi->SetViRsrcPtr(drvDeviceInfoData, (PVOID)&dwDeviceInfoDataSize, TRUE);
    vi->SetViRsrcPtr(drvDeviceOpenParams, (PVOID)&dwDeviceOpenParamsSize, TRUE);
    vi->SetViRsrcPtr(drvDeviceOpenResult, (PVOID)&dwDeviceOpenResultSize, TRUE);

    // 打开设备
    dwResult = DRV_DeviceOpen(viParent->viDrvHandle, DeviceNum, &dwDeviceInfoData, &dwDeviceOpenParams, &dwDeviceOpenResult);

    if (dwResult == DRV_NO_ERROR) {
        vi->Log(VI_LOG_LEVEL_INFO, "Device opened successfully");
    } else {
        vi->Log(VI_LOG_LEVEL_ERROR, "Failed to open device, error code: %d", dwResult);
    }
}
  1. 在主函数中调用OpenDevice()函数,传入viParent和DeviceNum参数。例如:
int main() {
    // 初始化viParent和vi
    vi myVi;
    OpenDevice(&myVi, 2); // 用实际的板卡编号替换2

    // ...其他代码...

    return viMainProc(vi, NULL);
}
  1. 编译并运行您的程序。如果一切正常,您应该能够看到设备已成功打开的消息。如果遇到任何问题,请检查错误代码和日志以获取更多信息。