|

楼主 |
发表于 2007-5-14 07:45:33
|
显示全部楼层
struct CHANNELDATA{
int waveform;
double frequency;
double scope;
int pointnum;
double data[MAX_POINTS];
}Channel1,Channel2;
static int handle;
static int panelHandle;
static int panelhandle2;
int channel=0,channel_signal=0;
double channel_scope_gain=1.0,channel_frequency_gain=1;
int chartmode=1;//continue
int power=0;//off
//static int waveform=1;//sine
static double data[MAX_POINTS*2];
void GenerateData(void) ;
int main (int argc, char *argv[])
{
if (InitCVIRTE (0, argv, 0) == 0) /* Needed if linking in external compiler; harmless otherwise */
return -1; /* out of memory */
if ((panelHandle = LoadPanel (0, "检测设备.uir", PANEL)) < 0)
return -1;
DisplayPanel (panelHandle);
Channel1.frequency=1.0;
Channel1.scope=1.0;
Channel1.pointnum=512;
Channel1.waveform=1;//sin
Channel2.frequency=1.0;
Channel2.scope=1.0;
Channel2.pointnum=512;
Channel2.waveform=1;//sin
RunUserInterface ();
DiscardPanel(panelHandle);
return 0;
}
int CVICALLBACK DataFunc (int panel, int control, int event,
void *callbackData, int eventData1, int eventData2)
{
double signal_scope,signal_frequency;
int waveform;
switch (control)
{
case PANEL_SCOPEGAIN:
if (event == EVENT_VAL_CHANGED)
GetCtrlVal (handle, PANEL_SCOPEGAIN, &channel_scope_gain);
break;
case PANEL_FREQGAIN:
if (event == EVENT_VAL_CHANGED)
GetCtrlVal (handle, PANEL_FREQGAIN, &channel_frequency_gain);
break;
case PANEL_SCOPE:
if (event == EVENT_COMMIT)
{
GetCtrlVal (handle, PANEL_SCOPE, &signal_scope);
if(channel_signal==0)
Channel1.scope=signal_scope;
else
Channel2.scope=signal_scope;
}
break;
case PANEL_FREQUENCY:
if (event == EVENT_COMMIT)
{
GetCtrlVal (handle, PANEL_FREQUENCY, &signal_frequency);
if(channel_signal==0)
Channel1.frequency=signal_frequency;
else
Channel2.frequency=signal_frequency;
}
break;
case PANEL_WAVEFORM:
if (event == EVENT_COMMIT)
{
GetCtrlVal (handle, PANEL_WAVEFORM, &waveform);
if(channel_signal==0)
Channel1.waveform=waveform;
else
Channel2.waveform=waveform;
}
break;
}
return (0);
}
int CVICALLBACK ChartMode (int panel, int control, int event,
void *callbackData, int eventData1, int eventData2)
{
int Mode;
switch (event)
{
case EVENT_COMMIT:
GetCtrlVal (handle, PANEL_CHART_MODE, &chartmode);
switch(chartmode)
{
case 0: Mode=VAL_SWEEP;
break;
case 1: Mode= VAL_CONTINUOUS;
break;
case 2: Mode= VAL_BLOCK;
break;
}
SetCtrlAttribute (handle, PANEL_CHART, ATTR_SCROLL_MODE, Mode);
break;}
return 0;
}
int CVICALLBACK Quit (int panel, int control, int event,
void *callbackData, int eventData1, int eventData2)
{
switch (event)
{
case EVENT_COMMIT:
QuitUserInterface (0);
break;
}
return 0;
}
int CVICALLBACK SelectChannel (int panel, int control, int event,
void *callbackData, int eventData1, int eventData2)
{
switch (event)
{
case EVENT_COMMIT:
GetCtrlVal (handle, PANEL_CHANNEL, &channel);
break;
}
return 0;
}
int CVICALLBACK Timer (int panel, int control, int event,
void *callbackData, int eventData1, int eventData2)
{
int i;
switch (event)
{
case EVENT_TIMER_TICK:
GenerateData();
if(channel==0)
PlotStripChart (handle, PANEL_CHART, Channel1.data, Channel1.pointnum, 0, 0, VAL_DOUBLE);
if(channel==1)
PlotStripChart (handle, PANEL_CHART, Channel2.data, Channel2.pointnum, 0, 0, VAL_DOUBLE);
if(channel==2)
PlotStripChart (handle, PANEL_CHART, data, Channel1.pointnum*2, 0, 0, VAL_DOUBLE);
break;
}
return 0;
}
int CVICALLBACK Power (int panel, int control, int event,
void *callbackData, int eventData1, int eventData2)
{
switch (event)
{
case EVENT_COMMIT:
GetCtrlVal (handle, PANEL_POWER, &power);
SetCtrlVal (handle, PANEL_LED, power);
SetCtrlAttribute (handle, PANEL_TIMER, ATTR_ENABLED, power);
if(power==0)
ClearStripChart (handle, PANEL_CHART);
break;
}
return 0;
}
int CVICALLBACK ChannelSignal (int panel, int control, int event,
void *callbackData, int eventData1, int eventData2)
{
switch (event)
{
case EVENT_COMMIT:
GetCtrlVal (handle, PANEL_CHANNELSIGNAL, &channel_signal);
if(channel_signal==0)
{
SetCtrlVal (handle, PANEL_FREQUENCY, Channel1.frequency);
SetCtrlVal (handle, PANEL_SCOPE, Channel1.scope);
SetCtrlVal(handle,PANEL_WAVEFORM,Channel1.waveform) ;
}
else
{
SetCtrlVal (handle, PANEL_FREQUENCY, Channel2.frequency);
SetCtrlVal (handle, PANEL_SCOPE, Channel2.scope);
SetCtrlVal(handle,PANEL_WAVEFORM,Channel2.waveform);
}
break;
}
return 0;
}
int CVICALLBACK Channel (int panel, int control, int event,
void *callbackData, int eventData1, int eventData2)
{
switch (event)
{
case EVENT_COMMIT:
GetCtrlVal (handle, PANEL_CHANNEL, &channel);
if(channel==0)
{
SetCtrlAttribute (handle, PANEL_CHART, ATTR_NUM_TRACES, 1);
SetTraceAttribute (handle,PANEL_CHART,1 ,ATTR_TRACE_COLOR, VAL_GREEN);
}
if(channel==1)
{
SetCtrlAttribute (handle, PANEL_CHART, ATTR_NUM_TRACES, 1);
SetTraceAttribute (handle, PANEL_CHART,1, ATTR_TRACE_COLOR, VAL_RED);
} if(channel==2)
{
SetCtrlAttribute (handle, PANEL_CHART, ATTR_NUM_TRACES, 2);
SetTraceAttribute (handle, PANEL_CHART,1,ATTR_TRACE_COLOR, VAL_GREEN);
SetTraceAttribute (handle, PANEL_CHART,2,ATTR_TRACE_COLOR, VAL_RED);
}
break;
}
return 0;
}
void CalculatePointNum()
{
if(channel==0)
Channel1.pointnum=1024/Channel1.frequency/channel_frequency_gain ;
else if(channel==1)
Channel2.pointnum=1024/Channel2.frequency/channel_frequency_gain ;
else
{ //SET SAME POINT
Channel1.pointnum=1024/Channel1.frequency/channel_frequency_gain ;
Channel2.pointnum=1024/Channel1.frequency/channel_frequency_gain ;
}
}
void GenerateData()
{
int i;
CalculatePointNum();
switch (Channel1.waveform)
{
case 0:
for (i=0; i<Channel1.pointnum/2; i++)
Channel1.data =Channel1.scope/channel_scope_gain ;
for (i=Channel1.pointnum/2; i<Channel1.pointnum; i++)
Channel1.data =-Channel1.scope/channel_scope_gain ;
break;
case 1:
for (i=0; i<Channel1.pointnum; i++)
Channel1.data = sin (i*2.0*PI/Channel1.pointnum) * Channel1.scope/channel_scope_gain ;
break;
case 2:
for (i=0; i<Channel1.pointnum; i++)
Channel1.data = ((rand()/23767.0) - 0.5) * Channel1.scope/channel_scope_gain ;
break;
}
switch (Channel2.waveform)
{
case 0:
for (i=0; i<Channel2.pointnum/2; i++)
Channel2.data =Channel2.scope/channel_scope_gain ;
for (i=Channel2.pointnum/2; i<Channel2.pointnum; i++)
Channel2.data =-Channel2.scope/channel_scope_gain ;
break;
case 1:
for (i=0; i<Channel2.pointnum; i++)
Channel2.data = sin (i*2.0*PI/Channel2.pointnum) * Channel2.scope/channel_scope_gain ;
break;
case 2:
for (i=0; i<Channel2.pointnum; i++)
Channel2.data = ((rand()/23767.0) - 0.5) * Channel2.scope/channel_scope_gain ;
break;
}
if(channel==2)
for(i=0;i<Channel1.pointnum;i++)
{
data[i*2]=Channel1.data;
data[1+i*2]=Channel2.data;
}
}
int CVICALLBACK detection (int panel, int control, int event,
void *callbackData, int eventData1, int eventData2)
{ int iPanel;
switch (event)
{
case EVENT_COMMIT:
if((iPanel=LoadPanel (0, "asp.uir", PANEL_2))<0)
return -1;
InstallPopup (iPanel);
break;
}
return 0;
}
还有就是,我在一个窗口里面有两个面板,但是只有一个面板的程序,请问怎么生成另一个面板的程序呢?而且是把两个程序加在一起的那种? |
|