⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 unit1.cpp

📁 北京双诺公司的AC6112数据采集卡的开发源代码
💻 CPP
字号:
//---------------------------------------------------------------------------

#include <vcl.h>
#pragma hdrstop

#include "Unit1.h"
#include "stdio.h"
#include "conio.h"


//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
        : TForm(Owner)
{
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button1Click(TObject *Sender)
{


//------ Version -----------------
         char str1[1000];
         AC6112_Version(hDevice, str1);
         Form1->Caption =str1;



//------- AD -------------------

//---- 1简单查询法,可以在小数据量快速采集的情况下使用 -------- OK ----------

	//当用户希望快速采样小量数据(比如希望采集一个数据),可以通过判断非空标志进行采集
	//当启动AD采样后,发现AC6112 FIFO非空,说明至少采集了一个数据,即可读取,不必等待FIFO半满后才读取

		buf[0].Irq_Enable = 0;//禁止AC6112中断工作
		buf[0].kFifo_Notify_Length = 100000;//软件FIFO通知门限为100000采样点,此时该值无效
		buf[0].start_end_chn = 0;//起止通道为0
		buf[0].ad_mode = 0;//AD采样模式为0
		buf[0].da_mode = 0;//DA输出模式为0
		buf[0].ad_timer = 20;//AD采样时间定时器为10
		buf[0].Event_Enable = 0;//禁止使用事件通知
		buf[0].Event = NULL;//空事件句柄
		buf[0].EventFifoFull = NULL;//空事件句柄

		AC6112_INI(hDevice, buf);// 设置相关参数

		AC6112_RUN(hDevice);//启动AD采样

		do{
 		AC6112_STATE(hDevice,&StateOf6112);//读AC6112状态(状态位的含义,请参考说明书)
	       		if((StateOf6112.HardwareState&4) == 0){//是否溢出
                               sprintf(str1,"AD Overflow");
                              Canvas->TextOutA(200,110,str1);
			}
		}while ((StateOf6112.HardwareState&1) != 1);//可根据FIFO状态进行选择(如,FIFO非空,FIFO半满,FIFO溢出)
         AC6112_READ_HARD_FIFO(hDevice, FifoHard,1);

          sprintf(str1,"AD 数据:%d ",FifoHard[0]);
              Canvas->TextOutA(200,110,str1);

		AC6112_STOP(hDevice);  //溢出后停止采样

//-------------------------------------------------------------------
}

//---------------------------------------------------------------------------

void __fastcall TForm1::FormCreate(TObject *Sender)
{
        hDll=LoadLibrary("ac6112.dll");
       if(hDll!=NULL)Canvas->TextOutA(0,0,"dll load ok!");

       (FARPROC &)AC6112_CreateDevice=GetProcAddress(hDll,"AC6112_CreateDevice");
       (FARPROC &)AC6112_CloseDevice=GetProcAddress(hDll,"AC6112_CloseDevice");
       (FARPROC &)AC6112_Version=GetProcAddress(hDll,"AC6112_Version");

        (FARPROC &)AC6112_INI=GetProcAddress(hDll,"AC6112_INI");
        (FARPROC &)AC6112_AD_MODE=GetProcAddress(hDll,"AC6112_AD_MODE");
        (FARPROC &)AC6112_AD_TIMER=GetProcAddress(hDll,"AC6112_AD_TIMER");
        (FARPROC &)AC6112_STATE=GetProcAddress(hDll,"AC6112_STATE");
        (FARPROC &)AC6112_RUN=GetProcAddress(hDll,"AC6112_RUN");
        (FARPROC &)AC6112_STOP=GetProcAddress(hDll,"AC6112_STOP");
        (FARPROC &)AC6112_READ_KFIFO=GetProcAddress(hDll,"AC6112_READ_KFIFO");
        (FARPROC &)AC6112_READ_HARD_FIFO=GetProcAddress(hDll,"AC6112_READ_HARD_FIFO");


        (FARPROC &)AC6112_IO_MODE=GetProcAddress(hDll,"AC6112_IO_MODE");
        (FARPROC &)AC6112_DI=GetProcAddress(hDll,"AC6112_DI");
        (FARPROC &)AC6112_DO=GetProcAddress(hDll,"AC6112_DO");

        (FARPROC &)AC6112_RCOUNTER=GetProcAddress(hDll,"AC6112_RCOUNTER");
        (FARPROC &)AC6112_WCOUNTER=GetProcAddress(hDll,"AC6112_WCOUNTER");
        (FARPROC &)AC6112_RTIMER=GetProcAddress(hDll,"AC6112_RTIMER");


        (FARPROC &)AC6112_DA0=GetProcAddress(hDll,"AC6112_DA0");
        (FARPROC &)AC6112_DA1=GetProcAddress(hDll,"AC6112_DA1");
        (FARPROC &)AC6112_DA_MODE=GetProcAddress(hDll,"AC6112_DA_MODE");

        hDevice=AC6112_CreateDevice(0, &ErrorOf6112);
        if(hDevice != NULL){
                Canvas->TextOutA (300,200,"Driver OK");
        }

}
//---------------------------------------------------------------------------

void __fastcall TForm1::FormClose(TObject *Sender, TCloseAction &Action)
{
        AC6112_STOP(hDevice);
     if(TForm1::Timer1->Enabled == true) TForm1::Timer1->Enabled =false;
     if(hDevice != NULL)AC6112_CloseDevice(hDevice);
     if(hDll != NULL)   FreeLibrary(hDll);
}
//---------------------------------------------------------------------------

//---------------------
void __fastcall TForm1::Button2Click(TObject *Sender)
{
//-------	2中断+查询方法---适合大数据量采集,利用事件以外的方法	--OK ------------

		buf[0].Irq_Enable = 1;//允许AC6112中断工作
		buf[0].kFifo_Notify_Length = 100000;//软件FIFO通知门限为100000采样点,事件无效时该值无效
		buf[0].start_end_chn = 7<<5;//起止通道为0
		buf[0].ad_mode = 0;//AD采样模式为0
		buf[0].da_mode = 0;//DA输出模式为0
		buf[0].ad_timer = 20;//AD采样时间定时器为10
		buf[0].Event_Enable = 0;//禁止事件通知
		buf[0].Event = NULL;//空事件句柄
		buf[0].EventFifoFull = NULL;//空事件句柄

		AC6112_INI(hDevice, buf);// 设置相关参数

                AC6112_RUN(hDevice);//启动AD
                TForm1::Timer1->Interval =100;
                TForm1::Timer1->Enabled = TRUE;



}
//---------------------------------------------------------------------------

void __fastcall TForm1::Timer1Timer(TObject *Sender)
{
        char tempstr[1000];
        int i;
	AC6112_STATE(hDevice, &StateOf6112);//获得AC6112硬件状态,软件FIFO状态

	  if(StateOf6112.SoftFifoItemForRead >=100000){//判断软FIFO内的采样数据到100000
		AC6112_READ_KFIFO(hDevice, kBuffer, 100000);//从软FIFO中取采样数据,长度为100000个采样点
		//显示AC6112硬件FIFO状态,以及软件FIFO的状态

	sprintf(tempstr,"Ac6112fifo state=%X\nKFifo Capacity=%d\nKFifo for read=%d\nKFifo for write=%d\n",
		StateOf6112.HardwareState,
		StateOf6112.SoftFifoCapacity,
		StateOf6112.SoftFifoItemForRead ,
		StateOf6112.SoftFifoItemForWrite );

        Label3->Caption =tempstr;


sprintf(tempstr, "%5d %5d %5d %5d %5d %5d %5d %5d", kBuffer[0],kBuffer[1],kBuffer[2],kBuffer[3],kBuffer[4],kBuffer[5],kBuffer[6],kBuffer[7]);
              Label2->Caption =tempstr;
        }

}
//---------------------------------------------------------------------------


void __fastcall TForm1::Button6Click(TObject *Sender)
{
//------- DA --------------
      AC6112_DA_MODE( hDevice, 0);
      AC6112_DA0(hDevice, 0x8000);
      AC6112_DA1(hDevice, 0xfff0);
}
//---------------------------------------------------------------------------

void __fastcall TForm1::Button4Click(TObject *Sender)
{
char str1[100];
//------ Digital IO -------------
         unsigned long di_data;
	 AC6112_IO_MODE(hDevice, 1);//设置IO模式
	 AC6112_DO(hDevice, 0x6645);  //数字量输出
         AC6112_DI(hDevice, &di_data);
      sprintf(str1,"IO口数据:%X",di_data);
      Canvas->TextOutA(0,110,str1);

}
//---------------------------------------------------------------------------



void __fastcall TForm1::Button5Click(TObject *Sender)
{
 //------- Counter and timer ------------
unsigned long counter_data;
unsigned long timer_data;
        AC6112_WCOUNTER(hDevice, 20000);
	AC6112_RCOUNTER(hDevice, &counter_data);
	AC6112_RTIMER(hDevice, &timer_data);
}
//---------------------------------------------------------------------------



⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -