下面的示例程序演示(使用 C++)如何為正交編碼器輸入配置和清除USB-QUAD08通道。要使用 cbCClear 函數(shù),您必須使用 cbCIn32 異步讀取計數(shù)器輸入。
在本文的底部,您將找到一個包含 Visual Studio 2008 項目的 Zip 文件。
// VC_2008_USB_QUAD08_AsynchronousReadClear.cpp : 定義控制臺應用程序的入口點。
//
#include "stdafx.h"
/* 包含文件 */
#include <windows.h>
#include <stdio.h>
#include <conio.h>
#include <string.h>
#include "cbw.h"
#define MAXNUMDEVS 100
無效主()
{
/* 變量聲明 */
int i=0;
int ULStat = 0;
int numberOfDevices = MAXNUMDEVS;
DaqDeviceDescriptor 庫存[MAXNUMDEVS];
DaqDeviceDescriptor DeviceDescriptor;
int BoardNum = -1;
float Rev = (float)CURRENTREVNUM;
ULStat = cbDeclareRevision(&Rev);
cbErrHandling(打印,停止);
printf ("后臺模式下cbConfigScan()的演示\n\n");
//忽略 InstaCal 設備發(fā)現(xiàn)
cbIgnoreInstaCal();
//定位USB設備
ULStat = cbGetDaqDeviceInventory(USB_IFC,庫存,&numberOfDevices);
for( i = 0; i < numberOfDevices; i++)
{
DeviceDescriptor = 庫存[i];
// USB-QUAD08 的產品 ID = 0xCA
//產品 ID 可以在位于的 ULProps.txt 中找到
// C:\Program Files (x86)\Measurement Computing\DAQ
if(DeviceDescriptor.ProductID == 0xCA)
{
BoardNum = i;
ULStat = cbCreateDaqDevice(BoardNum, DeviceDescriptor);
printf("設備名稱:%s\n", DeviceDescriptor.ProductName);
休息;
if(BoardNum < 0)
{
printf("找不到USB設備...按任意鍵退出\n");
獲取();
返回;
}
ULStat = cbCConfigScan(BoardNum,
0,
ENCODER|ENCODER_MODE_X1|ENCODER_MODE_BIT_32,
CTR_DEBOUNCE500ns,
CTR_TRIGGER_AFTER_STABLE,
CTR_RISING_EDGE,
CTR_TICK208PT3ns,
0);
如果(ULStat != 0)
printf("錯誤代碼 %d\n",ULStat);
無符號長編碼器值;
int clearCounter = 0;
while(!_kbhit())
{
//此循環(huán)讀取緩沖區(qū)的下半部分,然后連續(xù)讀取上半部分。
// 它使用 NextReadUpper 標志,以便緩沖區(qū)的每一半都被讀取一次
ULStat = cbCIn32(BoardNum,0,&encoderValue);
printf("%d\n",encoderValue);
睡眠(100);
//每10秒測試一次清除計數(shù)器輸入
清除計數(shù)器++;
如果(清除計數(shù)器 >100)
{
清除計數(shù)器 = 0;
cbCClear(BoardNum,0);
}
}
cbReleaseDaqDevice(BoardNum);
printf("完成...按任意鍵退出\n");
獲取();
}