張 輝,張奕琛,孔吉海,李丞侃,朱金琪,王 靖
(1.北京科技大學(xué)能源與環(huán)境工程學(xué)院,北京 100083;2.北京科技大學(xué)東凌經(jīng)濟(jì)管理學(xué)院,北京 100083)
皂膜流量計(jì)是一種采用“皂膜”動(dòng)態(tài)密封待測氣體的體積式流量計(jì),與同種類型的濕式流量計(jì)、腰輪流量計(jì)、橢圓齒輪流量計(jì)和刮板流量計(jì)相比,所測氣源壓力很低(0~1 kPa),氣量很小(0~60 L/min),在流量測量、色譜檢測、氣體成分分析、環(huán)境監(jiān)測等方面應(yīng)用廣泛。電子皂膜流量計(jì)[1]雖然減少了人眼讀數(shù)和手動(dòng)計(jì)時(shí)的缺點(diǎn),但在甄別連泡、滅泡和自動(dòng)計(jì)量方面仍無法滿足用戶要求。自動(dòng)產(chǎn)泡皂膜流量計(jì)[2](以下簡稱流量計(jì))彌補(bǔ)了這一缺陷,利用RS232串口的輸入與輸出針腳實(shí)現(xiàn)了光電傳感信號(hào)的監(jiān)測與驅(qū)動(dòng)開關(guān)的控制,完成了測量數(shù)據(jù)的自動(dòng)記錄與保存,為用戶提供了廉價(jià)可靠的測量方法。為了使用戶充分掌握并靈活應(yīng)用該項(xiàng)技術(shù),對使用技巧、電路設(shè)計(jì)和程序代碼進(jìn)行詳盡的解析與探討。
如圖1所示,流量計(jì)采用“山”形連通結(jié)構(gòu)。左側(cè)為一豎直玻璃管,通過該管向皂管中添加皂液,稱為加液管,由于加液管與皂管底部相通,上部為大氣壓,在皂液重力作用下兩管液面保持水平。從左側(cè)添加皂液,一方面由于加液管內(nèi)徑較小,可以精確控制皂管內(nèi)液位的上升高度;另一方面加液過程中產(chǎn)生大量的液泡不會(huì)進(jìn)入到皂管內(nèi),避免了測量開始時(shí)的連泡現(xiàn)象。如果加液管在底部通過軟管與皂管相連,則可以通過調(diào)節(jié)加液管的高度對皂管進(jìn)行潤濕。中間為皂管,用戶可根據(jù)JJG 586—2006標(biāo)準(zhǔn)進(jìn)行選擇,皂管右邊為進(jìn)氣口,通過軟管與待測氣源相連。右側(cè)是控制皂管內(nèi)液位上升和下降的液位管,在液位管的上方安裝有推拉式電磁鐵,電磁鐵的中央芯棒與重錘相連。當(dāng)電磁鐵斷電時(shí),芯棒由于彈簧的作用位于上升位,重錘浮于皂液上方,如圖1(a)所示,液位低于皂管進(jìn)氣口下沿,待測氣體直接進(jìn)入皂管,從出口排出;當(dāng)電磁鐵加電時(shí),芯棒帶動(dòng)重錘下沉,浸入皂液中,液位上升,淹沒皂管進(jìn)氣口,氣體被堵塞在入口處,如圖1(b)所示;待液位穩(wěn)定后,電磁鐵斷電,重錘提升,液位下降,此時(shí)產(chǎn)生皂膜??梢酝ㄟ^圖1中①~⑩清晰了解皂膜的產(chǎn)生過程。皂液在上升過程中,逐漸堵住氣體的去路,由于氣體的壓力作用,在皂液中產(chǎn)生鼓泡,如圖1中③所示,隨著液位的上升,鼓泡受到水的靜壓力增大,鼓泡變小;當(dāng)液位下降時(shí),水的靜壓力越來越小,鼓泡又重新長大,當(dāng)液位剛低于進(jìn)氣口上沿時(shí),如圖1中⑥所示,氣體僅受到皂液表面張力的作用,開始產(chǎn)生皂泡,液位進(jìn)一步降低,皂泡從液面“剝離”,形成平行于液面的皂膜,如圖1中⑩所示,這種由“泡”變“膜”的過程是在液位下降過程中形成的,因此,必須保證重錘有足夠的體積浸入皂液中,使液位升至高于皂管進(jìn)氣口上沿位置,否則無法形成對氣體的密封。
圖1 自動(dòng)產(chǎn)泡過程示意圖
此外,專利[3]中采用圓柱形重錘擠壓液體會(huì)造成皂液大量“飛濺”,由于圓柱形底面為平面,推拉式電磁鐵上電后急速推動(dòng)重錘擊打液面,飛濺的液體一方面滴落在電磁鐵上,容易燒損和腐蝕線圈,另一方面造成皂管內(nèi)液體減少,液位降低,需要定期調(diào)整液位管的高度,不利于產(chǎn)泡的自動(dòng)化,因此,此處將“圓柱”形重錘改為“水滴”形重錘,減少了瞬間擊打液面時(shí)的阻力,解決了上述問題。
圖2為流量計(jì)整體結(jié)構(gòu)示意圖,加液管僅在最初添加皂液時(shí)使用,故在本圖中省略。液位管通過升降臺(tái)自由上升與下降,用于調(diào)整皂管內(nèi)液位高度。
圖2中右下角為PC機(jī),可直接通過RS232接口或USB轉(zhuǎn)RS232接口[4]與電路板相連;右上角為實(shí)驗(yàn)用電路板,其左側(cè)連接了降壓模塊與繼電器,下方連接了可調(diào)開關(guān)電源與手動(dòng)按鈕。
圖2 自動(dòng)產(chǎn)泡皂膜流量計(jì)整體結(jié)構(gòu)示意圖
可調(diào)開關(guān)電源將220 V交流電轉(zhuǎn)換為4~24 V直流電,用戶根據(jù)所選推拉式電磁鐵的電壓需求(本文為6 V)調(diào)整開關(guān)電源的輸出,電壓值通過數(shù)碼管顯示讀出;6 V直流電經(jīng)過電路板輸出給降壓模塊,達(dá)到5 V后再輸入給電路板,此時(shí)的電壓為光電傳感器和繼電器控制端工作電壓。
皂膜信號(hào)傳感分為上光電傳感器和下光電傳感器,如圖3所示。每個(gè)傳感器包括發(fā)送端和接收端,分別置于皂管的兩側(cè),沿直徑方向布置。
圖3 自動(dòng)產(chǎn)泡皂膜流量計(jì)電路板原理設(shè)計(jì)圖
以下光電傳感器PE_DOWN為例,發(fā)送端為紅外發(fā)射器,分別連接DOWN_IN和GND端子,供電電壓為+5 V,通過調(diào)整電位器R_DOWN_EMITER_1K的阻值限制輸入電路的電流強(qiáng)度,從而調(diào)節(jié)發(fā)射器的光強(qiáng),由于皂管壁的材質(zhì)、厚薄以及皂液的種類不同,導(dǎo)致匹配的發(fā)射光強(qiáng)也發(fā)生變化,需要根據(jù)實(shí)際情況調(diào)協(xié);接收端連接5V+、GND和DSR端子,5V+與DSR間并聯(lián)了2路分支,一路為R_DOWN_1K電位器,另一路為R_BLUE_1K電位器和LED_DOWN_BLUE蘭色發(fā)光二極管,當(dāng)皂膜擋住發(fā)射端的紅外光時(shí),DSR電平拉低,此時(shí)LED_DOWN_BLUE發(fā)出蘭光。從圖3可以看出,蘭色二極管對應(yīng)激發(fā)電壓高,應(yīng)減少R_BLUE_1K分壓電阻值,而紅色二極管激發(fā)電壓低,需降低R_RED_1K分壓電阻值,從而改變發(fā)光二極管的亮度;通過改變R_DOWN_1K電阻的大小可調(diào)節(jié)接收端對光的靈敏度。DSR與RS232的第6根引腳相連[5],通過上位機(jī)讀取串口引腳狀態(tài)信號(hào)。同理,PE_UP上光電傳感器由RS232的第8根引腳CTS傳至上位機(jī),采用紅色發(fā)光二極管進(jìn)行狀態(tài)顯示,皂膜擋住光路,CTS電平拉低,紅色發(fā)光二極管亮;皂膜離開光路,CTS恢復(fù)5 V高電平,紅色發(fā)光二極管滅。
重錘采用自動(dòng)與手動(dòng)2種方式控制。圖3中,6 V電壓一路經(jīng)過BUTTON連接外部按鈕,當(dāng)人工按下按鈕時(shí),BUTTON短路,6 V電壓經(jīng)過粗實(shí)線“-”為電磁鐵供電;另一路經(jīng)過圖中虛線“--”連至外部繼電器模塊的COM(Common)公共端和NO(Normally Open)常開觸點(diǎn),由繼電器控制端決定COM和NO端子是否短路,繼電器控制端由上位機(jī)通過RS232的第7引腳RTS狀態(tài)決定。當(dāng)RTS高電平時(shí),經(jīng)過R_DZ分壓電阻分壓后,在D_ZENER穩(wěn)壓管兩側(cè)形成穩(wěn)定輸出電壓,在R_DZ和D_ZENER之間取出電壓,輸入到RELAY_IN的IN端點(diǎn),繼電位控制端處于高電平,COM和NO端點(diǎn)短路閉合,為推拉式電磁鐵供電;反之,當(dāng)RTS低電平時(shí),IN電平降低為GND,繼電器控制端電平被拉低,COM和NO端點(diǎn)開路斷開,電磁鐵斷電。PCB印刷電路板實(shí)物如圖4所示,為了便于絲印,圖4中符號(hào)較圖3進(jìn)行了簡化。
圖4 自動(dòng)產(chǎn)泡皂膜流量計(jì)印刷電路板實(shí)物圖
圖5為流量計(jì)軟件設(shè)計(jì)主體流程對應(yīng)的N-S圖,(A)為變量初始化,包括變量的定義與賦初值;C大為循環(huán)檢測下、上光電傳感信號(hào)的程序;C中下和C中上段程序分別對應(yīng)下、上光電傳感器下降沿、平臺(tái)和上升沿的檢測;C小↑和C小↓分別檢測脈沖信號(hào)的上升沿和下降沿。程序中變量如圖6所示。
圖5 軟件設(shè)計(jì)主體流程N(yùn)-S圖
圖6 軟件界面各控件命名示意圖
程序核心代碼如下:
While bRun ′循環(huán)標(biāo)志為True,進(jìn)入循環(huán)
DoEvents ′可以接受其它響應(yīng)事件,如鼠標(biāo)點(diǎn)
bTimeOutFlag=False ′賦初值,表示皂膜沒有超時(shí)
nTimeOut=Val(comboTimeOut.Text)* 1000
If bSwitch And bRun Then′如果是下限光電傳感器,
bHighToLow=False′沒有高電平到低電平的跳變
bLowToHigh=False′沒有低電平到高電平的跳變
While(bHighToLow=False Or bLowToHigh=False)And bRun ′沒有高到低和低到高跳變,無皂膜通過,一直循環(huán)檢測
DoEvents ′可以接受其它響應(yīng)事件
bDSRStatus=MSComm232.DSRHolding ′ 檢測DSR電平
If optionAuto.Value=True Then ′選擇了自動(dòng)產(chǎn)膜功能
nFoamFilmProduceTickBegin=GetTickCount()
End If ′自動(dòng)產(chǎn)膜記時(shí)開始
Do While(bDSRStatus And bHighToLow=False)And bRun ′當(dāng)DSR電平為高電平,沒有經(jīng)過由高到低的跳變
DoEvents ′可以接受其它響應(yīng)事件
If optionAuto.Value=True Then ′如果是自動(dòng)產(chǎn)膜
If(GetTickCount()-nFoamFilmProduceTickBegin)>5000 Then ′檢測產(chǎn)膜時(shí)間,如果超過了5 s
MSComm232.RTSEnable=True ′ 7引腳輸出高電平
shapeAutoValve.BackColor=&H8000& ′指示燈綠色
TimeDelay(3000)′延時(shí)2 s,給機(jī)械裝置一個(gè)動(dòng)作時(shí)間
MSComm232.RTSEnable=False ′7引腳輸出低電平
shapeAutoValve.BackColor=&HFF& ′燈紅色,閥門關(guān)
nFoamFilmProduceTickBegin=GetTickCount()′重計(jì)時(shí)
End If
End If
If MSComm232.DSRHolding=False And bRun Then
bDSRStatus=False ′6引腳為FALSE,低電平
bHighToLow=True ′經(jīng)過了高電平到低電平的跳變
shapeDownLight.BackColor=&H8000&′燈綠色,膜擋住路
Exit Do ′退出do循環(huán),皂膜進(jìn)入下限光電傳感器光路區(qū)域
End If
Loop ′完成下限光電傳感器上升沿的檢測
Do While(bDSRStatus=False And bLowToHigh=False)And bRun ′檢測電平由低到高的跳變,上升沿信號(hào)
DoEvents ′可以接受其它響應(yīng)事件
If MSComm232.DSRHolding=True And bRun Then
bDSRStatus=True ′第6引腳狀態(tài)賦值為TRUE
bLowToHigh=True ′經(jīng)過低電平到高電平的跳變
shapeDownLight.BackColor=&HFF& ′指示燈為紅色
Exit Do ′退出當(dāng)前do循環(huán),皂膜離開下限光路區(qū)域
End If
Loop
Wend
If(bHighToLow And bLowToHigh)Then
bSwitch=False ′將處理過程轉(zhuǎn)向上限光電傳感器
nTickBegin=GetTickCount()′開始計(jì)錄皂膜的行進(jìn)過程
nFoamBeginCounter=nFoamBeginCounter + 1 ′皂膜記數(shù)加1
txtCountBegin.Text=CStr(nFoamBeginCounter)′皂膜個(gè)數(shù)
txtDataList.Text=txtDataList.Text +
Format(CStr(nFoamBeginCounter),“0000”)+ Space(2)
+Format(Time(),“HH:MM:SS”)′對應(yīng)皂膜個(gè)數(shù)及開始時(shí)間
End If
End If ′完成下限傳感器DSR第6引腳探測皂膜
If bSwitch=False And bRun Then ′如果是上限光電傳感器
bHighToLow=False ′沒有發(fā)生過從高電平到低電平的跳變
bLowToHigh=False ′沒有發(fā)生過從低電平到高電平的跳變
While(bHighToLow=False Or bLowToHigh=False)And bRun And((GetTickCount()-nTickBegin)< nTimeOut)
DoEvents ′可以接受其它響應(yīng)事件
bCTSStatus=MSComm232.CTSHolding ′檢測CTS第8引腳
Do While(bCTSStatus And bHighToLow=False)And bRun And((GetTickCount()-nTickBegin)< nTimeOut)
DoEvents ′可以接受其它響應(yīng)事件
If MSComm232.CTSHolding=False And bRun Then
bCTSStatus=False ′CTS狀態(tài)置為False,為低電平
bHighToLow=True ′皂膜到達(dá)了上限光電傳感區(qū)域
dbTimeElapse =(GetTickCount()-nTickBegin)/ 1000
tEndTime=Time()′記錄皂膜進(jìn)入上限光電區(qū)域時(shí)刻
shapeUpLight.BackColor=&H8000& ′指示燈顯示為綠色
Exit Do ′完成下降沿檢測,退出當(dāng)前循環(huán)
End If
Loop
Do While(bCTSStatus=False And bLowToHigh=False)
DoEvents ′可以接受其它響應(yīng)事件
If MSComm232.CTSHolding=True And bRun Then
bCTSStatus=True ′CTS狀態(tài)置為True,電平為高電平
bLowToHigh=True ′皂膜離開了上限光電傳感區(qū)域
shapeUpLight.BackColor=&HFF& ′指示燈顯示為紅色
Exit Do ′完成上升沿檢測,退出當(dāng)前循環(huán)
End If
Loop
Wend ′完成了下限光電檢測
If(bHighToLow And bLowToHigh)Then
bSwitch=True ′換向開關(guān)置為True,控制權(quán)交給下限光電
nFoamEndCounter=nFoamEndCounter + 1 ′成功皂膜數(shù)加1
txtCountEnd.Text=CStr(nFoamEndCounter)′成功皂膜個(gè)數(shù)
Dim tempData As Double
tempData=Val(txtHeight.Text)* 60 / dbTimeElapse
ReDim Preserve dbFlowData(nFoamEndCounter)
dbFlowData(nFoamEndCounter-1)= tempData
txtFlow.Text=Format(CStr(tempData),“##.00”)
txtAccumulateVolumn.Text=Format(CStr(Val(txtHeight.Text)* nFoamEndCounter),“#0.00”)+ “-” + Format(CStr(Val(txtHeight.Text)* nFoamBeginCounter),“##.00”)′顯示累積體積值
txtDataList.Text=txtDataList.Text + Space(2)+ Format(tEndTime,″HH:MM:SS″)+ Space(2)+ Format(CStr(dbTimeElapse),″0.000″)+ Space(6)+ txtFlow.Text + Space(11)+ txtAccumulateVolumn.Text + vbCrLf ′記錄膜滅時(shí)間、瞬時(shí)流量及累積體積
Else ′膜在中間破裂,或者速度太慢,超過了時(shí)間設(shè)定值
bSwitch=True ′換向開關(guān)為True,控制權(quán)交給下限光電
txtAccumulateVolumn.Text=Format(CStr(Val(txtHeight.Text)* nFoamEndCounter),″#0.00″)+ ″-″ + Format(CStr(Val(txtHeight.Text)* nFoamBeginCounter),″##.00″)
txtDataList.Text=txtDataList.Text + Space(2)+ Format(″--:--:--″)+ Space(2)+ Format(″----″)+ Space(6)+ Format(″------″)+ Space(12)+ txtAccumulateVolumn.Text + vbCrLf ′記錄中間結(jié)果
End If
End If ′完成一個(gè)循環(huán)的檢測
Wend ′進(jìn)行下一個(gè)循環(huán)
圖7為采用上述電路和程序得到的氣體流量曲線圖,將上、下光電傳感器置于皂管不同位置,使兩傳感器之間的有效體積分別為10、25、40 mL。
圖7 不同皂管長度氣體流量測定結(jié)果對比面
從圖7可以看出,10 mL曲線中斷點(diǎn)較少,說明連續(xù)測量過程中皂膜能夠正常通過下、上光電傳感器,所受阻力較小,測得的值基本保持不變;25 mL時(shí),“○”曲線斷點(diǎn)開始增加,此時(shí)由于皂膜經(jīng)過的距離較長,膜逐漸變薄,經(jīng)過上光電傳感器時(shí)間更短,難以捕捉,并且延長距離使皂膜阻力增大,測得流量值有減小趨勢;40 mL時(shí),這一現(xiàn)象更為顯著,流量值斷點(diǎn)增多,從圖7中“★”曲線可以清晰看出,流量值下降更為明顯。通過連續(xù)測量可以獲得3種曲線的變化規(guī)律,體現(xiàn)了自動(dòng)產(chǎn)泡皂膜流量計(jì)的優(yōu)勢。
通過分析皂膜的產(chǎn)生過程,開發(fā)了自動(dòng)產(chǎn)泡皂膜流量計(jì),在避免連泡和皂液飛濺方面進(jìn)行了改進(jìn),主要?jiǎng)?chuàng)新點(diǎn)如下:
(1)給出了自動(dòng)產(chǎn)泡皂膜流量計(jì)的詳細(xì)結(jié)構(gòu)與電路,分析了其靈活的調(diào)節(jié)特性;
(2)通過程序?qū)崿F(xiàn)了皂膜的自動(dòng)檢測和自動(dòng)產(chǎn)泡,以檢測電平上升沿和下降沿為核心優(yōu)化了代碼;
(3)對不同檢測區(qū)間進(jìn)行了氣體流量的測量,皂管越長,流量測量值下降越明顯,上光電傳感器越難以捕捉皂膜。
后續(xù)將采用自動(dòng)產(chǎn)泡皂膜流量計(jì)對不同種類皂液、不同濃度皂液、是否持續(xù)潤濕等展開系列研究,將在后續(xù)論文中進(jìn)行論述。