2020国赛A题 炉温曲线
2020年高教社杯全國大學生數學建模競賽A題
爐溫曲線
題目
在集成電路板等電子產品生產中,需要將安裝有各種電子元件的印刷電路板放置在回焊爐中,通過加熱,將電子元件自動焊接到電路板上。在這個生產過程中,讓回焊爐的各部分保持工藝要求的溫度,對產品質量至關重要。目前,這方面的許多工作是通過實驗測試來進行控制和調整的。本題旨在通過機理模型來進行分析研究。
回焊爐內部設置若干個小溫區,它們從功能上可分成4個大溫區:預熱區、恒溫區、回流區、冷卻區(如圖1所示)。電路板兩側搭在傳送帶上勻速進入爐內進行加熱焊接。
某回焊爐內有11個小溫區及爐前區域和爐后區域(如圖1),每個小溫區長度為30.5 cm,相鄰小溫區之間有5 cm的間隙,爐前區域和爐后區域長度均為25 cm。
回焊爐啟動后,爐內空氣溫度會在短時間內達到穩定,此后,回焊爐方可進行焊接工作。爐前區域、爐后區域以及小溫區之間的間隙不做特殊的溫度控制,其溫度與相鄰溫區的溫度有關,各溫區邊界附近的溫度也可能受到相鄰溫區溫度的影響。另外,生產車間的溫度保持在25oC。
在設定各溫區的溫度和傳送帶的過爐速度后,可以通過溫度傳感器測試某些位置上焊接區域中心的溫度,稱之為爐溫曲線(即焊接區域中心溫度曲線)。附件是某次實驗中爐溫曲線的數據,各溫區設定的溫度分別為175oC(小溫區15)、195oC(小溫區6)、235oC(小溫區7)、255oC(小溫區89)及25oC(小溫區10~11);傳送帶的過爐速度為70 cm/min;焊接區域的厚度為0.15 mm。溫度傳感器在焊接區域中心的溫度達到30oC時開始工作,電路板進入回焊爐開始計時。
實際生產時可以通過調節各溫區的設定溫度和傳送帶的過爐速度來控制產品質量。在上述實驗設定溫度的基礎上,各小溫區設定溫度可以進行±10oC范圍內的調整。調整時要求小溫區15中的溫度保持一致,小溫區89中的溫度保持一致,小溫區1011中的溫度保持25oC。傳送帶的過爐速度調節范圍為65100 cm/min。
在回焊爐電路板焊接生產中,爐溫曲線應滿足一定的要求,稱為制程界限(見表1)。
請你們團隊回答下列問題:
問題1 請對焊接區域的溫度變化規律建立數學模型。假設傳送帶過爐速度為78 cm/min,各溫區溫度的設定值分別為173oC(小溫區1~5)、198oC(小溫區6)、230oC(小溫區7)和257oC(小溫區8至9),請給出焊接區域中心的溫度變化情況,列出小溫區3、6、7中點及小溫區8結束處焊接區域中心的溫度,畫出相應的爐溫曲線,并將每隔0.5 s焊接區域中心的溫度存放在提供的result.csv中。
問題2 假設各溫區溫度的設定值分別為182oC(小溫區1~5)、203oC(小溫區6)、237oC(小溫區7)、254oC(小溫區8至9),請確定允許的最大傳送帶過爐速度。
問題3 在焊接過程中,焊接區域中心的溫度超過217oC的時間不宜過長,峰值溫度也不宜過高。理想的爐溫曲線應使超過217oC到峰值溫度所覆蓋的面積(圖2中陰影部分)最小。請確定在此要求下的最優爐溫曲線,以及各溫區的設定溫度和傳送帶的過爐速度,并給出相應的面積。
問題4 在焊接過程中,除滿足制程界限外,還希望以峰值溫度為中心線的兩側超過217oC的爐溫曲線應盡量對稱(參見圖2)。請結合問題3,進一步給出最優爐溫曲線,以及各溫區設定的溫度及傳送帶過爐速度,并給出相應的指標值。
問題分析
問題一的分析:
對于問題一,我們需要首先根據題目中給出的各個小溫區的設定溫度值,來計算穩定狀態下回焊爐中各個溫區、溫區之間的間隙以及爐前區域、爐后區域等的溫度分布。通過傅里葉定律推導一維穩態傳熱過程,確定在溫區之間間隙的溫度分布以及爐前區域的溫度分布等。由題中已給出的區域長度信息,以及傳送帶的過爐速度,我們可以計算出在每個小溫區和每個間隙經過的時間。
之后對電路板在回流爐中的焊接區域中心溫度變化進行分析。利用垂直表面的熱流密度與電路板表面積的乘積等于整個電路板得到的熱能的關系,由于電路板厚度很小且導熱系數很高,可以近似地認為整個電路板的溫度相等均勻分布。從而導出一個電路板兩面與相同溫度熱源進行熱對流后任意時間的溫度公式,因為在每個恒定溫度的小溫區的經過時間已知,我們可以得到電路板經過每個小溫區后的溫度變化情況。之后對于間隙中溫度不恒定的情況,采用微分的思想,將間隙劃分為很多寬度很小的區域,從而可以近似地認為每個區域溫度相等,采用之前導出的公式進行計算。對于降溫,采用牛頓冷卻模型進行處理,列出常微分方程之后進行離散化處理得到差分方程,從而可以得到冷卻時焊接區域中心溫度的大致變化情況。
根據上述的模型,代入題目中附件給出的數據進行擬合來反推求解模型中的一些未知的參數。求解過程中發現降溫過程中降溫速率變化與理論不相符,得出回流區高溫可能影響到冷卻區的邊界附近的溫度,在模型中對其進行考慮;發現恒定的熱時間常數使得峰值溫度無法到達要求范圍,了解到熱時間常數隨溫度升高而降低,在模型中考慮不同的溫區對應不同的熱時間常數。修正模型之后根據數據再次擬合,得到模型中未知量(熱時間常數、對流系數等)的值。
根據已經求得的模型,代入第一問中的新的各個溫區的溫度和傳送帶的過爐速度進行計算,從而得到焊接區域中心溫度的變化情況,得到題目中要求的一些參數。
問題二的分析:
問題二給出了各溫區的設定溫度,要求我們在此基礎上確定允許的最大傳送帶過爐速度。這是一個非線性規劃問題,目標是求出傳送帶過爐速度的最大值,約束條件是題目中所給的制程界限。傳送帶的過爐速度調節范圍為65~100cm/min,利用多重搜索算法,先設定較大的搜索步長,確定速度的大致范圍,再設置較小的搜索步長進行精確搜索。對于每一個搜索的過爐速度值,利用問題一解得的模型,都能得到對應的爐溫曲線圖,以及各個時間點焊接區域中心的溫度。判斷當前的爐溫曲線能否滿足約束條件,若滿足則保留當前的過爐速度值,否則舍去,直到搜索結束,找到最大的滿足約束條件的過爐速度大小。
問題三的分析:
問題三需要我們給出最優爐溫曲線,以及各溫區的設定溫度和傳送帶的過爐速度,使得超過217C到峰值溫度所覆蓋的面積最小。這是一個優化問題,優化目標是求覆蓋面積的最小值,約束條件一是題目中所列出的制程界限,二是各溫區設定溫度及傳送帶的過爐速度調節范圍限制。通過以上分析建立優化模型,以各溫區的設定溫度和傳送帶過爐速度為變量,利用模擬退火算法進行求解。
問題四的分析:
問題四需要我們在第三問的基礎上,進一步考慮爐溫曲線在217°C以上的部分升溫和降溫的過程盡量對稱,同時要保證符合制程界限與各溫區設定溫度及傳送帶過爐速度調節范圍的限制,并使得超過217°C到峰值溫度所覆蓋的面積仍能達到一個較小值。這是一個多目標優化問題,一個目標是覆蓋的面積,一個目標是曲線的對稱度。一般可以為要優化的目標分配權值后再進行優化。我們首先要給出一個衡量對稱度的量,我們取爐溫曲線在217°C以上的部分,取最高溫對應的時間和兩個邊界時間點,將兩個邊界時間點相減除以時間步長得到數據點總數,以最高溫對應的時間點向時間正方向和負方向各取數據點總數的–半的數據,取正負方向各個對應點的溫度值求均方差值,作為對稱度衡量的指標。將面積和對稱度數量級進行處理,使得兩者的數量級一致,為兩個因素分配合理的權值之后,得到一個多目標的優化模型,以各溫區的設定溫度和傳送帶過爐速度為變量,同樣使用模擬退火算法來進行求解。
溫度分布模型
由題目中的條件,當回焊爐啟動后,爐內的空氣會在很短時間內達到穩定狀態,因而對于已經設置各小溫區溫度的回流爐中的溫度分布問題,可以當做一個穩態傳熱問題來考慮。而對于不做特殊溫度控制的各小溫區的間隙部分和爐前區域,主要受相鄰的溫區溫度的影響。對間隙溫度分布作如下分析:
程序代碼:
function result = F(t,v,T1,T2,T3,T4) % 計算當前環境溫度 %v:移動速度;Ti:第i 個不同溫區的溫度; t1 = 25/v;%爐前區域 t2 =t1+(30.5*5+5*4)/v;%小溫區1-5 t3 =t3+(30.5+5)/v;%小溫區6 t4 =t3+(30.5+5)/v;%小溫區7 t5 =t4+(5*2+30.5*2)/v;%小溫區8-9 if(t<=t1-(T1-25)/20)T=25; elseif (t>t1-(T1-25)/20 && t<=t1)T=175-(t1-t)/(T1-25)*20*150; elseif (t>t1 && t<=t2)T=T1; elseif (t>t2 && t<=t2+5/v)T=(t-t2)*v/5*(T2- T1)+T1; elseif(t>t2+5/v && t<=t3)T=T2; elseif (t>t3 && t<=t3+5/v)T =(t-t3)*v/5*(T3-T2)+T2; elseif (t>t3+5/v && t<=t4)T= T3; elseif(t>t4+5/v && t<=t4+5/v)T=(t-t4)*v/5*(T4-T3)+ T3; elseif (t>t4 +5/v && t<=t5)T= T4;elseif(t>t5 && t<=t5+20/v)T=(t-t5)*v/20*(25-T4)+ T4; elseT= 25; end result = T; end function [result] =T(RC1,RC2,v,T1,T2,T3,T4,h) deltat=0.01; len1=floor(339.5/v/deltat); len0=floor(235.5/v/deltat); len=floor(435.5/v/deltat); tn=linspace(0,0,len); for i=1:lentn(i)=i*deltat; end T=linspace(25,25,len); for i=2:len0T(i)=T(i-1)+(F(tn(i),v,T1,T2,T3,T4)-T(i-1))*(1-exp(-deltat/RC1)); end for i=len0+1:len1T(i)=T(i-1)+(F(tn(i),v,T1,T2,T3,T4)-T(i-1))*(1-exp(-deltat/RC2)); end for i=len1+1:lenT(i)=T(i-1)+(F(tn(i),v,T1,T2,T3,T4)-T(i-1))*h*deltat; end result=T;%第一問主函數 clear clc [Ts]=xlsread('D:\附件。xlsx',1,'B2:B710'); sum1=0; sum2=0; min1=inf; best1=0; best2=0; min2=inf; best3=0; deltat=0.01; v=7/6; len0=floor(235.5/v/deltat); len1=floor(339.5/v/deltat); len=floor(435.5/v/deltat); tn=linspace(0,0,len); for i=1:lentn(i)=i*deltat; end for j=1:1000temp=T(0.1*j,50,7/6,175,195,235,255,0.005);for i=1:len0if (tn(i)>=19 && mod(i,50)==0)sum1=sum1+(temp(i)-Ts((i-1850)/50))^2;endendif(sum1<min1)min1=sum1;best1=0.1*j;endsum1=0; end min=inf; for j=1:1000temp = T(best1,0.1*j,7/6,175,195,235,255,0.005);for i=len0+1:len1if(mod(i,50)==0)sum1=sum1+(temp(i)-Ts((i-1850)/50))^2;endendif(sum1<min)min=sum1;best2=0.1*j;endsum1=0; end for j=1:1000temp =T(best1,best2,7/6,175,195,235,255,2e-3+5e-6*j);for i=len1+1:lenif(mod(i,50)==0)sum2=sum2+(temp(i)-Ts((i-2100)/50))^2;endendif(sum2<min)min2=sum2;best2=0.1*j;endsum2=0; end v=78/60; len=floor(435.5/v/deltat); tn=linspace(0,0,len); for i=1:lentn(i)=i*deltat; end result =T(best1,best2,v,173,198,230,257,best3); plot(tn,result);%問題二function result =check(deltat,v,T)%判斷是否符合制程條件len2=floor(435.5/v/deltat);len3=floor(339.5/v/deltat);result=1;cnt1=0;cnt2=0;cnt3=0;cnt4=0;for i=2:len3grad=(T(i)-T(i-1))/deltat;if(grad<0 || grad>3)result = 0;endif(T(i)>=150 && T(i-1)<150)cnt1=i;endif(T(i)>=180 && T(i-1)<180)cnt2=i;endif(T(i)>=217 && T(i-1)<217)cnt3=i;endend%判斷在150°~190°C的時間是否符合if(deltat*(cnt2-cnt1)<60||deltat*(cnt2-cnt1)>120)result =0;end%判斷在217°C的時間是否符合if(deltat*(cnt4-cnt3)<40||deltat*(cnt4-cnt3)>90)result =0;endif(T(len3)<240||T(len3)>250)result =0;endend %第二問主函數 clear clc best=65; %第一次搜索,步長1; for i=1:100v=i;result=T(57.4,43.7,v/60,182,203,237,254,0.00678);if(check(0.01,v/60,result)==1)best=v;end end %第二次搜索,步長0.01; for i=1:200v=best-1+0.01*i;result =T(57.4,43.7,v/60,182,203,237,254,0.00678);if(checck(0.01,v/60,result)==1)best=v;end endfunction [Bestv,BeatT1,BeatT2,BeatT3,BeatT4,trace,T_m]=SAA()%模擬退火算法vmax=100;vmin=65;T1max=185;T1min=165;T2max=205;T2min=185;T3max=245;T3min=225;T4max=265;T4min=225;L=100;K=0.098;S=0.08;T_m=100;Yz=1E-6;P=0;trace=linspace(0,0,20000);f=1;while(f==1)Prev=rand*(vmax-vmin)+vmin;PreT1=rand*(T1max-T1min)+T1min;PreT2=rand*(T2max-T2min)+T2min;PreT3=rand*(T3max-T3min)+T3min;PreT4=rand*(T4max-T4min)+T4min;temp=T(57.4,43.7,Prev/60,PreT1,PreT2,PreT3,PreT4,0.00678);if(check(0.01,Prev/60,temp)==1)Prebestv=Prev;PrebestT1=PreT1;PrebestT2=PreT2;PrebestT3=PreT3;PrebestT4=PreT4;f=0;endend f=1;while(f==1)Prev=rand*(vmax-vmin)+vmin;PreT1=rand*(T1max-T1min)+T1min;PreT2=rand*(T2max-T2min)+T2min;PreT3=rand*(T3max-T3min)+T3min;PreT4=rand*(T4max-T4min)+T4min;temp=T(57.4,43.7,Prev/60,PreT1,PreT2,PreT3,PreT4,0.00678);if(check(0.01,Prev/60,temp)==1)Prebestv=Prev;PrebestT1=PreT1;PrebestT2=PreT2;PrebestT3=PreT3;PrebestT4=PreT4;f=0;endenddata=abs(func(Beatv,BestT1,BestT3,BestT3,BestT4)-func(Prebestv,PrebestT1,PrebestT2,PrebestT3,PrebestT4,));while(data>Yz) && (T_m>0.001)&&(P<20000)T_m=K*T_m;for i=1:Lp=0;while p==0 Nextv=rand*(vmax-vmin)+vmin;NextT1=rand*(T1max-T1min)+T1min;NextT2=rand*(T2max-T2min)+T2min;NextT3=rand*(T3max-T3min)+T3min;NextT4=rand*(T4max-T4min)+T4min;temp=T(57.4.43.7,NextT1,NextT2,NextT3,NextT4,0.00678);m=check(0.01,Nextv/60,temp);if(Nextv>=vmin && Nextv<vmax && NextT1>=Tmin && NextT1<=T1max && NextT2>=T2min && Next2<=T2max&& NextT3>=T3min && Next3<=T3max&& NextT4>=T4min && Next4<=T4max && m==1 )p=1;endendif(func(Bestv,BestT1,BestT2,BestT3,BestT4)>funx(Nextv,NextT1,NextT1,NextT2,NextT3,NextT4))Prebestv=Bestv;PrebestT1=BestT1;PrebestT2=BestT2;PrebestT3=BestT3;PrebestT4=BestT4;Bestv=Nextv;BestT1=NextT1;BestT2=NextT2;BestT3=NextT3; BestT4=NextT4;endif(func(Prev,PreT1,PreT2,PreT3,PreT4)>funx(Nextv,NextT1,NextT1,NextT2,NextT3,NextT4))Prev=Nextv;PreT1=BestT1;PreT2=BestT2;PreT3=BestT3;PreT4=BestT4;P=P+1;elsechange=-(func(Prev,PreT1,PreT2,PreT3,PreT4)-funx(Nextv,NextT1,NextT1,NextT2,NextT3,NextT4))/T_m;p1=exp(change);if(p1>rand)Prev=Nextv;PreT1=NextT1;PreT2=NextT2;PreT3=NextT3;PreT4=NextT4;P=P+1;endendtraces(p)=func(Bestv,BestT1,BestT2,BestT3,BestT4)enddata=abs(func(Bestv,BestT1,BestT2,BestT3,BestT4)-func(Prebest1,Prebest2,Prebest3,Prebest4));endendfunction result=func(v,T1,T2,T3,T4)%計算面積Tt=T(57.4,43.7,v/60,T1,T2,T3,T4,0.00678);maxT=max(Tt);len5=length(Tt);cnt1=0;cnt2=0;sum=0;for i=2:len5if (Tt(i-1)<=217 && Tt(i)>217)cnt1=i;endendfor i=2:len5if (i>=cntq && i<=cnt2-1)sum=sum+0.01*(Tt(i)-217);endendresult=sum;end %問題四function result =func2(v,T1,T2,T3,T4)%計算對稱度Tt=T(57.4,43.7,v/60,T1,T2,T3,T4,0.00678);cnt1=0;cnt2=0;cnt3=0;maxT=max(Tt);len=length(Tt);for i=2:lenif(Tt(i-1)<=217 && Tt(i)>217)cnt=i;endif(Tt(i-1)>217 && Tt(i)<=217)cnt3=i-1;endif(Tt(i) == maxT)cnt2=i;endn=floor(((cnt-cnt1)+(cnt3-cnt2))/2);sum=0;for i=1:nsum=sum+(Tt(cnt2-i)-Tt(cnt2+i))^2;endresult=sum/n;endfunction result=func3(v,T1,T2,T3,T4)%面積與對稱度統一數量級賦權值m1=func(v,T1,T2,T3,T4);m2=func2(v,T1,T2,T3,T4);result=0.1*m1+m2;end%第四問的主函數僅需將第三問之中SAA函數中的適應度函數fun改成func3即可運行。總結
以上是生活随笔為你收集整理的2020国赛A题 炉温曲线的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 《双积分AD转换器》的制作经历
- 下一篇: 制作《双积分AD转换器》课题的心得