LabVIEW以其圖形化的風格,非常適合在科研生產(chǎn)中應用。
現(xiàn)在國內(nèi)許多科研院所也都采用LabVIEW進行項目開發(fā),也取得了不錯的效果。
在我們?nèi)粘i_發(fā)中,接觸到不少這方面的案例。但也有不少人反映,LabVIEW只適合數(shù)據(jù)采集、圖像顯示等很簡單的應用,稍微大些的場合就無法滿足。當我們深入了解,尤其是看到他們的源碼后。發(fā)現(xiàn)這些項目大都是學生開發(fā)或者接觸LabVIEW不是很久的人開發(fā)的。他們的經(jīng)驗很少,對LabVIEW編程理解的很淺。有些經(jīng)典的資料都沒有看過,只是從網(wǎng)上看了個相關的例程,在這個基礎上做些修改。
其實這是對LabVIEW的誤解,再好的工具也要會用、要用的好才行。不深入學習并實踐一段時間,是很難輸入理解的?,F(xiàn)在社會風氣也很浮躁,大家都想賺快錢,今天有個項目,三天就能做完,一周后項目就驗收。試問哪有那么好的事情啊。
我們在LabVIEW開發(fā)上已經(jīng)十多年了,也還要經(jīng)常的學習新東西。很多時候解決問題的方法不止一種,每一種都有各自的應用場合。只有對這些理解的比較深入,用的比較多,才能做出比較好的軟件。任何一個領域也都是這樣的吧。
歡迎交流。
用LabVIEW進行編程開發(fā),越來越得到更多的共識。
在開發(fā)過程中,是離不開終用戶的支持與配合,比如詳盡的需求,哪些地方是一定要實現(xiàn)的,哪些地方是現(xiàn)在還不確定,需要預留準備的。還有哪些地方屬于錦上添花的,這些要考慮項目的工期以及預算的情況。
軟件要想好用,系統(tǒng)想運行穩(wěn)定可靠,是需要雙方的互相配合。如果您在這方面有要求,歡迎與我們聯(lián)系。
我們做LabVIEW編程開發(fā)及配套的系統(tǒng)硬件開發(fā)整合工作。 LabVIEW這個開發(fā)工具,不知道您了解嗎,它作為圖形化編程語言,近幾年發(fā)展迅速,具有開發(fā)快、可靠性高等特點,非常適合自動測控、故障診斷、圖像識別、數(shù)據(jù)處理、實驗室無人值守等方面的應用,在航空航天、自動化、5G通訊等眾多領域發(fā)揮越來越重要的作用。
我從LabVIEW 6開始接觸,到現(xiàn)在LabVIEW2021,干這一行已經(jīng)十七年了。為清華大學、北京大學、北航、中科院等多個科研單位(因為這次推廣主要是針對科研單位,企業(yè)的項目就不介紹了)都有過合作,總的來說都是這些老師主動聯(lián)系我們的。每次和他們溝通和開發(fā)后,這些老師都有相見恨晚的感覺。為什么呢?
很多老師都有自己的研究生、博士生,這些學生在理論學習方面確實很強,這點毋容置疑。對于一些程序也能開發(fā)。但是他們的短板也很明顯,他們畢業(yè)就離開了,而且所寫的程序也不大符合編程的規(guī)范,這點好理解,畢竟編程開發(fā)不是他們的主要工作。等他們離開后其他人很難接手。遇到需要改動或升級的情況,要么咨詢畢業(yè)的師兄,要么自己從頭開始。可能在費用上花不了多少錢,但是時間上很難。
而我們是公司行為,一直做這個。我們的項目默認有一年的服務期。在這個階段開發(fā)的程序經(jīng)過測試,該暴露的問題,該增加的功能都完善差不多了。甚至我們有的軟件都運行十年了,配套的電機都跑壞了。我們還免費更新電機的驅(qū)動程序。您看,這樣能節(jié)省多少時間,節(jié)省多少經(jīng)費?
由于我們一直做開發(fā),總會積累經(jīng)驗的。所以開發(fā)調(diào)試的周期都不會長,因此開發(fā)項目的鵝成本并不高。我們的經(jīng)驗不但在軟件開發(fā)時能發(fā)揮作用,在選購硬件產(chǎn)品時,往往也能幫您節(jié)省預算。能滿足要求的采集卡啊、控制器啊,不同廠家的價格差距很大,選擇靠譜的廠家,我們就能大大降低設備采購的預算。在科研生產(chǎn)中,您也會有這種體會吧。我們現(xiàn)在很多國產(chǎn)的產(chǎn)品質(zhì)量也不錯,或許在做還趕不上國外的,但在滿足我們使用上,還是有了更多的選擇空間。
除了開發(fā)新的程序,我們也能對之前的程序進行升級改造。之前接觸過一些國外的軟件項目,我們也能通過逆向工程的方式,進行升級維護。這樣就大大降低了客戶的時間和經(jīng)費。我們是人民幣,老外是美元歐元啊。當然,國內(nèi)也有一些程序做了加密處理,我們也可以嘗試進行逆向,不過做好還是和之前的開發(fā)人員溝通。這類往往是因為商務上的事情造成的。
在航空航天科研中,遇到項目緊,指標高,需要人來幫助的時候。如果需要LabVIEW編程開發(fā),自動測試、圖像識別、數(shù)據(jù)處理等方面的事情,可以聯(lián)系我們。
十七年來堅守LabVIEW開發(fā)及硬件、集成工作。
開發(fā)周期短,服務周期長,確保系統(tǒng)能用、好用。
提供優(yōu)化方案,不花冤枉錢。
很多人在問LabVIEW 該怎么學才能快速速寫出好的程序?除了多練習外沒有速成的方法。但是想要靠寫LabVIEW 討生活?哪有那么簡單。
1. 事前準備:
a. 了解 LabVIEW 常用基本功能。所謂 " 工欲善其事,必先利其器 " ,現(xiàn)在網(wǎng)上的資料也很多,找起來很方便的。。很多人留言或來信問問題,許多連基本概念都不清楚,跟他說了這個問題,還是不知道該怎么做或為什么那樣做
b. 搞清楚資料格式: LabVIEW 是資料導向的程序,資料格式不一樣就有可能出現(xiàn)不同的結果。大家盡量多看英文原版的說明,學了那么久的英語,為什么用上呢。
c. 雜學知識:有用到時多少要先了解一下,至少要有一定的概念。
其他程序語言 (C 或 VB… 等 ) :不要求精,但起碼要看的懂程序碼。除非你不做儀器控制,否則多少都會接觸到。就目前接觸過的儀器設備,其儀器設備的函數(shù)手冊或通訊手冊范例很多是用 VB 等其他程序語言寫的,若看不懂那要如何去改寫成 LabVIEW 程序
PLC :對被控制的對象總要有一定程度的了解,如 PLC 的階梯圖程序,硬體的 IO 接點、內(nèi)部接點和外接模組,還有通訊格式之類的資料。沒有一定的基礎往往出了問題卻不知道要從哪里下手
圖像處理:圖像處理的基本原理和色彩轉(zhuǎn)換 … 等知識
數(shù)據(jù)庫:不管用的是哪種資料庫,SQL 的語法是一定要會的。
2. 資料流的觀念:
上面說過的 " LabVIEW 是資料導向的程序 " ,資料跑到哪里程序就執(zhí)行到哪里。程序是可以同時跑多條資料流程,但若是多條資料流程會用到同一個變數(shù),就有必要把執(zhí)行的先后順序厘清,確定資料的流向。打個比喻來說:資料流就像單行道,可以有多條單行道通向某處,但出口只有一個,那會是哪臺車先通過出口呢?這時當然是設定紅綠燈來控制先后順序
3. 程序注解:
程序注解是有必要的,因為大一點的程序往往是分給幾個人去寫,加上程序注解比較好溝通,同時了解這段程序在整個程序中的作用。主要也是避免一段時間后,自己也看不懂當初寫的程序
4. 程序整理:
很多人的程序,說實在看到畫面重疊和那一團左右交錯的線條就很頭大。干凈的畫面有助于了解程序,在監(jiān)看模式時更容易了解資料的流向。寫的時候多花點時間,后面調(diào)試修改的時候就會節(jié)省很多時間。所謂磨刀不誤砍柴工。
5. 程序細節(jié):
a.能拉直線的就盡量不要轉(zhuǎn)彎,線條的轉(zhuǎn)折越少越好
b.線能拉的到的就不要使用 local 之類的變數(shù),沒必要時盡量不要使用 local 之類的變數(shù)
c.太多資料要傳遞又不想拉太多線,那就把資料用 Array 或 cluster 打包成一條線
d. 順序結構要謹慎使用,執(zhí)行順序不固定時就不要用。有要隨時停止的程序也盡量不要用順序結構,順序結構往往是不能立即停止的元兇,必需使用時一定要安排好能跳過順序的條件,例如改用Case取代順序結構
e先求功能再求精簡:復雜一點的程序不可能一次搞定都沒有問題,這時是把需求功能先做出來,測試到?jīng)]問題后,再研究程序哪邊可以再精簡
f.善用錯誤代碼除錯:較復雜的程序幾乎都不可能一次搞定,在測試時會跳出各種各樣的的錯誤信息,可以從錯誤信息去找出問題的所在。若是覺得錯誤信息不夠詳細,可以用錯誤代碼的數(shù)字查詢詳細內(nèi)容。方法是:點選下拉式功能表Help底下的Explain Error那一項,在Code輸入錯誤代碼并且點選Status按鈕將其變?yōu)榧t色的X,這樣一來錯誤代碼的描述就會出現(xiàn)在Explanation里了
6. 程序分段書寫測試:
一個大程序不可能一次搞定,一些片段或重復部份可以先分開寫,測試到?jīng)]有問題后再打包成 SubVI 整合進去,后續(xù)也可以掉出來重復使用 許多儀器控制適用這種方法,先測試和儀器通訊到?jīng)]有問題,在將測試程序打包成 SubVI 整合到主程序內(nèi)
7做SubVI有幾個要項:
1. SubVI輸入加輸出資料合計能用的接點有限,考慮到未來要擴充功能的需要,輸出輸入點數(shù)的總和盡量控制在12~16點之內(nèi),若要超出這個限制有些接點就需使用Cluster或array
2.SubVI之中還可以包含其他的SubVI,數(shù)量不限
3.輸入點盡量安排在左邊,輸出點盡量安排在右邊。資料輸出入有相關連的SubVI,同類型的資料接點要安排在相對應位置
當然,如果項目很著急,或者自己公司缺少LabVIEW的工程師,可以聯(lián)系外包,比如我們公司
LabVIEW程序?qū)W習建議(具體可登錄www.bjcyck.com):
labVIEW學習開發(fā)出一個程序,非常簡單,拉幾條線放幾個Funtion,很快就能夠完成了,但是,你有考慮過你的程序內(nèi)存使用問題嗎?、有考慮過其他人接手(或是下次你再復習)容不容易閱讀?、又或是程序架構擴增的彈性呢?
NI Example :
我推薦初學者再遇到不會的function、或有時間的時候?qū)I Example打開來看看一樣的功能Example怎么寫出出來的,然后模仿再寫一次,這樣反復練習才會學習到比較好的good style。NI在文件上面非常的下功夫,教學的資源也是非常的多,每次的LabVIEW升版都能看到新的Example,也會淘汰一些不范例程序。
Help-->Find Example
或是對著組件按Control+H ,在內(nèi)文中找Find Example
2.LabVIEW 書籍 :
這里有兩本書推薦,
一本是比較適合初階,CLD程度閱讀的LabVIEW For Everyone,這本是本英文書,深入淺出的介紹LabVIEW的組件,
另外一本市圣經(jīng),The LabVIEW Style Book,這本書我之前有介紹過,可以參考: LabVIEW_推薦參考書_The LabVIEW Style Book, 這本書分成很多段落在分享和教導讀者如何建立程序架構、設計親切易懂的人機接口和養(yǎng)成良好習慣 。
3.論壇:LabVIEW Pro、NI英文論壇
網(wǎng)絡上很多LabVIEW資源,從以前的LabVIEW360、LAVA、LabVIEW Pro,我都很建議可以去瀏覽,這編列幾個:
LabVIEW Pro : 小編很用心地在經(jīng)營,有練功區(qū)、程序基礎教學、討論區(qū)、技術專題..等
NI Discussion Forums : 外國搞手討論都輝激起如元子彈的震撼教育
LabVIEW 360 : 很多不錯的資源,討論人氣也是非常的旺
LAVA : 討論很多VI擴充tools
如果項目著急或者需要外包,推薦www.bjcyck.com。他們從事LabVIEW開發(fā)十幾年,可以聯(lián)系咨詢。
程序?qū)懽鹘ㄗh:
1. 使用英文版的LabVIEW:
LabVIEW許多資源都是用英文的,包括白皮書、使用說明、Help文件、或是spec文件..等等。用英文版的LabVIEW開發(fā)熟習組件名稱,這樣再搜尋資源會比較輕松;放心,英文接口對寫程序不會有什么影響的。
2.LabVIEW Good Style :
使用Good Style開發(fā)LabVIEW是我一再強調(diào)的,好的寫作習慣養(yǎng)成是日后建立大型項目的重要基礎,要檢查自己的程序是否符合Good Style簡單也是快的方法就是打開Analyzer。
Tools-->VI Analyzer-->Analyze VI
他分析的面向很廣包括:Block Diagram、Complexity Metrics、Documents、Front Panel、General、VI Metrix
分析完后會給一份報告,評估程序的風險程度,可以看到自己寫出來的程序哪邊和建議的違和,
或是直接查看 LabVIEW Check List ,檢查什么事重要的項目。
5.架構選擇:
我覺得程序架構只要穩(wěn)、易維護,都是很好的架構;所以我并沒有非常推崇高階的程序項目架構,我認為需要依照項目、團隊來選擇程序架構,不過如果是初學者學習的話,我推薦下面的程序架構:
State Machine :適合小程序,需要輪轉(zhuǎn)重復的功能
Producer & Consumer: LabVIEWPro介紹中文版
Queue Message Handler :這個比較進階一點,不過試LabVIEW的Project Template,教學文件很多,可以試試看
Template-->Producer/Consumer
Template-->Simple State Machine
6.程序整理
程序凌亂會降低Coding效率,意大利面程序、會增加維護的困難。
1. 建議常常使用工具把整理程序
2.避免過多彎取的線、堆棧的線
7.Type Define
使用State Machie Enum、GUI Tab、交握的Data、傳遞在不同程序的Data...等常常再不I或是同一個VI使用多次的原件都將型態(tài)存起來,好處是修改時不用一個一個更改,使用Type Define后一次可以修改到全部。
可以參考這篇教學:https://knowledge.ni.com/KnowledgeArticleDetails?id=kA00Z0000019MFtSAM
8. 程序大小控制在同一個畫面中
如果你的撰寫需要用50吋的屏幕才能完整展開,是需要整理得程序、利用SubVI、好的程序架構、Good Style,增加程序閱讀性。
9.不要濫用global、local Variable
變量濫用、Race Condition是LabVIEW開發(fā)初期的通病,使用過多會造成程序的不穩(wěn)定性。試著使用FGV、Shit Register來取代這些跳脫數(shù)據(jù)流概念的變數(shù);
這篇有詳細的介紹: LabVIEW_什么是Race Condition(競爭危害)?
10 程序批注
千萬不要覺得批注是幫助別人閱讀自己的程序才需要寫,我的經(jīng)驗是,大部分都是幫助自己 不用一年,程序邏輯沒有文件的輔助是很難快速切入的。
應該是LabVIEW2014后,批注還可以加上箭頭,非常的方便。
11.使用Cluster
Cluster的使用可以簡化Block Diagram,重要的是可以讓相關的資料做一個結合,在后續(xù)的使用上比較清楚,也減少connect的接角。
請注意,當在bundle 和unbundle cluster 時一定要使用by Name的方法,好搭配type define做cluster的數(shù)據(jù)結構定義。
12.開始寫做前規(guī)劃程序架構、應用方式
開始撰寫前先想過程序需求用什么架構來開發(fā)會更融易、把需求想過一次后,會看到很多一開始想不到的盲點。好是畫出流程圖,并把這些開發(fā)文件都留在項目、程序的文件夾中,幫助日后的閱讀。
程序人機(GUI)建議:
1.利用對齊工具來讓面板整齊:有各種對齊、置中對齊、靠左對齊、靠右對齊...
2.利用調(diào)整間距工具: 有各種調(diào)整間距的方法:平分、固定間距、0間距...
3.調(diào)整對象大小: 調(diào)整對象大小,也可以多選多個對象將他們調(diào)整成大小全部一樣。
4.字體大小\顏色:
整個面板的字體大小、顏色好控制在3種不同的組合,過多顏色、大小會讓畫面過于凌亂??梢苑殖?不重要小字(size:14、灰色)、正文(size:16、黑色)、非常強調(diào)(size:20、紅色)
5.利用Tab簡化控制組件很多的人機,才不會讓使用者一次看到過多的控制組件產(chǎn)生恐懼感(?)
可以參考NI Example-->Programmatically Manipulate a Tab Control.vi 來看使用方法
Debug程序建議:
利用Explain Help查看錯誤碼,每個錯誤都要發(fā)揮偵探的精神,找出實質(zhì)的原因,才不會出現(xiàn)"幽靈bug"的問題。(有時候會發(fā)生有時候又不會發(fā)生的bug)
項目程序建議:
1.文件夾整理,將程序依照自己的固定方法、分類整理control、SubVI,這樣在移動項目時,不容易有"丟包"的subVI,也容易一目了然項目的程序用途。
2.使用VI Hirechy檢視
從hirechy可以檢查程序的整潔度和關聯(lián)圖,在閱讀他人的程序格外重要,可以從這個架構途中,了解整個項目架構和應用層面。
如果項目著急或者需要外包,推薦。他們從事LabVIEW開發(fā)十幾年,可以聯(lián)系咨詢。