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

📄 acquirewaveyy1.c

📁 基于LabWindows/CVI数据采集系统
💻 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 + -