sbq.c

来自「cvi编程举例」· C语言 代码 · 共 218 行

C
218
字号
#include <ansi_c.h>
#include <cvirte.h>		
#include <userint.h>
#include "sbq.h"

static int panelHandle;
int TD1=0,TD2=0,TD3=0,TD4=0;
int X0=0,ii;
double Y1=0,Y2=0,Y3=0,Y4=0;
int TD_11,TD_22,TD_33,TD_44;
double MinY=-10;MaxY=10;
void DispCurve(void); 
int main (int argc, char *argv[])
{
	if (InitCVIRTE (0, argv, 0) == 0)
		return -1;	/* out of memory */
	if ((panelHandle = LoadPanel (0, "sbq.uir", PANEL)) < 0)
		return -1;
	DisplayPanel (panelHandle);
	RunUserInterface ();
	DiscardPanel (panelHandle);
	return 0;
}

int CVICALLBACK ExitP (int panel, int control, int event,
		void *callbackData, int eventData1, int eventData2)
{
	switch (event)
	{
		case EVENT_COMMIT:
			QuitUserInterface (0);
			break;
	}
	return 0;
}

int CVICALLBACK TD1_CLICK (int panel, int control, int event,
		void *callbackData, int eventData1, int eventData2)
{
	switch (event)
	{
		case EVENT_COMMIT:
			GetCtrlVal (panelHandle, PANEL_TD_1, &TD1);
			TD_11=1;
			break;
	}
	return 0;
}

int CVICALLBACK TD2_CLICK (int panel, int control, int event,
		void *callbackData, int eventData1, int eventData2)
{
	switch (event)
	{
		case EVENT_COMMIT:
			GetCtrlVal (panelHandle, PANEL_TD_2, &TD2); 
			TD_22=1;
			break;
	}
	return 0;
}

int CVICALLBACK TD3_CLICK (int panel, int control, int event,
		void *callbackData, int eventData1, int eventData2)
{
	switch (event)
	{
		case EVENT_COMMIT:
			GetCtrlVal (panelHandle, PANEL_TD_3, &TD3);
			TD_33=1;
			break;
	}
	return 0;
}

int CVICALLBACK TD4_CLICK (int panel, int control, int event,
		void *callbackData, int eventData1, int eventData2)
{
	switch (event)
	{
		case EVENT_COMMIT:
			GetCtrlVal (panelHandle, PANEL_TD_4, &TD4); 
			TD_44=1;
			break;
	}
	return 0;
}

int CVICALLBACK Timer_Disp (int panel, int control, int event,
		void *callbackData, int eventData1, int eventData2)
{
	switch (event)
	{
		case EVENT_TIMER_TICK:
			DispCurve();
			break;
	}
	return 0;
}

void DispCurve(void)
{
	int kk;
	double TD_D1,TD_D2,TD_D3,TD_D4;
	if (TD1==1)
	{
		TD_D1=2*sin(ii*2*3.1415/50);
		if (TD_11==1) 
		{
			Y1=TD_D1;
			TD_11=0;
			
		}
		PlotLine (panelHandle, PANEL_GRAPH, X0, Y1, ii, TD_D1, VAL_RED);
		Y1=TD_D1;
	}
	if (TD2==1)
	{
		TD_D2=2*sin(ii*2*3.1415/80);
		if (TD_22==1) 
		{
			Y2=TD_D2;
			TD_22=0;
			
		}
		PlotLine (panelHandle, PANEL_GRAPH, X0, Y2, ii, TD_D2, VAL_BLUE);   
		Y2=TD_D2; 
	}
	if (TD3==1)
	{
		//TD_D3=2*sin(ii*2*3.1415/80);
		kk=ii%40;
		if( kk<10)
			TD_D3 = kk*(2.5/10);
		else if( kk<=30)
			TD_D3 = kk*(-2.5/10)+2.0*2.5;
		else
			TD_D3 = kk*(2.5/10) - 4.0*2.5;
		
		
		if (TD_33==1) 
		{
			Y3=TD_D3;
			TD_33=0;
			
		}
		PlotLine (panelHandle, PANEL_GRAPH, X0, Y3, ii, TD_D3, VAL_CYAN);
		Y3=TD_D3; 
	}	
	
	
	X0=ii;
	ii++;
	if ((ii % 200)==0)
	{
		SetAxisScalingMode (panelHandle, PANEL_GRAPH, VAL_BOTTOM_XAXIS, VAL_MANUAL, ii, ii+200);
	}	
		
}

int CVICALLBACK SetupSD (int panel, int control, int event,
		void *callbackData, int eventData1, int eventData2)
{
	int VV;
	double Ttimer[5]={1,0.5,0.1,0.05,0.01};
	switch (event)
	{
		case EVENT_COMMIT:
			 GetCtrlVal (panelHandle, PANEL_NUMERICKNOB, &VV);
			
			 SetCtrlAttribute (panelHandle, PANEL_TIMER, ATTR_INTERVAL, Ttimer[VV-1]);

			break;
	}
	return 0;
}

int CVICALLBACK SetupFZ (int panel, int control, int event,
		void *callbackData, int eventData1, int eventData2)
{
	int VV; 
	double FZ_V[5]={1,2,5,10,20};  
	switch (event)
	{
		case EVENT_COMMIT:
			GetCtrlVal (panelHandle, PANEL_NUMER_FZ, &VV);
			SetAxisScalingMode (panelHandle, PANEL_GRAPH, VAL_LEFT_YAXIS, VAL_MANUAL, -FZ_V[VV-1],FZ_V[VV-1]);
			break;
	}
	return 0;
}

int CVICALLBACK StartORstop (int panel, int control, int event,
		void *callbackData, int eventData1, int eventData2)
{
	int SS;
	switch (event)
	{
		case EVENT_COMMIT:
			GetCtrlVal (panelHandle, PANEL_TOGGLEBUTTON, &SS);
			SetCtrlAttribute (panelHandle, PANEL_TIMER, ATTR_ENABLED,SS); 
			SetCtrlAttribute (panelHandle, PANEL_TOGGLEBUTTON, ATTR_ON_COLOR, VAL_RED);
			if (SS==1)
			{
				ii=0; 	
				SetAxisScalingMode (panelHandle, PANEL_GRAPH, VAL_BOTTOM_XAXIS, VAL_MANUAL, ii, ii+200); 
				DeleteGraphPlot (panelHandle, PANEL_GRAPH, -1, VAL_IMMEDIATE_DRAW);
				TD_11=1;
				TD_22=1; 
				TD_33=1; 
				TD_44=1;
				X0=0;
			}
			break;
	}
	return 0;
}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?