贊助商連結

整理一些蒐集到的資源,有時候寫程式寫到無聊了,可以看看別的程式增長見聞,如果剛好又是可以玩的程式,那就更是有趣。這裡都將程式的GUI放上來給大家做參考,都可以到原本的連結網站上下載。

如果覺得文章有幫助,請不要吝嗇按下側邊的廣告唷~ 謝謝~

程度: 高級程式,用到LVOOP,請小心服用。

程度:進階程式,Dynamic Event的應用,程式風格簡潔,畫面漂亮,是學習動態註冊非常好的程式 。

程度:簡易,Event搭配While loop,程式碼有點亂。

程度:進階程度程式碼乾淨,整齊,使用到OOP和Notifier,已經接近高級程式,不過程式應用簡單,不複雜,很好理解,是一個很推薦學習的程式。

程度:簡易,程式架構不錯。

程度:中等,程式架構利用一個Event+State Machine完成。

程度: 中級程式,寫得滿不錯的。

程度: 中級程式,利用Event+Producer consumer架構。

如果覺得文章有幫助,請不要吝嗇按下側邊的廣告唷~ 謝謝~

程度: 初級程式,滿酷的遊戲,可能需要搭配Wiki資源才看得懂。

程度: 初級程式

程度: 初級程式,簡潔的程式碼,程式不複雜,介面很漂亮。

 

程度: 高級程式,主要歸類到高級是因為有許多座標位置轉換,需要花點時間搞懂。

 

程度: 中級程式,程式本身並不複雜,介面漂亮,解釋、文件多。

程度: 中等難度,程式應用的並不難,但是數字運算和人機呈現讓程式較為複雜。

程度: 簡易難度,程式簡單,註解多,程式介面很漂亮。

程度: 簡易難度,使用Queue的架構,註解多,如果想學習如何使用建議的Queue架構可以參考這個遊戲。

image

如果覺得文章有幫助,請不要吝嗇按下側邊的廣告唷~ 謝謝~

 

 

文章標籤

安伯伯 發表在 痞客邦 留言(0) 人氣()

最近教導一些初學者學習LabVIEW,整理了一些心得和大家分享;我學習LabVIEW一直都跌跌撞撞的,一條路上鬼打牆、反覆撞了壁好幾次;接了幾個案子、換了幾次工作後,才歸納出怎樣co-working、發現培養團隊good style程式的重要,太有感而發,完全離題了 希望這篇能夠幫助到剛學習LabVIEW的初學者,能夠在學習之路上有個指引,少走些冤枉路。

如果覺得文章有幫助,請不要吝嗇按下側邊的廣告唷~ 謝謝~

程式學習建議:

labVIEW學習開發出一個程式,非常簡單,拉幾條線放幾個Funtion,很快就能夠完成了,但是,你有考慮過你的程式記憶體使用問題嗎?、有考慮過其他人接手(或是下次你再複習)容不容易閱讀?、又或是程式架構擴增的彈性呢?

  1. NI Example :

我滿推薦初學者再遇到不會的function、或有時間的時候將NI Example打開來看看一樣的功能Example怎麼寫出出來的,然後模仿再寫一次,這樣反覆練習才會學習到比較好的good style。NI在文件上面非常的下功夫,教學的資源也是非常的多,每次的LabVIEW升版都能看到新的Example,也會淘汰一些不敷使用的範例程式。

Help-->Find Example

或是對著元件按Control+H ,在內文中找Find Example

 

2.LabVIEW 書籍 :

這裡有兩本書推薦,

一本是比較適合初階,CLD程度閱讀的LabVIEW For Everyone,這本是本英文書,深入淺出的介紹LabVIEW的元件,

另外一本市聖經,The LabVIEW Style Book,這本書我之前有介紹過,可以參考: LabVIEW_推薦參考書_The LabVIEW Style Book這本書分成很多段落在分享和教導讀者如何建立程式架構、設計親切易懂的人機介面養成良好習慣

 

3.論壇:LabVIEW Pro、NI英文論壇

網路上很多LabVIEW資源,從以前的LabVIEW360、LAVA、到現在NI 台灣官方支持的LabVIEW Pro,我都很建議可以去瀏覽,這編列幾個:

LabVIEW Pro : 小編很用心地在經營,有練功區、程式基礎教學、討論區、技術專題..等 (已停)

NI Discussion Forums : 外國高手討論都會激起如元子彈的震撼教育

LabVIEW 360 : 很多不錯的資源,討論人氣也是非常的旺

LAVA : 討論很多VI擴充tools

 

程式寫作建議:

1. 使用英文版的LabVIEW:

LabVIEW許多資源都是用英文的,包括白皮書、使用說明、Help文件、或是spec文件..等等。用英文版的LabVIEW開發熟習元件名稱,這樣再搜尋資源會比較輕鬆;放心,英文介面對寫程式不會有什麼影響的。

2.LabVIEW Good Style :

使用Good Style開發LabVIEW是我一再強調的,好的寫作習慣養成是日後建立大型專案的重要基礎,要檢查自己的程式是否符合Good Style最簡單也是最快的方法就是打開Analyzer。或是參考我的另外一篇:LabVIEW_寫好程式Good Style_Code Review檢測Analyzer、Check List

Tools-->VI Analyzer-->Analyze VI

他分析的面向很廣包括:Block Diagram、Complexity Metrics、Documents、Front Panel、General、VI Metrix

分析完後會給一份報告,評估程式的風險程度,可以看到自己寫出來的程式哪邊和建議的違和,

或是直接查看 LabVIEW Check List ,檢查什麼事重要的項目。

 

5.架構選擇:

我覺得程式架構只要穩、易維護,都是很好的架構;所以我並沒有非常推崇高階的程式專案架構,我認為需要依照專案、團隊來選擇程式架構,不過如果是初學者學習的話,我推薦下面的程式架構:

  1. State Machine :適合小程式,需要輪轉重複的功能
  2. Producer & Consumer: LabVIEWPro介紹中文版
  3. 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...等常常再不同VI或是同一個VI使用多次的原件都將型態存起來,好處是修改時不用一個一個更改,使用Type Define後一次可以修改到全部

可以參考這篇教學:https://knowledge.ni.com/KnowledgeArticleDetails?id=kA00Z0000019MFtSAM

 

8. 程式大小控制在同一個畫面中

如果你的撰寫需要用50吋的螢幕才能完整展開,絕對是需要整理得程式、利用SubVI、好的程式架構、Good Style,增加程式閱讀性。

 

9.不要濫用global、local Variable

變數濫用、Race Condition是LabVIEW開發初期的通病,使用過多會造成程式的不穩定性。試著使用FGV、Shit Register來取代這些跳脫資料流概念的變數;

這篇有詳細的介紹: LabVIEW_什麼是Race Condition(競爭危害)?

 

10 程式註解

千萬不要覺得註解是幫助別人閱讀自己的程式才需要寫,我的經驗是,大部分都是幫助自己 不用一年,程式邏輯沒有文件的輔助是很難快速切入的。

應該是LabVIEW2014後,註解還可以加上箭頭,非常的方便。

 

11.使用Cluster

Cluster的使用可以簡化Block Diagram,最重要的是可以讓相關的資料做一個結合,在後續的使用上比較清楚,也減少connect的接角

請注意,當在bundle 和unbundle cluster 時一定要使用by Name的方法,最好搭配type define做cluster的資料結構定義。

 

12.開始寫做前規劃程式架構、應用方式

開始撰寫前先想過程式需求用什麼架構來開發會更融易、把需求想過一次後,會看到很多一開始想不到的盲點。最好是畫出流程圖,並把這些開發文件都留在專案、程式的資料夾中,幫助日後的閱讀。

 

程式人機(GUI)建議:

1.利用對齊工具來讓面板整齊:有各種對齊、置中對齊、靠左對齊、靠右對齊...

2.利用調整間距工具: 有各種調整間距的方法:平分、固定間距、0間距...

3.調整物件大小: 調整物件大小,也可以多選多個物件將他們調整成大小全部一樣。

4.字體大小\顏色:

整個面板的字體大小、顏色最好控制在3種不同的組合,過多顏色、大小會讓畫面過於凌亂。可以分成 不重要小字(size:14、灰色)、正文(size:16、黑色)、非常強調(size:20、紅色)

 

5.利用Tab簡化控制元件很多的人機,才不會讓使用者一次看到過多的控制元件產生恐懼感(?)

可以參考NI Example-->Programmatically Manipulate a Tab Control.vi 來看使用方法

 

Debug程式建議:

利用Explain Help查看錯誤碼,每個錯誤都要發揮偵探的精神,找出最實質的原因,才不會出現"幽靈bug"的問題。(有時候會發生有時候又不會發生的bug)

專案程式建議:

1.資料夾整理,將程式依照自己的固定方法、分類正理control、SubVI,這樣在移動專案時,不容易有"丟包"的subVI,也容易一目了然專案的程式用途。

2.使用VI Hirechy檢視

從hirechy可以檢查程式的整潔度和關聯圖,在閱讀他人的程式格外重要,可以從這個架構途中,了解整個專案架構和應用層面。

 

如果覺得文章有幫助,請不要吝嗇按下側邊的廣告唷~ 謝謝~

 

學習相關LabVIEW文章:

進階程式學習

基礎程式學習

專題學習_LVOOP

專題學習_動態載入

程式分享相關LabVIEW文章:

基礎程式分享

進階程式分享

股票程式分享

考取LabVIEW證照相關:

CLAD

CLD

CLA準備CLA考題分析

 

文章標籤

安伯伯 發表在 痞客邦 留言(2) 人氣()

在LabVIEW讀檔時,有可能承接的是別的應用產出的報表格式,如果直接讀出不經轉換,可能會是無法讀懂的亂碼。
UTF-8轉換是很常見的解決方法,因為UTF-8是很通用的傳輸格式,詳細的UTF-8轉換方式,這邊就不特別提,大家可以參考維基百科的解釋。

LabVIEW有內建UTF-8轉換,不過藏在Example中,並不再工具欄裡面。

image


程式碼可在這邊下載, 如果覺得文章有幫助,請不要吝嗇按下側邊的廣告唷~ 謝謝~ 

學習相關LabVIEW文章:

進階程式學習

基礎程式學習

專題學習_LVOOP

專題學習_動態載入

程式分享相關LabVIEW文章:

基礎程式分享

進階程式分享

股票程式分享

考取LabVIEW證照相關:

CLAD

CLD

CLA準備CLA考題分析

文章標籤

安伯伯 發表在 痞客邦 留言(0) 人氣()

為了抽籤請客,所以特別寫了一個小程式玩。下方表格為輸入資料,Row 1為所有人員名單,Row2為權重數字。

image

此程式完全屬娛樂用唷~

image

內部程式利用Riffle.vi來做到亂數,在利用人機面板上的紅色Index跳動做出抽籤的緊張感

可以參考LabVIEW_Riffle V.S. Random Number 取隨機 有關於取隨機數的用法。

程式碼可在這邊下載, 如果覺得文章有幫助,請不要吝嗇按下側邊的廣告唷~ 謝謝~

學習相關LabVIEW文章:

進階程式學習

基礎程式學習

專題學習_LVOOP

專題學習_動態載入

Queue應用

Synchornization學習

Array陣列

檔案讀寫

Listbox、Table元件

程式分享相關LabVIEW文章:

基礎程式分享

進階程式分享

股票程式分享

考取LabVIEW證照相關:

CLAD

CLD

CLA準備CLA考題分析

文章標籤

安伯伯 發表在 痞客邦 留言(0) 人氣()

最近發現之前寫的一個小遊戲程式,是小時候常玩的OOXX遊戲。

image

面板上使用Picture Ring做人機介面上的O和X的圖案切換。

image

續上一篇LabVIEW_專題_程式優化_In Place Element Structure,所以將此程式的Replace Array Subset做改寫為In place element。

image

程式碼可在這邊下載, 如果覺得文章有幫助,請不要吝嗇按下側邊的廣告唷~ 謝謝~

學習相關LabVIEW文章:

進階程式學習

基礎程式學習

專題學習_LVOOP

專題學習_動態載入

Queue應用

Synchornization學習

Array陣列

檔案讀寫

Listbox、Table元件

程式分享相關LabVIEW文章:

基礎程式分享

進階程式分享

股票程式分享

考取LabVIEW證照相關:

CLAD

CLD

CLA準備CLA考題分析

文章標籤

安伯伯 發表在 痞客邦 留言(0) 人氣()

之前提到有關優化程式的文章系列 :LabVIEW_使用Parallel增加For Loop效率 ,介紹使用For Loop Parallel 增加程式效率,這篇介紹 In Place Element Structure 來減少記憶體使用。以往使用"取代"來更改數值的方法,會造成許多的數據的複製現象,這在大數據的處理上,會造成電腦很大的負擔,甚至影響到程式運行的效率。In Place Element structure 提供了更有效率的方法解決以往的取代編成方式。

image(此圖來自NI官網)

In place Element structure用法就如同上面展示的,可以處理Array、Bundle、Varient、waveform、Data Value Reference...

我自己比較常用的應用如下:

1.Unbundle 然後做數值變化後再Bundle回去

image

2. In place in: 基本上就是什麼資料型態進來,什麼資料型態出去

  • 將Time Stamp的時間加上固定時間-->有效時間設置

image

  • String 改寫為大寫

image

  • 去除小於0的數值

image

3. Array Replace功能

image

如果覺得文章有幫助,請不要吝嗇按下側邊的廣告唷~ 謝謝~

學習相關LabVIEW文章:

進階程式學習

基礎程式學習

專題學習_LVOOP

專題學習_動態載入

Queue應用

Synchornization學習

Array陣列

檔案讀寫

Listbox、Table元件

程式分享相關LabVIEW文章:

基礎程式分享

進階程式分享

股票程式分享

考取LabVIEW證照相關:

CLAD

CLD

CLA準備CLA考題分析

文章標籤

安伯伯 發表在 痞客邦 留言(0) 人氣()

While Loop和For Loop算是程式語言中的基本要素之一,在其他語言程式中,While Loop比較不會像LabVIEW這樣多功,所以他的功能容易被忽略。

[Shift Register]

Shift Reqister 在LabVIEW中算是很常見的功能,不管基本的價格State Machine或是為了資料傳遞的Funtional Global Varaiable,都會使用到。

image

在While Loop結點上按右鍵-->Replace with shift Register

可以參考State Machine的文章參考使用用法: LabVIEW_State Machine(狀態機)程式架構介紹

[Tunnel Mode]

在輸出的結點上按右鑑可以更改Tunnel Mode的模式,有Default 的Last Value、Indexing、Concatenating,而Conditional是需搭配上面所敘述倒的模式才能使用。

image

Last Value: 輸出最後的值

Indexing: 將輸出的值用Array堆疊,所以結果會是1D Array

Concatening: 將輸出的1D Array做同維度的堆疊,所以結果會是1D Array

Conditional: 設定輸出條件,下面是將偶數值輸出的範例

image

[Stop if ...]

在Stop Terminal上按右鍵,選擇Continue if TRUE,將原本的停止條件改成反向,之前是True為停止條件,更改後變成True為運行條件。

image

[Subdiagram Label]

在While Loop上按右鍵-->Visible Items--> Subdiagram Label

image

可在Loop內層上方顯示註解文字,如上圖。

 

如果覺得文章有幫助,請不要吝嗇按下側邊的廣告唷~ 謝謝~

 

學習相關LabVIEW文章:

進階程式學習

基礎程式學習

專題學習_LVOOP

專題學習_動態載入

程式分享相關LabVIEW文章:

基礎程式分享

進階程式分享

股票程式分享

考取LabVIEW證照相關:

CLAD

CLD

CLA準備CLA考題分析

文章標籤

安伯伯 發表在 痞客邦 留言(0) 人氣()

NI Documents在基礎原件上都寫得非常仔細,建議初學者可以多閱讀,對於程式的功力可以大大提升,以前我很喜歡看LabVIEW的Example,覺得程式寫得很精簡很乾淨;LabVIEW 內建的Queued Message Handler Template 是已經建好、彈性不錯的模板 。這篇不會針對基本的Queue功能做介紹,若想知道基本Queue的使用方法,可以參考之前的文章:

LabVIEW_Queue的教學_用法和範例LabVIEW_Producer And Consumer_Queue簡單應用_多功能佇列應用LabVIEW_多重迴路架構-Producer & Consumer架構教學範例LabVIEW_Queued Enum Handler + Variant 架構介紹範例分享LabVIEW_Queue State Machine with User Event程式架構介紹。必須先清楚明瞭Queue的使用方法,才能懂這篇的敘述唷~

使用Creat Project-->Queued Message Handler 來呼叫模板

image

image

這個模板的架構是使用Message Queued + User Event,以下拆這兩部份加上Error Handle來看這模組:

  1. Message Queued應用解釋

這裡的Queue元件將各功能包含Error處理做了整合成為SubVI,所以看起來會比較複雜,但是若將他對應到Queue,就會比較明瞭整個template結構。

image

由上圖的對應關係圖可以看出在此Template將原本只能一個Queue一個Queue新增的Enqueue功能改成For Loop改寫的Array Enqueue(圖中3號),而Error也獨立使用"Error"的Enqueue Element At Opposite End取代(圖中4號),其他的Queue功能和之前介紹的Producer and Consumer文章大同小異:LabVIEW_Producer And Consumer_Queue簡單應用_多功能佇列應用

  1. User Event應用解釋

這裡的User Event 的應用很簡易,可以想像是一個觸發自訂Event的方法(觸發Producer Loop中的Event Case),由下圖的離開程序可以更知道其動作流程。

image

當Comsumer Loop的Exit Queue啟動後,送出User event到Producer Loop(上圖中的1)觸發Event的User Event Case,User Event內部程式將Loop做關閉(上圖中的2),最後整個User Event的註冊做釋放(上圖中的3)。

  1. Error Handle

如上Queue中提到,在圖中的4,為此Consumer Loop中出現Error時會觸發Comsumer Loop的 "Error" case(下圖中的1、2)最後在觸發Error Message和Exit Queue(下圖中的3)直接離開程式。

image

這裡須注意image這SubVI的下方有接個True,這是對應到使用Enqueue Element At Opposite End.vi所以此Enqueue "Exit"會優先執行唷!

如果覺得文章有幫助,請不要吝嗇按下側邊的廣告唷~ 謝謝~

 

學習相關LabVIEW文章:

進階程式學習

基礎程式學習

專題學習_LVOOP

專題學習_動態載入

程式分享相關LabVIEW文章:

基礎程式分享

進階程式分享

股票程式分享

考取LabVIEW證照相關:

CLAD

CLD

CLA準備CLA考題分析

文章標籤

安伯伯 發表在 痞客邦 留言(0) 人氣()

使用Scan From String、Format into String、Spreadsheet String to Array、Array to Spreadsheet String 等VI都有接角Format String,可以依照輸入的Format格式做客製化更改。這篇介紹如何使用Format String和其範例。

image

因為Format的功能眾多,就以列表展示Format String的類別和應用範例:

image

image

image

以上為圖片檔,因為本來使用文字檔,但是讀者反映看不到文字,所以特地加上圖片檔。

以下文字檔為全表,方便讀者複製內文,內文和上面圖表一模一樣:

Syntax Element

說明

使用方法字串範例

範例

輸入

輸出

s

基本字元,前加數字代表限制的字元數量

%3s

image

image

f

浮點數,前加數字代表限制的字元數量

%2.3f

image

image

d

整數,前加數字代表限制的字元數量

%3d

image

image

$

改變順序(Order)

%2$s %1$s

image

image

+

顯示其數直正負(+-)符號

%+d

image

image

e

工程顯示

%.3e

image

image

^

工程顯示,指數顯示為3倍數

%^.3e

image

image

文字中不包括

%[^,],%s

image

image

^;]%s

image

image

%[^0-9]

image

image

[ ]

數字字元

%[0-9]

image

image

英文字元

(大小寫有區隔)

%[0-9]%[a-z]

image

image

轉換代碼

x,十六進位

%02x

12

0C

o,八進位

%06o

12

000014

b,二進位

%b

12

1100

相對時間t

輸入為秒數

%.2t

image

image

%<Hours:%H Minutes:%M Seconds:%S>t

image

image

絕對時間T

輸入的時間格式必須正確

%<%.3X %x>T

00:00:00.000 AM
1/1/2001

12:00:00.000 AM 01/01/2001

%<%Y.%m.%d>T

00:00:00.000 AM
1/1/2001

2001.01.01

 

如果覺得文章有幫助,請不要吝嗇按下側邊的廣告唷~ 謝謝~

 

學習相關LabVIEW文章:

進階程式學習

基礎程式學習

專題學習_LVOOP

專題學習_動態載入

程式分享相關LabVIEW文章:

基礎程式分享

進階程式分享

股票程式分享

考取LabVIEW證照相關:

CLAD

CLD

CLA準備CLA考題分析

文章標籤

安伯伯 發表在 痞客邦 留言(0) 人氣()

上一篇寫了關於LabVIEW_你可能不知道的In Range and Coerce.vi用法和注意事項,收到學生許多回饋,覺得這一系列很是有趣。所以我在為這系列-你可能不知道的單元增加加入其他元件,大家可以當成每日小趣事來閱讀,畢竟,學習應該要有趣的才有動力。

image

Read form Text File.vi應該算是初學者剛接觸LabVIEW會使用到的功能,也可能是他是很基礎的元件所以很容易忽略它的功能。

首先,寫了一個最簡單的程式讀檔案123.txt,其Block Diagram、Front Panel、記事本檔案,內容如下:

image

可以看出,這段程式碼將整個(entire)檔案內容讀出。但如果只需要讀出前幾個bits,可以將count接角接上I32數字。例如下面範例將count接上I32的數字7,可得結果:

image

但是使用counts讀出bits數,也許讀者會覺得在實務上應用並不需要,所以這裡介紹另外一個"隱藏"功能-Read Lines,在元件上按右鍵-->Read Lines,可以將文字以陣列方式讀出。

image

更改的元件會變成新的圖示image,從元件的圖示就可以看出此VI已經變成陣列式的讀取。

接者改寫原本的程式,輸出的檔案格式也會從原本的String元件改成String Array,

image

此時,若將count的接角,從原本的-1改寫為I32的整數,如下使用2來讀出從頭到第二行的資料

image

如果想要設定初始值讀檔按的位置,需要使用到Set File Position.vi,可以參考之前文章LabVIEW_從TXT檔案最尾處繼續寫入資料(Write File Form End)

image

如果覺得文章有幫助,請不要吝嗇按下側邊的廣告唷~ 謝謝~

 

學習相關LabVIEW文章:

進階程式學習

基礎程式學習

專題學習_LVOOP

專題學習_動態載入

程式分享相關LabVIEW文章:

基礎程式分享

進階程式分享

股票程式分享

考取LabVIEW證照相關:

CLAD

CLD

CLA準備CLA考題分析

 

文章標籤

安伯伯 發表在 痞客邦 留言(0) 人氣()

Close

您尚未登入,將以訪客身份留言。亦可以上方服務帳號登入留言

請輸入暱稱 ( 最多顯示 6 個中文字元 )

請輸入標題 ( 最多顯示 9 個中文字元 )

請輸入內容 ( 最多 140 個中文字元 )

reload

請輸入左方認證碼:

看不懂,換張圖

請輸入驗證碼