郭德偉
(1.紅河學(xué)院工學(xué)院,云南蒙自 661100;2.昆明理工大學(xué)機(jī)電工程學(xué)院,昆明 650093)
平面四桿機(jī)構(gòu)運(yùn)動(dòng)線的Flash Action Script動(dòng)態(tài)模擬
郭德偉1,2
(1.紅河學(xué)院工學(xué)院,云南蒙自 661100;2.昆明理工大學(xué)機(jī)電工程學(xué)院,昆明 650093)
采用Flash Action script技術(shù)對(duì)平面四桿機(jī)構(gòu)的運(yùn)動(dòng)線做出了動(dòng)態(tài)模擬,并對(duì)部分模擬線圖進(jìn)行分析,指出了該模擬方法的優(yōu)越性.
Action Script;四桿機(jī)構(gòu)運(yùn)動(dòng)線;機(jī)械教學(xué);動(dòng)態(tài)模擬
Actionscript是Flash軟件中的腳本語(yǔ)言,憑借其生成的文件體積小、質(zhì)量高、易于網(wǎng)絡(luò)傳播等特點(diǎn),正受到人們更多的關(guān)注,而基于Action Script技術(shù)的虛擬仿真實(shí)驗(yàn)也逐步應(yīng)用到了各仿真實(shí)驗(yàn)[1]及工程教學(xué)中[2,3].平面四桿機(jī)構(gòu)是工程中廣泛使用的典型運(yùn)動(dòng)機(jī)構(gòu),而對(duì)該機(jī)構(gòu)的運(yùn)動(dòng)線作出分析研究并進(jìn)行模擬,對(duì)更好地理解和設(shè)計(jì)平面四桿機(jī)構(gòu)有著重要的意義.本文在利用Flash Actionscript技術(shù)建立的平面四桿機(jī)構(gòu)運(yùn)動(dòng)模型基礎(chǔ)上[4],進(jìn)一步研究了該機(jī)構(gòu)的運(yùn)動(dòng)情況,并對(duì)不同運(yùn)動(dòng)形式機(jī)構(gòu)的運(yùn)動(dòng)線作出動(dòng)態(tài)模擬,即用點(diǎn)的形式描述出了平面四桿機(jī)構(gòu)的位移、速度和加速度隨原動(dòng)件位移的變化關(guān)系,為四桿機(jī)構(gòu)原理的驗(yàn)證及設(shè)計(jì)提供了重要的參考.
由于Flash中坐標(biāo)的方向,平面四桿機(jī)構(gòu)簡(jiǎn)圖如圖1所示,點(diǎn)A、B、C、D分別為機(jī)構(gòu)節(jié)點(diǎn),l1、l2、l3、l4分別為各桿長(zhǎng)度,由用戶設(shè)定,AD設(shè)為水平機(jī)架,原動(dòng)件AB以給定的角速度勻速運(yùn)動(dòng).由于本研究建立在運(yùn)動(dòng)模型已建立的基礎(chǔ)上,運(yùn)動(dòng)過(guò)程中四個(gè)節(jié)點(diǎn)的坐標(biāo)已經(jīng)可以確定.根據(jù)平面四桿機(jī)構(gòu)的運(yùn)動(dòng)規(guī)律[5],各桿運(yùn)動(dòng)關(guān)系調(diào)整如下:
連桿BC加速度
連架桿CD加速度
圖1 平面四桿機(jī)構(gòu)簡(jiǎn)圖
根據(jù)以上關(guān)系,在Flash軟件舞臺(tái)中建立一個(gè)360*360像素的區(qū)域,畫(huà)出縱橫柵格,讓一個(gè)周期的運(yùn)動(dòng)線盡量將主要部分顯示在該區(qū)域中.在該區(qū)域的左下角建立三個(gè)不同顏色的逐漸消失的軌跡點(diǎn)影片剪輯,分別命名為紅色的“ydx1”、綠色的“ydx2”和藍(lán)色的“ydx3”;建立17個(gè)動(dòng)態(tài)文本框來(lái)標(biāo)識(shí)縱橫坐標(biāo)參數(shù),變量名分別為“hzb1”~“hzb5”和“zzb1”~“zzb9”,及3個(gè)圖例顯示文本“tl”,各文本默認(rèn)值如圖2所示;建立3個(gè)按鈕分別用來(lái)控制“位置線圖”、“速度線圖”和“加速度線圖”的切換.使用一幀動(dòng)畫(huà),主程序采用“set Interval”命令,每隔10毫秒讓增加 個(gè)角度(其中為輸入的轉(zhuǎn)速,度/秒),根據(jù)不同桿件長(zhǎng)度判定情況,計(jì)算B、C、D各點(diǎn)的位置,再利用line畫(huà)線命令將各點(diǎn)用不同顏色的線連接起來(lái)形成各桿件.每10毫秒計(jì)算一次并重新劃線,實(shí)現(xiàn)機(jī)構(gòu)的連續(xù)運(yùn)動(dòng),同樣每10毫秒計(jì)算一次各桿件的位移、速度和加速度,用逐漸消失的軌跡點(diǎn)的坐標(biāo)變化形成動(dòng)態(tài)的機(jī)構(gòu)運(yùn)動(dòng)線圖.
圖2 運(yùn)動(dòng)線顯示區(qū)域情況
主要Action Script程序如下:
duration = 10;
ydzb = 0;//橫坐標(biāo)為默認(rèn)值0~360
ydxt1 = 1; //默認(rèn)位置線圖顯示
ydxt2 = 0;
ydxt3 = 0;
function xh():Void {
…//機(jī)構(gòu)運(yùn)動(dòng)程序略
theta1 = -i;//負(fù)號(hào)將旋轉(zhuǎn)方向改成傳統(tǒng)逆時(shí)針?lè)较?/p>
if (theta1<0) {
}
if (xc>=xb && yc<=yb)
{theta2 = Math.atan((yb-yc)/(xc-xb))*180/Math.PI;}if (xc {theta2 = 180-Math.atan((yb-yc)/(xb-xc))*180/Math.PI;} if (xc {theta2 = 180+Math.atan((yc-yb)/(xb-xc))*180/Math.PI;} if (xc>=xb && yc>yb){theta2 = 360-Math.atan((yc-yb)/(xc-xb))*180/Math.PI;} if (xc>=xd && yc<=yd) {theta3 = Math.atan((yd-yc)/(xc-xd))*180/Math.PI;} if (xc {theta3 = 180-Math.atan((yd-yc)/(xd-xc))*180/Math.PI;} if (xc {theta3 = 180+Math.atan((yc-yd)/(xd-xc))*180/Math.PI;} if (xc>=xd && yc>yd) {theta3 = 360-Math.atan((yc-yd)/(xc-xd))*180/Math.PI;} if (ydzb == 180) { hzb1 = -180; hzb2 = -90; hzb3 = 0; hzb4 = 90; hzb5 = 180; } else { hzb1 = 0; hzb2 = 90; hzb3 = 180; hzb4 = 270; hzb5 = 360; }// 當(dāng)機(jī)構(gòu)為雙搖桿機(jī)構(gòu)的一種特殊情況(l1+l4>l2+l3)時(shí),橫坐標(biāo)范圍-180~180 omega1 = w*Math.PI/180; omega2 = -omega1*l1*Math.sin((theta1-theta3)*Math.PI/180)/(l2*Math.sin((theta2-theta3)*Math.PI/180)); //速度 omega3 = omega1*l1*Math.sin((theta1-theta2)*Math.PI/180)/(l3*Math.sin((theta3-theta2)*Math.PI/180));//速度 alpha2 = (-Math .pow(omega1, 2)*l1*Math.cos((theta1-theta3)*Math.PI/180)-Math.pow(omega2,2)*l2*Math.cos((theta2-theta3)*Math.PI/180)+Math.pow(omega3, 2)*l3)/(l2*Math.sin((theta2-theta3)*Math.PI/180)); alpha3 = (Math.pow(omega1, 2)*l1*Math.cos((theta1-theta2)*Math.PI/180)+Math.pow(omega2,2)*l2-Math.pow(omega3, 2)*l3*Math.cos((theta3-theta2)*Math.PI/180))/(l3*Math.sin((theta3- //位置線圖按鈕執(zhí)行 if (ydxt1 == 1) { zzb1 = 0; zzb2 = 60; zzb3 = 120; zzb4 = 180; zzb5 = 240; zzb6 = 300; zzb7 = 360; zzb8 = "(deg)"; zzb9 = " "; tl="θ"; duplicateMovieClip("ydx1", "qx111"+nn, 300+nn); setProperty("qx111"+nn, _x, wzx._x+theta11+ydzb); setProperty("qx111"+nn, _y, wzx._y); duplicateMovieClip("ydx2", "qx222"+nn, 1000+nn); set Property("qx222"+nn, _x, wzx._x+theta11+ydzb); set Property("qx222"+nn, _y, wzx._y-theta22); duplicate Movie Clip("ydx3", "qx333"+nn, 2000+nn); set Property("qx333"+nn, _x, wzx._x+theta11+ydzb); set Property("qx333"+nn, _y, wzx._y-theta33); } //速度線圖按鈕執(zhí)行 if (ydxt2 == 1) { sdbl = 60; //放大倍數(shù)增強(qiáng)顯示 zzb1 = -180/sdbl; zzb2 = -120/sdbl; zzb3 = -60.0/sdbl; zzb4 = 0; zzb5 = 60.0/sdbl; zzb6 = 120.0/sdbl; zzb7 = 180.0/sdbl; zzb8 = "(rad/s)"; zzb9 = " "; tl="ω"; duplicate Movie Clip("ydx1", "qx111"+nn, 300+nn); set Property("qx111"+nn, _x, wzx._x+theta11+ydzb); set Property("qx111"+nn, _y, wzx._y-omega1*sdbl-180); duplicate Movie Clip("ydx2", "qx222"+nn, 1000+nn); set Property("qx222"+nn, _x, wzx._x+theta11+ydzb); set Property("qx222"+nn, _y, wzx._y-omega2*sdbl-180); duplicate Movie Clip("ydx3", "qx333"+nn, 2000+nn); set Property("qx333"+nn, _x, wzx._x+theta11+ydzb); set Property("qx333"+nn, _y, wzx._y-omega3*sdbl-180); } //加速度線圖按鈕執(zhí)行 if (ydxt3 == 1) { zzb1 = "-18"; zzb2 = "-12"; zzb3 = "-6"; zzb4 = 0; zzb5 = "6"; zzb6 = "12"; zzb7 = "18"; zzb8 = "(rad/s )"; zzb9 = "2"; tl="α"; duplicateMovieClip("ydx1", "qx111"+nn, 300+nn); set Property("qx111"+nn, _x, wzx._x+theta11); set Property("qx111"+nn, _y, wzx._y-180); duplicate Movie Clip("ydx2", "qx222"+nn, 1000+nn); set Property("qx222"+nn, _x, wzx._x+theta11+ydzb); set Property("qx222"+nn, _y, wzx._y-jsd2*10-180); //*10 放大倍數(shù)增強(qiáng)顯示 duplicate Movie Clip("ydx3", "qx333"+nn, 2000+nn); set Property("qx333"+nn, _x, wzx._x+theta11+ydzb); set Property("qx333"+nn, _y, wzx._y-jsd3*10-180); } update After Event(); … nn = nn+1; if (nn>=500) { nn = 1; } i = i-v/(1000/duration); if (i<=-360) {i = 0;} } setInterval(this, "xh", duration); “位置線圖”按鈕上程序 on (release) { ydxt1=1; ydxt2=0; ydxt3=0; } “速度線圖”按鈕上程序 on (release) { ydxt1=0; ydxt2=1; ydxt3=0; } “加速度線圖”按鈕上程序 on (release) { ydxt1=0; ydxt2=0; ydxt3=1; } 圖3 不同條件下平面四桿機(jī)構(gòu)運(yùn)動(dòng)線圖 對(duì)四桿機(jī)構(gòu)運(yùn)動(dòng)線的分析是更好地理解和設(shè)計(jì)四桿機(jī)構(gòu)的一個(gè)重要過(guò)程,而采用Flash Actionscript技術(shù)模擬得到的動(dòng)態(tài)機(jī)構(gòu)運(yùn)動(dòng)線,不但將機(jī)構(gòu)的位移、速度和加速度隨原動(dòng)件位移的變化關(guān)系較為真實(shí)地反映了出來(lái),而且界面美觀,色彩分明,使用操作簡(jiǎn)便,鑒于Flash技術(shù),生成文件體積小質(zhì)量高,其應(yīng)用價(jià)值在科研、教學(xué)等方面具有較好的潛力. [1] 劉均,馮志林.計(jì)算機(jī)組成原理仿真實(shí)驗(yàn)系統(tǒng)設(shè)計(jì)與實(shí)現(xiàn)[J].浙江工業(yè)大學(xué)學(xué)報(bào),2009,37(5):486-488. [2] Zhenguo Gao,Chunsheng Wang.Constructing virtual hydraulic circuits using Flash[J].Computer Applications in Engineering Education, 2010,18(2): 356-374. [3] 郭德偉,肖天慶.基于Flash Action Script的機(jī)械類(lèi)教學(xué)模擬課件研制[J].現(xiàn)代教育技術(shù), 2009,19(8): 93-97. [4] Dewei Guo,Tianqing Xiao.Kinematic Simulation Design of Planar Four-bar Linkage Based on Flash Action Script [A].In: Xueli Zhou.2010 Third International Conference on Education Technology and Training [C].IEEE,Inc.2010.301-304. [5] 孫桓,陳作模.機(jī)械原理(第六版)[M].北京:高等教育出版社,2001:61-64. Dynamic Simulation of Planar Four-bar Linkage Mot ion Line Based on Flash Act ion Script GUO De-wei1,2 Dynamic simulation of planar four-bar linkage motion line is realized by using Flash Action script, and some of the simulation charts are analyzed, on the basis of that, the advantages of the simulation method are addressed Action Script; four-bar linkage mot ion line; mechanical teaching; dynamic simulation TP39 A 1008-9128(2012)02-0044-05 2012-01-02 云南省教育廳科研項(xiàng)目(2010C076) 郭德偉(1978-),男,云南通海人,講師,在讀碩士.研究方向:機(jī)械數(shù)字化設(shè)計(jì)與制造. [責(zé)任編輯 自正發(fā)]3 結(jié)果分析
4 小結(jié)
(1.Engineering College, Honghe University, Mengzi 661100, China;2.Faculty of Mechanical and Electrical Engineering,Kunming University of Science and Technology, Kunming 650093, China)