www.pudn.com > LabWindowsCVI.rar > sample11_ao.c


#include  
#include  
void main(void) 
{ 
    //定义变量 
    int i; 
 
    double pdBuffer[100] = {0};                    //输出数据 
 
    short iStatus = 0;                             //函数返回值 
    short iDevice = 1;                             //设备ID号     
    short iNumChans = 1;                         //WFM组中包含的通道数    
    short piChanVect[1] = {0};                     // WFM组的通道向量 
    short iGroup = 1;                              //WFM组号 
 
    short iChan = 0;                               //通道号 
    unsigned long ulCount = 100;                    //输出数据长度 
    short piBuffer[100] = {0};                       //输出的short型数据 
     
    unsigned long ulIterations = 1;                   //循环模拟输出次数 
    short iFIFOMode = 0;                          //模拟输出FIFO模式 
      
    double dUpdateRate = 1000.0;                   //输出速率 
    short iUnits = 0;                               //输出速率单位 
    short iUpdateTB = 0;                           //时间单位 
    unsigned long ulUpdateInt = 0;                   //时间间隔    
 
    short iWhichClock = 0;                          //时钟选择      
    short iDelayMode = 0;                           //延迟模式 
 
    short iWFMstopped = 0;                         //模拟输出状态 
    unsigned long ulItersDone = 0;                    //已完成的模拟输出循环数 
    unsigned long ulPtsDone = 0;                     // 当前循环输出数据长度  
   
    //产生数据 
    for(i=0;i<5000;i++) 
       pdBuffer[i]=15*sin(i*3.1415926/500); 
       
    //指定一个或多个模拟输出通道为波形产生组 
    iStatus = WFM_Group_Setup(iDevice, iNumChans, piChanVect,iGroup); 
 
    //将采集结果从double型转换成short型 
    iStatus = WFM_Scale(iDevice, iChan, ulCount, 1.0, pdBuffer, piBuffer); 
 
    //为模拟输出通道指定输出的整形数组 
    iStatus = WFM_Load(iDevice, iNumChans, piChanVect, piBuffer, 
         ulCount, ulIterations, iFIFOMode); 
 
    //由更新频率获得更新间隔时间及其单位 
    iStatus = WFM_Rate(dUpdateRate, iUnits, &iUpdateTB,&ulUpdateInt); 
 
    //为模拟输出通道指定更新频率或者延迟始终频率 
    iStatus = WFM_ClockRate(iDevice, iGroup, iWhichClock,  
                 iUpdateTB, ulUpdateInt, iDelayMode); 
 
    //向波形产生组中的模拟输出通道传输数据 
    iStatus = WFM_Group_Control(iDevice, iGroup, 1); 
 
    while ((iWFMstopped == 0) && (iStatus == 0)) { 
         //检查模拟输出是否完毕 
          iStatus = WFM_Check(iDevice, iChan, &iWFMstopped, 
                    &ulItersDone, &ulPtsDone); 
       } 
 
    //终止向波形产生组中的模拟输出通道传输数据 
    iStatus = WFM_Group_Control(iDevice, iGroup, 0); 
 
    //向模拟输出通道输出0电压 
    iStatus = AO_VWrite(iDevice, iChan, 0.0); 
}