干貨!LabVIEW編程中,一定要記住這些實(shí)用技巧,打怪升級(jí)就靠它了!
以下是一位工程師朋友分享的在使用LabVIEW進(jìn)行編程的過程中,遇到的一些問題以及從中得到的心得體會(huì),在這里分享給大家,希望對(duì)大家學(xué)習(xí)LabVIEW有所幫助。
常見錯(cuò)誤及解決方法
Q1:一開始拿到題目,一無所知,對(duì)于系統(tǒng)的每一個(gè)部分,我們都不了解,不知如何下手。
這是我們組面對(duì)的最首要問題,往往這個(gè)問題是大多數(shù)人在學(xué)習(xí)一項(xiàng)新知識(shí)時(shí)必有的困惑,而解決問題的方法卻是我們必要掌握的,要經(jīng)歷鍛煉的。通常我會(huì)瀏覽官方論壇,查看NI工程師及其他人的技術(shù)文檔,最后發(fā)現(xiàn)LabVIEW中有很多經(jīng)典的范例,非常適合在有課題需要的時(shí)候?qū)W習(xí)掌握,最后在此基礎(chǔ)上進(jìn)行修改。
一方面,范例中都一定是可以運(yùn)行的正確的程序,還會(huì)在關(guān)鍵部分有注釋;另一方面,官方往往提供的都是基礎(chǔ)的范例,比較適合初學(xué)者掌握學(xué)習(xí),進(jìn)行深度挖掘和改造。在我做地圖調(diào)用的時(shí)候,我在官方的網(wǎng)站上down到了一個(gè)外國(guó)人調(diào)用google地圖的example,受益匪淺。做工程的人,很多時(shí)候并不需要從最原始的東西開始研究,要懂得站在巨人的肩膀上眺望地平面。
Q2:字符串轉(zhuǎn)換數(shù)值時(shí),無法轉(zhuǎn)換浮點(diǎn)小數(shù)。
需要用“分?jǐn)?shù)/指數(shù)至字符串轉(zhuǎn)換” 函數(shù),該控件可從偏移量位置開始,使字符串中的下列字符:0-9、加號(hào)、減號(hào)、e、E、小數(shù)點(diǎn)(通常是句點(diǎn))解析為工程、科學(xué)或分?jǐn)?shù)格式的浮點(diǎn)數(shù),通過數(shù)字返回。
Q3:串口傳輸數(shù)據(jù)并用波形圖顯示時(shí),波形圖無法實(shí)時(shí)顯示連續(xù)的波形,每個(gè)數(shù)據(jù)都會(huì)掉到0再上升。
需要用到反饋節(jié)點(diǎn),連接“數(shù)組插入”的n維數(shù)組腳和輸出數(shù)組腳。
Q4:我們?cè)谧龃笞鳂I(yè)的時(shí)候,因?yàn)榭丶^多,功能較復(fù)雜,當(dāng)一個(gè)vi文件中出現(xiàn)多個(gè)while循環(huán)時(shí),會(huì)出現(xiàn)有的部分程序始終不運(yùn)行的情況。
只有當(dāng)其中一個(gè)while循環(huán)中止后才會(huì)進(jìn)入另一個(gè)while循環(huán)巡行。如果子vi中的循環(huán)不能退出,子vi節(jié)點(diǎn)就一直在運(yùn)行。對(duì)于LabVIEW的數(shù)據(jù)流編程機(jī)制來講,一個(gè)節(jié)點(diǎn)沒有執(zhí)行完,它的所有輸出端口就不會(huì)有有效數(shù)據(jù)輸出。解決方法:一是把子vi中的循環(huán)提出到主vi里來。二是使用全局變量,并在主vi中使用并行循環(huán)來控制子vi的結(jié)束。
Labview編程的主要特點(diǎn)是數(shù)據(jù)流形式,這便于VI大量的按照并行方式運(yùn)行,優(yōu)化了程序的計(jì)算性能。即使是這樣,當(dāng)出現(xiàn)循環(huán)結(jié)構(gòu)時(shí),也會(huì)出現(xiàn)部分程序不運(yùn)行的情況。因?yàn)檫\(yùn)行條件是輸入是循環(huán)結(jié)構(gòu)中的某部分局部變量。
Q5:當(dāng)while循環(huán)函數(shù)內(nèi)部含有for循環(huán)函數(shù)時(shí),無法操作停止控件時(shí)while循環(huán)停止
如果停止控件放在for循環(huán)函數(shù)外while函數(shù)內(nèi),當(dāng)for循環(huán)沒有結(jié)束時(shí),點(diǎn)擊停止是無法使事件停止運(yùn)行的。因?yàn)榇藭r(shí)for循環(huán)沒有結(jié)束,即使改變了停止控件的當(dāng)前狀態(tài),它仍然不起作用。只用將停止控件放入for循環(huán)中,從for循環(huán)引出來連接到停止while循環(huán)的循環(huán)條件,才能有效停止。
Q6:使用串口時(shí)發(fā)生如下錯(cuò)誤Unable to open session to “ASRL1::INSTR”
其他軟件占用了串口,需要關(guān)閉其他應(yīng)用程序。
Q7:每次使用時(shí)CPU占用過高,電腦卡著不能動(dòng)。
循環(huán)里沒有加延時(shí)。
Q8:調(diào)試GPS部分,創(chuàng)建數(shù)組為輸入控件時(shí),需要將數(shù)組賦特定的初值,發(fā)現(xiàn)每次關(guān)閉再打開vi文件時(shí),數(shù)組中的內(nèi)容會(huì)清空。
數(shù)組為輸入控件時(shí),每次打開vi文件都會(huì)初始化各個(gè)控件,在初始狀態(tài)下,輸入控件的值都會(huì)賦0,只有將要賦的定值設(shè)置為默認(rèn)值,才會(huì)保留輸入控件中想保留的數(shù)據(jù),防止關(guān)閉軟件造成的賦定值消失,不方便調(diào)試。
通過文件或注冊(cè)表方式先把控件當(dāng)前值存下來,再下次打開時(shí)再從文件或注冊(cè)表把值讀回來。使用VI Server技術(shù)在保存控件當(dāng)前值為默認(rèn)值,但這種方法只能處于編輯狀態(tài)使用,在生成exe文件后不能使用。
Q9:當(dāng)程序框圖中程序很多,有的部分可以并行運(yùn)行,有的部分可以順序運(yùn)行,如果將這些都放在一個(gè)while循環(huán)會(huì)出現(xiàn)無關(guān)的延遲。
建議使用順序結(jié)構(gòu),按順序結(jié)構(gòu)來規(guī)定某些程序的執(zhí)行順序,這樣不存在競(jìng)爭(zhēng)。而把初始部分程序放在while循環(huán)外,特別是當(dāng)初始程序中要調(diào)用比較復(fù)雜的引用時(shí),比如3D模型的調(diào)用和初始化。
學(xué)習(xí)心得
隧道、移位寄存器、循環(huán)隧道、自動(dòng)索引隧道的關(guān)系
隧道——局部變量,隧道相當(dāng)于每次進(jìn)來循環(huán)體之后把循環(huán)體外的值賦予循環(huán)體內(nèi)的局部變量,所以不管循環(huán)體內(nèi)執(zhí)行幾次,其結(jié)果也等同于只執(zhí)行了一次。
移位寄存器——靜態(tài)局部變量,每一次在循環(huán)體內(nèi)執(zhí)行,都會(huì)把右邊移位寄存器出口的值用作左邊入口的值,所以移位寄存器的值能一直保留。移位寄存器的特殊之處在于在循環(huán)結(jié)構(gòu)兩端的接線端是強(qiáng)制使用同一內(nèi)存的。
因此,上一次迭代執(zhí)行產(chǎn)生的某一值,傳給移位寄存器右側(cè)的接線端,如果下一次迭代運(yùn)行需要用到這個(gè)數(shù)據(jù),從移位寄存器左側(cè)的接線端引出就可以了。
循環(huán)隧道——while默認(rèn)下的隧道,數(shù)據(jù)傳入傳出的值不發(fā)生變化,是循環(huán)后的最后一直數(shù)
自動(dòng)索引隧道——for循環(huán)默認(rèn)下的隧道,隧道在循環(huán)內(nèi)一側(cè)會(huì)自動(dòng)取出數(shù)組的元素,依順序每次循環(huán)取出一個(gè)元素。用索引隧道傳出數(shù)據(jù),可以自動(dòng)把循環(huán)內(nèi)的數(shù)據(jù)組織成數(shù)組,最后輸出的是一個(gè)數(shù)組的形式。
有的控件的參數(shù)可以為多個(gè),比如0、1、2,且代表不同的意思。如何使用常量定義,使得它們有名字。
鼠標(biāo)移動(dòng)到相應(yīng)引腳,點(diǎn)擊創(chuàng)建常量,即可使用該方法下所有的類型,更加方便快捷。
還可以通過制作自定義類型的方法。
在使用簇時(shí),總是出現(xiàn)數(shù)據(jù)連接類型錯(cuò)誤。
這是因?yàn)榇刂许樞蚩赡芘c連接后端的順序不一致,導(dǎo)致數(shù)據(jù)連接錯(cuò)誤。
為了避免簇中用可能出現(xiàn)的錯(cuò)誤,以及讓簇應(yīng)用起來更方便,使用簇最好遵循以下原則:
凡是用到簇的地方,就為它造一個(gè)類型自定義,在程序所有要用到這個(gè)簇的地方,都使用類型定義的實(shí)例。這樣一是可以保證所有的簇都完全一致,避免圖4 這種錯(cuò)誤;二是一旦需要變動(dòng)簇中的元素,只需在類型定義中更新就可以了,不必挨個(gè) VI 修改。
凡是在需要解綁或捆綁的地方統(tǒng)統(tǒng)使用按名字解綁和按名字捆綁來實(shí)現(xiàn)。使用帶名字的解綁和捆綁,可以直觀的顯示出捆綁中元素的名字,這樣不會(huì)因?yàn)轫樞虻牟煌鴮?dǎo)致錯(cuò)誤的連線。
為了降低LabVIEW機(jī)器視覺的學(xué)習(xí)門檻,讓更多人以較低的時(shí)間、經(jīng)濟(jì)成本學(xué)好LabVIEW機(jī)器視覺,發(fā)燒友學(xué)院聯(lián)合金牌講師汪成龍,推出了一個(gè)“老師+助教全程服務(wù)式教學(xué)”的線上訓(xùn)練營(yíng)課程,每天僅需花30-60分鐘跟班學(xué)習(xí),課程導(dǎo)師+班級(jí)助教+班主任跟班教學(xué),8周帶你徹底學(xué)會(huì)LabVIEW機(jī)器視覺設(shè)計(jì)。
《八周LabVIEW視覺項(xiàng)目編程實(shí)戰(zhàn)特訓(xùn)營(yíng)》課程5月20號(hào)上線以來,第一期的30個(gè)名額已經(jīng)全部報(bào)滿,但是目前還是有很多學(xué)員在咨詢?;谶@種情況,我們決定追加5個(gè)名額,截至發(fā)稿前,名額僅剩4個(gè),有興趣的小伙伴,可以直接掃描下面二維碼報(bào)名哦~
接下來給大家介紹一下訓(xùn)練營(yíng)的基本情況~
1、這是個(gè)什么樣的課程?
本訓(xùn)練營(yíng)課程是目前全網(wǎng)唯一全面系統(tǒng)講解LabVIEW視覺外測(cè)的案例視頻教程。每個(gè)教程都是經(jīng)過大量調(diào)查,完全從工程師就業(yè)角度量身定制,特訓(xùn)班為30人小班制,每天僅需花30-60分鐘跟班學(xué)習(xí),課程導(dǎo)師+班級(jí)助教+班主任跟班教學(xué),8周帶你徹底學(xué)會(huì)LabVIEW機(jī)器視覺設(shè)計(jì)。
2、特訓(xùn)班課程包含了哪些知識(shí)點(diǎn)?
1、?掌握視覺LabVIEW助手的主要功能算子、仿真圖像算法、進(jìn)行圖像算法設(shè)計(jì);
2、?根據(jù)項(xiàng)目需求快速確定算法流程、掌握攝像頭采圖、IO卡觸發(fā)采集、串口、網(wǎng)口協(xié)議;
3、?掌握LabVIEW編寫視覺軟件框架、視覺檢測(cè)中的定位、編寫實(shí)際程序流程;?
4、?掌握LabVIEW視覺實(shí)現(xiàn)模板匹配建立坐標(biāo)系、進(jìn)行ROI放射變換、檢測(cè)有無算子、IO的相關(guān)知識(shí)點(diǎn);
5、?鞏固LabVIEW視覺助手函數(shù)使用方法、檢測(cè)缺陷的方法、尺寸檢測(cè)算法、外觀檢測(cè)的編程方法;
3、參與訓(xùn)練營(yíng)有哪些服務(wù)?
● 特訓(xùn)營(yíng)是一種有效的在線學(xué)習(xí)形式:
● 小班制、定制化學(xué)習(xí)計(jì)劃、班主任+導(dǎo)師親自帶班。
● 每日學(xué)習(xí)交流、每日在線答疑、每周作業(yè)批改。
● 每周2-3次晚間語音直播(30-60min/場(chǎng))。
● 8場(chǎng)在線直播(60-90min/場(chǎng))。
● 8場(chǎng)以上遠(yuǎn)程教學(xué)(30-60min/場(chǎng))。
● 1對(duì)1就業(yè)指導(dǎo)服務(wù)、結(jié)業(yè)效果考核、頒發(fā)結(jié)業(yè)證書。
4、學(xué)生或新手能不能學(xué)會(huì)?
老師團(tuán)隊(duì)從事LabVIEW視覺軟件開發(fā)和在線教育十多年,每個(gè)新的教程都是經(jīng)過大量調(diào)查完全根據(jù)初學(xué)者的心聲量身定制,始終站在初學(xué)者的角度去考慮去打磨視頻教程與開發(fā)課程,絕對(duì)通俗易懂,只要你肯下功夫?qū)W,加上專業(yè)的技術(shù)指導(dǎo),跟著龍哥視覺培訓(xùn)團(tuán)隊(duì)的思維你一定能夠掌握LabVIEW視覺軟件設(shè)計(jì)思路,設(shè)計(jì)出完全屬于你自己的自動(dòng)化軟件。
5、老手有沒有必要加入訓(xùn)練營(yíng)?
龍哥是資深的LabVIEW視覺工程師,可謂是多年的技術(shù)員經(jīng)驗(yàn)疊加在多年的教育經(jīng)驗(yàn)之上,在視頻教程中注入了作者多年的研發(fā)與教學(xué)經(jīng)驗(yàn),總結(jié)了很多LabVIEW視覺方面的套路和架構(gòu),一定也能讓老手耳目一新,讓你在一定程度上繞開軟件開發(fā)中的各種坑,掃除你的技術(shù)盲點(diǎn)。
想了解的詳細(xì)的學(xué)習(xí)計(jì)劃可以加班主任木木:18123773580的微信(備注:訓(xùn)練營(yíng))或者進(jìn)LabVIEW群咨詢哦~
(班主任微信:18123773580)????
? ? (LabVIEW群)??
更多訓(xùn)練營(yíng)詳情點(diǎn)擊閱讀原文了解