📄 sample21.c
字号:
#include <ansi_c.h>
#include <cvirte.h>
#include <userint.h>
#include "sample21.h"
#include "bearing.h"
//定义变量
static int panelHandle;
BFDATA bfData;
//函数声明
void BFAnlysis(void);
int main (int argc, char *argv[])
{
if (InitCVIRTE (0, argv, 0) == 0)
return -1;
if ((panelHandle = LoadPanel (0, "sample21.uir", PANEL)) < 0)
return -1;
//变量初始化
bfData.data_flag=-1;
bfData.data_length=0;
bfData.data_samplerate=0;
bfData.data=NULL;
bfData.ar_flag=-1;
bfData.ar_rank=0;
bfData.ar_para=NULL;
bfData.ar_var=0;
DisplayPanel (panelHandle);
RunUserInterface ();
return 0;
}
int CVICALLBACK PanelCallback (int panel, int event, void *callbackData,
int eventData1, int eventData2)
{
switch (event)
{
case EVENT_CLOSE:
QuitUserInterface (0);
break;
}
return 0;
}
int CVICALLBACK GraphCallback (int panel, int control, int event,
void *callbackData, int eventData1, int eventData2)
{
//定义变量
double x,y;
switch (event)
{
case EVENT_LEFT_CLICK:
//获取光标坐标
GetGraphCursor (panel, PANEL_GRAPH, 1, &x, &y);
//设置控件XCOORDINATE和YCOORDINATE的值
SetCtrlVal (panel, PANEL_XCOORDINATE, x);
SetCtrlVal (panel, PANEL_YCOORDINATE, y);
break;
}
return 0;
}
int CVICALLBACK StyleCallback (int panel, int control, int event,
void *callbackData, int eventData1, int eventData2)
{
//定义变量
int i;
switch (event)
{
case EVENT_COMMIT:
//获取控件STYLE的值
GetCtrlVal(panel,control,&i);
//如果STYLE控件值不为1,设置KURTOSIS控件的DIMMED属性为1
if(i==0)
SetCtrlAttribute (panel, PANEL_KURTOSIS, ATTR_DIMMED, 0);
else
SetCtrlAttribute (panel, PANEL_KURTOSIS, ATTR_DIMMED, 1);
//如果STYLE控件值不为2,设置CURSTDDEV控件的DIMMED属性为1
if(i==2)
SetCtrlAttribute (panel, PANEL_CURSTDDEV, ATTR_DIMMED, 0);
else
SetCtrlAttribute (panel, PANEL_CURSTDDEV, ATTR_DIMMED, 1);
//调用BFAnlysis函数
BFAnlysis();
break;
}
return 0;
}
int CVICALLBACK ReadDataCallback (int panel, int control, int event,
void *callbackData, int eventData1, int eventData2)
{
//定义变量
int status,i;
char filename[MAX_PATHNAME_LEN];
FILE* fp;
switch (event)
{
case EVENT_COMMIT:
//打开文件选择框
status = FileSelectPopup ("", "*.bfd", "*.bfd",
"Open file", VAL_LOAD_BUTTON, 0, 0, 1, 0,
filename);
if ((status <0)||(status==0))
return -1;
//打开轴承故障数据文件并读取数据
fp = fopen (filename, "rt");
if(fp==NULL) break;
bfData.data_flag=1;
fread (&bfData.data_length, sizeof(int), 1, fp);
fread (&bfData.data_samplerate, sizeof(int), 1, fp);
if(bfData.data==NULL)
bfData.data=malloc(sizeof(double)*bfData.data_length);
else
bfData.data = realloc (bfData.data, sizeof(double)*bfData.data_length);
fread (bfData.data, sizeof(double), bfData.data_length, fp);
fclose (fp);
//调用STYLE控件的回调函数
StyleCallback (panel, PANEL_STYLE, EVENT_COMMIT,
NULL, 0, 0 );
break;
}
return 0;
}
int CVICALLBACK ReadParameterCallback (int panel, int control, int event,
void *callbackData, int eventData1, int eventData2)
{
//定义变量
int status,i;
char filename[MAX_PATHNAME_LEN];
FILE* fp;
switch (event)
{
case EVENT_COMMIT:
//打开文件选择框
status = FileSelectPopup ("", "*.arp", "*.arp",
"Open file", VAL_LOAD_BUTTON, 0, 0, 1, 0,
filename);
if ((status <0)||(status==0))
return -1;
//读取时序模型参数文件并读取数据
fp = fopen (filename, "rt");
if(fp==NULL) break;
bfData.ar_flag=1;
fread (&bfData.ar_rank, sizeof(int), 1, fp);
if(bfData.data==NULL)
bfData.ar_para=malloc(sizeof(double)*bfData.ar_rank);
else
bfData.ar_para = realloc (bfData.ar_para, sizeof(double)*bfData.ar_rank);
fread (bfData.ar_para, sizeof(double), bfData.ar_rank, fp);
fread (&bfData.ar_var, sizeof(double), 1, fp);
fclose (fp);
//设置控件ORISTDDEV的值
SetCtrlVal (panel, PANEL_ORISTDDEV, bfData.ar_var);
break;
}
return 0;
}
int CVICALLBACK QuitCallback (int panel, int control, int event,
void *callbackData, int eventData1, int eventData2)
{
switch (event)
{
case EVENT_COMMIT:
QuitUserInterface (0);
break;
}
return 0;
}
void BFAnlysis()
{
//定义变量
int i;
double *temp,k,var;
//如果没有读取轴承故障数据,返回
if(bfData.data_flag==-1) return;
//获取空间STYLE控件的值
GetCtrlVal (panelHandle, PANEL_STYLE, &i);
//分配内存空间
temp=malloc(sizeof(double)*bfData.data_length);
switch(i)
{
case 0:
//计算峭度
CalculateKurtosis(bfData.data,bfData.data_length,&k);
//设置控件KURTOSIS控件的值
SetCtrlVal (panelHandle, PANEL_KURTOSIS, k);
DeleteGraphPlot (panelHandle, PANEL_GRAPH, -1, VAL_IMMEDIATE_DRAW);
PlotWaveform (panelHandle, PANEL_GRAPH, bfData.data,
bfData.data_length, VAL_DOUBLE, 1.0, 0.0, 0.0,
1.0/bfData.data_samplerate, VAL_THIN_LINE,
VAL_EMPTY_SQUARE, VAL_SOLID, 1, VAL_GREEN);
break;
case 1:
//计算频谱幅度
CalculateSpectrum(bfData.data,bfData.data_length,temp);
DeleteGraphPlot (panelHandle, PANEL_GRAPH, -1, VAL_IMMEDIATE_DRAW);
PlotWaveform (panelHandle, PANEL_GRAPH, temp, bfData.data_length/2,
VAL_DOUBLE, 1.0, 0.0, 0.0,
(double)bfData.data_samplerate/bfData.data_length,
VAL_THIN_LINE, VAL_EMPTY_SQUARE, VAL_SOLID, 1,
VAL_GREEN);
break;
case 2:
//如果没有读取时序模型参数
if(bfData.ar_flag==-1)
{ MessagePopup ("出错", "未读取参数!");
break;
}
//计算AR模型的残差
CalculateARVar(bfData.data,bfData.data_length,
bfData.ar_para,bfData.ar_rank,&var,temp);
DeleteGraphPlot (panelHandle, PANEL_GRAPH, -1, VAL_IMMEDIATE_DRAW);
PlotWaveform (panelHandle, PANEL_GRAPH, temp, bfData.data_length/2,
VAL_DOUBLE, 1.0, 0.0, 0.0, 1.0/bfData.data_samplerate,
VAL_THIN_LINE, VAL_EMPTY_SQUARE, VAL_SOLID, 1,
VAL_GREEN);
//设置控件CURSTDDEV的值
SetCtrlVal (panelHandle, PANEL_CURSTDDEV, var);
break;
case 3:
//希尔伯特变换
HilbertTran(bfData.data, temp, bfData.data_length);
DeleteGraphPlot (panelHandle, PANEL_GRAPH, -1, VAL_IMMEDIATE_DRAW);
PlotWaveform (panelHandle, PANEL_GRAPH, temp, bfData.data_length,
VAL_DOUBLE, 1.0, 0.0, 0.0,
(double)bfData.data_samplerate/bfData.data_length,
VAL_THIN_LINE, VAL_EMPTY_SQUARE, VAL_SOLID, 1,
VAL_GREEN);
break;
}
free(temp);
return;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -