2/4/07

6.7 繪出連桿之極限位置

drawlinks函數


有了f4bar.m之計算,只要連桿組可以組立(form = 1),即表示每一個相對應連桿的角度均可獲得,因而可以進行繪出其相關位置。程式drawlinks之目的即是利用MATLAB繪製四連桿之相關位置。故此程式本身會呼叫f4bar.m函數以計算四連桿之向量位置,然後繪圖。在其呼叫f4bar.m函數時,其角速度及角加速度均設為零。其呼叫格式如下:

function drawlinks(r,th1,th2,sigma,driver)

其輸入各式與f4bar.m大體相同,茲說明如下:
  • r(1:4) = 各桿之長度,r(1)為固定桿,其餘分別為曲桿、結合桿及被動桿。
  • theta1 = 第一桿之水平角,或為四連桿之架構角,以角度表示。
  • theta2 = 驅動桿之水平夾角,以角度表示。一般為曲桿角,但若為結合桿驅動,則為結合桿之水平夾角。
  • sigma = +1 or -1. 組合模式,負值表示閉合型,正值為分支型,但有時需視實際情況而定。
  • driver = 0 (驅動桿為第二桿); 1 (驅動桿為第三桿)


程式中,在呼叫f4bar.m過後,僅取其values中第一欄中之數據,即r1、r2、r3及r4等之複數型式資料。構成基本的O、R、P、Q等四點。O為原點,R及Q為r2與r4的向量點,直接使用即可,而P點則為兩桿組合點,即為r1+r4或r2+r3的向量和,本程式取其前者。

程式內容



function drawlimits(r,th1,sigma,driver)
%function drawlmits(r,th1,sigma,driver)
%draw the positions of four-bar links
%call f4bar funcion
%r: row vector for four links
%th1: frame angle
%sigma: assembly mode
%driver: 0 for crank, 1 for coupler
[Qstart, Qstop]=fb_angle_limits(r,th1,driver)
clf;
[values b]=f4bar(r,th1,Qstart,0,0,sigma,driver);
rr=values(:,1);
rr(3)=rr(1)+rr(4);
rx=real(rr);rx(4)=0;
ry=imag(rr);ry(4)=0;
if b==1
plot([0 rx(1)],[0 ry(1)],'k-','LineWidth',4);
hold on;
if driver==0
plot([0 rx(2)],[0 ry(2)],'b-','LineWidth',1.5);
plot([rx(2) rx(3)],[ry(2) ry(3)],'r-','LineWidth',2);
else
plot([0 rx(2)],[0 ry(2)],'r-','LineWidth',2);
plot([rx(2) rx(3)],[ry(2) ry(3)],'b-','LineWidth',1.5);
end
plot([rx(1) rx(3)],[ry(1) ry(3)],'-g');
plot(rx,ry,'bo');
text(0,0,' O');text(rx(1),ry(1),' R');
text(rx(2),ry(2),' P');text(rx(3),ry(3),' Q');
text(rx(2)/2,ry(2)/2,['s1=' num2str(Qstart,'%6.1f')]);
else
fprintf('Combination of links fails at degrees %6.1f\n',Qstart);
end
[values b]=f4bar(r,th1,Qstop,0,0,sigma,driver);
rr=values(:,1);
rr(3)=rr(1)+rr(4);
rx=real(rr);rx(4)=0;
ry=imag(rr);ry(4)=0;
if b==1
if driver==0
plot([0 rx(2)],[0 ry(2)],'b-','LineWidth',1);
plot([rx(2) rx(3)],[ry(2) ry(3)],'r-','LineWidth',1.5);
else
plot([0 rx(2)],[0 ry(2)],'r-','LineWidth',1.5);
plot([rx(2) rx(3)],[ry(2) ry(3)],'b-','LineWidth',1);
end
plot([rx(1) rx(3)],[ry(1) ry(3)],'g-');
plot(rx,ry,'bo');
text(rx(2),ry(2),' p');text(rx(3),ry(3),' q');
text(rx(2)/2,ry(2)/2,[' s2=' num2str(Qstop,'%6.1f')]);
else
fprintf('Combination of links fail at degrees %6.1f\n',Qstop);
end
axis equal
grid on



執行範例


第二桿為驅動桿:



(1) r = [1 2 3 4]

drawlimits([1 2 3 4],0,-1,0)

Qstart = 3.6e-005
Qstop = 360


圖6.17 第二桿驅動,屬全迴轉之情形(r = [1 2 3 4])


本例中,無論第二桿或第四桿,均可完全迴轉。


(2)r =[3 5 2 1]

drawlimits([3 5 2 1],0,1,0)

Qstart = -33.557
Qstop = 33.557


圖6.18 第二類型,右邊有限制,左邊無限(r =[3 5 2 1])


圖6.18則因 3+5≧2+1,|3-5|≧|2-1|,故屬前述之第二型限制角度。


(3)r =[5 4 1 3]

drawlimits([5 4 1 3],0,1,0)

Qstart = 22.332
Qstop = 51.318


圖6.19 第三類型,前後角度限制(r =[5 4 1 3])


本例中,因為各桿長度符合第三類型,即5+4≧1+3,|5-4|≦|1-3|,故其角度限制如圖6.19。


(4)r =[4 3 3 5]

drawlimits([4 3 3 5],0,1,0)

Qstart = 28.955
Qstop = 331.04


圖6.20 第四類型(r2驅動) (r =[4 3 3 5])


此類型與第一類型類似,但角度限制在右邊,因為各桿之長度符合該項條件:4+3≦3+5,|4-3|≦|3-5|。如圖6.21。


第三桿為驅動桿時:



(5) r =[4 5 3 5]

drawlimits([4 5 3 5],0,-1,1)
Qstart = 3.6e-005
Qstop = 360

圖6.21 第三桿與第一桿平行,但可完全迴轉(r =[4 5 3 5])



(6)r =[4 3 3 3 ]

drawlimits([4 3 3 3],0,-1,1)

Qstart = -117.28
Qstop = 117.28


圖6.22 第三桿之限制角度相反,屬第六情況(r =[4 3 3 3 ])



(7)r =[4 4 6 1]

drawlimits([4 4 6 1],0,-1,1)

Qstart = 26.384
Qstop = 55.771


圖6.23 不同角度但同一象限內之限制,屬第七狀況(r =[4 4 6 1])


(8)r =[3 4 4 6 ]

 drawlimits([3 4 4 6],0,-1,1)

Qstart = 28.955
Qstop = 331.04


圖6.24 上下象限之限制角度,兩者和為360度(r =[3 4 4 6 ])