2013年10月6日 星期日

在LabVIEW之中連結Arduino (二) by VISA

有了第一篇「在LabVIEW之中連結Arduino」,我就更進一步想了解LabVIEW底下的程式怎麼寫的。一看原來是把Arduino當作VISA來撰寫程式,所以我就上網找看別人如何更直接用LabVIEW裡的VISA功能連結Arduino。參考的影片如下:
https://www.youtube.com/watch?v=giubFyJeZ-8

說明一下他的觀念:
(1) Arduino本來的運作就是出現在裝置管理員裡的 COM 通訊埠,用這通訊埠跟PC做溝通。
(2) 所以可以在語法裡靠著 Serial.begin 系列來達成與PC溝通的工作。
(3) 然後LabVIEW就是把這溝通的內容抓進來,用VISA的子功能來執行。
(4) VISA Read得到的就是字串的內容,再到LabVIEW裡自行轉換。

做法如下:
(1) 連結上Arduino,先接一個按鈕來測試。

(2) 寫入以下程式 Load到Arduino裡面

(3) 查看 Serial Monitor每面的數值,確認開關的訊號有傳到PC。

(4) 打開LabVIEW,撰寫以下程式
    (4-1) Config VISA裝置,這台是從COM4進來的,速度為9600 bit/s
    (4-2) 用Properties Node把VISA的Bytes參數丟進VISA Read裡
    (4-3) 把VISA Read讀出來的字串顯示出來,包括轉成數字。
    (4-4) Close VISA資源

(5) 執行LabVIEW,他會把Serial Monitor看到的東西讀進來。
      以下為查看人機介面的運作的情況。


結論:也就是說在序列通訊的情況下,LabVIEW就抓Arduino裡Serial.print出來的內容。
這個方法沒有上次用現成的icon來得方便,但更為fundamental,可做為觀念的練習。 

11 則留言:

  1. Ming Lin 您好
    您的文章教學我實際做起來是ok的,非常謝謝您的分享
    想請問您:
    如果我的Arduino的程式內容Serial.print出現多個(也就是我不只一個感測器)
    那我的LabVIEW的Chart該怎麼顯示多個呢?

    回覆刪除
    回覆
    1. 您好,我偷懶的方法是依序讀進來,也就是一串數字中,1、3、5是第一組sensor的資料,2、4、6是第二組sensor的資料,進labview之後,再分出來。

      刪除
  2. 部分內文圖片借轉貼. THANKS!

    回覆刪除
  3. 請教若一次4個sensor 要同時進來要如何做? NI 的DAQ 6008 是同時近來還是也是依序讀進來

    回覆刪除
    回覆
    1. 4個訊號,用DAQ 6008應該是同時進來的。

      刪除
  4. 你好 我想請問多組print 像是

    r: 0.1 p:-0.0 y:128.9 v:3.60 time:6.8 s GSP:0.00m/s 這樣

    可以陣列出來出來再分開嗎?

    回覆刪除
    回覆
    1. 如果要抓到labview的話,你可以試試直接在Labview 用string index去把字串裡第N個字接出來。

      刪除
    2. 額 抱歉 我解決了



      Scan From String Function

      她可以判斷出像這樣的function
      r:%.1f, p:%.1f, y:%.1f, v:%.2f, time:%.1f, GSP:%.2f, Lat:%.5f, Lon:%.5f

      然後可以抽出來用

      刪除
  5. 您好 不好意思打擾

    我的實驗也是有複數個資料

    Arduino端程式如下:
    Serial.print("Bus Voltage: "); Serial.print(busvoltage); Serial.println(" V");
    Serial.print("Shunt Voltage: "); Serial.print(shuntvoltage); Serial.println(" mV");
    Serial.print("Load Voltage: "); Serial.print(loadvoltage); Serial.println(" V");
    Serial.print("Current: "); Serial.print(current_mA); Serial.println(" mA");

    像這樣"分行"print出來的字串形式data

    利用VISA讀取至LabVIEW後

    有辦法使用vi讓這4筆資料分別顯示嗎???

    謝謝

    回覆刪除
  6. 這篇文章是讀取資料的部分,想知道有沒有輸出資料到arduino的方法?

    回覆刪除