這個程式是我離職前的最後一件LabVIEW大作,除了機器沒用到攝影鏡頭外,能用上去的幾乎都用到了;現在依照程式的執行順序來說明程式結構,簡單的SubVI會直接說明程式內容,用途較複雜的後續會另開文章說明

 


如同上一篇文章說的,這程式是可跳著執行的循序結構,以錯誤訊息為控制導向


程式是包在一個迴圈之內,迴圈外是絕對不會更動的檔案路徑設定和控制選項

手提式水果糖酸度檢測機__程式畫面001  


迴圈上半是16條資料通道

手提式水果糖酸度檢測機__程式畫面002  


迴圈下半是5條控制訊息相關通道

手提式水果糖酸度檢測機__程式畫面003  


進入程式架構前,是操作介面顯示初始化

手提式水果糖酸度檢測機__程式畫面004  

 

手提式水果糖酸度檢測機__程式畫面005  

 


所有程式是包在一個選擇框架(Case Structure)之內,框架已設定好主要控制程序名稱

手提式水果糖酸度檢測機__程式畫面006  

 

程式執行後第1個跑的是"光譜儀偵測"程序,主要是偵測光譜儀驅動程式是否正常啟動,還有就是程式內跑的資料流格式化

手提式水果糖酸度檢測機__程式畫面007  


光譜儀偵測是使用修改光譜儀原廠附的SubVI寫的程式,主要是利用打開光譜儀通訊埠的方式偵測光譜儀驅動程式是否正常;會有這段程式的原因是因為光譜儀驅動程式有很大的機率啟動失敗,約40到50次就會有一次失敗,原因不明,通常電腦重開機就會正常


若是成功啟動光譜儀,程序控制項就會切換進入"初始化"頁面

手提式水果糖酸度檢測機__程式畫面008  


若是啟動光譜儀失敗,會進入錯誤處理程序,呼叫副程式跳出警告視窗

手提式水果糖酸度檢測機__操作程式畫面01  


按下副程式視窗的"確定"鈕後,會關閉警告視窗,同時控制程序切換進入"關機"頁面

手提式水果糖酸度檢測機__程式畫面009  


資料流格式化是針對程式要跑的資料設定格式,陣列很難混搭不同格式資料,所以主要資料全部以叢集(Cluster)方式編成,這樣做可以以一條線傳遞最多具名資料,方便之後程式編寫。這一階段格式化的重要資料流有:


操作參數

手提式水果糖酸度檢測機__程式畫面010  


操作數據

手提式水果糖酸度檢測機__程式畫面011  


堆疊資料

手提式水果糖酸度檢測機__程式畫面012  


光譜資料

手提式水果糖酸度檢測機__程式畫面013  


列印和RS-232輸出的文字資料

手提式水果糖酸度檢測機__程式畫面014  

 

 


若在"光譜儀偵測"程序時,光譜儀啟動失敗,接著就會進入"關機"頁面

手提式水果糖酸度檢測機__程式畫面015  


在"關機"頁面會先關閉光譜儀程式,再停止迴圈動作,跳到關機程式關閉電腦,關機程式是叫用Windows來關機

手提式水果糖酸度檢測機__程式畫面016  

 

 


若在"光譜儀偵測"程序時,光譜儀啟動成功,接著就會進入"初始化"頁面

手提式水果糖酸度檢測機__程式畫面017  


初始化基本上是一連串的叫檔動作,由上到下分別為:


暗電流檔案

手提式水果糖酸度檢測機__程式畫面018  


暗電流的檔案資料和水果檢量線的檔案資料都是使用TDMS格式儲存,LabVIEW這個獨有的檔案格式具備了不易解讀(除非知道資料編成格式)、資料格式可混搭(和叢集差不多)、資料可具名儲存這幾大優點。要說缺點的話就是寫入和讀取都要依照一定的格式,所以資料在寫入時要確認好,不然在之後要增刪修改資料很麻煩


水果名稱檔案

手提式水果糖酸度檢測機__程式畫面019  


檔案格式是INI格式,裡面是包含2組陣列的叢集資料,一項是水果名稱,另一項是品項名稱,最多可傳遞144個資料。會有這個差別是因為同一名稱水果,在不同地區可能是不同品種或是有不同稱呼,所以在建立檔案時便以這2項的組合來確定水果種類和產地

手提式水果糖酸度檢測機__程式畫面020  


這其中的差別沒有實際處理過大量水果的人不會明白!例如豐水梨這一項,到了各地農會就有可能變成X統梨或上X梨這些別名,本質上還是豐水梨這個品種,但測得的光譜有些微差異,這應該是產地的水土所造成。所以當時我是勸老闆有些種類水果要用當地產的來建立資料,不然這差異就等於是自砸招牌


上次設定檔案資料

手提式水果糖酸度檢測機__程式畫面021  


檔案格式也是INI格式,裡面是包含2組陣列和2組叢集的混合資料,最多可傳遞170個資料

手提式水果糖酸度檢測機__程式畫面022  


那2組校正用的資料原始版本是沒有的,會增設的原因有2項:一項是老闆沒有接受用當地產的水果建立資料的建議,想以一條資料走天下。可惜遇到上X梨時沒用,還是乖乖採用我的建議重新建立資料;另一項是光譜儀的問題?就算是指定同一規格的型號,製造商送來的還是有極微的差異,同一波長的光譜資料會落在輸出陣列的不同位置,連帶會使測出的結果偏差。幸好這不會影響檢測結果的重現性,加上這修正參數就可以處理


若上次設定有用到RS-232輸出,就會自動進行開啟RS-232通訊埠,若開啟失敗就會自動關閉RS-232輸出這一選項

手提式水果糖酸度檢測機__程式畫面023  


以上讀檔若失敗出現錯誤,同樣會叫用副程式跳出警告視窗

手提式水果糖酸度檢測機__操作程式畫面03  

 

手提式水果糖酸度檢測機__操作程式畫面05  

 

 


若"初始化"叫檔成功沒有錯誤,接著就會進入"暖機"頁面

手提式水果糖酸度檢測機__程式畫面024  


暖機時會先偵測DAQ介面

手提式水果糖酸度檢測機__程式畫面025  


若DAQ介面偵測失敗會跳出警告視窗

手提式水果糖酸度檢測機__操作程式畫面07  


若DAQ介面偵測成功會叫用暖機副程式

手提式水果糖酸度檢測機__程式畫面026  


並跳出暖機畫面倒數計時

手提式水果糖酸度檢測機__操作程式畫面09  


上方則同時倒數燈泡的使用壽命

手提式水果糖酸度檢測機__程式畫面027  


關於IR燈泡暖機時間和使用壽命,在原始版本時,暖機只需約15分鐘,號稱使用壽命約5000小時。後來製造廠商因應歐盟的環保罰則修改產品規格,結果變成有段時間的產品極不穩定。雖然後來穩定下來,但暖機若不超過25分鐘以上就很難達到穩定狀態,號稱使用壽命也只剩約3000多小時

 

 


暖機完成後會進入"讀取資料"頁面

手提式水果糖酸度檢測機__程式畫面028  


這裡只有讀取已灌好的檢量線資料檔案,使用TDMS格式儲存。再依照上次設定只取出要用的資料合成檢測用參數

手提式水果糖酸度檢測機__程式畫面029  

 

 


檢量線檔案讀取完成就會進入"待機"頁面

手提式水果糖酸度檢測機__程式畫面030  


在待機頁面,所有操作會用到的"頁面切換"、"參數更改"全部使用事件處理有20項。加上輪詢偵測檢測按鈕訊號的Timeout事件共有20項

手提式水果糖酸度檢測機__程式畫面031  


在Timeout事件上方是燈泡使用壽命的倒數計時

手提式水果糖酸度檢測機__程式畫面032  


在Timeout事件中央是檢測DAQ訊號,若檢測按鈕有訊號則會跳到量測頁面,若沒有訊號則停在待機頁面

手提式水果糖酸度檢測機__程式畫面033  


"存檔歸零"事件觸發後,會清除已檢測的點數和數量,再切換到"資料存檔"頁面。("資料存檔"頁面再底下另外說明)

手提式水果糖酸度檢測機__程式畫面034  


"關機"事件觸發後,會先切換到"資料存檔"頁面,存檔完畢會再跳到"關通訊埠"頁面,通訊埠關閉後再跳到"設定存檔"頁面。當程式畫面的設定都存檔後,才跳到"關機"頁面關機

手提式水果糖酸度檢測機__程式畫面035  


"燈泡歸零"事件是在更換IR燈泡後以人工觸發執行,把燈泡的使用壽命從頭計算

手提式水果糖酸度檢測機__程式畫面036  


"主畫面"事件和"參數畫面"事件是切換操作程式的Tab Control元件頁面

手提式水果糖酸度檢測機__程式畫面037  

 

手提式水果糖酸度檢測機__程式畫面038  

 

手提式水果糖酸度檢測機__操作程式畫面15  

 

手提式水果糖酸度檢測機__操作程式畫面23  


"操作模式"事件是切換為白板校正模式或糖度量測模式

手提式水果糖酸度檢測機__程式畫面039  


"檢測模式切換"事件是切換為單點模式或多點模式

手提式水果糖酸度檢測機__程式畫面040  


"聲音報知"事件是切換是否要開啟音樂鈴

手提式水果糖酸度檢測機__程式畫面041  


"列印功能"事件是切換是否要列印標籤

手提式水果糖酸度檢測機__程式畫面042  


"溫度補償"事件是切換是否要打開溫度補償功能,內定是打開的狀態。關閉狀態是針對該項水果的溫度變化取樣時才會用到

手提式水果糖酸度檢測機__程式畫面043  


"通訊功能"事件在通訊埠打開時觸發會關閉通訊埠,反之則會打開通訊埠。在初始化過程中若通訊埠開啟失敗,則可在"待機"模式時切換到"參數畫面",嘗試重新開啟通訊埠

手提式水果糖酸度檢測機__程式畫面044  


"酸度切換"事件是切換酸度是PH值顯示或百分比顯示,內定是百分比顯示,程式內的運算則是PH值,和顯示模式無關

手提式水果糖酸度檢測機__程式畫面045  


"水果溫度"事件設定溫度補償計算時的修正溫度,事件執行時會叫用自製的數字鍵盤程式

手提式水果糖酸度檢測機__程式畫面046  

 

手提式水果糖酸度檢測機__操作程式畫面18  


"檢測標準"事件設定水果達到多少糖度時會發出聲音,要搭配"聲音報知"功能使用。事件執行時會同樣叫用自製的數字鍵盤程式

手提式水果糖酸度檢測機__程式畫面047  

 

手提式水果糖酸度檢測機__操作程式畫面16  


"檢測點數設定"事件必需搭配多點模式才有作用,可以設定一顆水果要測幾次才計算平均糖度,執行時會同樣叫用自製的數字鍵盤程式

手提式水果糖酸度檢測機__程式畫面048  


"檢測項目"事件觸發時會跳出"品項選擇"清單視窗,選擇後會根據選擇水果,跳回"讀取資料"頁面,自動調用檢量線資料和校正參數

手提式水果糖酸度檢測機__程式畫面049  

 

手提式水果糖酸度檢測機__操作程式畫面21  


"糖度校正畫面"事件和"酸度校正畫面"事件觸發時,會跳出糖酸度的校正設定畫面。原本是不開放給客戶使用,但因有少數客戶有需求才開放此功能

手提式水果糖酸度檢測機__程式畫面050  

 

手提式水果糖酸度檢測機__程式畫面051  

 

手提式水果糖酸度檢測機__操作程式畫面29  


"系統設定畫面"事件觸發時會跳出系統設定畫面,這是禁止客戶使用的項目。但有些客戶是越禁止就越喜歡玩,針對那些少數客戶用的是有密碼的版本

手提式水果糖酸度檢測機__程式畫面052  

 

手提式水果糖酸度檢測機__操作程式畫面27  


"列印設定畫面"事件觸發時會跳出列印設定畫面,可以設定列印標籤的字樣大小位置...等參數

手提式水果糖酸度檢測機__程式畫面053  

 

手提式水果糖酸度檢測機__操作程式畫面24  

 

 


在"待機"的狀態下,按下實體檢測按鈕,Timeout事件偵測到按鈕動作,就會自動切換到"量測"頁面

手提式水果糖酸度檢測機__程式畫面054  


"量測"頁面上方若"操作模式"選擇為白板校正時,會儲存更換白板光譜資料

手提式水果糖酸度檢測機__程式畫面055  


"量測"頁面中間一開始是以迴圈連續光譜取樣21次,同時進行糖度和酸度計算。計算後的結果輸出成糖度和酸度的2組陣列

手提式水果糖酸度檢測機__程式畫面056  


接著是把2組陣列資料分別除去偏差較大共10筆數據,剩下的11筆數據加上溫度修正算出糖、酸度,再算出糖酸比;接下來若是多點檢測模式,則會再累積設定數量的數據時計算糖酸度的平均值,再判斷糖度是否達到設定標準;最後依照設定和檢測結果判斷是跳回"待機"頁面,或是跳到"檢測輸出"頁面

手提式水果糖酸度檢測機__程式畫面057  

 

 


完成量測後會進入"檢測輸出"頁面,在這裡會把算出的數據加上日期時間,再加上水果名稱和合格標準,合成通訊用文字字串(格式是XX超市客戶要求的格式)

手提式水果糖酸度檢測機__程式畫面058  

 

 


字串合成後會進入"通訊"頁面,若有打開通訊功能,則會把字串加上"起始碼"和"結束碼"透過通訊埠輸出

手提式水果糖酸度檢測機__程式畫面059  

 

 


跳過"通訊"頁面會進入"列印"頁面,若有打開列印功能,則會依照設定把資料送到標籤機副程式列印標籤。列印完成後會回到"待機"狀態

手提式水果糖酸度檢測機__程式畫面060  

 

 


最後,在"待機"狀態下按畫面下方的關機鈕,會先跳到"資料存檔"頁面。在"資料存檔"頁面會以當時的日期時間建立新文字檔案,然後把檢測結果寫入檔案內

手提式水果糖酸度檢測機__程式畫面061  

 

 


資料存檔後會再跳到"關通訊埠"頁面關閉通訊埠

手提式水果糖酸度檢測機__程式畫面062  

 

 


最後會跳到"設定存檔"頁面,把當時操作畫面上所有設定參數寫回INI檔案內

手提式水果糖酸度檢測機__程式畫面063  

 

 


設定存檔完成後就會跳到"關機"頁面,執行關機動作

手提式水果糖酸度檢測機__程式畫面015  

 

手提式水果糖酸度檢測機__程式畫面016  

 

 


以上是手提式水果糖酸度檢測機的操作程式解說;其中讀寫INI檔案用的是免費外掛OpenG的程式。光譜儀驅動程式是按照原廠資料重新改寫,詳細內容可參考我部落格內文章。數字鍵盤程式碼同樣可參考我部落格內文章。其他用到的自製SubVI待後續文章再一一說明

arrow
arrow

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