亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? chap10_3.cpp

?? 本程序?yàn)閜id控制程序
?? CPP
字號(hào):
//chap10_3.cpp
//Real-time PID Control
//Options->Linker->Libraries->Graphics Library
//Copy c:\Borlandc\bgi\*.bgi files to the current directory
//Copy the H file "chap10_3.h" to \include directory
//Set:(1)c:\borlandc\include;(2)c:\borlandc\lib;
#include <math.h>       //Using sin()
#include <conio.h>      //Using clrscr() and getch() and kbhit()
#include <graphics.h>
#include <stdio.h>      //Using sprintf()
#include <dos.h>        //Using _disable() and _enable()
#include <string.h>
#include <bios.h>       //Specially for std_fun bioskey()
#include <stdlib.h>     //Using exit()
#include <chap10_3.h>   //Interupt parameters

#define OUTPORT outportb
#define INPORT  inportb
#define T        500
#define DD_PORT 0x380    //D/D board base address

int channel=1;            //three frame: 0:inner; 1:middle; 2:outter
int Signal=1;             //Sine Signal
//int Signal=2;           //Step Signal

double PositionCommand[TIMER_RATIO];
double Line1[TIMER_RATIO];
double CurrentPosition[TIMER_RATIO];
double Line2[TIMER_RATIO];

double A,F;
double u=0.0,ts=0.001;
double pi=3.14159265358979;
double timezt=0;
int flag=0;
unsigned short    UpdateFlag=0;
double mStep,mStep_1,Step,SaveStep=0;  //mStep_1(t)=mStep(t-10)
//mStep must defined double
unsigned short    ItemNum;
unsigned short    TimerCount;
unsigned long     Counter;

unsigned short    flagF5;
unsigned short    FinishSimulate;
FILE *xyz;

#define DD_PORT  0x380   //Inner frame
void ResetShuXianBiao()
{
     outport(DD_PORT,0x0);
     outport(DD_PORT,0xf);
     outport(DD_PORT+4,0x0);
     outport(DD_PORT+4,0xf);
     outport(DD_PORT+8,0x0);
     outport(DD_PORT+8,0xf);
}

double angle_1;
double ReadD_D(unsigned short channel)
{
	unsigned short Data_H1,Data_L1,Data_H2,Data_L2;
	long int data,angle_degree,angle_minute,angle_second;
	double angle,angle1,errory;
	do {
	     Data_L1=inport(DD_PORT+4*channel);
	     Data_H1=inport(DD_PORT+2+4*channel);
	     Data_L2=inport(DD_PORT+4*channel);
	     Data_H2=inport(DD_PORT+2+4*channel);
	    }while((Data_L1!=Data_L2)||(Data_H1!=Data_H2));

	 data=((Data_H1 & 0x3f)*65536+Data_L1);
	 angle1=data*0.9;       //Second per data
	 if((Data_H1 & 0x80) ==0x80)  //nagative if Data_H.7 ==1
	     angle1=-angle1;
	 angle=angle1/3600.0;   //Change from Second to degree
	 return(angle);
}

#define Da_Board  0x1A0
void Write_DA(double dValue, int channel)
{
   unsigned int hi,low,hilow;
   int state;
   double voltage;
   voltage=dValue;
   if(voltage>2.0)voltage=2.0;
   if(voltage<-2.0)voltage=-2.0;
   hilow=(unsigned int)((voltage)*65535/20);

   hi=hilow&0xff00;
   hi=hi>>8;
   low=hilow&0xff;

   outportb(Da_Board+0,channel); //Select channel
   do
	{
	 state=(inportb(Da_Board+0))&0x80;
	} while(state==1);    //read bit D7; if D7=0 write data

   outportb(Da_Board+1,low);   //write low byte
   outportb(Da_Board+2,hi);    //write high byte
   outportb(Da_Board+3,0);     //start da
}

int KbGetKey(int *ScanCode)
{
     int Key;
     int KeyCode;
     Key=bioskey(0);
     if((Key&0x00ff)==0)
     {
	 KeyCode=0;
	 *ScanCode=(Key>>8)&127;
     }
     else
     {
	 KeyCode=Key&0xff;
	 *ScanCode=0;
     }
     return(KeyCode);
}

int SavedFlag,SaveCounter;
void SetupKeyReaction(void)
{
     int Key,Scan;
     if(kbhit())
     {
	  Key=KbGetKey(&Scan);
	 if (Key==KB_C_N_F5 && Scan==KB_S_N_F5)
		{
		 SavedFlag=1;
		 SaveCounter=0;
		}
	 if(Key==KB_C_A_X && Scan==KB_S_A_X)
	 {
	     FinishSimulate = 1;
	 }
     }
}

double huge DataSaved[DATA_DIMENTION][DATA_LENGTH];
void DataSaveRoutine( long int SaveSpan)
{
	if(SavedFlag==1)
	  {
	    if((SaveCounter<=SaveSpan*DATA_LENGTH)) //DATA_LENGTH is Defined by chap10_3.h
	     {
		int SaveIndex = SaveCounter/SaveSpan;
//Save data(rin,yout) to xyz.dat
		DataSaved[0][SaveIndex]=PositionCommand[ItemNum];
		DataSaved[1][SaveIndex]=CurrentPosition[ItemNum];
	     }
	   SaveCounter++;
	   if(SaveCounter>=SaveSpan*DATA_LENGTH) { SavedFlag=0; SaveCounter=0; }
	  }
	 if(SavedFlag==0)  SaveCounter=0;
}

int M;
double yout,error,derror;
double u_1=0,u_2=0,y_1=0,y_2=0,error_1=0,error_2=0,ei=0;
double Control(double rin,unsigned short channel)
{
M=2;
if( M==1)    //Realtime control
{
yout=ReadD_D(channel);   //Read realtime data
CurrentPosition[ItemNum]=yout;
}
if( M==2 )   //Simulation control
{
yout=1.94*y_1-0.94*y_2+0.0008674*u_1+0.0008503*u_2;
}

CurrentPosition[ItemNum]=yout;
yout=CurrentPosition[ItemNum];

F=0.50;
A=0.010; if(A==0.0) { A=0.0001; }
rin=A*sin(F*2*pi*timezt);
error=rin-yout;

u=10.0*error+1.0*derror+0*ei;
//Update Parameters
y_2=y_1;y_1=yout;
u_2=u_1;u_1=u;
error_2=error_1;
error_1=error;

return u;
}
int Cycles=5;  //Display cycle times
void DynamicDisplay()
{
     //Make a window
     char   strA[50];
     int    i,Spoint;
     int    bottom,middle,top,right,left;
     bottom=300;middle=200;top=100;left=50;right=550;
     setcolor(RED);
     outtextxy(270,50,"PID Controller");
     line(left,top,left,bottom);        //lineleft
     sprintf(strA,"%f",A*6.0/5.0);
     outtextxy(36,top-10,strA);
     line(left,top,right,top);          //linetop
     outtextxy(36,middle,"0");
     line(left,middle,right,middle);    //linemiddle
     sprintf(strA,"%f",-A*6.0/5.0);
     outtextxy(36,bottom+5,strA);
     line(left,bottom,right,bottom);    //linedown
     line(right,top,right,bottom);      //lineright

//Make Curve Range
     for(i=0;i<TIMER_RATIO;i++)   //Plot 10 points once a time
     {
	 Spoint=mStep_1/Step-TIMER_RATIO+i;  //Start point

	 Spoint=Spoint/Cycles;  //25000/(10*T)=One Cycle
	 if(Spoint%T==0)
	 {
	     clrscr();
	 }
	 putpixel(Spoint-(Spoint/T)*T+50,-100*5.0/6.0*
			 (Line1[i]/A)+200,BLUE);    //Practical output
	 putpixel(Spoint-(Spoint/T)*T+50,-100*5.0/6.0*
			 (Line2[i]/A)+200,RED);     //Ideal output
	 putpixel(Spoint-(Spoint/T)*T+50,-100*5.0/6.0*
			  u+200,BLACK);             //Control output
     }
}

void IniTimer( unsigned char timer_mode ) //Initial 8253
{
	unsigned char value;
	_disable();

//Seting control word
	OUTPORT(TIMER_BASE+3,timer_mode);
	value = TIMER_VALUE ;        //Low 8 bits
	OUTPORT( TIMER_BASE , value );
	value = TIMER_VALUE / 256 ;  //High 8 bits
	OUTPORT( TIMER_BASE , value );
	_enable();
}

void interrupt ( *OldIrqVect )( __CPPARGS );
void interrupt TimerIrqVect( __CPPARGS )   //Interupt processing
{
    unsigned short i;
    _disable();
    ItemNum = Counter%TIMER_RATIO;

    if(Counter%20000==0)
    {
	Counter=0;
	SaveStep=SaveStep+mStep;
	mStep=0;
    }
    mStep += Step;          //k*ts: TIMER_CYCLE / TIMER_RATIO;

if (Signal==1)   //Dynamic Signal
{   PositionCommand[ItemNum]=A*sin(F*2*pi*mStep);  }
if (Signal==2)   //Static Signal
{   PositionCommand[ItemNum]=A;  }

    u=Control(PositionCommand[ItemNum],channel);

    Write_DA(u,channel);
    DataSaveRoutine(1);

    Counter++;
    if((--TimerCount)==0)   //Updating 1 times while interupted by 10 times
    {
	 UpdateFlag=1;
	 mStep_1=mStep;
	 TimerCount=TIMER_RATIO;
    }
     OUTPORT(EOI,0x20); //OCW2 value:0010 0000
    _enable();
}

void IrqHook( unsigned short irqnumber, void interrupt ( *newVect )( __CPPARGS ) )
{
	_disable();
	OldIrqVect = getvect ( irqnumber );
	setvect ( irqnumber , newVect );
	_enable();
}

void ReleaseHardware()
{
	_disable();
	setvect (Irqnumber,OldIrqVect);
	Write_DA(0.0,0);
	Write_DA(0.0,1);
	Write_DA(0.0,2);
	_enable();
}

main(void)
{
     int i,j,k;
     unsigned char timer0_mode,strtime[10];
     int driver,mode;
     driver=DETECT;
     initgraph(&driver,&mode,"");
     timer0_mode=T8253_MODE_3|T8253_CHANNEL_0|
		 T8253_BIN_MODE|T8253_LOW_FIRST;  //8253 timer setting

     Step=TIMER_CYCLE/TIMER_RATIO;        //Step=0.01/10=0.001s=ts
     mStep=0;
     mStep_1=0;
     Counter=0;
     TimerCount=TIMER_RATIO;

     clrscr();
     ResetShuXianBiao();
//Using interupt function
     IniTimer(timer0_mode);  //8253 timer setting
     IrqHook(Irqnumber,TimerIrqVect);

     while(1)                //1 is true
     {
	 timezt=SaveStep+mStep;
	 if(UpdateFlag==1)
	 {
	     UpdateFlag=0;
	     for(i=0;i<TIMER_RATIO;i++)
	     {
		 Line1[i]=PositionCommand[i];
		 Line2[i]=CurrentPosition[i];
	      }
	     SetupKeyReaction();
	     DynamicDisplay();
	  }

	 sprintf(strtime,"%f",timezt);
	 bar(260,380,360,360);
	 outtextxy(285,385,"time(s)");
	 outtextxy(280,370,strtime);

//	 if(kbhit()) {  break; } //Break by any key
	 if(FinishSimulate==1)   //Break by "ALT+X"
	  break;
     }//End of for{} loop

//Open xyz.dat for save data
  if ((xyz = fopen("xyz.dat", "w"))== NULL)
       {
	 printf("Cannot open output file xyz.dat.\n");
	 exit( 1 );
       }
//xyz=fopen("xyz.dat","w");

  for( i=0;i<DATA_LENGTH;i++)
	{
	 for( j=0; j<DATA_DIMENTION; j++)
	     {
	      fprintf(xyz," %10.6f ",DataSaved[j][i]);
	     }
	 fprintf(xyz,"\n");
	}
fclose(xyz);

ReleaseHardware();   //Clear all output u
getch();   //Any key to exit
closegraph();
//Restores the original video mode detected by initgraph
restorecrtmode();
return 0;
}  //End of main{}

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
69堂国产成人免费视频| 高清在线成人网| 色婷婷久久综合| 国产精品人成在线观看免费 | 欧美专区日韩专区| 亚洲手机成人高清视频| av不卡在线播放| 国产精品国产三级国产aⅴ中文| 国产一区二区三区香蕉| 久久亚洲一区二区三区四区| 奇米色一区二区三区四区| 88在线观看91蜜桃国自产| 午夜精品国产更新| 日韩欧美资源站| 美日韩一区二区三区| 欧美一级黄色片| 久久99精品久久久久婷婷| 5月丁香婷婷综合| 免费黄网站欧美| 国产婷婷一区二区| 国产精品一品视频| 日韩伦理免费电影| 欧美午夜宅男影院| 久久精品久久久精品美女| 精品国产自在久精品国产| 国产精品91一区二区| 国产精品美女久久久久久久久久久| 成人久久久精品乱码一区二区三区| 亚洲三级在线观看| 欧美日韩亚州综合| 久久精品72免费观看| 久久久久久久久久久99999| 成人av在线播放网址| 亚洲欧洲www| 欧美亚洲动漫制服丝袜| 免费观看在线综合色| 精品欧美久久久| www.亚洲人| 日韩一区欧美二区| 久久久国产一区二区三区四区小说 | 国产精品情趣视频| 91免费国产视频网站| 亚洲成人精品一区| 久久久久久久av麻豆果冻| 色欧美片视频在线观看在线视频| 麻豆91免费看| 香蕉乱码成人久久天堂爱免费| 国产婷婷一区二区| 欧美精品一区二区三区一线天视频| 91精品办公室少妇高潮对白| 福利一区二区在线观看| 国产在线播放一区| 麻豆极品一区二区三区| 午夜天堂影视香蕉久久| 亚洲一区二区在线免费看| 亚洲欧洲av另类| 国产人伦精品一区二区| 久久久久久久久97黄色工厂| 欧美不卡在线视频| 欧美一区二区在线观看| 欧美日本在线一区| 欧美日韩三级一区| 欧美午夜片在线观看| 色老汉av一区二区三区| 色婷婷综合久久久中文字幕| 91捆绑美女网站| 91美女在线看| 91麻豆国产在线观看| www.综合网.com| 97se狠狠狠综合亚洲狠狠| 成人黄色在线视频| 波多野结衣的一区二区三区| 成人一区在线看| av电影天堂一区二区在线| av色综合久久天堂av综合| 不卡在线视频中文字幕| 97久久人人超碰| 色综合天天狠狠| 91国产免费看| 欧美日韩mp4| 日韩精品一区二区三区在线观看| 日韩欧美国产成人一区二区| 日韩亚洲欧美综合| 久久久久国产精品麻豆| 国产精品理伦片| 尤物在线观看一区| 天涯成人国产亚洲精品一区av| 日本伊人色综合网| 精品无人区卡一卡二卡三乱码免费卡| 国产一区二区三区| 波多野结衣的一区二区三区| 欧洲av一区二区嗯嗯嗯啊| 777xxx欧美| 久久久五月婷婷| 亚洲天堂精品在线观看| 亚洲成人免费电影| 国内精品伊人久久久久av一坑| 国产成人一级电影| 日本精品裸体写真集在线观看| 欧美视频一区二区三区四区| 日韩一级片网站| 国产网站一区二区三区| 伊人开心综合网| 午夜a成v人精品| 国产精品综合二区| 99麻豆久久久国产精品免费优播| 日本二三区不卡| 精品久久久久久无| 亚洲色图在线看| 免费一级片91| 成人av在线播放网站| 欧美一区二区三区在线电影| 久久精品在这里| 午夜欧美一区二区三区在线播放| 久久99精品一区二区三区| 91蜜桃视频在线| 精品精品欲导航| 一区二区欧美在线观看| 精品一区二区三区av| 欧美亚洲一区三区| 久久蜜桃av一区精品变态类天堂| 亚洲资源在线观看| 国产激情视频一区二区三区欧美 | 欧美一区二区三区白人| 日本一区二区成人| 日韩成人免费在线| 91美女视频网站| 国产亚洲精品中文字幕| 亚洲成人久久影院| jlzzjlzz国产精品久久| 欧美一区二区在线视频| 依依成人精品视频| 国产精品一区一区三区| 欧美日韩夫妻久久| 亚洲精品中文在线| 成人av网址在线观看| 日韩视频国产视频| 亚洲国产欧美一区二区三区丁香婷| 久国产精品韩国三级视频| 欧美色综合天天久久综合精品| 中国色在线观看另类| 久久爱另类一区二区小说| 欧美电影影音先锋| 一片黄亚洲嫩模| 91免费版pro下载短视频| 欧美经典一区二区| 国产一区二区伦理片| 91精品婷婷国产综合久久性色 | 日韩久久免费av| 亚洲va欧美va人人爽午夜| voyeur盗摄精品| 精品福利视频一区二区三区| 日本欧美肥老太交大片| 精品视频在线看| 一区二区三国产精华液| 色呦呦网站一区| 国产精品久久久久影院亚瑟 | 国产不卡高清在线观看视频| 精品国产sm最大网站| 青青草国产成人av片免费| 欧美伊人久久久久久久久影院| 亚洲人成在线播放网站岛国| 成人毛片在线观看| 国产精品伦一区| www.亚洲色图.com| 中文字幕日韩欧美一区二区三区| 国产91丝袜在线播放九色| 国产精品无码永久免费888| 成人深夜福利app| 亚洲三级视频在线观看| 91精品福利在线| 丝袜美腿一区二区三区| 91精品综合久久久久久| 蜜桃视频免费观看一区| 久久中文娱乐网| 成人综合激情网| 亚洲伦在线观看| 欧美日韩高清影院| 久久99国产精品尤物| 久久久久国产一区二区三区四区| 国产a精品视频| 亚洲色欲色欲www| 欧美日韩在线直播| 麻豆91免费看| 国产欧美日韩亚州综合| 一本色道久久综合亚洲91| 亚洲一卡二卡三卡四卡五卡| 欧美精三区欧美精三区| 九九九久久久精品| 国产人妖乱国产精品人妖| 91啪九色porn原创视频在线观看| 亚洲国产一区二区视频| 精品国产亚洲在线| a级精品国产片在线观看| 亚洲国产中文字幕在线视频综合| 日韩欧美电影一区| 9色porny自拍视频一区二区| 午夜伦欧美伦电影理论片| 欧美精品一区二区久久婷婷| 99久久精品免费看|