DANavi的这套API充分利用了组件思想,以DeviceCtrlBase为基类,派生出模拟输入(AI)、模拟输出(AO)、数字输入或数字输出和计数器的其他功能组件。
类名称 | 类用途 |
---|---|
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设备使用的单位 |
一个端口由八个通道组成,每个通道的值都是高或低,它对应于二进制的0或1,因此由0或1组成的端口值将是一个字节大小的数据。端口的宽度为8。在DAQNavi中,DI/O组件中有用于通道相关设置的接口。
以下显示了端口和通道之间的关系:
DI/O端口类型是指所选设备支持DI/O功能的具体端口类型。DioPortType的枚举列出了这些类型,它们是PortDi、PortDo、PortDio、Port8255A、Port8255C和PortIndvdlDio。下面列出了这些类型的含义。
这里以操作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通道设置为输出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;
}