📄 unit1.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 + -