題目功能說明:
1.啟動X24開關後,輸送帶Y1正轉開始
2.操作者按下X20開關,即刻下達供給指令(Y0),此時會於輸送帶左側出現一個空箱子。
3.當空箱子經輸送帶至橘子供給機正下方,箱子檢測感測器(X1)感應後,即刻停止輸送帶運轉。
4.供給5個橘子到箱子,並把裝滿五個橘子的箱子輸送到右側托盤。
5.橘子的供給是依據橘子的供給指令(Y2),而橘子數量的檢測則依據橘子通過檢測之感應器(X2)來計數。
y(n)+a1y(n-1)+a2y(n-2)+….+an-1y’+any=0.......................(1)
求得其解,因此非常了得。當然,所得的數值對照於原函數的真實解,完全吻合。i’’(t)+3i’(t)+2i(t)=0...................(2)
假設其初值為i(0)=1(A) 且V(0)=2(V)
i(t)=-3e-t+4e-2t(A)...................(3)
上述(3)式即(2)之解。function dydt=fun(t,y)
%線性二階微分方程
dydt(1)=y(2);
dydt(2)=-3*y(2)-2*y(1);
dydt=dydt';
[ode.m]clear all
clc
[t,y]=ode45(@fun,[0 10],[1 -5]);
y1=y(:,1);
y2=y(:,2);
Z=-3*exp(-t)+4*exp(-2*t);
plot(t,y1,'r',t,y2,'g',t,Z,'b*')
[ode.m]程式碼中,Z為微分方程式的解,在本例中與ode所求得的y1做一比較。
[執行結果]
task main()
{
ResetRotationCount(OUT_A);
long readvalue=0;
long DesirePosition=180;
long err=0,prev_err=0;;
long cerr=0;
float S=0;
float Ud=0,Ueq=0;
int U=0;
byte fileHandle;
short bytesWritten;
DeleteFile("DataLog.txt");
CreateFile("DataLog.txt",10000,fileHandle);
string str_position;
string str_err;
string str_cerr;
string str_log;
while(!ButtonPressed(BTNCENTER,true))
{
str_position=NumToStr(readvalue);
str_err=NumToStr(err);
str_cerr=NumToStr(cerr);
str_log= str_position+" " +str_err+ " " +str_cerr;
WriteLnString(fileHandle,str_log,bytesWritten);
readvalue=MotorRotationCount(OUT_A);
err=DesirePosition-readvalue;
cerr=(err-prev_err);
S=0.7*(err)+(cerr);
prev_err=err;
if(S*err>0)
{
Ud=2*err;
}
if(S*err<0) { Ud=-2*err; } Ueq= -0.5*err; U=Ud+Ueq; if(U>100) U=100;
if(U<-100) U=-100; OnFwd(OUT_A,U); TextOut(0,LCD_LINE1,"degree="); NumOut(6*8,LCD_LINE1,readvalue); Wait(50); Off(OUT_A); ClearScreen(); } CloseFile(fileHandle); }