📄 acquirewaveyy1.c
字号:
#include "AcquireWaveYY1.h"
#include <cvirte.h>
#include <userint.h>
#include <utility.h>
#include <formatio.h>
#include <ansi_c.h>
#include "Dask.h"
#define CardNumber 0
#define LastADChan 1
#define ADChanCount 2
#define ScanCount 100
#define Maxstr 65536
//#define SampleRate 8000.0000
//variables definition
F32 SampleRate;//采样速率
I16 cardID = -1;
I16 err=0;
U8 HalfReady = 0,fstop=0;
U32 AccessCnt = 0;
U32 MemSize = 0;
U16 InBuf[ScanCount*10]; //AI data buffer,unsigned short
char *Date,*Time;
static int panel;
static int panelHandle;
static double Y[ScanCount* ADChanCount ]={0};
static double Y0[ScanCount]={0},Y1[ScanCount]={0};
//static double Y2[ScanCount]={0},Y3[ScanCount]={0};
//static double Y4[ScanCount]={0},Y5[ScanCount]={0};
//static double Y6[ScanCount]={0},Y7[ScanCount]={0};
int main (int argc, char *argv[])
{
if (InitCVIRTE (0, argv, 0) == 0)
return -1; /* out of memory */
if ((panel = LoadPanel (0, "AcquireWaveYY1.uir", PANEL)) < 0)
return -1;
SetCtrlAttribute (panel,PANEL_GRAPH_0, ATTR_DATA_MODE, VAL_DISCARD);
DisplayPanel (panel);
RunUserInterface ();
DiscardPanel (panel);
return 0;
Date=DateStr();
Time=TimeStr();
SetCtrlVal(panelHandle,PANEL_Time,Time);
SetCtrlVal(panelHandle,PANEL_Date,Date);
}
int CVICALLBACK AcquireCallback (int panel, int control, int event,
void *callbackData, int eventData1, int eventData2)
{
switch (event)
{int val;
case EVENT_COMMIT:
GetCtrlVal (panel, PANEL_BINARYSWITCH, &val);
if(val) {
GetCtrlVal (panel,PANEL_SAMPLERATE, &SampleRate); //获得采样速率
cardID = Register_Card(PCI_9112, CardNumber);
if (cardID<0)
{MessagePopup ("message", "Register_Card fail!") ;
break; }
err = AI_InitialMemoryAllocated(cardID,&MemSize);
if (err!=NoError)
{MessagePopup ("message", "Allocate memory fail!");
break; }
if (MemSize*1024 < ScanCount*ADChanCount*sizeof(U16) ) {
// MessagePopup ("hint", "Memory Allocated Fail.");
break;
//available memory size for analog input in the device driver
//is smaller than the data size specified!!
//ToDo : do something here
}
err = AI_AsyncDblBufferMode(cardID, 1);//双缓冲
if (err!=NoError)
{MessagePopup ("message", "AI_DblBufferMode fail!");
break; }
err=AI_9112_Config(cardID, TRIG_INT_PACER);
if (err!=NoError)
{MessagePopup ("message", "AI_9112_Config fail!");
break; }
err=AI_ContScanChannels (cardID, LastADChan, AD_B_10_V, InBuf, ScanCount*ADChanCount, SampleRate, ASYNCH_OP);
if (err!=NoError)
{MessagePopup ("message", "AI_ContScanChannels fail!");
break; }
SetCtrlAttribute (panel, PANEL_SAMPLETIMER, ATTR_ENABLED,val);
//MessagePopup ("hint", "Memory Allocated Fail.");
//SetCtrlAttribute (panel, PANEL_SAMPLETIMER, ATTR_ENABLED,1);
}
else
{
SetCtrlAttribute (panel,PANEL_SAMPLETIMER, ATTR_ENABLED, val);
Release_Card(cardID);
AI_AsyncClear(cardID, &AccessCnt);
}
break;
}
return 0;
}
int CVICALLBACK SaveCallback (int panel, int control, int event,
void *callbackData, int eventData1, int eventData2)
{ int k;
char path[MAX_PATHNAME_LEN];
char *Date,*Time;
char *string={"\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"};
char *n=" ";
char *m=".dat";
char string1[30];
switch (event)
{
case EVENT_COMMIT:
//etCtrlAttribute (panel, PANEL_SAMPLETIMER, ATTR_ENABLED, 0);
Date=DateStr();
Time=TimeStr();
strcat(string,Date) ;
strcat(string,n);
strcat(string,Time);
strcat(string,m);
for (k=0; *string!='\0'; string++,k++)
{ if(*string!=':')
string1[k]=*string;
else
string1[k]='_';
}
string1[k]='\0';
FileSelectPopup ("The data acquired",string1, "*.dat", "Save data to file", VAL_SAVE_BUTTON, 0, 1,
1, 0, path);
ArrayToFile (path, Y, VAL_DOUBLE, ScanCount*ADChanCount, 1, VAL_GROUPS_TOGETHER, VAL_GROUPS_AS_COLUMNS,
VAL_CONST_WIDTH, 10, VAL_ASCII, VAL_TRUNCATE);
break;
}
return 0;
}
int CVICALLBACK SAMPLETIMER (int panel, int control, int event,
void *callbackData, int eventData1, int eventData2)
{
switch (event)
{
int i;
unsigned char lo,hi;
case EVENT_TIMER_TICK:
AI_AsyncDblBufferHalfReady (cardID, &HalfReady, &fstop);
if (!HalfReady) break; //如果半缓冲准备好了,就开始传送数据到用户缓冲区
AI_AsyncDblBufferTransfer (cardID, InBuf);
//对数据进行处理
AI_ContVScale(CardNumber,AD_B_10_V,InBuf,Y,ScanCount*ADChanCount/2);
for(i=0;i<ScanCount/2;i++)
{
//Y7[i]=Y[i*8] ;
//Y6[i]=Y[i*8+1] ;
//Y5[i]=Y[i*8+2] ;
//Y4[i]=Y[i*8+3] ;
//Y3[i]=Y[i*8+4];
//Y2[i]=Y[i*8+5];
Y1[i]=Y[i*2+1] ;
Y0[i]=Y[i*2] ;
}
DeleteGraphPlot (panel,PANEL_GRAPH_0, -1, VAL_DELAYED_DRAW);
RefreshGraph (panel, PANEL_GRAPH_0);
//PlotWaveform (panel, PANEL_GRAPH_0, Y7, ScanCount/2, VAL_DOUBLE, 1.0, 240, 0.0, 1.0,
//VAL_THIN_LINE, VAL_EMPTY_SQUARE, VAL_SOLID, 1, VAL_RED);
///PlotWaveform (panel, PANEL_GRAPH_0, Y6, ScanCount/2, VAL_DOUBLE, 1.0,210, 0.0, 1.0,
//VAL_THIN_LINE, VAL_EMPTY_SQUARE, VAL_SOLID, 1, VAL_RED);
//PlotWaveform (panel, PANEL_GRAPH_0, Y5, ScanCount/2, VAL_DOUBLE, 1.0, 180, 0.0, 1.0,
// VAL_THIN_LINE, VAL_EMPTY_SQUARE, VAL_SOLID, 1, VAL_RED);
//PlotWaveform (panel, PANEL_GRAPH_0, Y4, ScanCount/2, VAL_DOUBLE, 1.0, 150, 0.0, 1.0,
// VAL_THIN_LINE, VAL_EMPTY_SQUARE, VAL_SOLID, 1, VAL_RED);
//PlotWaveform (panel, PANEL_GRAPH_0, Y3, ScanCount/2, VAL_DOUBLE, 1.0, 120, 0.0, 1.0,
//VAL_THIN_LINE, VAL_EMPTY_SQUARE, VAL_SOLID, 1, VAL_RED);
//PlotWaveform (panel, PANEL_GRAPH_0, Y2, ScanCount/2, VAL_DOUBLE, 1.0, 90, 0.0, 1.0,
// VAL_THIN_LINE, VAL_EMPTY_SQUARE, VAL_SOLID, 1, VAL_RED);
PlotWaveform (panel, PANEL_GRAPH_0, Y1, ScanCount/2, VAL_DOUBLE, 1.0,14, 0.0, 1.0,
VAL_THIN_LINE, VAL_EMPTY_SQUARE, VAL_SOLID, 1, VAL_RED);
PlotWaveform (panel, PANEL_GRAPH_0, Y0, ScanCount/2, VAL_DOUBLE, 1.0, 6, 0.0, 1.0,
VAL_THIN_LINE, VAL_EMPTY_SQUARE, VAL_SOLID, 1, VAL_RED);
/*DeleteGraphPlot (panel, PANEL_GRAPH_1, -1, VAL_IMMEDIATE_DRAW);
DeleteGraphPlot (panel,PANEL_GRAPH_2, -1, VAL_IMMEDIATE_DRAW);
DeleteGraphPlot (panel, PANEL_GRAPH_3, -1, VAL_IMMEDIATE_DRAW);
DeleteGraphPlot (panel, PANEL_GRAPH_4, -1, VAL_IMMEDIATE_DRAW);
DeleteGraphPlot (panel, PANEL_GRAPH_5, -1, VAL_IMMEDIATE_DRAW);
DeleteGraphPlot (panel, PANEL_GRAPH_6, -1, VAL_IMMEDIATE_DRAW);
DeleteGraphPlot (panel, PANEL_GRAPH_7, -1, VAL_IMMEDIATE_DRAW); */
/* PlotY (panel, PANEL_GRAPH_0, Y0, ScanCount/2, VAL_DOUBLE, VAL_THIN_LINE, VAL_EMPTY_SQUARE,
VAL_SOLID, 1, VAL_RED);//画图
PlotY (panel,PANEL_GRAPH_1, Y1, ScanCount/2, VAL_DOUBLE, VAL_THIN_LINE, VAL_EMPTY_SQUARE,
VAL_SOLID, 1, VAL_RED);//画图
PlotY (panel, PANEL_GRAPH_2, Y2, ScanCount/2, VAL_DOUBLE, VAL_THIN_LINE, VAL_EMPTY_SQUARE,
VAL_SOLID, 1, VAL_RED);//画图
PlotY (panel, PANEL_GRAPH_3, Y3, ScanCount/2, VAL_DOUBLE, VAL_THIN_LINE, VAL_EMPTY_SQUARE,
VAL_SOLID, 1, VAL_RED);//画图
PlotY (panel, PANEL_GRAPH_4, Y4, ScanCount/2, VAL_DOUBLE, VAL_THIN_LINE, VAL_EMPTY_SQUARE,
VAL_SOLID, 1, VAL_RED);//画图
PlotY (panel, PANEL_GRAPH_5, Y5, ScanCount/2, VAL_DOUBLE, VAL_THIN_LINE, VAL_EMPTY_SQUARE,
VAL_SOLID, 1, VAL_RED);//画图
PlotY (panel,PANEL_GRAPH_6, Y6, ScanCount/2, VAL_DOUBLE, VAL_THIN_LINE, VAL_EMPTY_SQUARE,
VAL_SOLID, 1, VAL_RED);//画图
PlotY (panel, PANEL_GRAPH_7, Y7, ScanCount/2, VAL_DOUBLE, VAL_THIN_LINE, VAL_EMPTY_SQUARE,
VAL_SOLID, 1, VAL_RED);//画图
} */
break;
}
return 0;
}
int CVICALLBACK Quit (int panel, int control, int event,
void *callbackData, int eventData1, int eventData2)
{ //int confirm;
switch (event)
{
case EVENT_COMMIT:
// confirm = ConfirmPopup ("confirm", "Are you sure you want to quit system?");
// if(confirm==1)
QuitUserInterface (0);
break;
}
return 0;
}
int CVICALLBACK Open (int panel, int control, int event,
void *callbackData, int eventData1, int eventData2)
{
double *Y;
long filesize;
int fileHandle;
char path[MAX_PATHNAME_LEN];
int n,i;
int confirm;
switch (event)
{
case EVENT_COMMIT:
if( FileSelectPopup ("", "*.dat", "*.dat","Open file", VAL_LOAD_BUTTON, 0, 1, 1, 0, path))
{ GetFileInfo (path, &filesize); //获取文件大小
n=sizeof(double );//获得双精度数据占用的字节数
Y=(double *)malloc(filesize); //给fYdata动态分配内存
FileToArray (path, Y, VAL_DOUBLE, filesize/n, 1, VAL_GROUPS_TOGETHER,
VAL_GROUPS_AS_COLUMNS, VAL_BINARY);//调用FileToArray函数读取文件内容
for(i=0;i<ScanCount/2;i++)
{
//Y7[i]=Y[i*8] ;
//Y6[i]=Y[i*8+1] ;
///Y5[i]=Y[i*8+2] ;
//Y4[i]=Y[i*8+3] ;
//Y3[i]=Y[i*8+4];
//Y2[i]=Y[i*8+5];
Y1[i]=Y[i*2+1] ;
Y0[i]=Y[i*2] ;
}
/* DeleteGraphPlot (panel,PANEL_GRAPH_0, -1, VAL_DELAYED_DRAW);
RefreshGraph (panel, PANEL_GRAPH_0);
PlotWaveform (panel, PANEL_GRAPH_0, Y7, ScanCount/2, VAL_DOUBLE, 1.0, 240, 0.0, 1.0,
VAL_THIN_LINE, VAL_EMPTY_SQUARE, VAL_SOLID, 1, VAL_RED);
PlotWaveform (panel, PANEL_GRAPH_0, Y6, ScanCount/2, VAL_DOUBLE, 1.0,210, 0.0, 1.0,
VAL_THIN_LINE, VAL_EMPTY_SQUARE, VAL_SOLID, 1, VAL_RED);
PlotWaveform (panel, PANEL_GRAPH_0, Y5, ScanCount/2, VAL_DOUBLE, 1.0, 180, 0.0, 1.0,
VAL_THIN_LINE, VAL_EMPTY_SQUARE, VAL_SOLID, 1, VAL_RED);
PlotWaveform (panel, PANEL_GRAPH_0, Y4, ScanCount/2, VAL_DOUBLE, 1.0, 150, 0.0, 1.0,
VAL_THIN_LINE, VAL_EMPTY_SQUARE, VAL_SOLID, 1, VAL_RED);
PlotWaveform (panel, PANEL_GRAPH_0, Y3, ScanCount/2, VAL_DOUBLE, 1.0, 120, 0.0, 1.0,
VAL_THIN_LINE, VAL_EMPTY_SQUARE, VAL_SOLID, 1, VAL_RED);
PlotWaveform (panel, PANEL_GRAPH_0, Y2, ScanCount/2, VAL_DOUBLE, 1.0, 90, 0.0, 1.0,
VAL_THIN_LINE, VAL_EMPTY_SQUARE, VAL_SOLID, 1, VAL_RED);
PlotWaveform (panel, PANEL_GRAPH_0, Y1, ScanCount/2, VAL_DOUBLE, 1.0,60, 0.0, 1.0,
VAL_THIN_LINE, VAL_EMPTY_SQUARE, VAL_SOLID, 1, VAL_RED);
PlotWaveform (panel, PANEL_GRAPH_0, Y0, ScanCount/2, VAL_DOUBLE, 1.0, 30, 0.0, 1.0,
VAL_THIN_LINE, VAL_EMPTY_SQUARE, VAL_SOLID, 1, VAL_RED); */
DeleteGraphPlot (panel,PANEL_GRAPH_0, -1, VAL_DELAYED_DRAW);
RefreshGraph (panel, PANEL_GRAPH_0);
/* PlotWaveform (panel, PANEL_GRAPH_0, Y7, ScanCount/2, VAL_DOUBLE, 1.0, 112.5, 0.0, 1.0,
VAL_THIN_LINE, VAL_EMPTY_SQUARE, VAL_SOLID, 1, VAL_RED);
PlotWaveform (panel, PANEL_GRAPH_0, Y6, ScanCount/2, VAL_DOUBLE, 1.0,97.5, 0.0, 1.0,
VAL_THIN_LINE, VAL_EMPTY_SQUARE, VAL_SOLID, 1, VAL_RED);
PlotWaveform (panel, PANEL_GRAPH_0, Y5, ScanCount/2, VAL_DOUBLE, 1.0, 82.5, 0.0, 1.0,
VAL_THIN_LINE, VAL_EMPTY_SQUARE, VAL_SOLID, 1, VAL_RED);
PlotWaveform (panel, PANEL_GRAPH_0, Y4, ScanCount/2, VAL_DOUBLE, 1.0, 67.5, 0.0, 1.0,
VAL_THIN_LINE, VAL_EMPTY_SQUARE, VAL_SOLID, 1, VAL_RED);
PlotWaveform (panel, PANEL_GRAPH_0, Y3, ScanCount/2, VAL_DOUBLE, 1.0, 52.5, 0.0, 1.0,
VAL_THIN_LINE, VAL_EMPTY_SQUARE, VAL_SOLID, 1, VAL_RED);
PlotWaveform (panel, PANEL_GRAPH_0, Y2, ScanCount/2, VAL_DOUBLE, 1.0, 37.5, 0.0, 1.0,
VAL_THIN_LINE, VAL_EMPTY_SQUARE, VAL_SOLID, 1, VAL_RED);*/
PlotWaveform (panel, PANEL_GRAPH_0, Y1, ScanCount/2, VAL_DOUBLE, 1.0,14, 0.0, 1.0,
VAL_THIN_LINE, VAL_EMPTY_SQUARE, VAL_SOLID, 1, VAL_RED);
PlotWaveform (panel, PANEL_GRAPH_0, Y0, ScanCount/2, VAL_DOUBLE, 1.0, 6, 0.0, 1.0,
VAL_THIN_LINE, VAL_EMPTY_SQUARE, VAL_SOLID, 1, VAL_RED);
break;
}
return 0;
}
return 0;
}
int CVICALLBACK TIMERT (int panel, int control, int event,
void *callbackData, int eventData1, int eventData2)
{
switch (event)
{
case EVENT_TIMER_TICK:
Date=DateStr();
Time=TimeStr();
SetCtrlVal(panel,PANEL_Time,Time);
SetCtrlVal(panel,PANEL_Date,Date);
break;
}
return 0;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -