研华I/O板卡 API使用说明

文章目录

  • 一. 类
    • 1. 类的继承关系
    • 2. 类说明
  • 二. 结构体
  • 三. 枚举体
  • 四. 研华板卡设定说明
    • 1. 端口(port)和通道(channel)的定义
    • 2. 端口类型(DioPortType)
  • 五. 例程说明

官方文档资料在安装目录下:
研华I/O板卡 API使用说明_第1张图片
研华I/O板卡 API使用说明_第2张图片

一. 类

1. 类的继承关系

DANavi的这套API充分利用了组件思想,以DeviceCtrlBase为基类,派生出模拟输入(AI)、模拟输出(AO)、数字输入或数字输出和计数器的其他功能组件。
研华I/O板卡 API使用说明_第3张图片

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设备使用的单位

四. 研华板卡设定说明

1. 端口(port)和通道(channel)的定义

一个端口由八个通道组成,每个通道的值都是高或低,它对应于二进制的0或1,因此由0或1组成的端口值将是一个字节大小的数据。端口的宽度为8。在DAQNavi中,DI/O组件中有用于通道相关设置的接口。

  • 通道(channel):一个通道将连接一个信号,该通道的数据将为0或1。
  • 端口(port):由通道组成。八通道组成一个端口,因此端口的组宽度为8。
  • 端口宽度:由端口组成的通道总数。

以下显示了端口和通道之间的关系:

研华I/O板卡 API使用说明_第4张图片

2. 端口类型(DioPortType)

DI/O端口类型是指所选设备支持DI/O功能的具体端口类型。DioPortType的枚举列出了这些类型,它们是PortDi、PortDo、PortDio、Port8255A、Port8255C和PortIndvdlDio。下面列出了这些类型的含义。

  • PortDi:表示仅支持DI功能的端口号。
  • PortDo:表示端口号仅支持DO功能。
  • PortDio:表示DI端口和DO端口对应的端口号。
  • 端口8255A:表示通过设置端口方向,该端口可用于运行DI(输入)或DO(输出)功能。
  • 端口8255C:表示端口可以分为两组,每组可以通过设置方向来运行DI(输入)或DO(输出)功能。
  • PortIndvdlDio:意味着端口的每个通道都可以单独设置方向以进行输入或输出。

五. 例程说明

这里以操作PCI-1751板卡为例说明
整体程序逻辑如下:
研华I/O板卡 API使用说明_第5张图片

  1. 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}
    )
    
    
  2. 源代码

    #include 
    
    #include 
    #include 
    #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;
    }
    
    

你可能感兴趣的:(硬件,软件安装,研华)