研华I/O板卡 API使用说明
2023-12-27 23:38:13
官方文档资料在安装目录下:
一. 类
1. 类的继承关系
DANavi的这套API充分利用了组件思想,以DeviceCtrlBase为基类,派生出模拟输入(AI)、模拟输出(AO)、数字输入或数字输出和计数器的其他功能组件。
2. 类说明
类名称 | 类用途 |
---|---|
DaqCtrlBase | DAQNavi设备组件的基类,实现设备组件通用的基本功能 |
AiCtrlBase | 模拟输入组件的基类,实现模拟输入组件通用的基本功能 |
InstantAiCtrl | 定义在即时模式下获取模拟数据的接口 |
WaveformAiCtrl | 定义在缓冲模式下获取模拟数据的接口 |
AiFeatures | 表示模拟输入函数的只读属性的集合 |
AiChannel | 表示单个模拟输入通道 |
CjcSetting | 定义管理CJC(冷接点补偿)功能的接口 |
AoCtrlBase | 模拟输出组件的基类,实现模拟输出组件通用的基本功能 |
InstantAoCtrl | 定义在即时模式下输出模拟数据的接口 |
BufferedAoCtrl | 定义在缓冲模式下输出模拟数据的接口 |
AoFeatures | 表示模拟输出函数的只读属性的集合 |
AoChannel | 表示单个模拟输出通道 |
DioCtrlBase | 数字输入/输出(缩写:DI/O)组件的基类,实现DI/O组件通用的基本功能 |
InstantDiCtrl | 定义在即时模式下获取数字数据并监视数字输入事件的接口 |
InstantDoCtrl | 定义在即时模式下输出数字数据的接口 |
BufferedDiCtrl | 定义在缓冲模式下获取数字数据的接口 |
BufferedDoCtrl | 定义在缓冲模式下输出数字数据的接口 |
DioFeatures | 表示数字输入/输出(缩写:DI/O)函数的只读属性的集合 |
DioPort | 表示一个单独的数字输入/输出端口 |
DiintChannel | 表示支持DI中断功能的单个DI通道 |
DiCosintPort | 表示支持DI状态更改中断功能的单个DI端口 |
DiPmintPort | 表示支持DI模式匹配中断功能的单个DI端口 |
CntrCtrlBase | 计数器组件的基类,实现计数器组件通用的基本功能 |
CntrFeatures | 表示计数器函数的只读属性的集合 |
EcChannel | 表示事件计数功能的单个计数器 |
EventCounterCtrl | 定义对输入信号的脉冲进行计数的接口 |
BufferedEventCounterCtrl | 定义用于检索数据的接口,该接口用于对输入信号的脉冲进行计数 |
FmChannel | 表示频率测量功能的单个计数器 |
FreqMeterCtrl | 定义测量输入信号频率的接口 |
OsChannel | 表示延迟脉冲生成(一次触发)功能的单个计数器 |
OneShotCtrl | 定义用于生成延迟脉冲输出的接口 |
PiChannel | 表示脉冲宽度测量功能的单个计数器 |
PwMeterCtrl | 定义测量输入信号脉冲宽度的接口 |
BufferedPwMeterCtrl | 定义用于检索数据的接口,该接口用于测量输入信号的频率 |
PoChannel | 表示脉冲宽度调制输出功能的单个计数器 |
PwModulatorCtrl | 定义生成脉宽调制输出的接口 |
BufferedPwModulatorCtrl | 定义通过缓冲方式生成脉宽调制输出的接口 |
TmrChannel | 表示具有定时器中断功能的脉冲输出的单个计数器 |
TimerPulseCtrl | 定义具有定时器中断功能的脉冲输出接口 |
UdChannel | 表示上下计数函数的单个计数器 |
UdCounterCtrl | 定义执行上下计数功能的接口 |
BufferedUdCounterCtrl | 定义执行缓冲递增/递减计数函数的接口 |
Conversion | 提供管理缓冲AI/AO转换参数的接口,如启动通道、通道计数等 |
Record | 提供管理数据缓冲区参数的接口,如区段长度、区段计数等 |
ConvertClock | 提供管理转换时钟的接口 |
ScanChannel | 提供管理扫描通道的接口 |
Trigger | 提供管理触发器的接口 |
NosFltChannel | 表示支持噪声滤波器功能的单个数字通道 |
DakException | 表示DAQNavi组件执行过程中发生的错误 |
DeviceCtrl | 提供访问底层硬件信息的接口 |
DeviceEventListener | 定义接收设备事件的对象的接口。仅适用于JAVA语言 |
DeviceEventArgs | 提供设备事件的数据 |
Array<T> | 提供访问DAQNavi组件返回的集合的接口。(仅限C++) |
CounterIndexer<T> | 提供访问计数器功能的接口,计数器功能是二维矩阵 |
CounterCapabilityIndexer | 提供访问计数器功能的接口 |
CounterClockSourceIndexer | 提供访问计数器时钟源的接口 |
CounterGateSourceIndexer | 提供访问计数器门源的接口 |
二. 结构体
结构体名称 | 结构体用途 |
---|---|
BfdAiEventArgs | 为缓冲的AI事件提供数据 |
BfdAoEventArgs | 提供缓冲AO事件的数据 |
DiSnapEventArgs | 提供DI快照事件的数据 |
CntrEventArgs | 提供计数器事件的数据,上下计数除外 |
UdCntrEventArgs | 提供上下计数事件的数据 |
BfdCntrEventArgs | 提供缓冲计数器事件的数据 |
DeviceInformation | 通过DacctrlBase的SelectedDevice属性定义用于选择设备的设备信息 |
DeviceTreeNode | 提供设备的信息 |
MathInterval | 定义一个有效的数学值范围 |
PulseWidth | 定义脉冲宽度 |
DataMark | 定义数据标记信息 |
三. 枚举体
枚举体名称 | 枚举体用途 |
---|---|
AccessMode | 定义用于打开设备的有效访问模式 |
ActiveSignal | 定义有效的信号触发边缘 |
AiChannelType | 定义设备支持的AI通道的信号连接类型 |
AiSignalType | 定义AI通道的有效信号连接类型 |
CouplingType | 定义输入通道的耦合类型 |
ImpedanceType | 定义通道的阻抗类型 |
IepeType | 定义IEPE(集成电子压电励磁)传感器的励磁电流 |
FilterType | 定义输入通道的筛选器类型 |
BurnoutRetType | 定义在某些特定情况下将返回的返回值的类型 |
ControlState | 定义DAQNavi设备组件的运行状态 |
CounterCapability | 定义计数器的功能 |
CounterCascadeGroup | 定义计数器级联组类型 |
CounterOperationMode | 定义计数器操作模式 |
CounterValueRegister | 定义计数器寄存器名称 |
DioPortDir | 定义DI/O端口方向 |
DioPortType | 定义DI/O端口类型 |
ErrorCode | 定义DAQNavi设备组件使用的错误代码 |
FreqMeasureMethod | 定义频率测量的方法 |
MathIntervalType | 定义代数概念中的区间类型,如闭集、开集以及其他一些左极限和右极限组合的集合 |
ModuleType | 定义DAQ设备支持的模块类型 |
OutSignalType | 定义计数器相关功能的输出信号类型,如带定时器中断的脉冲输出、延迟脉冲生成等 |
EventId | 定义DAQ设备使用的事件ID |
ProductId | 驱动程序中的产品ID用于表示DAQ设备型号并区分不同型号的设备。每个设备都有一个唯一的产品ID,例如:PCI1710的产品ID为BD_PCI1710,PCI1710HG的产品ID是BD_PCI171 0HG,USB4718的产品ID则是BD_USB4718 |
SamplingMethod | 定义采样方法 |
CountingType | 定义计数器在处理时钟信号时的计数模式 |
SignalDrop | 定义信号的连接点类型,该信号可能来自连接器上的引脚或由内部逻辑生成 |
SignalPolarity | 定义信号极性类型 |
SignalPosition | 定义信号的位置 |
TemperatureDegree | 定义温标类型 |
TerminalBoard | 定义端子板类型 |
TriggerAction | 定义当满足触发条件时设备将执行的操作 |
ValueRange | 定义DAQ设备支持的值范围类型 |
ValueUnit | 定义DAQ设备使用的单位 |
四. 例程说明
这里以操作PCI-1751板卡为例说明
整体程序逻辑如下:
-
cmake设置
cmake_minimum_required(VERSION 3.5) project(AdvanteDAQTest LANGUAGES CXX) set(CMAKE_CXX_STANDARD 17) set(CMAKE_CXX_STANDARD_REQUIRED ON) #气阀控制板卡 set(ADVANTECH_DIR "C:\\Advantech\\") set(ADVANTECH_INCLUDE_DIRS ${ADVANTECH_DIR}\\DAQNavi\\Inc) include_directories(${ADVANTECH_INCLUDE_DIRS}) add_executable(AdvanteDAQTest main.cpp) include(GNUInstallDirs) install(TARGETS AdvanteDAQTest LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR} RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR} )
-
源代码
#include <iostream> #include <stdlib.h> #include <stdio.h> #include "bdaqctrl.h" //引入研华SDK头文件 using namespace Automation::BDaq; //引入研华SDK命名空间 using namespace std; typedef unsigned char byte; #define deviceDescription L"PCI-1751,BID#0" const wchar_t* profilePath = L"PCI-1751DIO.xml"; int32 startPort = 0; int32 portCount = 1; int main(int argc, char* argv[]) { ErrorCode ret = Success; // 1. 创建用于控制设备的实例 InstantDoCtrl * instantDoCtrl = InstantDoCtrl::Create(); // 2. 选择硬件设备的型号,创建包含硬件信息(deviceDescription)的实例DeviceInformation,然后加载到控制设备的实例instantDoCtrl中 DeviceInformation devInfo(deviceDescription); ret = instantDoCtrl->setSelectedDevice(devInfo); if(BioFailed(ret)) { wchar_t enumString[256]; AdxEnumToString(L"ErrorCode", (int32)ret, 256, enumString); printf("Some error occurred. And the last error code is 0x%X. [%ls]\n", ret, enumString); return 0; } // 3. 根据配置文件进行设备的初始化,配置文件可以是自己保存的,也可以是默认的(找不到的情况下就是用默认的) ret = instantDoCtrl->LoadProfile(profilePath); if(BioFailed(ret)) { wchar_t enumString[256]; AdxEnumToString(L"ErrorCode", (int32)ret, 256, enumString); printf("Some error occurred. And the last error code is 0x%X. [%ls]\n", ret, enumString); return 0; } // 4. 设置设备的输出模式,设置端口0为输出模式 Array<DioPort>* dioPort = instantDoCtrl->getPorts(); ret = dioPort->getItem(0).setDirectionMask(Output); if(BioFailed(ret)) { wchar_t enumString[256]; AdxEnumToString(L"ErrorCode", (int32)ret, 256, enumString); printf("Some error occurred. And the last error code is 0x%X. [%ls]\n", ret, enumString); return 0; } // 5. 设置端口的输出状态,通道一的1号口设置为输出1 uint8 bufferForWriting[64] = {0x01}; //16进制格式,0x01代表 0000 0001 ret = instantDoCtrl->Write(startPort, portCount, bufferForWriting ); if(BioFailed(ret)) { wchar_t enumString[256]; AdxEnumToString(L"ErrorCode", (int32)ret, 256, enumString); printf("Some error occurred. And the last error code is 0x%X. [%ls]\n", ret, enumString); return 0; } // 6. 使用完销毁实例 instantDoCtrl->Dispose(); // 7. 检测是否有错误 if(BioFailed(ret)) { wchar_t enumString[256]; AdxEnumToString(L"ErrorCode", (int32)ret, 256, enumString); printf("Some error occurred. And the last error code is 0x%X. [%ls]\n", ret, enumString); } return 0; }
文章来源:https://blog.csdn.net/qq_30150579/article/details/135245801
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!