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

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? chap10_3.cpp

?? 先進PID控制matlab仿真(第二版)源程序
?? CPP
字號:
//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{}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
在线视频你懂得一区| 精品伊人久久久久7777人| 国产日韩欧美在线一区| 欧美一级精品大片| 精品日韩一区二区三区免费视频| 欧美人与z0zoxxxx视频| 日韩一区二区免费视频| 欧美成人性福生活免费看| 久久综合国产精品| 国产欧美综合在线观看第十页| 久久无码av三级| 国产欧美日韩卡一| 中文字幕中文乱码欧美一区二区| 亚洲色图一区二区三区| 一级女性全黄久久生活片免费| 亚洲电影视频在线| 看国产成人h片视频| 国产精品系列在线播放| 91在线免费播放| 精品视频一区 二区 三区| 日韩精品一区二区三区视频播放| 2020国产精品自拍| 成人欧美一区二区三区视频网页| 一区二区日韩电影| 久久电影网站中文字幕| av资源网一区| 欧美一区二区视频免费观看| 国产欧美日韩亚州综合| 一区二区三区在线看| 麻豆91免费看| 91在线你懂得| 欧美mv和日韩mv国产网站| 亚洲欧美福利一区二区| 日韩经典一区二区| www.在线成人| 欧美成人a∨高清免费观看| 国产精品久久久久久久久免费丝袜 | 成人av影视在线观看| 日本韩国一区二区三区视频| 日韩欧美电影一区| 1000精品久久久久久久久| 免费观看久久久4p| 91视频观看免费| 久久综合网色—综合色88| 亚洲国产精品久久久男人的天堂| 国产成人精品午夜视频免费| 91精品视频网| 怡红院av一区二区三区| 成人中文字幕在线| 欧美成人性战久久| 日本视频中文字幕一区二区三区| 一本到一区二区三区| 久久精品一二三| 经典三级在线一区| 欧美精品高清视频| 亚洲一区在线看| 99久久er热在这里只有精品15 | 91久久人澡人人添人人爽欧美| 久久久久久日产精品| 日韩影院精彩在线| 欧美日韩中文一区| 亚洲线精品一区二区三区 | 亚洲二区视频在线| 成人18视频日本| 亚洲国产成人午夜在线一区| 韩国av一区二区三区在线观看| 欧美老人xxxx18| 亚洲444eee在线观看| 91官网在线免费观看| 中文字幕一区在线| 99麻豆久久久国产精品免费| 国产校园另类小说区| 国产.精品.日韩.另类.中文.在线.播放| 日韩一区二区精品在线观看| 日韩在线一二三区| 欧美精品久久久久久久多人混战 | 亚洲色图丝袜美腿| 色综合久久88色综合天天| 亚洲日本va在线观看| 91在线免费播放| 亚洲午夜精品久久久久久久久| 欧美亚洲国产一区二区三区va| 一区二区三区**美女毛片| 欧美日韩日日夜夜| 麻豆精品在线看| 日本一区二区久久| 99久久精品国产导航| 亚洲小少妇裸体bbw| 日韩西西人体444www| 国产伦精品一区二区三区在线观看 | 一区二区三区欧美亚洲| 欧美在线色视频| 人人爽香蕉精品| 久久精品视频在线免费观看| 成人一道本在线| 亚洲资源中文字幕| 337p亚洲精品色噜噜狠狠| 久久99精品久久久久久国产越南| 国产亚洲福利社区一区| 99久久99久久免费精品蜜臀| 亚洲电影中文字幕在线观看| 精品成人私密视频| 97久久超碰精品国产| 三级在线观看一区二区| 精品国产乱码久久久久久免费| 国产精品一区二区在线观看不卡| 中文字幕制服丝袜一区二区三区| 欧美亚洲免费在线一区| 国产一区激情在线| 亚洲欧美中日韩| 欧美成人官网二区| 91美女在线视频| 激情久久五月天| 一区二区在线观看免费视频播放| 欧美成人伊人久久综合网| 波多野结衣视频一区| 奇米888四色在线精品| 亚洲欧洲无码一区二区三区| 91精品国产黑色紧身裤美女| 99久久免费视频.com| 麻豆专区一区二区三区四区五区| 国产精品久久久久婷婷二区次 | 国产一区三区三区| 亚洲一区自拍偷拍| 国产精品三级视频| 日韩欧美亚洲一区二区| 在线一区二区观看| 99视频精品全部免费在线| 美国av一区二区| 性做久久久久久免费观看| 中文字幕一区二区三区在线播放| 欧美电影免费提供在线观看| 91久久精品一区二区三区| 国产成人精品免费网站| 美女精品一区二区| 青青草成人在线观看| 亚洲成人动漫在线免费观看| 国产精品久久久久久久第一福利| 久久网这里都是精品| 欧美xxxx老人做受| 欧美一区在线视频| 91精品国产91久久久久久一区二区 | 91成人看片片| 一本色道久久综合亚洲精品按摩| 国产精品99久久久久| 久久99久久99小草精品免视看| 日本欧美一区二区三区| 五月天激情小说综合| 天堂久久一区二区三区| 午夜一区二区三区在线观看| 亚洲一区二区欧美日韩| 亚洲欧美另类在线| 亚洲欧美视频一区| 一区二区三区精品在线观看| 亚洲一区二区综合| 日韩av一级电影| 日本女优在线视频一区二区| 日本亚洲天堂网| 激情五月激情综合网| 国产精品自拍毛片| 播五月开心婷婷综合| 91美女在线看| 欧美亚洲综合一区| 91精品国产综合久久精品图片| 欧美一区欧美二区| 久久伊人中文字幕| 亚洲品质自拍视频| 亚洲成人av资源| 国内成人免费视频| 91浏览器在线视频| 欧美日本乱大交xxxxx| 精品久久久久久久久久久久久久久 | 青娱乐精品视频在线| 久久精品国产在热久久| 国产露脸91国语对白| 不卡欧美aaaaa| 欧美三级欧美一级| 亚洲精品一区二区在线观看| 国产女人18毛片水真多成人如厕 | 青娱乐精品在线视频| 国产精品99久久久久| 色综合久久天天| 91精品国产福利在线观看 | 日韩一区二区不卡| 国产精品免费aⅴ片在线观看| 亚洲欧美电影一区二区| 青青草国产精品97视觉盛宴| 成人黄色一级视频| 欧美精品乱人伦久久久久久| 国产农村妇女毛片精品久久麻豆| 亚洲在线观看免费视频| 久久精品99国产精品| 色综合天天在线| 大白屁股一区二区视频| 色综合天天性综合| 精品免费国产二区三区| 亚洲资源中文字幕| www.一区二区| 久久人人爽爽爽人久久久| 亚洲国产视频a|