📄 yewei.c
字号:
#include <ansi_c.h>
#include <cvirte.h> /* Needed if linking in external compiler; harmless otherwise */
#include <userint.h>
#include "20041001.h"
#include <math.h>
static int panelHandle;
double gd,zq,bc,kp,uds1,uds2,uds3,yds1,eds1,eds2,eds3,eds4;
int i,j,k,n,sf,Y;
double A=1,B=441.7,C=24.2,E,F,G;
double a0,a1,a2,ti,dti,td,N;
double *x,*y,*u,*e;
double sj,bcsj,bcpd,cypd,bcxj,cyxj;
int zzq,zbc,zsj,zbcsj,t;
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, "20041001.uir", PANEL)) < 0)
return -1;
DisplayPanel (panelHandle);
RunUserInterface ();
return 0;
}
int CVICALLBACK Shuru (int panel, int control, int event,
void *callbackData, int eventData1, int eventData2)
{
switch (event)
{
case EVENT_COMMIT:
GetCtrlVal (panelHandle, PANEL_NUMERIC9, &n);
if(n<4)
{
n=4;
SetCtrlVal (panelHandle, PANEL_NUMERIC9, n);
}
x=malloc(n*sizeof(double));
y=malloc(n*sizeof(double));
u=malloc(n*sizeof(double));
e=malloc(n*sizeof(double));
for(i=0;i<n;i++)
{
x[i]=0;
y[i]=0;
u[i]=0;
e[i]=0;
}
GetCtrlVal (panelHandle, PANEL_NUMERIC1, &gd);
GetCtrlVal (panelHandle, PANEL_NUMERIC2, &zq);
zzq=(int)(zq/0.001);
GetCtrlVal (panelHandle, PANEL_NUMERIC3, &bc);
zbc=(int)(bc/0.001);
GetCtrlVal (panelHandle, PANEL_RING, &sf);
switch (sf)
{
case 0:
GetCtrlVal (panelHandle, PANEL_NUMERIC4, &kp);
dti=0;
td=0;
break;
case 1:
GetCtrlVal (panelHandle, PANEL_NUMERIC4, &kp);
GetCtrlVal (panelHandle, PANEL_NUMERIC5, &ti);
dti=1/ti;
td=0;
break;
case 2:
GetCtrlVal (panelHandle, PANEL_NUMERIC4, &kp);
GetCtrlVal (panelHandle, PANEL_NUMERIC6, &td);
dti=0;
break;
case 3:
GetCtrlVal (panelHandle, PANEL_NUMERIC4, &kp);
GetCtrlVal (panelHandle, PANEL_NUMERIC5, &ti);
GetCtrlVal (panelHandle, PANEL_NUMERIC6, &td);
break;
}
E=exp((-1)*A*zq/B);
F=C/A*(1+(E-1)*B/(A*zq));
G=(-1)*C/A*(1+(E-1)*(1+B/(A*zq)));
a0=kp*(zq*dti+1+td/zq);
a1=kp*(2*td/zq+1);
a2=kp*td/zq;
break;
}
return 0;
}
int CVICALLBACK Yunxing (int panel, int control, int event,
void *callbackData, int eventData1, int eventData2)
{
switch (event)
{
case EVENT_COMMIT:
sj=0;
Y=-1;
t=zzq;
bcsj=0;
eds1=0;
eds2=0;
uds1=0;
uds2=0;
e[0]=gd;
u[0]=a0*e[0];
i=1;
j=0;
k=0;
bcpd=0;
break;
}
return 0;
}
int CVICALLBACK Zanting (int panel, int control, int event,
void *callbackData, int eventData1, int eventData2)
{
switch (event)
{
case EVENT_COMMIT:
Y=Y*(-1);
break;
}
return 0;
}
int CVICALLBACK Timercontrol (int panel, int control, int event,
void *callbackData, int eventData1, int eventData2)
{
switch (event)
{
case EVENT_TIMER_TICK:
if(Y==-1)
{
sj=sj+0.001;
zsj=(int)(sj/0.001);
SetCtrlVal (panelHandle, PANEL_NUMERIC7, sj);
if(zsj%zbc==0)
{
zbcsj=zbcsj+zbc;
if(i<2)
{
switch (i)
{
case 0:
y[i]=E*yds1+F*uds1+G*uds2;
break;
case 1:
y[i]=E*y[i-1]+F*u[i-1]+G*uds1;
break;
}
}
else
y[i]=E*y[i-1]+F*u[i-1]+G*u[i-2];
SetCtrlVal (panelHandle, PANEL_NUMERIC8, y[i]);
DeleteGraphPlot (panelHandle, PANEL_GRAPH, -1, VAL_IMMEDIATE_DRAW);
PlotY (panelHandle, PANEL_GRAPH, y, n, VAL_DOUBLE,VAL_THIN_LINE, VAL_EMPTY_SQUARE, VAL_SOLID, 1, VAL_RED);
e[i]=gd-y[i];
if(zbcsj%t==0)
{
if(i<2) //可能出问题
{
switch (i)
{
case 0:
u[i]=uds1+a0*e[i]-a1*eds1+a2*eds2;
break;
case 1:
u[i]=u[i-1]+a0*e[i]-a1*e[i-1]+a2*eds1;
break;
}
}
else
{
u[i]=u[i-1]+a0*e[i]-a1*e[i-1]+a2*e[i-2];
}
zbcsj=0;
}
else
{
u[i]=u[i-1];
if(i==0)
u[i]=uds1;
}
i++;
}
if(i>=n)
{
i=0;
uds1=u[n-1];
uds2=u[n-2];
yds1=y[n-1];
eds1=e[n-1];
eds2=e[n-2];
}
}
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;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -