DAQ2200系列数据采集卡软件开发

简介

ADLINK公司的DAQ-2200系列数据采集卡是工业应用的成熟产品,其采集精度高、可靠性好、工作状态稳定。DAQ-2200使用PCI接口,还有使用PCIe接口的DAQe-2200系列以及使用PXI系统接口的PXI-2200系列,这些系列除了接口外其他特性与DAQ-2200系列完全相同,对于上位机软件开发也没有区别,故此文只针对DAQ-2200系列产品进行讲述。

ADLINK公司的DAQ-2200系列数据采集卡外观图:
DAQ-2200 Series

技术参数

DAQ-2200系列数据采集卡带有模拟量输入、模拟量输出、数字量通信、通用计数器功能,具体参数如下:

  1. 模拟量输入
    • 通道数:64通道单极性输入或32通道双极性输入
    • 最大采样速率:3MS/s(DAQ-2204)、500kS/s(DAQ-2205)、250kS/s(DAQ-2206)
    • 分辨率:12位(DAQ-2204)、16位(DAQ-2205、DAQ-2206)
    • 输入电压:±10V、±5V、±2.5V或±1.5V
    • 过电压保护:±30V
    • 输入阻抗:1GΩ | 100pF
    • 数据传输方式:I/O,DMA
    • 偏移误差:±2mV(DAQ-2204、DAQ-2206)、±1mV(DAQ-2205)
    • 信号稳定时间:1μs(DAQ-2204)、2μs(DAQ-2205)、4μs(DAQ-2206)
  2. 模拟量输出
    • 通道数:2通道
    • 最大刷新速率:1MS/s
    • 分辨率:12位
    • 数据传输方式:I/O,DMA
    • 输出电压:0~10V或±10V
    • 转换速率:20V/μs
    • 偏移误差:±1mV(DAQ-2204、DAQ-2206)、±2mV(DAQ-2205)
    • 保护:对地短路保护
    • 输出阻抗:典型0.01Ω
    • 输出电流:最大±5mA
    • 上电状态:0V
  3. 通用I/O
    • 数量:24路
    • 兼容:TTL/CMOS
    • 数据传输方式:I/O
  4. 通用计数器
    • 数量:2路
    • 分辨率:16位
    • 基本时钟频率:40MHz,外部时钟频率最高10MHz
  5. 通用规格
    • 自动校准:是(+5V,±2ppm/℃)
    • 尺寸:175mm x 107mm(不包括连接器)
    • 连接器:68针VHDCI孔端插座 x 2
    • 工作温度:0℃至+55℃
    • 存储温度:-20℃至+70℃
    • 湿度:5至95%,非凝露

编程准备

硬件已经配置安装完成后,在正式开始编程之前还需要完成以下步骤:

1、从ADLINK官网下载DAQ-2200系列数据采集卡的驱动(D2K-DASK)并完成安装,默认安装路径为“C:\ADLINK\D2K-DASK”。

2、将“C:\ADLINK\D2K-DASK\Include\D2kDask.h”和“C:\ADLINK\D2K-DASK\Lib\D2K-Dask.lib”两个文件复制到项目工程目录下。

3、对项目名右击,然后选择“添加现有项”,之后将复制得到的D2kDask.h头文件包含到项目中。

4、在菜单栏中依次选择“项目->属性->配置属性->连接器->输入->附加依赖项”,在此处输入“.\D2K-Dask.lib”并单击“应用”按钮(注意Debug和Release版本都要进行此操作)。

5、在需要对数据采集卡进行操作的源文件内添加“#include "D2kDask.h"”。

编程开发

本节只介绍DAQ-2200系列数据采集卡的常规编程流程,以及一些常用的操作函数。其他更详细的说明请查阅开发文档“C:\ADLINK\D2K-DASK\Manual\D2K-DASK Function Reference.pdf”,相关开发示例参见“C:\ADLINK\D2K-DASK\Samples”路径下的示例工程。

1、数据采集卡的打开与关闭

先在Example.h头文件中使用#include宏指令来包含“D2kDask.h”文件,并为CExample对象添加数据采集卡编号成员变量。

#include "D2kDask.h"

class CExample
{
  //......
private:
  //数据采集卡编号
  U16 m_u16CardNumber;
  //......
};

在Example.cpp文件中使用相关操作函数打开数据采集卡,使用完成后还需要关闭数据采集卡以释放资源。

bool CExample::InitDAQCard()
{
  //注册数据采集卡
  m_u16CardNumber = D2K_Register_Card(DAQ_2205, 0);
  //如果失败直接返回false
  if(m_u16CardNumber > 31)
    return false;
  //成功注册数据采集卡,返回true
  return true;
}

void CExample::ReleaseDAQCard()
{
  //释放数据采集卡资源
  D2K_Release_Card(m_u16CardNumber);
}

上述代码涉及了两个关键函数,其函数原型及使用说明如下:

  1. I16 D2K_Register_Card (U16 CardType, U16 card_num)
    • 该函数用于初始化数据采集卡的软硬件,必须在对数据采集卡进行任何操作之前调用。
    • CardType为需要打开的数据采集卡类型,DAQ-2200系列可以采用以下宏定义:DAQ_2204、DAQ_2205、DAQ_2206。
    • card_num用于区分PCI插槽上同型号的数据采集卡,该值取决于数据采集卡在主板上占用的PCI插槽顺序,第一个插槽上的数据采集卡该值取为0,第二个插槽上的数据采集卡该值取为1,以此类推。
    • 返回值为初始化完成的数据采集卡编号,范围0至31。如果发生错误,则返回表示错误代码的一个负值。
  2. I16 D2K_Release_Card (U16 CardNumber)
    • 该函数用于关闭数据采集卡,并释放相关资源,在数据采集卡使用完成后、程序运行结束前必须调用此函数释放数据采集卡资源。
    • CardNumber为执行关闭操作的数据采集卡编号。
    • 返回值为执行结果,取值必定为0即NoError表示执行成功。

2、模拟量的采集

可以采用程序控制I/O(即单次采集)方式读取模拟量,在此示例单次采集通道12的电压值。

U16 u16Channel = 12;
F64 f64Volt;
D2K_AI_VReadChannel(m_u16CardNumber, u16Channel, &f64Volt);

也可以采用DMA(即批量采集)方式读取模拟量,在此示例连续采集通道13、14、15的电压值。

#define CHANNEL_COUNT 3    //定义需要采集的通道数量
#define LENGTH 1000        //定义每个通道的采样数量

//建立数据采集缓冲区
U16 pu16Value[LENGTH * CHANNEL_COUNT] = {0};
//缓冲区编号
U16 u16ValueID = -1;
//清空可能已经存在的缓冲区配置信息
D2K_AI_ContBufferReset(m_u16CardNumber);
//配置缓冲区
D2K_AI_ContBufferSetup(m_u16CardNumber, pu16Value, LENGTH * CHANNEL_COUNT, &u16ValueID);
//生成采集通道编号
U16 pu16Channels[CHANNEL_COUNT] = {13, 14, 15};
//进行多通道连续采集
D2K_AI_ContReadMultiChannels(m_u16CardNumber, CHANNEL_COUNT, pu16Channels, u16ValueID, LENGTH, 2000, 160, SYNCH_OP);
//真实电压值存储区
F64 pf64Voltage[LENGTH * CHANNEL_COUNT] = {0.0};
//转换成采集电压值
D2K_AI_ContVScale(m_u16CardNumber, AD_B_10_V, pu16Value, pf64Voltage, LENGTH * CHANNEL_COUNT);

上述代码涉及了五个关键函数,其函数原型及使用说明如下:

  1. I16 D2K_AI_VReadChannel (U16 CardNumber, U16 Channel, F64* Voltage)
    • 该函数用于单次采集指定数据采集卡指定通道的当前电压值,采集完成立即返回。
    • CardNumber为执行采集操作的数据采集卡编号,即D2K_Register_Card函数执行成功返回的值。
    • Channel为需要进行模拟量采集的通道号,范围为0至63共64路。
    • Voltage为采集到的结果,单位为伏特。
    • 返回值为执行结果,值为0即NoError则表示执行成功,否则返回表示错误代码的一个负值。
  2. I16 D2K_AI_ContBufferSetup (U16 CardNumber, void Buffer, U32 ReadCount, U16 BufferId)
    • 该函数用于为数据采集卡配置连续采集缓冲区,可以将已经开辟好的缓冲区绑定到指定的数据采集卡,一张数据采集卡最多绑定两段采集缓冲区。
    • CardNumber为执行绑定操作的数据采集卡编号,即D2K_Register_Card函数执行成功返回的值。
    • Buffer为缓冲区起始地址,缓冲区内每个单位应能存储U16类型的数据。
    • ReadCount为缓冲区长度,即可以容纳的U16类型数据的个数,该值必须为偶数。
    • BufferID为配置好后缓冲区得到的一个编号,该编号即代表了指定数据采集卡的指定采集缓冲区。
    • 返回值为执行结果,值为0即NoError则表示执行成功,否则返回表示错误代码的一个负值。
  3. I16 D2K_AI_ContBufferReset (U16 CardNumber)
    • 该函数用于重置所有的模拟量采集缓冲区,当不再需要采集缓冲区的时候调用该函数。
    • CardNumber为执行重置操作的数据采集卡编号,即D2K_Register_Card函数执行成功返回的值。
    • 返回值为执行结果,值为0即NoError则表示执行成功,否则返回表示错误代码的一个负值。
  4. I16 D2K_AI_ContReadMultiChannels (U16 CardNumber, U16 NumChans, U16* Chans, U16 BufId, U32 ReadScans, U32 ScanIntrv, U32 SampIntrv, U16 SyncMode)
    • 该函数用于按照指定速率对指定的多路模拟量输入通道进行指定采样数的连续电压采集,该函数可以配置为立即返回(异步采集)或采集完成后再返回(同步采集)。
    • CardNumber为执行连续采集操作的数据采集卡编号,即D2K_Register_Card函数执行成功返回的值。
    • NumChans为需要采集的模拟量输入通道的数量,范围为1至512个通道。
    • Chans为存储通道编号的数组的首地址,该数组中按顺序存储需要采集的模拟量输入通道的编号,范围为0至63路。
    • BufId为已经配置好的缓冲区的编号,即执行D2K_AI_ContBufferSetup函数成功后获取的缓冲区编号,缓冲区长度必须不小于每个通道的采样数与通道总数的乘积。
    • ReadScans为每个通道的采样总数,范围为2至16777215个采样数。
    • ScanIntrv为每次采样之间的间隔时间,该值指定的是时钟周期个数,采集卡内部时钟为40MHz,该值的范围为14(DAQ-2204)或80(DAQ-2205)或160(DAQ-2206)至16777215个时钟周期数。
    • SampIntrv为每次采样中各通道之间的采样间隔时间,该值同样指定的是时钟周期个数,范围为14(DAQ-2204)或80(DAQ-2205)或160(DAQ-2206)至65535个时钟周期数。
    • SyncMode为同步或异步采样的标识号,取值SYNCH_OP表示进行同步数据采集,函数执行将在采样全部完成后返回,取值ASYNCH_OP表示进行异步数据采集,函数执行后立即返回。
    • 返回值为执行结果,值为0即NoError则表示执行成功,否则返回表示错误代码的一个负值。
  5. I16 D2K_AI_ContVScale (U16 CardNumber, U16 AdRange, void readingArray, F64 voltageArray, I32 count)
    • 该函数用于将连续采集所得到的一系列二进制数据值转换为真实的电压值。
    • CardNumber为执行连续采集操作的数据采集卡编号,即D2K_Register_Card函数执行成功返回的值。
    • AdRange为连续采集时模拟量通道配置的采样电压范围,默认的采样电压范围为±10V,一般未配置过采样电压范围的话该值取默认的AD_B_10_V即可。
    • readingArray为存储原始二进制数据值的数组的首地址。
    • voltageArray为存储转换得到的真实电压值的数组的首地址。
    • count为需要转换的数据值的总个数。
    • 返回值为执行结果,值为0即NoError则表示执行成功,否则返回表示错误代码的一个负值。

3、模拟量的输出

可以采用程序控制I/O(即单次输出)方式输出模拟量,在此示例向通道1输出3.3V的电压。

U16 u16Channel = 1;
F64 f64Volt = 3.3;
D2K_AO_VWriteChannel(m_u16CardNumber, u16Channel, f64Volt);

也可以采用DMA(即批量输出)方式输出模拟量,在此示例向通道0、1连续输出5V方波信号。

#define CHANNEL_COUNT 2    //定义输出的通道数量
#define LENGTH 1000        //定义每个通道的输出点数量

//建立输出缓冲区
I16 pi16Signal[LENGTH * CHANNEL_COUNT] = {0};
//转换得到高低电平的二进制编码
I16 i16LowLevel_0, i16HighLevel_0;
I16 i16LowLevel_1, i16HighLevel_1;
D2K_AO_VoltScale(m_nCardNumber, 0, 0.0, &i16LowLevel_0);
D2K_AO_VoltScale(m_nCardNumber, 0, 5.0, &i16HighLevel_0);
D2K_AO_VoltScale(m_nCardNumber, 1, 0.0, &i16LowLevel_1);
D2K_AO_VoltScale(m_nCardNumber, 1, 5.0, &i16HighLevel_1);
//向缓冲区填入方波信号,通道0的方波频率为通道1的2倍
for(int index = 0; index < LENGTH / 2; ++index)
{
  pi16Signal[(index * 2 + 0) * CHANNEL_COUNT] = i16LowLevel_0;
  pi16Signal[(index * 2 + 1) * CHANNEL_COUNT] = i16HighLevel_0;
}
for(int index = 0; index < LENGTH / 4; ++index)
{
  pi16Signal[(index * 4 + 0) * CHANNEL_COUNT + 1] = i16LowLevel_1;
  pi16Signal[(index * 4 + 1) * CHANNEL_COUNT + 1] = i16LowLevel_1;
  pi16Signal[(index * 4 + 2) * CHANNEL_COUNT + 1] = i16HighLevel_1;
  pi16Signal[(index * 4 + 3) * CHANNEL_COUNT + 1] = i16HighLevel_1;
}
//缓冲区编号
U16 u16SignalID = -1;
//清空可能已经存在的缓冲区配置信息
D2K_AO_ContBufferReset(m_u16CardNumber);
//配置缓冲区
D2K_AO_ContBufferSetup(m_u16CardNumber, pu16Signal, LENGTH * CHANNEL_COUNT, &u16SignalID);
//生成输出通道编号
U16 pu16Channels[CHANNEL_COUNT] = {0, 1};
//进行多通道连续输出
D2K_AO_ContWriteMultiChannels(m_u16CardNumber, 2, pu16Channels, u16SignalID, LENGTH, 1, 2000, 1, SYNCH_OP);

上述代码涉及了五个关键函数,其函数原型及使用说明如下:

  1. I16 D2K_AO_VWriteChannel (U16 CardNumber, U16 Channel, F64 Voltage)
    • 该函数用于向指定数据采集卡的指定通道输出指定电压,输出完成立即返回。
    • CardNumber为执行输出操作的数据采集卡编号,即D2K_Register_Card函数执行成功返回的值。
    • Channel为需要进行模拟量输出的通道号,范围为0至1共2路。
    • Voltage为输出电压的值,单位为伏特。
    • 返回值为执行结果,值为0即NoError则表示执行成功,否则返回表示错误代码的一个负值。
  2. I16 D2K_AO_VoltScale (U16 CardNumber, U16 Channel, F64 Voltage, I16* binValue)
    • 该函数用于将一个真实的电压值转换为对应的二进制数据值。
    • CardNumber为执行连续输出操作的数据采集卡编号,即D2K_Register_Card函数执行成功返回的值。
    • Channel为进行数据转换所针对的通道号,范围为0至1共2路,不同通道如果设置的输出电压范围不同,得到的二进制数据值也不同,默认输出范围为±10V。
    • Voltage为等待转换的真实电压的值,单位为伏特。
    • binValue为转换得到的二进制数据值。
    • 返回值为执行结果,值为0即NoError则表示执行成功,否则返回表示错误代码的一个负值。
  3. I16 D2K_AO_ContBufferSetup (U16 CardNumber, void Buffer, U32 WriteCount, U16 BufferId)
    • 该函数用于为数据采集卡配置连续输出缓冲区,可以将已经开辟好的缓冲区绑定到指定的数据采集卡,一张数据采集卡最多绑定两段输出缓冲区。
    • CardNumber为执行绑定操作的数据采集卡编号,即D2K_Register_Card函数执行成功返回的值。
    • Buffer为缓冲区起始地址,缓冲区内每个单位应能存储U16类型的数据。
    • WriteCount为缓冲区长度,即可以容纳的U16类型数据的个数,该值必须为偶数。
    • BufferID为配置好后缓冲区得到的一个编号,该编号即代表了指定数据采集卡的指定输出缓冲区。
    • 返回值为执行结果,值为0即NoError则表示执行成功,否则返回表示错误代码的一个负值。
  4. I16 D2K_AO_ContBufferReset (U16 CardNumber)
    • 该函数用于重置所有的模拟量输出缓冲区,当不再需要输出缓冲区的时候调用该函数。
    • CardNumber为执行重置操作的数据采集卡编号,即D2K_Register_Card函数执行成功返回的值。
    • 返回值为执行结果,值为0即NoError则表示执行成功,否则返回表示错误代码的一个负值。
  5. I16 D2K_AO_ContWriteMultiChannels (U16 CardNumber, U16 NumChans, U16* Chans, U16 BufId, U32 UpdateCount, U32 Iterations, U32 CHUI, U16 definite, U16 SyncMode)
    • 该函数用于按照指定速率向指定的多路模拟量输出通道进行指定数量的连续电压输出,该函数可以配置为立即返回(异步输出)或输出完成后再返回(同步输出)。
    • CardNumber为执行连续输出操作的数据采集卡编号,即D2K_Register_Card函数执行成功返回的值。
    • NumChans为需要执行输出操作的模拟量输出通道的数量,范围为1至2个通道。
    • Chans为存储通道编号的数组的首地址,该数组中按顺序存储需要执行输出操作的模拟量输出通道的编号,范围为0至1路。
    • BufId为已经配置好的缓冲区的编号,即执行D2K_AO_ContBufferSetup函数成功后获取的缓冲区编号,缓冲区长度必须不小于每个通道的输出值数量与通道总数的乘积。
    • UpdateCount为每个通道的输出值数量。
    • Iterations为缓冲区的重复输出次数,该值不能为0,并且如果采用同步输出方式,该值只能取1。
    • CHUI为每次输出之间的间隔时间,该值指定的是时钟周期个数,采集卡内部时钟为40MHz,该值的范围为40至16777215个时钟周期数。
    • definite为是否无限输出的标识号,取值为0表示将缓冲区内容无限重复输出来形成波形,取值为1表示将缓冲区内容按照Iterations指定的次数重复输出。
    • SyncMode为同步或异步输出的标识号,取值SYNCH_OP表示进行同步输出,函数执行将在输出全部完成后返回,取值ASYNCH_OP表示进行异步输出,函数执行后立即返回。
    • 返回值为执行结果,值为0即NoError则表示执行成功,否则返回表示错误代码的一个负值。

4、数字量的输入与输出

数字量输出只可以采用程序控制I/O(即单次输出)方式进行,在此示例向端口A的2号线输出高电平、向端口B输出5AH、读取端口A的5号线的当前输出值、读取端口C的当前输出值。

//配置数字量通道为输出通道
D2K_DIO_PortConfig(m_u16CardNumber, Channel_P1A, OUTPUT_PORT);
D2K_DIO_PortConfig(m_u16CardNumber, Channel_P1B, OUTPUT_PORT);
D2K_DIO_PortConfig(m_u16CardNumber, Channel_P1C, OUTPUT_PORT);

//PA_2输出高电平
D2K_DO_WriteLine(m_u16CardNumber, Channel_P1A, 2, 1);
//PB输出5AH
D2K_DO_WritePort(m_u16CardNumber, Channel_P1B, 0x5A);
//读取PA_5的输出电平
U16 u16StatePA5 = 0;
D2K_DO_ReadLine(m_u16CardNumber, Channel_P1A, 5, &u16StatePA5);
//读取PC的输出值
U32 u32ValuePC = 0;
D2K_DO_ReadPort(m_u16CardNumber, Channel_P1C, &u32ValuePC);

数字量输入也只可以采用程序控制I/O(即单次输入)方式进行,在此示例读取端口A的6号线上的电平、读取端口B的输入值。

//配置数字量通道为输入通道
D2K_DIO_PortConfig(m_u16CardNumber, Channel_P1A, INPUT_PORT);
D2K_DIO_PortConfig(m_u16CardNumber, Channel_P1B, INPUT_PORT);
D2K_DIO_PortConfig(m_u16CardNumber, Channel_P1C, INPUT_PORT);

//读取PA_6的电平
U16 u16StatePA6 = 0;
D2K_DI_ReadLine(m_u16CardNumber, Channel_P1A, 6, &u16StatePA6);
//读取PB的输入值
U32 u32ValuePB = 0;
D2K_DI_ReadPort(m_u16CardNumber, Channel_P1B, &u32ValuePB);

上述代码涉及了七个关键函数,其函数原型及使用说明如下:

  1. I16 D2K_DIO_PortConfig (U16 CardNumber, U16 Port, U16 Direction)
    • 该函数用于设置数字量通讯口工作在输入模式还是输出模式。
    • CardNumber为执行配置操作的数据采集卡编号,即D2K_Register_Card函数执行成功返回的值。
    • Port为数字量通讯端口号,取值为Channel_P1A、Channel_P1B、Channel_P1C分别表示端口A、B、C,取值Channel_P1CL、Channel_P1CH分别表示端口C的低4位和高4位。
    • Direction为指定端口的输入输出方向,取值为INPUT_PORT则配置成输入端口,取值为OUTPUT_PORT则配置成输出端口。
    • 返回值为执行结果,值为0即NoError则表示执行成功,否则返回表示错误代码的一个负值。
  2. I16 D2K_DO_WriteLine (U16 CardNumber, U16 Port, U16 Line, U16 State)
    • 该函数用于向数据采集卡的指定数字量输出通道的指定线路输出指定的电平状态。
    • CardNumber为执行输出操作的数据采集卡编号,即D2K_Register_Card函数执行成功返回的值。
    • Port为数字量通讯端口号,取值为Channel_P1A、Channel_P1B、Channel_P1C分别表示端口A、B、C,取值Channel_P1CL、Channel_P1CH分别表示端口C的低4位和高4位。
    • Line为数字量通讯端口中的指定线路,范围为0至7,即每个端口共8条线路。
    • State为要输出的电平状态,取值0表示输出低电平,取值1表示输出高电平。
    • 返回值为执行结果,值为0即NoError则表示执行成功,否则返回表示错误代码的一个负值。
  3. I16 D2K_DO_WritePort (U16 CardNumber, U16 Port, U32 Value)
    • 该函数用于向数据采集卡的指定数字量输出通道输出指定数值。
    • CardNumber为执行输出操作的数据采集卡编号,即D2K_Register_Card函数执行成功返回的值。
    • Port为数字量通讯端口号,取值为Channel_P1A、Channel_P1B、Channel_P1C分别表示端口A、B、C,取值Channel_P1CL、Channel_P1CH分别表示端口C的低4位和高4位。
    • Value为要输出的数值,该值为一个8位的数据,即范围为0至255。
    • 返回值为执行结果,值为0即NoError则表示执行成功,否则返回表示错误代码的一个负值。
  4. I16 D2K_DO_ReadLine (U16 CardNumber, U16 Port, U16 Line, U16* State)
    • 该函数用于读取数据采集卡的指定数字量输出通道的指定线路当前的输出电平状态。
    • CardNumber为执行读取操作的数据采集卡编号,即D2K_Register_Card函数执行成功返回的值。
    • Port为数字量通讯端口号,取值为Channel_P1A、Channel_P1B、Channel_P1C分别表示端口A、B、C,取值Channel_P1CL、Channel_P1CH分别表示端口C的低4位和高4位。
    • Line为数字量通讯端口中的指定线路,范围为0至7,即每个端口共8条线路。
    • State为读取到的当前输出的电平状态,取值0表示输出为低电平,取值1表示输出为高电平。
    • 返回值为执行结果,值为0即NoError则表示执行成功,否则返回表示错误代码的一个负值。
  5. I16 D2K_DO_ReadPort (U16 CardNumber, U16 Port, U32* Value)
    • 该函数用于读取数据采集卡的指定数字量输出通道当前的输出数值。
    • CardNumber为执行读取操作的数据采集卡编号,即D2K_Register_Card函数执行成功返回的值。
    • Port为数字量通讯端口号,取值为Channel_P1A、Channel_P1B、Channel_P1C分别表示端口A、B、C,取值Channel_P1CL、Channel_P1CH分别表示端口C的低4位和高4位。
    • Value为读取到的当前输出的数值,该值为一个8位的数据,即范围为0至255。
    • 返回值为执行结果,值为0即NoError则表示执行成功,否则返回表示错误代码的一个负值。
  6. I16 D2K_DI_ReadLine (U16 CardNumber, U16 Port, U16 Line, U16* State)
    • 该函数用于读取数据采集卡的指定数字量输入通道当前的输入电平状态。
    • CardNumber为执行输入操作的数据采集卡编号,即D2K_Register_Card函数执行成功返回的值。
    • Port为数字量通讯端口号,取值为Channel_P1A、Channel_P1B、Channel_P1C分别表示端口A、B、C,取值Channel_P1CL、Channel_P1CH分别表示端口C的低4位和高4位。
    • Line为数字量通讯端口中的指定线路,范围为0至7,即每个端口共8条线路。
    • State为读取到的当前输入的电平状态,取值0表示输入为低电平,取值1表示输入为高电平。
    • 返回值为执行结果,值为0即NoError则表示执行成功,否则返回表示错误代码的一个负值。
  7. I16 D2K_DI_ReadPort (I16 CardNumber, U16 Port, U32* Value)
    • 该函数用于读取数据采集卡的指定数字量输入通道当前的输入数值。
    • CardNumber为执行输入操作的数据采集卡编号,即D2K_Register_Card函数执行成功返回的值。
    • Port为数字量通讯端口号,取值为Channel_P1A、Channel_P1B、Channel_P1C分别表示端口A、B、C,取值Channel_P1CL、Channel_P1CH分别表示端口C的低4位和高4位。
    • Value为读取到的当前输入的数值,该值为一个8位的数据,即范围为0至255。
    • 返回值为执行结果,值为0即NoError则表示执行成功,否则返回表示错误代码的一个负值。

说明

本文只是罗列了作者目前经常使用到的DAQ-2200系列数据采集卡的操作函数,更多操作方法及编程说明请参考前文所提到的API手册和官方示例代码。

转载请注明出处。

发表评论