一杯清酒邀明月
天下本无事,庸人扰之而烦耳。
posts - 3121,comments - 209,views - 578万

首先介绍一个小知识:

NI-DAQmx的lib库分为32位和64位,

64位库文件路径为Program Files (x86)\National Instruments\Shared\ExternalCompilerSupport\C\lib64\msvc.这是一个本地的64位库文件,可以在64位C或者C++环境中使用。

首先介绍问题来源背景:

在使用NI-DAQmx过程中,笔者遇到需要获取电脑连接的NI设备名和物理通路名的需求,这个需求在使用labview进行开发时,labview会提供相应的控件,但笔者的需求是使用C调用NI-DAQmx驱动获取NI的设备名和物理通路名,使用QT显示在图像界面上。话不多说,给大家上代码。觉得有帮助的铁子麻烦给个赞,有问题的铁子也可以在评论区留言。

1 DAQmxGetSysDevNames(char *data, uInt32 bufferSize);
2 形参:1、设备名数组2、设备名数组的长度

使用上面这个函数便可以获取笔记本中所有NI设备的设备名及插槽名,函数的两个形参分别为要存储设备名的char数组和char数组的长度。

拿到设备名字符串后,按‘,’进行字符串切割,得到各个设备名。

1 DAQmxGetDevAIPhysicalChans(const char device[], char *data, uInt32 bufferSize);
2 形参:1、插槽名2、设备通路名数组3、设备通路名数组的长度

循环对各个插槽名使用DAQmxGetDevAIPhysicalChans函数,即可得到各个设备的物理通路名。

需特别指出的是,DAQmxGetSysDevNames函数不但会返回NI设备的所有设备名也会返回各个设备内的插槽名!!!

而DAQmxGetDevAIPhysicalChans函数只有传入插槽名才会返回物理通路名,否则不会返回数据。(即传入设备名无数据传出)

因此,循环对DAQmxGetSysDevNames函数得到的所有设备名及插槽名使用DAQmxGetDevAIPhysicalChans函数便可得到各个设备的物理通路名。

1 DAQmxGetDevChassisModuleDevNames(const char device[], char *data, uInt32 bufferSize);
2 形参:1、设备名2、插槽名3、插槽名数组长度

特殊的:DAQmxGetDevChassisModuleDevNames函数可以通过设备名得到该设备内的插槽名。

我封装了一个函数,功能是通过形参返回所有设备的通路名,各通路名间通过逗号进行分隔。大家可以直接使用这个函数。觉得好的铁子点个赞支持一下。

复制代码
 1 int GetAllDevChannelName(std::string& AllDevChannelName)
 2 {
 3     char AllDevName[1000] = { '\0' };
 4     DAQmxGetSysDevNames(AllDevName, 1000);
 5     std::string* DevName = new std::string;
 6     std::vector<std::string> DevNameVector;
 7     std::stringstream DevNameStream(AllDevName);
 8  
 9     while (getline(DevNameStream, *DevName, ','))
10     {
11         DevNameVector.push_back(*DevName);
12     }
13     delete DevName;
14     char tempDevChannelName[2000] = { '\0' };
15     for (std::vector<std::string>::iterator iter = DevNameVector.begin(); iter != DevNameVector.end(); iter++) {
16         DAQmxGetDevAIPhysicalChans((*iter).c_str(), tempDevChannelName, sizeof(tempDevChannelName));
17         if (tempDevChannelName[0] != '\0')
18         {
19             AllDevChannelName += tempDevChannelName;
20             AllDevChannelName += ',';
21         }
22     }
23     return 0;
24 }
25  
复制代码

 

posted on   一杯清酒邀明月  阅读(383)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 全网最简单!3分钟用满血DeepSeek R1开发一款AI智能客服,零代码轻松接入微信、公众号、小程
· .NET 10 首个预览版发布,跨平台开发与性能全面提升
· 《HelloGitHub》第 107 期
· 全程使用 AI 从 0 到 1 写了个小工具
· 从文本到图像:SSE 如何助力 AI 内容实时呈现?(Typescript篇)
历史上的今天:
2020-04-07 Qt/C++ 加入轻便性能收集器
2020-04-07 Qt 捕捉窗口关闭事件与信号的捕捉
2020-04-07 Qt 退出应用程序
2020-04-07 Qt 关闭应用程序和窗口的函数(quit(),exit()以及close()的区别)
2020-04-07 OpenVINO概述
< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

点击右上角即可分享
微信分享提示