⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 yewei.c

📁 对液位先建模
💻 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 + -