孫雷+孫慶蘇
摘 要:塔式太陽能聚光發電系統,在實際運用中由于天氣、溫度和鏡子的執行傳動結構等因素產生誤差,太陽光不一定能夠按照理想的情況反射到聚光位置。為使定日鏡能夠準確跟蹤太陽和反射太陽熱能,提出一種基于VC的太陽光斑圖像識別跟蹤系統,使用視頻捕捉和圖像處理技術,獲取太陽光斑的誤差偏移距離,并將這個修正數據通過串口發送給控制系統。根據定日鏡自動跟蹤太陽軌跡、反射光斑并進行圖像修正的試驗,結果顯示能夠計算確定圖像中光斑的位置,獲取實際偏差,并且在監視器上清晰看見每面定日鏡的輪廓及其反射的光斑。系統采用圖像匹配算法,具有精度高等特點,能夠有效實現太陽光斑的識別與跟蹤。
關鍵詞:太陽光斑;識別;跟蹤;定日鏡場; VC
DOIDOI:10.11907/rjdk.172320
中圖分類號:TP317.4
文獻標識碼:A 文章編號:1672-7800(2018)002-0205-03
0 引言
太陽能是最豐富、持久的能源,但因能量密度低,使其被提取需要聚光,目前主要的太陽能聚光發電系統有塔式、槽式,其中,塔式是太陽能熱發電系統中具有吸引力的一種方式[1]。
由于太陽東升西落,定日鏡場中的每一面鏡子也必須由東向西,同時由下而上、再由上而下運動,才能保證每一面鏡子對陽光的反射聚集到塔上的吸熱器上。根據每一面鏡子與吸熱器的相對位置、時間、地點等,可以計算出每一面鏡子在任何時刻的方位角和仰角[2],但是,由于大氣折射、機械誤差、熱脹冷縮、材料老化等原因,將引起反射的偏差,影響發電效率。
圖像識別系統可作為控制系統的負反饋,及時調整每一面鏡子的方位角和仰角,使每一面鏡子對陽光的反射永遠對準吸熱器,提高發電效率。具體方法是安裝高清晰攝像頭,實時采集定日鏡反射的圖片,進行圖像識別,找出圖像中的太陽光斑(即太陽的位置)與標準圖片進行比對,如果所拍攝光斑X、Y向偏差與標準太陽光斑位置偏離,發出修正信息對鏡子設定值進行修正[3],同時記錄或報警。
1 系統設計
1.1 功能設計
在太陽能熱發電電站中,定日鏡的作用是收集太陽輻射能并將其匯聚到吸熱器處,它由按一定方式排列的可繞雙軸跟蹤的定日鏡組成,每個定日鏡通過繞軸轉動跟蹤太陽,并將輻射到其表面的太陽能反射到塔頂吸熱器[4]。
太陽光斑圖像識別跟蹤系統的功能是采用特殊的高清攝像圖像識別方法,用于定日鏡受外力位移出現的偏差修正,使得定日鏡能夠準確跟蹤太陽和反射太陽熱能。
1.2 可行性分析
由于太陽不停在轉動,為了使光線經過定日鏡反射后能夠一直照射到這個面上,需要根據太陽在不同時間的位置來調整定日鏡的水平和垂直位置。但是,根據太陽的運行規律計算的太陽軌跡會因為天氣、溫度和鏡子的執行傳動結構等產生誤差,太陽光不一定能夠按照理想的情況反射到聚光位置,而且當其中的一面或幾面鏡子發生偏離,沒有反射到聚光位置的時候也無法知道。由此設計,利用圖像識別系統,將這個偏差值反饋給控制系統,控制系統可以利用偏差值進行修正。
太陽能控制系統主要由計算機、攝像機(CCD)、聚光接收器、定日鏡和定日鏡控制系統組成,核心是圖像分析監測系統,系統組成如圖1所示。利用攝像機拍攝整個定日鏡場的畫面,由于攝像頭和鏡場中的各面鏡子都相對固定,在抓取的圖片中可以區分出每一面鏡子位置太陽光線是平行的光線,鏡子上太陽光斑的偏移即是接收點的偏移。因此,在軟件中通過對光斑輪廓的判斷獲取光斑的中心值[5],然后算出與中心點像素的偏差值,并將這個像素的偏差值轉化為實際的偏差值,發送給控制系統。
1.3 系統流程
太陽能圖像分析監測系統采用Visual C++設計,使用視頻捕捉和圖像處理技術,獲取太陽光斑的誤差偏移距離,并將這個修正數據通過串口發送給控制系統。
軟件設計思想是獲取攝像機采集并通過圖像卡傳輸過來的視頻,對視頻圖像進行圖片抓取,通過軟件算法進行太陽光斑的識別,計算確定圖像中光斑的位置,然后通過計算獲取實際偏差,將光斑的實際偏移距離通過串口發送到控制系統中,圖2為軟件的流程圖。
2 系統實現
2.1 太陽光斑位置識別
太陽能圖像分析系統的基本思想是采用輪廓與特征提取相結合的方法,首先系統采用VC++定時器的功能,每5s進行一次太陽光斑位置的識別[6],獲取相應的數據,讀取圖片,然后獲取圖片的大小,根據圖片中點的像素值來判斷滿足要求的點,由滿足要求的點來判斷光斑的輪廓,根據輪廓來計算中心值。
計算實際偏差值流程是計算每像素值對應的實際距離參數,根據這個參數算出實際距離。
2.2 串口數據發送
在獲取太陽光斑的位置數據后,采用Modbus通訊協議,用串口將數據發送出去,串口發送數據流程為,首先在初始化軟件時建立串口連接,然后監聽端口,有數據發送過來后,執行讀操作。獲取數據報文格式,根據報文格式組織數據,執行寫操作,將數據發送過去。圖3為串口發送數據流程圖[7]。
2.3 程序實現
圖像分析監測系統程序設計的重點是光斑的識別算法,還有主要的類的實現,使用類封裝函數功能,使程序有很好的可讀性,并減少一些重復的工作[8]。在封裝的類中實現視頻流讀入、圖片保存、位圖編程以及串口通訊的實現。
2.3.1 類的設計
圖像分析監測系統程序主要包含以下幾個類:①Class CRecoSunView:一個從基類CView繼承的類;②Class CBmproDlg:圖片處理類;③Class CComm:一個串口通訊類;④Class CDib:從CObject類繼承的類;⑤Class CSampleGrabberCB:從基類ISampleGrabberCB繼承的類。endprint
主要類定義說明為:
(1)CRecoSunView類。此類主要完成了以下功能,實現對參數的初始化,視頻圖象接口的初始化,視頻圖象的顯示,以及定時函數的實現,圖象處理函數的調用,和串口通訊的實現。
(2)CBmproDlg類。此類的主要功能是實現對圖片的讀取,圖片的分割掃描,掃描后對斑點中心點的判斷。
(3)CComm類。此類的主要功能是實現對串口的操作,包括串口的打開,設置,以及數據發送和接收以及一個數據接收響應線程。
(4)CDib類。此類的主要功能是實現對位圖文件的裝載,讀文件,寫文件以及對位圖的各種屬性操作。
(5)CSampleGrabberCB類。此類的主要功能是實現對視頻流中的圖片抓取,以及文件的保存。
2.3.2 光斑識別算法
識別光斑是在類CBmproDlg中進行的,主要功能是實現對位圖的讀取,識別位圖中的光斑位置。識別光斑的算法為:
(1)調用函數dib.load()函數讀取位圖,調用dib.GetWidth()和dib.GetHeight()獲取圖片的寬、高。
(2)給數組xydata,line,pt分配空間大小。
(3)按照定義的分割區域,進行像素掃描,對滿足條件的像素進行標記,保存在xydata數組中。
(4)掃描完成后,區域中的滿足條件的點組成線,對無法成線的斑點舍棄,得到的結果保存在line數組中。
(5)由線來構成一個斑點的形狀,并由組成的斑點的輪廓來計算斑點的中心值,結果保存在pt數組中。
(6)由計算得到的斑點中心值與實際定義的中心相減,即得到偏差值。
2.3.3 算法的程序實現
首先調用dib.load(lpszDibFile)函數來裝載圖片,ScanRect數組的數據即是分割的范圍,按照ScanRect數組定義的范圍進行循環,獲取滿足條件的點,獲取點后,調用OnOpen()函數。在OnOpen函數中,算法的實現為,當點的標志位為真時,則調用函數getline獲取線的范圍。依次調用,則最后獲取的就是線的范圍。然后調用OnGetp()函數,函數的功能是有線獲取光斑的輪廓,當line數組的標志位為真時,調用getp()函數來獲取后繼的線還原輪廓,由輪廓獲取中心值[9]。
if (dib.Load(lpszDibFile))
{
for(int scan=0;scan<4;scan=scan+2)
{
for(i=ScanRect[scan].x;i { m=0; for(j=ScanRect[scan].y;j { if(pan(i,j)) //判斷此點像素值是否滿足太陽光斑的特征 { …… huafen(); //如滿足,找出y軸方向所有滿足光斑條件判斷的點 } 2.3.4 軟件代碼說明 軟件代碼如下: float value=(float)254/(752*3);//計算實際一個像素的實際表示 OnPhoto(); //抓取圖片 CBmproDlg dlg; const char *lpctStr=(LPCTSTR)mCB.str; dlg.OnBrowse(lpctStr);//處理抓取的圖片,獲取數據 for(int i=0;i<2;i++) { float x=(float)value*dlg.pot[i].x; float y=(float)value*dlg.pot[i].y; pot[i].x=(int)x;//(float)(value*dlg.pot[i].x)); pot[i].y=(int)y;//(float)value*dlg.pot[i].y); } ChangeStatusBar(); OnCOM(); 3 系統數據記錄與處理 根據多日來定日鏡自動跟蹤太陽軌跡、反射光斑并進行圖像修正的試驗,對軟件結果檢測:鏡子的中心像素位置為X:350、Y:312,計算實際距離的參數為10/7。 利用算法得出的像素距離與鏡子的中心位置相減,即可得到光斑以鏡子中心位置為圓心的幾何坐標值,再用計算實際距離的參數來算出實際距離。 在獲取的圖片中,選出一部分圖片,如圖4、圖5,利用這3個參數設置,軟件的運行結果分別如下: 光斑中心點:X:354 Y:319 實際偏差:ΔX:5 ΔY:-10 光斑中心點:X:362 Y:309 實際偏差:ΔX:17 ΔY:4 4 結語 定日鏡的跟蹤控制是塔式太陽能發電系統的關鍵技術,由于定日鏡執行機構不可測的因素使定日鏡運動出現偏差,本文設計了太陽光斑圖像識別跟蹤系統,采用VC++圖像分析算法,有效實現了太陽光斑的識別與跟蹤。 通過實際測試,在太陽光斑圖像識別跟蹤系統中,可以在監視器上清晰看見每面定日鏡的輪廓及其反射的光斑,通過太陽光斑圖像識別跟蹤系統與其它系統的結合,可以控制定日鏡跟蹤太陽運行軌跡,把光斑實時反射到正確位置[10]。 參考文獻: [1] 杜春旭,吳玉庭,王普,等.塔式太陽能發電系統鏡場跟蹤角分析[J].工程熱物理學報,2012,33(9):1575-1579. [2] 余強,徐二樹,常春,等.塔式太陽能電站定日鏡場的建模與仿真[J].中國電機工程學報,2012,32(23):90-97. [3] 許芳.塔式太陽能定日鏡聚光成像建模及仿真[J].太陽能學報,2010,32(10):1304-1309. [4] 耿其,東朱天宇,陳飛.塔式太陽能熱發電中的定日鏡跟蹤系統設計[J].熱力發電,2009,38(2):81-83. [5] 王孝紅,劉化果.塔式太陽能定日鏡控制系統綜述[J].濟南大學學報,2010,24(3):302-307. [6] 王鵬飛,王鵬.基于Visual C++6.0的Windows應用程序定時器研究[J].計算機技術與發展,2013,23(2):44-48. [7] 王中訓,徐超.基于VC++6.0的多串口通信方法[J].計算機應用,2008,28(6):254-257. [8] 楊韜.用C語言實現類封裝的研究[J].微型機與應用,2016,35(21):24-27. [9] 李洪雷.VC++環境下基于OpenCV的攝像機標定系統的開發[J].計算機應用與軟件,2011,28(6):19-22. [10] 王魏.塔式太陽能定日鏡聚光策略及其應用仿真[J].上海電氣技術,2014,97(3):36-40.