2025年12月1日 星期一

LabVIEW也可以控制Arduino?──LINX套件,含範例解說

你知道LabVIEW也可以控制Arduino嗎?

總之我是覺得很好用。殺人鯨作為一個文字程式苦手,即使用LabVIEW可以控制一個完整系統,看Python之類的文字Code還是覺得很痛苦,然後我遇到了LINX。




雖然自己用VISA套件應該也是可以控制Arduino,但LINX幫你把很多很麻煩的部分都包起來了。像是這張圖,是一個Arduino LED閃爍的程式,標準的Initialize-Main-Close格式。

Initialize-Main-Close格式

我喜歡用打電話來比喻,Initialize就像你一開始要撥打電話,建立連線,還有做一些初始設定;Main就是你再跟對方來來回回講話,你不用每次講一句話就重新撥電話掛電話;Close就是掛掉電話,要正確掛掉電話,下次才能再撥進來。

上面這張圖的程式,就是左邊的 Open.vi 在做 Initialize 的工作;中間的Digital Write輸入兩個變數:一個 Numeric (Digital Output Channel) 是控制Arduino腳位,一個 Boolean (LED Value) 是控制 Digital 的 High 跟 Low,放在 While Loop 裡面所以可以重複閃爍,While Loop 的 Loop Condition 連接 Error 和 Stop Button 的 or 運算結果,也就是說,出 Error 或是按下 Stop Button 都會停止迴圈。右邊的 Close 則是在讓 Arduino 和 LabVIEW正確斷開連接。

LINX安裝教學

請搜尋你電腦中的VIPM,安裝LabVIEW時應該會同時安裝。第一次進入好像會叫你登入,但應該可以選擇不登入 (年代久遠有點忘記)。
右上角搜尋LINX,就會看到Digilent LINX,點兩下。
因為我已經安裝了,所以這邊是寫Uninstall,還沒安裝的話這邊是寫Install,然後就普通的下一步下一步下一步就可以安裝完成了。


安裝完之後按這邊的Show Examples,就有超多範例,這邊我們打開LINX - Blink (Simple).vi,也就是我文章最前面那張圖的範例。


連接上你的Arduino,打開你的LabVIEW,選擇Tools>MakerHub>LINX>LINX firmware Wizard

接上你的Arduino,選擇正確的Device Type,像是我這邊是Arduino Uno。


選擇正確的COM Port,如果這邊找不到的話,可能要看看你有沒有正確接上Arduin板子。


Firmware Vewsion選擇LINX - Serial/USB,Upload Type選擇Pre-Built Firmware。

然後就等他,此外,這個畫面的進度條感覺是用Control寫的,所以可以拉動 (為啥我會發現呢?)


到這個畫面就完成了,可以回到我們剛剛的Example。


如果你跟我一樣是用Arduino Uno的話,Pin 13他有連結到板子上的一個LED,所以不用額外接LED,也可以按這個LED Control來控制那個燈的明滅。


關於LINX的快速介紹就到這邊,推薦大家玩看看喔!下一篇要寫什麼呢?




2025年11月25日 星期二

寫LabVIEW請左右開弓──論快捷鍵在LabVIEW中的重要性

在寫 LabVIEW 的時候,你的右手會很忙,非常忙。

有寫過 LabVIEW 的應該都知道,寫 LabVIEW 的時候右手有多忙,畢竟他整個就是一個拖拉式的程式。這時候,你越了解快捷鍵,你寫 LabVIEW 的整體體驗就越好。下面列出一些常見的快捷鍵給大家參考。

LabVIEW 快捷鍵 功能描述 適用位置
Ctrl + T 分割視窗 (左右) Front Panel 在左,Block Diagram 在右
Ctrl + E 切換面板 顯示 Front Panel 或 Block Diagram
Space 切換常用工具 (點選/修改/接線等) Front Panel / Block Diagram
Tab 切換工具 (依次切換工具) Front Panel / Block Diagram
Shift + 右鍵 單次工具箱 (暫時選取單一工具) Front Panel / Block Diagram
Ctrl + 左鍵拖曳 複製選擇物件 Front Panel / Block Diagram
Ctrl + 左鍵空拖 拉開空間 Block Diagram (於空白處操作)
Ctrl + Alt + 左鍵空拖 縮減空間 Block Diagram (於空白處操作)
Ctrl + B 刪除 VI 斷線 移除所有斷掉的線
Ctrl + H 開啟 Help VI 接腳及使用說明
Ctrl + R 執行程式 Front Panel / Block Diagram
Ctrl + . 強制停止 執行中的程式
Ctrl + L 顯示 Error 訊息 Front Panel / Block Diagram

此外,LabVIEW 有一個很好用的功能叫做 Quick Drop,可以讓你用鍵盤完成更多工作,例如我想要叫出 Build Array,我就可以 Quick Drop → 輸入 ba (或全稱 build array) → 按下 Enter,我的 Build Array 就被叫出來了,不需要按右鍵在那邊找半天,尤其是一些莫名藏在很奇怪地方的 vi。 但是 Quick Drop 預設的快捷鍵 Ctrl + Space 跟中文輸入法中的語言切換衝突,所以我們通常會去Tools>Options>Menu Shortcuts,把他改成自己習慣的快捷鍵。

記得按完 set 之後要按 OK。



Quick Drop 還有一些特殊的快捷鍵,如下表。這些都要先按 Quick Drop 之後再按才算喔!

LabVIEW 快捷鍵 功能描述 適用位置
Ctrl + W 自動接線 選擇「VI」 → 快捷鍵
Ctrl + R 移除並重新接線 選擇「VI」 → 快捷鍵
Ctrl + P 替換 VI 選擇「VI」 → 快捷鍵
Ctrl + I 插入選定 VI 選擇「線段」 → 快捷鍵 → 輸入 VI → Enter
Ctrl + O 回到畫面原始位置 Block Diagram

這邊還有可以列印的版本,殺人鯨剛開始學的時候,是直接列印貼在電腦旁邊啦!

今天的文章就到這邊,接下來要寫什麼呢?

2025年11月24日 星期一

絕對不要按那個按鈕!──論正確停止程式的重要性

請你不要按 Run Continuously 按鈕 

在 LabVIEW 裡面,有個按鈕非常的吸引人,尤其是初學者,就是這個:Run Continuously。


這個按鈕一按下去,程式就可以連續執行,對於初學程式的人來說,根本就是魔法(?),但!你可以用迴圈啊啊啊啊啊!這個按下去之後,你就只能用旁邊的那個紅色 Abort Execution 按鈕來停止程式,如果你去查字典的話,你會發現 Abort 除了中止之外,還有墮胎的意思,他帶有一種「強制關閉」的感覺,就像你電腦不按關機,直接拔電源一樣。

為什麼正確的停止程式很重要?

你平常用一個軟體,例如 Google Chrome 的時候,你只要按右上角的 X,軟體就會關掉。但其實在你按下 X 之後,軟體在背後做了很多的操作,例如釋放佔用的記憶體空間,這樣你電腦才不會越用越卡。而我假設你用LabVIEW的主要目的是儀器控制,儀器控制沒有正確關閉,可不是只有電腦變卡這麼簡單。
儀器控制程式有三個重要部分:Initialize (初始化)、Main (總之就你的主要量測或移動之類的都在這) 還有 Close (關閉)。
Initialize 處理一些儀器連線以及初始化的部分,Main 是主要的量測和控制,而 Close 則扮演了讓儀器停止運作並正確斷開連線的功能。
儀器連線有點像講電話,我這裡用室內電話比喻,已經不知道室內電話是什麼的小年輕請去自己查Google。講電話要先拿起來,撥號,對方接通之後開始講話,來來回回講一陣子之後,要掛電話,電話如果沒有掛回去的話,其他電話是撥不進來的!
電話還好,頂多就是撥不通,儀器......有些時候你直接切斷,沒有跟馬達說停止的話,他會繼續很開心的前進,你想趕快連回去跟他說停止,他說:「不好意思,連線佔用中。」因為剛剛沒有正確斷開連線,他誤以為他還在連線當中。這時候......有時候重新開機可以解決......有時候啦!

設計正確的停止過程

所以設計正確的停止過程就非常重要,一般初學者很容易單純有放一個 Stop Button,但儀器出Error就卡在迴圈裡面,最後還是沒辦法跑到正確的停止流程。選擇正確的程式框架,並且做正確的 Error Handling 是非常重要的!

今天的殺人鯨LabVIEW勸世就到這邊,感謝大家的收看!下一期要寫什麼呢?

2025年11月19日 星期三

在LabVIEW中,怎麼修改Numeric的變數型態?

 在 LabVIEW 中,你會在 Block Diagram 看到兩種不同顏色的 Numeric,橘色和藍色,其中橘色代表非整數,藍色代表整數。



從 Front Panel 預設拉出來的 Numeric Control 是 DBL 型態,中文叫做「雙精度浮點數」,原文是 Double,在電腦中佔據 64 bits 的空間。是用指數形式表達一個數值。

IEEE 754 Double Floating Point Format.svg
Codekaizen - 自己的作品, CC BY-SA 4.0, 連結

至於要怎麼修改呢?例如我想改成整數 I32 怎麼做呢?在上面按右鍵>Representation,就有各式變數型態的選擇。



其中第一列是有帶小數的數字,第二列是整數 (正整數、負整數與 0),第三列是正整數 (與 0),第四列則是複數 (a+bi),如果需要做複數計算就需要他。

整數的預設格式是 I32,佔據 32 bits 的空間,範圍是 -2,147,483,648 到 2,147,483,647,要根據你的實驗需求來調整。

講個我之前犯過的錯誤好了,我在做 n! 的計算,我想說既然都是整數,那當然是選 I 32 或 U 32,結果在算小數目的時候都可以,算大數目的時候就出事了,因為超過了整數的範圍發生溢位,而我那次算 n! 其實是為了算 Σ 函數,在我要求的精度下,反而 DBL 更適合我的需求,因為他是用指數型態表達數值,所以可以用夠多的有效位數表達我需要的 n! 值。

這裡是殺人鯨,一個修行中的 LabVIEW 工程師,下一篇要寫什麼呢?

2025年11月17日 星期一

什麼是Sample Rate?我應該怎麼挑?

什麼是 Sample Rate?

Sample Rate(取樣率),說穿了就是你每秒鐘「抓」幾次訊號的快照。單位是 Hz 或 S/s(Samples per second)。

我喜歡用這個比喻:你知道那種老式的翻頁動畫書嗎?每一頁畫一個動作,快速翻過去就變成動畫了。如果你每秒只畫 2 張圖,你看到的會是一格一格的跳動;但如果你每秒畫 30 張,動作就會流暢起來。

Sample Rate 就是這個「每秒畫幾張圖」的概念。差別在於,在 LabVIEW 的世界裡,如果你「畫」得不夠快,你不只是看到跳動的畫面——你可能會看到完全錯誤的訊號。 更重要的是:「畫」太快也不是好事。就像你用 120fps 拍一隻蝸牛爬行,除了浪費儲存空間,你也得不到更多有用的資訊。

https://ysolife.com/recording-sampling-rate/


Nyquist 定理:那個不能違背的鐵則

好,來講點理論。別擔心,我會講人話。 有個叫 Nyquist 的傢伙(其實是兩個人,但這不重要)發現了一個定理:

你的取樣率必須至少是訊號最高頻率的兩倍,不然你會看到鬼。

用公式寫就是: fs ≥ 2 × fmax 這個「兩倍」超級重要。如果你沒做到,就會發生一個叫 Aliasing(混疊) 的現象。什麼是 Aliasing?簡單說,就是高頻的訊號會「假裝」成低頻訊號,騙過你的眼睛和儀器。 就像你用手機拍攝風扇或車輪,有時候你會看到它們好像在倒轉! 這就是為什麼 Nyquist 定理這麼重要——它是測量系統的底線。

取樣率不是越高越好!

這裡要特別強調一個常見的誤解:取樣率絕對不是越高越好。 很多人(包括以前的我)會覺得:既然有 aliasing 的風險,那我就設定超級高的取樣率,總沒錯吧? 錯!而且大錯特錯。

為什麼過高的取樣率是問題?

1. 資料量爆炸

假設你用 100 kHz 取樣 8 個通道,每個 sample 是 2 bytes(16-bit),那每秒產生的資料量是:

100000 × 8 × 2 = 1.6 MB/s

一小時就是 5.76 GB。如果是長時間監測?你的硬碟受得了嗎?

2. 處理負擔

高取樣率意味著 CPU 和記憶體要處理更多資料。在 LabVIEW 裡,如果你的處理速度跟不上取樣速度,就會發生 buffer overflow——資料來不及處理,緩衝區滿了,系統就當機了。

3. 雜訊頻寬變寬

這是最容易被忽略的問題。 取樣率越高,你接收到的頻寬就越寬,意思是:你會把更多高頻雜訊也取樣進來。如果你的訊號本身只在低頻,但你用了超高的取樣率,反而會讓訊號雜訊比(SNR)變差。 就像你要聽人講話,結果把麥克風的靈敏度開到最大,連旁邊的冷氣聲、電腦風扇聲都錄進來了。

4. 浪費硬體資源

高階的 DAQ 卡通常很貴,而且高取樣率會吃掉更多功耗、產生更多熱。如果你不需要那麼高的取樣率,這些都是不必要的成本。

「夠用就好」才是工程師的智慧

在 LabVIEW 的世界裡,我們要追求的不是「最高規格」,而是「最適合的規格」。

  • 量溫度?1-10 Hz 通常就夠了
  • 量音訊?44.1 kHz 是業界標準
  • 量振動?看頻率範圍,可能 5-10 kHz
  • 量高速電子訊號?那可能需要 MS/s

關鍵是:了解你的訊號特性,選擇剛好符合需求的取樣率

實務上怎麼選 Sample Rate?

好,理論講完了,來點實際的操作指南。

第一步:搞清楚你的訊號

這是最重要、也最容易被忽略的一步。 你要問自己:

  • 我要量的東西,變化有多快?
  • 最高頻率大概在哪?
  • 有沒有可能有高頻雜訊?

如果你不知道(通常一開始都不知道),沒關係,先用稍高一點的取樣率做探索性測量。在 LabVIEW 裡面拉個 FFT VI,看看頻譜長什麼樣子。

第二步:計算理論最小值,加上安全係數

根據 Nyquist 定理,計算 fs_min = 2 × fmax

但實務上,我們會加上安全係數:

  • 保守的案子: 2.5-5 倍
  • 一般案子: 5-10 倍
  • 需要精確重建波形: 10 倍以上

為什麼不直接用 2 倍?因為:

  • 真實世界的訊號不會只有單一頻率
  • 濾波器不是理想的,需要過渡帶
  • 留一點餘裕總是比較安全

但記住:這不代表越高越好! 找到「剛好夠用」的平衡點才是重點。

第三步:檢查硬體限制

你在 LabVIEW 裡面設定數字很容易,但硬體做不做得到? 要確認:

  • DAQ 卡的最大取樣率:別超過規格
  • 多通道分配:Multiplexed 取樣的話,總取樣率會被通道數瓜分
  • 記憶體容量:能撐多久?
  • 硬碟寫入速度:長時間記錄會不會當機?

第四步:在 LabVIEW 裡配置和測試

DAQmx Timing VI 裡:

- Rate: 你計算出來的取樣率
- Samples per Channel: 決定 buffer 大小,太小會 overflow
- Sample Mode: Continuous 或 Finite?

第五步:Anti-Aliasing Filter

如果你的訊號裡可能有超過 Nyquist 頻率的成分(通常都會有),你需要在 DAQ 前面加一個 低通濾波器。 有些 NI 的 DAQ 卡有內建 anti-aliasing filter(例如某些 X Series),但不是全部都有。要確認:

  • 有沒有內建濾波器?
  • 截止頻率在哪?
  • 適不適合你的應用?

常見的坑

坑一:忽略整個系統的頻寬

你在 LabVIEW 設定 1 MS/s,不代表你真的能量到 500 kHz 的訊號。 整個測量鏈的頻寬取決於最慢的那個環節:

  • 感測器的頻率響應
  • 訊號調理電路
  • DAQ 卡的類比頻寬
  • 甚至連接線都可能有影響

坑二:多通道的誤解

這個超級重要! 如果你的 DAQ 卡是 Multiplexed Sampling(大部分入門卡都是),1 MS/s 除以 8 個通道,每個通道實際上只有 125 kS/s。 如果你需要真正的同步高速取樣,要買 Simultaneous Sampling 的 DAQ 卡(通常貴很多)。

坑三:為了「保險」而過度取樣

這是最常見的錯誤。 「反正取樣率高一點比較保險吧?」——不,這會帶來前面提到的所有問題:資料量、處理負擔、雜訊。 工程師的智慧是「剛剛好」,不是「越多越好」

結語:Sample Rate 是工程判斷,不是參數填空

我總是跟我學生說,在 LabVIEW 的世界裡,寫程式是最簡單的部分。DAQmx 怎麼用?查說明書。程式架構怎麼搭?照範例改。這些都有標準答案。但 Sample Rate 不一樣。 它看起來只是一個數字,但背後需要的是:

  • 對訊號處理理論的理解
  • 對硬體限制的掌握
  • 對系統效能的權衡
  • 對應用需求的判斷

太低,你會看到錯誤的訊號;太高,你的系統會垮掉。找到那個「剛剛好」的點,才是真正的挑戰。

所以下次當你在 LabVIEW 的 DAQmx Timing VI 填入那個數字的時候,記得:這不只是一個參數,這是你對整個測量系統的理解。

2025年11月13日 星期四

寫LabVIEW時,你應該注意的6個習慣

常說人需要 21 天來養成一個習慣,而你如果點開了這篇文章,大概你接下來要接觸 LabVIEW 的時間不只 21 天。這時候,好的習慣帶你上天堂,壞的習慣……嗯嗯。

好的LabVIEW寫作者有哪些習慣

事先規畫程式流程

直接開始寫程式看似省時,但其實會造成後續開發很大困擾,而如果一開始規畫好的話,後續只要無腦看著規畫圖拉 VI 就好了。此時,流程圖是一個很好用的工具,未來我會另文介紹流程圖。



你的程式必須是真實可靠的

例如你說一個隨機變數,出現 1 的機率是 1/6,那他就要是 1/6,而在電腦的 2 進位下,他的實際機率是多少,你要知道,或是說,你要有能力在需要的時候算出來。



請把線整理乾淨

請不要線很亂,甚至疊起來,你當下覺得自己看得懂,你下個月就看不懂了,請把線整理乾淨。



請不要使用循環執行和強制停止

請確保你的程式能夠好好的使用程式內的 Stop 鍵停止運作,不要習慣按上方工具列的 Abort Button,因為規畫一個良好的關閉流程,在儀器控制中是很重要的。



介面要好看、好操作

要有好看、現代化、容易操作的介面,最好要做好防呆處理。要用 LabVIEW 做到現代化介面並不容易,畢竟他就是個……古老的語言,但是如果 Front Panel 使用 Fuse Design System,還是比用預設的 Modern 好看很多。

或是可以去 VIPM 下載 DMC GUI Suite,我覺得滿好看的。



左右開弓

當你用 LabVIEW 的時候,你的滑鼠會很忙,此時推薦使用快捷鍵左右開弓。其中 QuickDrop 的預設快捷鍵在中文系統中,會跟語言切換衝突,所以建議改成 Ctrl+`比較好操作。

習慣這種東西,看的時候都覺得很簡單,實際上執行起來很容易忽略呢!推薦大家檢視一下自己的程式習慣喔!


2025年11月11日 星期二

LabVIEW儀器控制,你應該做的7個步驟

我這個人有個壞毛病,當我看到一個 n 步驟教學的時候,我總是會想跳過某些我覺得不必要的部分,有時候確實可以省下一些時間,但接下來這個步驟,連我都不會跳過,因為跳過的代價太大了。下面這 7 個步驟,我每次嘗試跳過,結果都是乖乖回頭按照步驟測試,推薦你也每次都一步一步照著做。

1. 確定電源有開,線有接上。

  • 不要懷疑,這一步即使是老手,都偶爾會犯錯。

2. 確定該灌的 Driver 都有灌好。

  • Driver 分兩個部分,儀器端和 LabVIEW 端。
  • 儀器端的部分,一般來說說明書或官網會寫需要哪些 Driver。
  • LabVIEW 端則看是用什麼通訊介面,例如使用 GPIB 則需要安裝 NI-488.2。

3. 開啟裝置管理員,確認儀器是否正確連上。

4. 若有原廠程式,先使用原廠程式測試。

  • 如果原廠程式也不能跑,打電話去原廠叫他負責。

5. 開啟 NI MAX,確認 LabVIEW 是否有讀到儀器。

  • 檢查 NI-VISA 是否正確安裝。
  • 檢查跟傳輸介面相應的 NI driver 是否正確安裝。
  • 如果原廠說他們的儀器可以連 LabVIEW,問原廠。

6. 若有 LabVIEW Example,先使用 Example 測試。

  • 注意,不要直接改 Example,否則未來的你會恨自己。請另存新檔之後再做修改。

7. 若無,請自行寫出簡單的測試程式。

  • 簡單測試程式包含 Initialize - 簡單指令傳輸 - Close。



根據我的經驗,很多儀器在經過上述步驟之後,都可以好好的運作。當然,有規則必有例外,那就是...... 另一場修煉了。

我是殺人鯨,一個喜歡寫文章的 LabVIEW 工程師,敬請期待更多關於 LabVIEW 的內容吧!