色哟哟视频在线观看-色哟哟视频在线-色哟哟欧美15最新在线-色哟哟免费在线观看-国产l精品国产亚洲区在线观看-国产l精品国产亚洲区久久

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

不可錯過的LabVIEW使用技巧

5RJg_mcuworld ? 來源:fqj ? 2019-05-27 14:55 ? 次閱讀

發現了程序的問題再回頭去調試,往往要花費大量時間在在查找程序錯誤上。要提高開發效率,最好是在編寫代碼時就避免一些常見的低級錯誤,這樣可以節約大量的調試時間。因此,我們整理了一些許多 LabVIEW 程序員都曾遇到過的問題,希望能夠幫助大家避開一些坑。

1、數值溢出

不可錯過的LabVIEW使用技巧

圖1:數值溢出錯誤

圖1 中的 VI 只做了一個簡單乘法 300*300 ,答案肯定是 90000,但程序中乘法節點給出的結果卻是 24464。乘法節點是不會錯的,錯誤是由于程序中使用的數據類型是 I16。I16 能表示的最大數目只有32767,所以在乘法計算中出現了溢出。

避免此類錯誤的方法是,在程序中使用短數據類型時,一定要確認程序中的數據絕不會超出該類型可以表示的范圍。

2、For循環的隧道

數據傳入傳出循環結構可以通過移位寄存器(Shift Register)和隧道(Tunnel)兩種方式。隧道又有兩種類型:帶索引的和不帶索引的。

移位寄存器一般用在需要局部變量的情況下,循環運行一次的輸出數據要作為下次運行的輸入數據使用;循環外的數組數據通過帶索引的隧道在循環體內就可以直接得到數組元素;除此之外,簡單地在循環內外傳遞數據,使用一般的隧道就可以了。

值得一提的是,如果一個數據傳入循環體,又傳出來,那么就應該使用移位寄存器或帶索引的隧道來傳遞這個數據,盡量不要使用不帶索引的隧道。因為 For 循環在運行時,循環次數有可能為0。在循環次數為0時,大多數情況,用戶還是希望傳出循環的數據就是傳入值,但使用不帶索引隧道時,輸入值有時會被丟失的。如果使用移位寄存器,即使循環次數為0,也不會丟失傳入的數據。因為移位寄存器在循環上的兩個接線柱指向的實際是同一塊內存(參考:LabVIEW 程序的內存優化),而輸入輸出兩個隧道指向的是不同的內存,數據不一定相同。

不可錯過的LabVIEW使用技巧

圖2:For 循環上的隧道

圖2中的程序, vi reference 傳入,再傳出循環均使用了隧道。如果循環次數為0(Controls數組為空),vi reference 再傳出循環時,信息就丟失了。這不但有可能造成后續程序的錯誤,而且由于 vi reference 的信息丟失,再無法關閉打開的 vi,造成了程序泄漏。

Error 數據線(黃綠色的粗線)在傳入傳出數組時,一定要使用移位寄存器。原因還不僅是為了防止在循環次數為0時,錯誤信息丟失。通常一個節點的 Error Out 有錯誤輸出,意味著后續的程序都不應該執行。在錯誤的情況下繼續執行程序代碼,風險非常大,可能會引起程序,甚至系統崩潰。只有使用移位寄存器,某次循環產生的錯誤才會被傳遞到后續的循環中,從而及時阻止后續循環中的代碼被運行。

3、循環次數

與其它語言相比,LabVIEW 的 For 循環有一大特點,在某些情況下它并不要求一定要輸入循環次數,而可以根據輸入數組的大小自動決定循環次數。通過帶索引的隧道,可以把數組分解成元素傳遞到循環體內,此時不需另行設置循環次數N,循環的次數就是數組的長度。每次循環,帶索引的隧道便給出一個元素。

循環體上可以有兩個或更多的輸入數組使用帶索引的隧道,此種情況下容易引起錯誤。這時,循環的次數等于幾個數組中長度最短的那個數組的長度。如果另外又設置了循環次數N,那么循環次數就是N與輸入數組長度這兩者的最小值。調試時,如果發現一個本該運行多次的循環沒有運行,那么很可能就是因為它的一個輸入數組是空的。

While 循環同樣也可以使用帶索引的隧道,但是不建議大家這么用——如果需要用到帶索引的隧道,還是使用 For 循環更為適宜。因為 while 循環的循環次數不由數組個數決定,而是由停止條件決定的。如使用了帶索引的隧道,你還需要考慮當數組大于、小于循環次數時,程序應該如何處理,所以還是在循環體內作索引比較方便。如果希望循環次數與數組大小保持一致,那自然是用 For 循環的程序更加清晰易懂了。

4、移位寄存器的初始化

不可錯過的LabVIEW使用技巧

圖3:沒有初始化的移位寄存器

看圖3中這個程序,因為它在 while 循環上使用了帶索引的隧道,所以可讀性不那么好。array out 的運行結果是什么,還要考慮一陣子才能給出答案。實際上這個程序,即使輸入不變,每運行一次,array out 的結果都是不一樣的,它的長度一直在增加。這個問題就出在沒有給程序中的移位寄存器一個初始值。

沒有初始化的移位寄存器,總是保存上次運行結束時的數據。這個特點在某些情況下可以被程序員利用,比如用它當作全局變量,隨時把數據存入或取出(一個例子是《如何使用 VI 的重入屬性》中的圖4)。但多數情況下移位寄存器還是被用作為循環內部的局部變量的,這時就一定要對它初始化,以防止潛在的錯誤。

5、Cluster

不可錯過的LabVIEW使用技巧

圖4:Cluster 傳遞數據出錯

圖4的程序中有個奇怪的錯誤,明明應該是 weight 加 1 怎么運行完后的結果變成了high 加 1 了呢?原因是 Cluster 中的元素有個順序,這個順序可以和界面上看到的順序不一致。分別鼠標右擊程序中的兩個 Cluster,選擇“Reorder Controls in Cluster”,就可以看到每個元素在 cluster 中的編號。info out 中的 high 實際上編號是 2,第三個元素。

為了避免 cluster 中用可能出現的錯誤,以及讓 cluster 應用起來更方便,使用 cluster 最好遵循以下原則:

1. 凡是用到 cluster 的地方,就為它造一個類型定義(《在程序中使用類型定義》),在程序所有要用到這個 cluster 的地方,都使用類型定義的實例。這樣一是可以保證所有的 cluster 都完全一致,避免圖4 這種錯誤;二是一旦需要變動 cluster 中的元素,只需在類型定義中更新就可以了,不必挨個 VI 修改。

2. 凡是在需要解開(unbundle)或打包(bundle)的地方統統使用 unbundle by name 和 bundle by name 來實現。使用帶名字的 bundle,unbundle 可以直觀的顯示出 bundle 種元素的名字,這樣不會因為順序的不同而導致錯誤的連線。

6、并行運行

LabVIEW 是自動多線程的編程語言,這一點在方便用戶的同時,也會帶來一些麻煩。比如最常見的情況,多線程會引起數據或資源的競爭錯誤(race condition)。

不可錯過的LabVIEW使用技巧

圖5:兩個并行運行的子 VI

圖5是一個簡單的兩個子 VI 并行運行的例子,在這個例子中就隱藏著一個潛在的問題。并行執行的兩部分程序,先后次序是不定的。有可能關閉程序中的引用數據(綠色的線上的數據)的節點在子 VI B 結束前運行。而子 VI B 是要用到這個參考數據的,這是子 VI B 就會因為它所需要的數據失效而產生錯誤

除此之外,我們還給大家整理了一些LabVIEW編程過程中常用的技巧,希望可以幫助大家提高編程效率。

1、樣式(NXG、新式、系統、經典)不同的控件不僅僅是外觀上有所差別,其中有些屬性并不支持所有樣式的控件

2、數值控件可以通過顯示格式加入單位。

3、每當不知道應該輸入什么類型時,右鍵創建常量進行參考。

4、為了即時拋出異常,最常用的模式(模版)就是帶錯誤處理的子VI框架。這個模板能夠保證在有錯誤時可以快速通過本VI,進入下一個節點。沒有錯誤發生時,執行本VI的程序代碼。

5、浮點數的比較是很嚴肅的事情,要注意數據精度間的關系。因為一個微小的差別也會導致不相等。比如同為Pi常數,一個是雙精度數據(上),另一個是單精度數據(下),比較結果是不相等。

6、布爾轉數字是非常有用的,尤其和創建數組函數結合,可以實現類似于3-8譯碼器的判斷部分非常簡便。

7、在許多場合下,錯誤簇就是實現定序數據流的最佳方法。

8、整數只能在選擇器標簽中顯示數字,并且它無法為每個值添加分支,只能一個一個的填寫。下拉列表因為使用的也是整數,所以特點與整數相同。組合框控件也無法為每個值添加分支,只能一個一個的填寫。列表和選項卡可以通過右鍵直接為每個值添加分支。

9、可以利用一次while循環來規范圖形化代碼的分布,避免代碼的隨意放置(亂丟亂放)。

10、在一個主線程內,while結構必須放在事件結構外,就會一直在等。如果不想因此造成死機等待,有以下方案:

a、設置超時事件,比如設置50,那么在50ms內如果沒有觸發事件結構,那么將執行超時事件中的程序;

b、(推薦)一個while就是一個線程,如果需要事件結構介入,那么可以把其他服務程序放到另外一個while循環中,事件結構單獨一個循環,實現多線程效果(并行)。

11、定時循環不是do---While循環,在當次循環時間內的數據更新都有用。

12、for循環中通過錯誤簇連接到條件端子,可以及時停止循環,下圖錯誤的傳遞也可換為移位寄存器。

13、用對話框作為事件的響應并不是一個好的選擇,因為對話框需要操作者及時處理,如果沒有及時處理,事件一直處于等待狀態,這樣其它事件源發出的響應就會產生堆積。所以在事件處理程序中應該避免使用對話框。事件處理程序應該盡可能的簡潔迅速,避免其它事件被堆積。

14、當需要彈出簡單對話框時,可以直接調用應用程序封裝的函數。

15、涉及網絡編程問題,先保證把windows自帶的防火墻關了,然后能ping到。本地可先用localhost測試。

16、附上一些快捷鍵技巧:

(1)Ctrl + E 切換前后面板

(2)Ctrl + B 在程序框圖面板,把錯誤的斷線刪除掉

(3)Ctrl + R 運行程序

(4)Ctrl + S 保存程序

(5)Shift + 鼠標放在框邊上,可以實現拖動

(6)Ctrl + 鼠標放在框邊上,可以實現復制

(7)Ctrtl + Q 退出程序

(8)Ctrl+T 分屏

(9)選中圖標,Ctrl + "+"號鍵 :實現圖標放大,或者選中,在控制面板選擇“17pt 應用程序字體”,再選擇大小

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • LabVIEW
    +關注

    關注

    1981

    文章

    3664

    瀏覽量

    328165
  • 編碼
    +關注

    關注

    6

    文章

    962

    瀏覽量

    55085

原文標題:干貨!你不能錯過的LabVIEW使用技巧,看完bug少一半

文章出處:【微信號:mcuworld,微信公眾號:嵌入式資訊精選】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦

    IIC-China今日開幕 你不可錯過的幾站!

    IIC之旅,您不可錯過的幾站:各路專家親臨研討會現場、國際知名廠商同臺亮相、 展覽會觀眾
    發表于 02-24 08:27 ?639次閱讀

    不可錯過的Air780E之WebSocket應用示范!小白篇

    咋們今天說的Air780E之WebSocket應用示范針對小白絕對是不可錯過的示例。
    的頭像 發表于 11-03 20:16 ?1019次閱讀
    <b class='flag-5'>不可</b><b class='flag-5'>錯過</b>的Air780E之WebSocket應用示范!小白篇

    不可錯過的三類GPIO硬件設計指南!

    今天我們學習三類GPIO硬件設計,這三類絕對是不可錯過的,本文將把三類設計的重要性展示出來:
    的頭像 發表于 11-04 09:45 ?1164次閱讀
    <b class='flag-5'>不可</b><b class='flag-5'>錯過</b>的三類GPIO硬件設計指南!

    CAN總線詳細教程,精心編制,不可錯過

    CAN總線詳細教程,精心編制,不可錯過
    發表于 08-16 16:09

    為什么安裝labview2012時,路徑不可

    RT:為什么安裝labview2012時,路徑不可選,會出現下面的情況啊,我都整好幾天了,始終沒把這軟件安裝好,好著急啊,求大神指點!!!
    發表于 05-18 18:01

    不能錯過

    好東西,不能錯過,我還是上老師那拷的呢
    發表于 03-06 20:38

    NI LabVIEW開發技巧研討會不能錯過的5大理由

    。這次研討會旨在幫助工程師更好的了解LabVIEW。 本次研討會您不能錯過的5大理由:1、 為您講解最新發布的2014 LabVIEW有哪些新增特性來幫助您加速開發2、LabVIEW2
    發表于 08-06 15:07

    寫好LabVIEW程序不可不知的利器——匯總篇

    1、寫好LabVIEW程序不可不知的利器(一):模塊化功能 VI2、寫好LabVIEW程序不可不知的利器(二):State Machine3、寫好L
    發表于 11-20 15:38

    不可錯過的干貨!教您如何做LLC諧振半橋電路分析與計算的方法?

    電路分析與計算的方法,不可錯過的干貨!LLC眾籌 - 60小時視頻教程精通半橋LLC開關電源設計(最后7天)!
    發表于 01-11 13:46

    LabVIEW簡介【LabVIEW

    LabVIEW簡介【LabVIEW】,喜歡的朋友可以下載來學習。
    發表于 01-12 11:21 ?75次下載

    CAN總線詳細教程全面詳細深入制_不可錯過

    CAN總線詳細教程全面詳細深入制_不可錯過
    發表于 09-04 08:45 ?71次下載

    工程師不可錯過的藍牙透傳模塊選型8大要素pdf下載

    工程師不可錯過的藍牙透傳模塊選型8大要素。藍牙作為一種近距離無線通信技術,是無線數據傳輸最成熟的解決方案,目前藍牙透傳模塊已經得到廣泛應用,如藍牙彩燈控制方案、藍牙醫療設備、藍牙智能門鎖等等。由于藍牙技術已十分成熟且價格低廉,在物聯網新興領域已得到了充分重視,不過藍牙透傳
    發表于 01-11 17:21 ?20次下載

    2019第一屆機器人+智慧養老產業論壇重磅來襲!不可錯過

    寒冬來襲,智慧養老將是下一風口!不可錯過
    的頭像 發表于 12-22 09:18 ?5146次閱讀

    有哪些耳機是學生黨可使用的?這幾款降噪耳機不可錯過

    有哪些耳機是學生黨可使用的?這幾款降噪耳機不可錯過 耳機已經成為大家生活中不可或缺的工具,不少朋友通勤時間使用耳機,下班回家打游戲也在使用,甚至不少戶外愛好者也喜歡佩戴耳機。想要身臨其境的沉浸在自己
    的頭像 發表于 09-23 09:54 ?2057次閱讀

    labview是什么軟件?labview是什么語言?labview能實現什么功能?

    labview是什么軟件?labview是什么語言?labview能實現什么功能? LabVIEW是一種圖形化的編程語言,通常被用于數據采集、分析和控制系統。
    的頭像 發表于 08-31 17:23 ?6539次閱讀
    主站蜘蛛池模板: 99久久免费精品 | 免费人妻AV无码专区五月 | 中文字幕免费在线视频 | 97人视频国产在线观看 | 国精产品一区二区三区四区糖心 | 中文字幕人妻无码系列第三区 | 1a级毛片免费观看 | 一个人的免费高清影院 | 最近的2019中文字幕国语 | 偷拍亚洲制服另类无码专区 | 中文字幕人成人乱码亚洲AV | 亚洲精品国产一区二区贰佰信息网 | 成年无码av片 | 亚洲三级视频在线观看 | 手机看片国产日韩欧美 | 亚洲AV无码A片在线观看蜜桃 | 国产精品久久人妻无码网站一区L | 天上人间影院久久国产 | 国产三级电影网 | 国产精品亚洲精品爽爽 | 国产午夜精品久久久久九九 | 成人小视频在线免费观看 | 亚洲国产女人aaa毛片在线 | 色偷偷在线视频 | 欧美激情一区二区三区AA片 | 伦理片在线线手机版韩国免费6 | 高清日本片免费观看 | 国产国产成年在线视频区 | 成人国产AV精品久久久久 | 嫩草国产精品99国产精品 | 亚洲 欧美 国产 综合 在线 | 国产在线成人一区二区三区 | 国产免费午夜 | 2019欧洲hd | 国产人妻精品午夜福利免费不卡 | 狠狠干狠狠色 | 秋霞电影午夜伦午夜 | 天堂色 | AV色蜜桃一区二区三区 | 小草高清视频免费直播 | 国产精品成人久久久久A伋 国产精品成人观看视频免费 |