为了使用3M赫兹的模拟[1]输入来实现数字读取,执行下列步骤:
1. 设置一个有一个条目的信道增益队列;
2. 选择信道0;
3. 将增益码属性设置为CHAN_SEDIFF_DIG(8192)
4. 把接收到的数据按16位板卡[2]上的16位数字值或12位板卡上的12位数字值做处理,而不是按照电压处理。
实现这一过程的代码被列在下面:
' For boards having unique, product-specific attributes
Const CHAN_OEM_SHIFT As Integer = (-2) ^ 15
Const CHAN_OEM_MASK As Integer = (1 * CHAN_OEM_SHIFT)
' use std attribs
Const CHAN_OEM_DEFAULT As Integer = (0 * CHAN_OEM_SHIFT)
' use OEM attribs
Const CHAN_OEM_FLAG As Integer = (1 * CHAN_OEM_SHIFT)
' For boards supporting programmable single-ended vs. differential inputs
Const CHAN_SEDIFF_SHIFT As Integer = 2 ^ 13
Const CHAN_SEDIFF_MASK As Integer = (3 * CHAN_SEDIFF_SHIFT)
' use static config
Const CHAN_SEDIFF_DEFAULT As Integer = (0 * CHAN_SEDIFF_SHIFT)
' digital input chan
Const CHAN_SEDIFF_DIG As Integer = (1 * CHAN_SEDIFF_SHIFT)
. . .
DriverLINXSR1.Sel_chan_N = 1
DriverLINXSR1.Sel_chan_format = DL_tNATIVE
DriverLINXSR1.Sel_chan_list(0) = 0
DriverLINXSR1.Sel_chan_gainCodeList(0) = CHAN_SEDIFF_DIG
这些代码设置服务请求的单个属性。
第一个属性告诉DriverLINX,在信道增益队列(上面的步骤1)中,只需要一个信道。
第二个属性(Sel_chan_list)告诉DriverLINX如何将数据存在缓冲区里。DL_tNATIVE表示按照硬件给出的格式存储。
第三个属性为信道增益队列中的第一项内容选择信道。在这种情况下,这个值必须是0(步骤2);
第四个属性设置数字读取(步骤3). 在代码的其它地方,这个数字值被逐位处理。
可能引起混乱的是,CHAN_OEM_FLAG被设置为(-2)^15,而不是2^15,这好像有更多的含义。答案在VisualBasic中。VisualBasic的整数总是有符号的,因此位15是符号位,用户取或的值必须是-32768,不是32768(它将会引起溢出错误)。
记住,对一个真正的应用程序来说,用户可能除了数字数据外还想获得模拟数据。这个应用被设计来展示实现模拟输入/数字输入功能的最简单方式,因此它不执行模拟转换[3]。这个例子可以很容易被修改以向列表中增加更多的信道和增益。