基本上一個程式會Focus在一個主題上,以Word來說,他是文書處理軟體,那它主要目的就是輸入文字及排版,做出來的可以對文字及圖片編輯及排版,而基本上同個領域都有相似的設計方式,可以看到每個文書軟體,哪個不是一張白布,一個游標,可以輸入文字的,
當然會有一些不同設計,根據每個人的不同想法,但是基於使用上,Focus的設計會根據要設計的軟體,經由時間的累積,逐漸產生很固定的程式撰寫方法,講個廢話,有人有看過網頁軟體有提供不一樣的瀏覽畫面嗎,頂多框架不同,操作不同,但是主要功能是瀏覽網頁,他瀏覽網頁那塊的設計基本上是固定的,一家網頁提出個頁籤功能,其他廠商過一陣子覺得這個功能實用,以寫得出來的前提下,過兩天就生出類似的頁籤管理了
更實際的例子,古早算1加到n可能是用for迴圈加的,但是當有人發明了梯形公式,這個東西足夠好,當大家都會時,未來算1加到n,基本上都是用梯形公式
一個領域的軟體也是經由很多工程師一直演化發展出來的,其實我們就一個初入該領域的人,是不可能什麼東西都自己想的,原則上是靠臨摹,講難聽一點就是研究完後抄襲
所以呢,我們原則上還是必須要到一些有技術性底子的公司,在經由維護他的案子,順便學習他的案子的所有一切,了解他的優缺點後,才是我們提出改進,並做出屬於我們自己的東西
總之就是不可能靠自己憑空想,儘管花了10多年自我研究,就生出很有價值的東西,
所以呢,還是要想辦法得到門票去一些有技術底子的公司取得有用的謀生能力,
後面要講的是AOI他的程式基本框架,當然也不可能是我發明的,我也是近公司才開始學習的,
進入正題
AOI就是所謂的光學檢測,他其實很雜,牽涉到機構,光學,電子,軟體,那一個人怎麼會所有領域,其實去上班就知道了,寫軟體的就知道這四個領域相關常識,其實要做時,軟體外的就發包出去請機構商做,光源買現成的…之類的,我們還是主要Force在軟體,
AOI做出來的東西,原則上要搭配自動化設備,做到一台機器並且有檢出功能才算是完整
基本上牽涉到客戶檢測的產品,產品基本上是多樣性的,假設檢測一個主機板,每個公司的主機板長的都不一樣,甚至同一家公司會有多款的主機板,那我們要賣給一個客戶,我們的軟體就必須可以編輯檢測功能,
當然有些小型檢測軟體,他只是Force在一個檢測的項目,不過那種案子對AOI來講,比較接近練功用
我們工作不外乎就是賺錢學知識,所以小型檢測軟體這裡只是稍微帶過,反正小型的檢測軟體就是一個自動化流程,我們可以做基本編輯,並且提供一個主題的檢測功能,只要能達到檢測功能,並且讓他用自動化連續跑,就設計完了,不太需要太複雜或太難的設計
但是當作到中大型的,寫軟體非常像蓋一個工廠,
假設要控制打光的光源開關,我們就要做一個光源模組控制光源,
假設要取像,就必須寫一個取像模組來得到影像
假設要控制IO,當然就是要能控制IO存取的模組,
總之一間公司是很多部門的結合,那大型軟體,就是很多模組的集合,
想想一間公司的人資部門,假設有固定一種管理模式,把她想成是一個模組,那要是公司想要用不同方式管理人資,就把這個人資部門fire掉,在另外找一批人成立一個人資部門,也就是換模組拉,以軟體為例,電源控制器很多款,那我一套大型軟體,就會做一個模組接口,這個接口可以掛上控制不同電源控制器的模組,想切換只需要用ComboBox做一下選擇,就可以控制另一款電源控制器
這裡不講實現方法,不過講實際一點就是使用AOOP的Virtual來重載模組掛載,所以學校教的一些進階寫程式知識,其實不完全是那麼理論,那麼的傳統知識,其實是我們不會應用爾已,但是說實在的學起來不知道怎麼用,學的時候真的很無趣
要編這些故事其實挺麻煩的,因此我直接列舉AOI程式框架的模組:
1. 取像模組 – 沒影像要怎麼檢測
2. 參數管理模組 – 例如我要將檢驗結果儲存在檔案裡,我們不可能把路徑寫死,因此要提供參數輸入給使用者設定
3. 檢測功能的基本模組 – 用來寫檢測演算法的
4. 畫面編輯功能模組 – 例如我要檢什麼位置,就在該位置拉一個框,到時候我們就對那個框的位置採取其中一種檢測功能
5. IO模組 – 我們要判斷一個檢測產品是不是良好,必須送信號給自動化機械,請他們幫我們做動作
6. 光源模組 – 我們打光有時會調不同亮度(電壓不同拉),需要有一個模組來控制電源控制器
7. Motion模組 – 假設要掃Line Scan影像,必須控制載台移動取像,就必須完成這一個模組
8. Model模組 – 由於程式必須用編輯的方式處理,那編輯完的資訊就必須儲存起來,以便在下次打開程式時,載入相同的檢測設定,以便可以直接進行檢測
9. 噴墨模組 – 就是送字串給噴墨設備,請他們幫我們處理噴墨動作
以上是一些比較大的模組
就實際實現軟體細節的,下面列出一些細節模組:
1. 執行緒池 – 管理執行緒的,因為現在電腦有多核心,我們將不同的檢測,批次丟給多核去處理速度會比較快
2. 參數處理模組 – 例如我要存檔,必須做一個參數存檔模組,可以讓我們利用比較簡易的寫程式方式,就將參數寫入檔案或者讀出檔案
3. 背景處理用的Cmd執行緒 – 就是一個Block住的執行緒,我們下指令時他才會進行處理動作,用以將處理丟到背景去做,例如我要存圖,就指派一個執行緒去存圖,我們視窗程式就不會畫面卡住
4. Form欄位及參數對應模組 – 有了該項設計,欄位只要呼叫一個函式,就可將所有Form欄位存入結構或者是顯示在欄位上
5. 檢測結果模組 – 我們檢測完整個產品,每個地方有沒有問題必須存起來,以便到時候查看時可以將它畫到畫面上讓人家知道是瑕疵位置
6. 拉框模組 - 就是要檢測位置要用一個框表示,檢測時對該框的相對應位置進行檢測,這個框可以放大縮小或者是旋轉或增加節點或刪除(類似PhotoShop那樣)
總之講不完拉,全部提一遍其實沒太大作用就是了,一般要看過類似的案子,看上述內容才會知道我在說什麼,
想想我這裡隨便列就15項了,要一個人完成所有模組,真的不是簡單的事,更何況還要自己想出來,這是不可能的,所以還是建議必須要想辦法進去一些有底子的公司學習,接著在看我這篇文章,會比較有感覺的:D
這裡最後要提的是,每個模組又可以多個,例如光源控制器可以開多組光源控制器,相機可以取多張影像檢測,IO也可以多張IO卡,Motion控制可以控制多軸,Model也可以做繁衍,例如檢測相同的模型用一個Model,那要是兩類就必須有兩個不同教導的Model,總之什麼都可以繁衍,
但說實在的其實一般公司在做,也不是每個東西都做繁衍,可能都只是固定數目的模組,所以不需要想太複雜:總之還是必須循序漸進,不能太急,先看看小案子再來接手大案子,會對學習比較有幫助,因為案子大了其實不是那麼好研究的
感謝你的深入淺出的解說,雖然無法100%明白。但至少讓完全不了解的人能有概念
回覆刪除