這台機器的控制程式完全是由LabVIEW編寫,編寫的靈感得力於"LabVIEW編程樣式"和"GUI設計禁忌2.0"這兩本書


每台機器都有附"取樣程式"和"操作程式",但是機器一開機內定是自動進入操作程式,用操作程式的關機功能是直接關閉電腦。只有不使用操作程式的關機功能關閉操作程式,才能進入取樣程式;並不是不開放取樣程式給客戶,而是所有客戶連操作都嫌麻煩,若要自己取樣建立數據會被罵死。這樣的設計是方便若我需要到客戶那邊幫忙建立數據時,可以直接使用現機取樣,而不用攜帶一堆裝備

 


現在正式進入主題,說明取樣程式的結構,大概沒有人會把自己的程式碼像這樣公開吧。不過可以掛保證的是就算給了程式碼,你也絕對做不出一樣的機器,有太多細節是無法光靠圖文來表達的


程式內主要資料流線條都有標示資料用途,一些主要變數則是使用中文名稱。這樣的處理是要給維修人員看懂,用英文的名稱系統會比較穩定


主程式內光譜儀的驅動程式和讀取程式,可以查看我部落格內"光譜儀通訊 & 資料處理",用到的SubVI都是這樣建立的,不再另做說明

 


首先是取樣程式的操作畫面,因為是不開放給客戶使用的程式,畫面配色、字體都沒有調整,只保留必要的顯示項目,包括取樣信號、數量及光譜波形;光譜波形顯示也是必要的項目,因為可以從光譜波形大致判斷水果的品質,以及取樣是否成功;若深入研究應該可以從光譜來判斷水果品質,是否內部腐爛或有蟲,不過這種研究做成商品大概賣不了錢

手提式水果糖酸度檢測機_取樣程式01  


操作模式分成暗電流校正、白板校正和資料擷取;其中暗電流校正大概只做1次就不會再用到。白板校正是每次使用前必做項目,因為每天溫、濕度對於取樣結果都有微妙的影響

手提式水果糖酸度檢測機_取樣程式02  

 


程式因為沒有複雜功能,主要採取循序結構書寫

手提式水果糖酸度檢測機_取樣程式03  


以下按照資料流向由左至右說明程式結構


程式一開始上方是光譜儀廠商附的程式,用途是設定光譜儀型號和通道編號,下方是把取樣數量歸0

手提式水果糖酸度檢測機_取樣程式04  


其次是初始化,由上而下分別是:打開預先建立的"白板"和"暗電流"文字檔,這2個文字檔在第一次執行時是沒有內容的空白檔案;建立取樣光譜的資料暫存陣列,陣列長度按照光譜儀手冊設定;最底下還是使用光譜儀廠商附的程式,用途是設定取樣波長資料起點和3大參數,輸出的是光譜儀的波長範圍資料。這筆資料主要用於光譜圖表的X軸單位顯示

手提式水果糖酸度檢測機_取樣程式05  


在下來是取樣程式的主結構,是在一個迴圈之內,而迴圈內又包含循序結構。遵循"LabVIEW編程樣式"書中建議,所有資料流線條集中在上方,程式集中在下方

手提式水果糖酸度檢測機_取樣程式06  


迴圈內循序結構分成3段:最左邊是動作觸發,中間是光譜資料擷取,右邊是光譜資料處理堆疊

 


左邊動作觸發是"事件觸發"的方式處理,也是待機狀態時程式暫停位置;有3層觸發:


1.時間定時輪循:主要是輪循USB-6501傳來的按鈕訊號狀態,透過DAQ來擷取USB-6501訊號。在有訊號時會進入擷取訊號的事件觸發;本來是要省略這段,但在經過其他人測試時,會在某些狀態下事件觸發失敗,最後加上這段程式解決問題

手提式水果糖酸度檢測機_取樣程式07  


2.擷取訊號的事件觸發:觸發後會結束待機狀態跳出迴圈,接著是進行光譜資料的擷取和處理

手提式水果糖酸度檢測機_取樣程式08  


3.STOP按鈕滑鼠點選觸發:觸發後會結束待機狀態跳出迴圈,接著是關閉程式。和擷取訊號事件觸發不同的是。後續光譜資料的擷取和處理都直接跳過,會直接結束整個程式迴圈關閉程式

手提式水果糖酸度檢測機_取樣程式09  

 


再來中間是光譜資料的擷取程式,使用的是光譜儀廠商附的程式。因為當時是初次接觸光譜資料擷取,對程式中很多參數用途完全不知道,所以參數完全照抄;也因為是測試階段的程式,還留有不知用途為何的選擇結構,因為原廠範例也是這樣寫,後續的檢測程式這段已被修正

手提式水果糖酸度檢測機_取樣程式10  

 


最後右邊的光譜資料處理,依操作模式也是分成3層選擇架構:


1.暗電流校正:操作前光譜儀的檢測光纖頭是完全遮蔽狀態,使用的是能遮蔽光線的金屬蓋。擷取後的光譜資料直接取代一開始讀進來的暗電流資料檔案,同時寫入暗電流資料檔案取代原有資料

手提式水果糖酸度檢測機_取樣程式11  


2.白板校正:操作前光譜儀的檢測光纖頭是抵在工業白板上,使用的是工業白板,同時IR燈泡有打光。擷取後的光譜資料直接取代一開始讀進來的白板資料檔案,同時寫入白板資料檔案取代原有資料

手提式水果糖酸度檢測機_取樣程式12  


3.資料擷取:主要是把光譜資料經過處理,然後把處理過的光譜資料堆疊成陣列暫存

手提式水果糖酸度檢測機_取樣程式13  

 


光譜資料處理分成幾個過程,用的是自己寫的SubVI:


a.吸收光譜計算:把光譜資料處理成吸收光譜;吸收光譜可以看出操作狀態和水果的許多狀況,若深入研究應該可以再搞出一篇論文吧,可惜老闆不想多花經費搞這個。但在取樣過程中,我從吸收光譜可猜出水果內的大致狀況,有6成的準確率

20080908  


至於是怎麼看的?雖然我有收集了一些圖表,但並沒有全面性的研究。另一個問題是每種水果的吸收光譜都有不同,若要把這項列入勢必要更多樣本,在成本考量上老闆不允許這麼做


以下圖表是芒果的部分吸收光譜

手提式水果糖酸度檢測機_取樣程式14  

 

手提式水果糖酸度檢測機_取樣程式15  

 

手提式水果糖酸度檢測機_取樣程式16  


b.光譜資料平滑化計算:取樣程式用到的計算公式來自技轉的知識,但出處和參數由來一開始也是不知道,只能照抄使用

20080724  


在寫"操作程式"時已經知道用的是"最小二乘擬合法",相關參數是Savitgky-Golay係數,整個SubVI有經過大幅修正。修正後的程式可以搜尋部落格內文章的說明


c.光譜資料處理:這裡分成2種處理方式,2種處理方式的資料都有存檔


1.標準化處理:大多數水果的檢量線(數據建模)都是使用標準化處理過的光譜資料去計算,以實際經驗來說薄果皮類的水果準確率較高,厚果皮之類的水果就差很多

20080905  


2.差分處理:差分處理是技轉單位的稱呼,實際出處和參數由來一開始也是不知道,只能照抄使用。以實際經驗來說對厚果皮之類的水果效果最好

20080909  


後來知道這是"最小二乘一階導數"的其中一種算法,在寫"操作程式"時以找到的資料大幅改寫SubVI。改寫後的程式可以搜尋部落格內文章的說明

 


程式的最後是自動存檔;檔名之前會自動加上取樣時的日期時間。原始光譜資料也存一份,方便以後驗算

手提式水果糖酸度檢測機_取樣程式17  

 


程式的基礎計算來自技轉知識,但更多進階的知識來自外國書籍資料,這台機器能成功推出完全歸功於外國書籍資料;台灣人做學問喜歡處處留手,能找到的資料幾乎全都可以在"維基百科"上找到,難怪台灣在"水果光譜檢測"這項幾乎沒啥進步


下一篇是"操作程式",因為程式相當龐大可能一篇文章寫不完,等資料整理好再發表

arrow
arrow

    未出師的小工程師 發表在 痞客邦 留言(0) 人氣()