NI公司供稿 雖然NI LabVIEW軟件長(cháng)期以來(lái)一直幫助工程師和科學(xué)家們快速開(kāi)發(fā)功能測量和控制應用,但不是所有的新用戶(hù)都會(huì )遵循LabVIEW編程的最佳方法。 LabVIEW圖形化編程比較獨特,因為只需看一眼用戶(hù)的應用程序,就馬上可以發(fā)現用戶(hù)是否遵循編碼的最佳方法。有些用戶(hù)會(huì )犯這些錯誤是因為他們沒(méi)有真正理解LabVIEW框圖數據流背后的原理,而有些用戶(hù)則是不知道哪些特性可提高LabVIEW編程質(zhì)量。 本文介紹了經(jīng)驗欠缺的LabVIEW程序員最經(jīng)常犯的一些編程錯誤,同時(shí)也提供了采用正確LabVIEW編程方法的建議。 ![]() 圖 1. LabVIEW新手典型“杰作” 過(guò)度使用平鋪式順序結構 許多LabVIEW新手并不完全了解“數據流”執行背后的概念,而這些概念卻是LabVIEW編程的基礎。其中一個(gè)現象是用戶(hù)往往在程序框圖中過(guò)度使用平鋪式順序結構。用戶(hù)經(jīng)常依賴(lài)平鋪式順序結構來(lái)實(shí)現程序框圖的代碼串行執行,而不是使用數據流和節點(diǎn)之間的連線(xiàn)。 ![]() 圖 2. 用戶(hù)往往過(guò)度依賴(lài)平鋪式順序結構,而沒(méi)有充分理解數據流編程概念。 數據流編程是指只有在所需的數據輸入全部到達時(shí),框圖上的節點(diǎn)(子VI、本原、結構等)才開(kāi)始執行。 這對于使用LabVIEW的程序員來(lái)說(shuō)非常有用,因為獨立的進(jìn)程本身就可以實(shí)現并行運行,而命令式語(yǔ)言卻需要額外的設置才能實(shí)行并行執行。隨著(zhù)計算機CPU的不斷增多,LabVIEW可自動(dòng)分解并行流程,提高代碼性能,而無(wú)需用戶(hù)編寫(xiě)任何額外代碼。而強行使用平鋪式順序結構來(lái)執行程序框圖不僅會(huì )限制并行運行,還會(huì )喪失這一優(yōu)勢。限制程序框圖中不必要的結構有助于提高整體可讀性和保持更簡(jiǎn)潔的框圖。 錯誤連線(xiàn)可以有效地實(shí)現程序框圖上的數據流,而不需要依靠平鋪式順序結構,此外錯誤連線(xiàn)還有助于實(shí)現錯誤處理策略。 何時(shí)應該使用平鋪式順序結構? 通過(guò)平鋪式順序結構來(lái)執行程序框圖有助于代碼性能的基準測試。通過(guò)使用框架內具有時(shí)間計數器的順序結構,您可以決定兩個(gè)時(shí)間計數器之間代碼執行所花費的時(shí)間。這是一般數據流執行所無(wú)法實(shí)現的。 ![]() 圖 3. 平鋪式順序結構和時(shí)間計數器VI有助于代碼的基準測試。 關(guān)于數據流編程的更多信息,請訪(fǎng)問(wèn)在線(xiàn)自學(xué)培訓(ni.com/self-paced-training)LabVIEW核心課程1的“數據流”。購買(mǎi)LabVIEW或具有標準服務(wù)項目(ni.com/ SSP)會(huì )員資格的用戶(hù)可以免費參加在線(xiàn)自學(xué)培訓。 錯誤使用局部變量 LabVIEW編程中另一個(gè)常見(jiàn)的錯誤是過(guò)度使用局部變量。局部變量是共享內存中的一個(gè)區域,用于在計算機程序不同部分之間傳遞數據。局域變量通常用于文本編程語(yǔ)言,具有非常強大的功能,但如果出現競爭條件,就會(huì )產(chǎn)生問(wèn)題。 對于其他編程語(yǔ)言來(lái)說(shuō),通過(guò)變量傳遞數據是必需的,而LabVIEW則提供了一種數據流方法,可將數據從程序的一個(gè)部分移動(dòng)到另一個(gè)部分。LabVIEW固有的并行性機制決定著(zhù)用戶(hù)不能過(guò)度使用變量,因為同一時(shí)間內通常會(huì )有多個(gè)不同的位置的程序訪(fǎng)問(wèn)共享內存。如果過(guò)度使用變量,則會(huì )出現某個(gè)讀/寫(xiě)操作贏(yíng)了“競爭”,而其他操作則輸了“競爭”,丟失數據的操作會(huì )被忽視,因此在LabVIEW中過(guò)度使用變量可能會(huì )最終導致數據丟失。 您可以通過(guò)多種方法安全地將數據從LabVIEW程序的一個(gè)部分傳遞到另一個(gè)部分,包括連線(xiàn)、隊列、事件、通知、功能全局變量等等。每個(gè)機制都是針對特定情況設計的,但都具有消除競爭條件的功能。 關(guān)于在LabVIEW程序內正確移動(dòng)數據的更多信息,請訪(fǎng)問(wèn)在線(xiàn)自學(xué)培訓(ni.com/self-paced-training)LabVIEW核心課程1的“局域變量”和LabVIEW核心課程2的“通知、隊列和事件”。 忽略代碼模塊化 通常情況下,新LabVIEW用戶(hù)創(chuàng )建的是“即寫(xiě)即忘”應用程序去完成簡(jiǎn)單的任務(wù),而沒(méi)有考慮到以后是否會(huì )用到這些代碼。隨著(zhù)編程工作越來(lái)越多,他們會(huì )發(fā)現自己一遍又一遍地重寫(xiě)同一段代碼。而如果在編程同時(shí)創(chuàng )建一個(gè)可復用于其他應用的模塊化子VI,就可以節省大量的開(kāi)發(fā)時(shí)間。 如果您知道代碼的特定部分將會(huì )重用于同一應用程序,或感覺(jué)該部分代碼可能會(huì )用于未來(lái)的應用程序,那么您應該花一點(diǎn)時(shí)間將該部分代碼變成一個(gè)子VI。如果要使某部分代碼成為一個(gè)子VI,您需要做的主要是添加一個(gè)文檔、使用“接線(xiàn)端”、禁用某些VI屬性。創(chuàng )建子VI的最簡(jiǎn)單方法之一是高亮標記程序框圖中的某部分代碼,然后從菜單欄中選擇“編輯>>創(chuàng )建子VI”。這樣這部分代碼就會(huì )放到一個(gè)單獨的VI,然后使用“接線(xiàn)端”。您仍然需要為圖標添加說(shuō)明,并將文檔記述添加到程序框圖和VI屬性中,然后取消某些VI設置,但“編輯>>創(chuàng )建子VI”可幫助您很好地了解代碼的模塊化功能。 ![]() 圖 4. 采用正確的LabVIEW代碼模塊化操作可以幫助您節省大量開(kāi)發(fā)時(shí)間。 代碼模塊化時(shí)必須取消的一項設置是“允許調試”。 您可在“VI屬性(文件>>VI屬性)”下的“執行”目錄中找到此選項。代碼完全正常運行無(wú)需再使用高亮執行等調試功能時(shí),在執行設置中取消“允許調試”,然后再次運行VI。這樣做的好處是由于在編譯過(guò)程中進(jìn)行了優(yōu)化,應用程序的運行速度可能加快,而且由于啟動(dòng)調試的代碼被關(guān)閉,VI所占的磁盤(pán)物理空間也相應減少了。 關(guān)于代碼模塊化的更多信息,請訪(fǎng)問(wèn)在線(xiàn)自學(xué)培訓LabVIEW核心課程1的“理解模塊化”。 創(chuàng )建龐大繁瑣的程序框圖 許多新LabVIEW用戶(hù)都會(huì )把程序框圖編寫(xiě)得非常繁瑣龐大。對于一些復雜的應用程序,我們難免需要編寫(xiě)較大的程序框圖,但龐大的程序框圖從一定程度上也可以表明該程序缺乏編程架構。如果沒(méi)有一個(gè)基本的架構,要長(cháng)期維護該程序是非常困難的,而且如果以后要添加新功能也會(huì )非常困難。正如只有一個(gè)好的框架才能建造一棟結構合理的房子,一個(gè)好的編程架構可以為您構建應用程序提供了一個(gè)安全可靠的框架。 幾乎所有的程序員都會(huì )發(fā)現常見(jiàn)的框架中,軟件架構是非常有用的。實(shí)際上LabVIEW中的許多架構,如生產(chǎn)者/消費者和狀態(tài)機,與其他編程語(yǔ)言非常相似。 了解LabVIEW的架構可以縮短開(kāi)發(fā)時(shí)間和提高應用程序的可擴展性。 LabVIEW 2012包含了模板和項目范例,使理解架構變得更加容易。模板解釋了不同的架構及應用。項目范例則是基于模板的更大型應用程序,演示了如何使用模板來(lái)應對實(shí)際的挑戰。您可以將硬件加入到范例項目中,或者需要時(shí)可將項目范例作為一個(gè)整體應用程序,同時(shí)項目范例具有開(kāi)放性且文檔記述也很完整,所以您可針對具體應用進(jìn)行自定義。 ![]() 圖 5. LabVIEW 2012中的模板和項目范例使得理解軟件架構變得非常輕松。 關(guān)于LabVIEW架構的更多信息,請訪(fǎng)問(wèn)在線(xiàn)自學(xué)培訓(ni.com/self-paced-training) for LabVIEW核心課程2的“設計模式”。 不重視文檔記錄 優(yōu)秀的代碼文檔可以有效地幫助他人理解自己寫(xiě)的程序。遺憾的是,許多程序員通常在開(kāi)發(fā)周期末期功能開(kāi)發(fā)結束之后才開(kāi)始進(jìn)行文檔撰寫(xiě)。這使得用于對代碼進(jìn)行文檔記錄的時(shí)間變得非常少。正確的做法應該是在開(kāi)發(fā)過(guò)程中就需抽出時(shí)間來(lái)開(kāi)始進(jìn)行文檔記錄。文檔對于編程人員自身也非常有用,尤其是當他們過(guò)段時(shí)間回來(lái)看代碼卻不記得當初他們?yōu)槭裁催x擇某些代碼時(shí)。程序員經(jīng)常會(huì )一邊喝著(zhù)咖啡,一邊熬夜編程,這往往會(huì )出現“短暫失憶”。而文檔則可以幫助程序員進(jìn)行回憶。 一般情況下,相對于基于文本的程序,LabVIEW的圖形化特性使得程序閱讀更為容易,但是有效的文檔記錄可以減少“解碼”程序所需的時(shí)間。添加文檔注釋到程序框圖的最簡(jiǎn)單方式是使用自由標簽。您可以在框圖的空白位置雙擊左鍵,并輸入文字,添加注釋。然后,使用箭頭標記來(lái)指向自由標簽引用的特定代碼。如果需要添加圖片,則可將它們復制到剪貼板,然后粘貼到程序框圖中。物理系統圖片和數學(xué)公式均有助于清晰說(shuō)明程序框圖內的代碼上下文。 ![]() 圖 6.架構正確且文檔記錄充分的代碼不僅可幫助其他人理解您的代碼,也可幫助您更好地理解自己的代碼。 對代碼進(jìn)行文檔記錄不僅只是針對復用程序庫,而應該是針對每一個(gè)程序。當一個(gè)人需要為其他人講解時(shí),他對該主題將會(huì )有更深刻的理解。文檔記錄從本質(zhì)上看就是在迫使程序員進(jìn)行講解,以幫助他們更好地了解自己的代碼。 關(guān)于文檔記述的更多信息,請訪(fǎng)問(wèn)在線(xiàn)自學(xué)培訓LabVIEW核心課程1的“對代碼進(jìn)行文檔記錄”。 LabVIEW旨在幫助工程師和科學(xué)家更成功地應對全球最嚴峻的挑戰。LabVIEW社區擁有龐大的工程師和科學(xué)家會(huì )員,為其提供了一個(gè)有效的平臺來(lái)與他人分享知識。如果您愿意分享自己所犯過(guò)的新手錯誤,請發(fā)布到bit.ly/lvrookiemistakes。 |
謝謝大大分享. |
看來(lái)自己錯誤不少~ |
可以參考 |
nice |
1187334989,好東西 |