#include "windows.h"
#include "stdio.h"
#include "toolbox.h"
#include <utility.h>
#include <cvirte.h>
#include <userint.h>
#include "ADaquire.h"
#include "DAME3000N.h" // 驱动程序头文件,在您的工程代码中包含此文件即可使用驱动函数
static char proj_dir[MAX_PATHNAME_LEN];
static char file_name[MAX_PATHNAME_LEN];
//--------------------------------------------------------
static int panelHandle;
static int panelHandle2;
//线程开始标记,值为1时开始多线程
int threadID;
//标志设置,0表示没有开始,1表示正在进行中
static int startAquireflag = 0;
static int startReplayflag = 0;
static int startSaveflag = 0;
//----------------------------
//系统参数
static LONG ADMode=9; //电压范围
static int VoltType=9; //电压范围类型
static int VoltMax=10; //电压最大值
static int VoltMin=-10; //电压最小值
static int AquireDataTPS=2; //数据每秒采集的次数
static char ARTe3058nIP[20]= "192.168.1.150"; //采集卡的IP地址
//传递所创建线程的callbackData参数
static void *threadfunctiondata = "这是一个多线程的示例!";
//声明多线程回调函数
int CVICALLBACK ThreadFunction (void *functionData);
//数据采集多线程
int CVICALLBACK ThreadDataAquire(void *functionData)
{
double curVal[8]= {0,0,0,0,0,0,0,0};
//先画一次,再清屏
PlotStripChart( panelHandle,PANEL_STRIPCHART,curVal,2,0,0,VAL_DOUBLE);
ClearStripChart(panelHandle,PANEL_STRIPCHART);
SetTraceAttribute (panelHandle, PANEL_STRIPCHART, 1, ATTR_TRACE_LG_VISIBLE, 1);
SetTraceAttribute (panelHandle, PANEL_STRIPCHART, 2, ATTR_TRACE_LG_VISIBLE, 1);
SetTraceAttribute (panelHandle, PANEL_STRIPCHART, 3, ATTR_TRACE_LG_VISIBLE, 1);
SetTraceAttribute (panelHandle, PANEL_STRIPCHART, 4, ATTR_TRACE_LG_VISIBLE, 1);
SetTraceAttributeEx(panelHandle, PANEL_STRIPCHART,1,ATTR_TRACE_LG_TEXT,"通道1");
SetTraceAttributeEx(panelHandle, PANEL_STRIPCHART,2,ATTR_TRACE_LG_TEXT,"通道2");
SetTraceAttributeEx(panelHandle, PANEL_STRIPCHART,3,ATTR_TRACE_LG_TEXT,"通道3");
SetTraceAttributeEx(panelHandle, PANEL_STRIPCHART,4,ATTR_TRACE_LG_TEXT,"通道4");
static long iCount=0;
char result[40];
double d_currenttime=0;
int hour=0,minute=0;
double second=0;
int month=0,day=0,year=0;
FILE *fp;
//获取时间
GetCurrentDateTime(&d_currenttime);
GetDateTimeElements(d_currenttime,&hour,&minute,&second,&month,&day,&year);
sprintf(result,"appData\\D%04d%02d%02d%02d%02d%02.0f.dat",year,month,day,hour,minute,second);
fp=fopen(result,"a");
while(startAquireflag==1)
{
// result=(double)(ADBuffer[0] * 20.0 / 65536.0 - 10.0);//±10V
for(int i=0; i<8; i++)
curVal[i]=(double)(rand()%10);//±10V
PlotStripChart(panelHandle,PANEL_STRIPCHART,curVal,8,0,0,VAL_DOUBLE);
//写文件
iCount++;
for(int i=0; i<8; i++)
fprintf(fp,"%f ",curVal[i]);
fprintf(fp,"%s \n"," ");
if( iCount>50-1)
{
fclose(fp);
iCount=0;
GetCurrentDateTime(&d_currenttime);
GetDateTimeElements(d_currenttime,&hour,&minute,&second,&month,&day,&year);
sprintf(result,"appData\\D%04d%02d%02d%02d%02d%02.0f.dat",year,month,day,hour,minute,second);
fp=fopen(result,"a");
}
Sleep(1000);
}
fclose(fp);
startAquireflag=0;
return 0;
}
//数据回放线程
int CVICALLBACK ThreadReplaydata(void *functionData)
{
ClearStripChart(panelHandle,PANEL_STRIPCHART);
FILE *fp;
fp=fopen(file_name,"r");
char tt[50];
double curVal[8]= {0,0};
double result=0;
//先画一次,再清屏
PlotStripChart( panelHandle,PANEL_STRIPCHART,curVal,8,0,0,VAL_DOUBLE);
ClearStripChart(panelHandle,PANEL_STRIPCHART);
//读文件
while( fscanf(fp,"%s",tt)>0)
{
if(startReplayflag==1)
{
result=atof(tt);
SetCtrlVal(panelHandle,PANEL_curVal,result);
curVal[0]=result;
//读取剩余7个数据
for(int i=1;i<8;i++)
{
fscanf(fp,"%s",tt);
result=atof(tt);
curVal[i]=result;
}
PlotStripChart( panelHandle,PANEL_STRIPCHART,curVal,8,0,0,VAL_DOUBLE);
Sleep(500);
}
else
break;
}
fclose(fp);
startReplayflag=0;
MessagePopup("消息","回放结束");
return 0;
}
int main (int argc, char *argv[])
{
if (InitCVIRTE (0, argv, 0) == 0)
return -1; /* out of memory */
if ((panelHandle = LoadPanel (0, "ADaquire.uir", PANEL)) < 0)
return -1;
DisplayPanel (panelHandle);
SetCtrlAttribute(panelHandle,PANEL_STRIPCHART,ATTR_POINTS_PER_SCREEN,100); //设置每屏数据显示的数目
SetCtrlAttribute (panelHandle, PANEL_STRIPCHART, ATTR_SCROLL_MODE, VAL_BLOCK); //设置Strip Chart显示模式
SetCtrlAttribute (panelHandle, PANEL_STRIPCHART, ATTR_NUM_TRACES, 4);//设置显示的波形数目
SetTraceAttribute (panelHandle, PANEL_STRIPCHART, 1, ATTR_TRACE_COLOR, VAL_RED);//设置波形颜色
SetTraceAttribute (panelHandle, PANEL_STRIPCHART, 2, ATTR_TRACE_COLOR, VAL_GREEN);
SetTraceAttribute (panelHandle, PANEL_STRIPCHART, 1, ATTR_TRACE_VISIBLE, 1);//设置波形是否可见
SetTraceAttribute (panelHandle, PANEL_STRIPCHART, 2, ATTR_TRACE_VISIBLE, 1);
SetTraceAttribute (panelHandle, PANEL_STRIPCHART, 1, ATTR_TRACE_LG_VISIBLE, 1);//设置波形说明是否可见
SetTraceAttribute (panelHandle, PANEL_STRIPCHART, 2, ATTR_TRACE_LG_VISIBLE, 1);
SetTraceAttributeEx (panelHandle, PANEL_STRIPCHART, 1, ATTR_TRACE_LG_TEXT,"Line1");//设置波形说明字符
SetTraceAttributeEx (panelHandle, PANEL_STRIPCHART, 2, ATTR_TRACE_LG_TEXT,"Line2");
RunUserInterface ();
DiscardPanel (panelHandle);
return 0;
}
int CVICALLBACK BeginGetdata (int panel, int control, int event,
void *callbackData, int eventData1, int eventData2)
{
switch (event)
{
case EVENT_COMMIT:
if(startAquireflag==1)
{
//已经开始采集
MessagePopup("消息","采集已经开始!");
return 0;
}
if(startReplayflag==1)
{
//正在回放
MessagePopup("消息","正在回放数据,如果需要采集请先停止当前回放");
return 0;
}
SetTraceAttributeEx(panelHandle, PANEL_STRIPCHART,1,ATTR_TRACE_LG_TEXT,"通道1");
SetTraceAttributeEx(panelHandle, PANEL_STRIPCHART,2,ATTR_TRACE_LG_TEXT,"通道2");
SetTraceAttributeEx(panelHandle, PANEL_STRIPCHART,3,ATTR_TRACE_LG_TEXT,"通道3");
SetTraceAttributeEx(panelHandle, PANEL_STRIPCHART,4,ATTR_TRACE_LG_TEXT,"通道4");
startAquireflag=1;
//创建一个线程函数
CmtScheduleThreadPoolFunction (DEFAULT_THREAD_POOL_HANDLE,ThreadDataAquire, threadfunctiondata, &threadID);
break;
}
return 0;
}
int CVICALLBACK StopGetData (int panel, int control, int event,
void *callbackData, int eventData1, int eventData2)
{
switch (event)
{
case EVENT_COMMIT:
if(startAquireflag==0)
{
//没有开始采集
MessagePopup("消息","没有采集数据!");
return 0;
}
startAquireflag=0;
// QuitUserInterface(0);
break;
}
return 0;
}
int CVICALLBACK mainPanel (int panel, int event, void *callbackData,
int eventData1, int eventData2)
{
switch (event)
{
case EVENT_GOT_FOCUS:
break;
case EVENT_LOST_FOCUS:
break;
case EVENT_CLOSE:
startAquireflag=0;
QuitUserInterface(0);
break;
}
return 0;
}
int CVICALLBACK SaveData (int panel, int control, int event,
void *callbackData, int eventData1, int eventData2)
{
switch (event)
{
case EVENT_COMMIT:
if(startAquireflag==0)
{
//没有开始采集
MessagePopup("消息","没有采集数据,无法存储");
return 0;
}
startSaveflag=1;
MessagePopup("消息","开始存储");
break;
}
return 0;
}
int CVICALLBACK ReplayData (int panel, int control, int event,
void *callbackData, int eventData1, int eventData2)
{
switch (event)
{
case EVENT_COMMIT:
if(startAquireflag==1)
{
//正在采集
MessagePopup("消息","正在采集数据,如果需要回放请先停止采集");
return 0;
}
if(startReplayflag==1)
{
//正在回放
MessagePopup("消息","正在回放数据,如果需要新的回放请先停止当前回放");
return 0;
}
GetProjectDir (proj_dir);
sprintf(proj_dir,"%s\\%s",proj_dir,"appData");
if (FileSelectPopupEx (proj_dir, "*.dat", "*.dat","File to history data", VAL_OK_BUTTON, 0, 1, file_name) > 0)
{
startReplayflag=1;
//创回放线程函数
CmtScheduleThreadPoolFunction (DEFAULT_THREAD_POOL_HANDLE,ThreadReplaydata, threadfunctiondata, &threadID);
}
else
MessagePopup("提示信息","文件获取失败,不能回放");
break;
}
return 0;
}
int CVICALLBACK DealData (int panel, int control, int event,
void *callbackData, int eventData1, int eventData2)
{
switch (event)
{
case EVENT_COMMIT:
break;
}
return 0;
}
int CVICALLBACK SettingParam (int panel, int control, int event,
void *callbackData, int eventData1, int eventData2)
{
switch (event)
{
case EVENT_COMMIT:
if(startAquireflag==1)
{
//正在采集
MessagePopup("消息","正在采集数据,如果需要设置参数请先停止采集");
return 0;
}
if ((panelHandle2 = LoadPanel (0, "ADaquire.uir", PANEL2)) < 0)
return -1;
DisplayPanel (panelHandle2);
break;
}
return 0;
}
int CVICALLBACK SettingPara (int panel, int event, void *callbackData,
int eventData1, int eventData2)
{
switch (event)
{
case EVENT_GOT_FOCUS:
break;
case EVENT_LOST_FOCUS:
break;
case EVENT_CLOSE:
DiscardPanel (panelHandle2);
break;
}
return 0;
}
int CVICALLBACK SetParaVal (int panel, int control, int event,
void *callbackData, int eventData1, int eventData2)
{
switch (event)
{
case EVENT_COMMIT:
GetCtrlVal(panelHandle2,PANEL2_ARTe3058nIPstr,ARTe3058nIP);
GetCtrlVal(panelHandle2,PANEL2_AquireDataTPS,&AquireDataTPS);
GetCtrlVal(panelHandle2,PANEL2_VoltVal,&VoltType);
if(VoltType==9)
VoltMax=10,VoltMin=-10,ADMode=9;
if(VoltType==8)
VoltMax=5,VoltMin=-5,ADMode=8;
MessagePopup("消息","参数设置成功");
break;
}
return 0;
}
int CVICALLBACK StopReplayData (int panel, int control, int event,
void *callbackData, int eventData1, int eventData2)
{
switch (event)
{
case EVENT_COMMIT:
startReplayflag=0;
break;
}
return 0;
}