Labview筆記

不愿透露姓名的小村村發表於2024-07-28

1. 背景

Labview這個軟體,從大學到現在,裝了解除安裝,解除安裝了又裝。來來回回不下10次了,那本大學時的教材Labview 2010基礎教程,一直沒丟,但也一直沒看過。最近又裝回來了,準備簡單的系統性倒騰一下,當是個瞭解。

  • 一些雜項:
    • 快捷鍵:
      • Ctrl+N:建立一個Labview專案
      • Ctrl+E:切換前後皮膚
      • Ctrl+R:執行快捷鍵
      • Ctrl+S:儲存
      • Ctrl+B:去掉所有斷線
    • 如何打包vi程式給沒有labview的地方使用。參考Labveiw如何生成應用程式

2. 順序結構

  • 如圖,前皮膚和後皮膚是VI程式的兩個部分,如果儲存了工程檔案再次開啟只有前皮膚的話,可以按Ctrl+E切換到後皮膚。
  • 平鋪順序結構就是從左向右依次執行的結構,右鍵平鋪式順序結構,在後面新增幀,即可增加一幀結構
  • 如下圖的工具欄,有一些比較高效的工具:
    • 單箭頭:執行一個週期,前後皮膚效果一樣
    • 迴圈箭頭:連續執行,前後皮膚效果一樣
    • 紅色六邊形塊:停止執行
    • ||:暫停
    • 燈泡:檢視資料流向,這個點選可以檢視資料流,以及資料中斷,用來分析程式。vi的程式資料流動和擺放位置沒有關係。
    • 後面還有在平鋪結構內的單步執行跨過平鋪結構的單步執行等待
    • 後面是一些程式對齊快捷鍵
    • 最後帶個小掃把:的圖示是整理所選部分程式碼
    • 下圖右邊的圖示雙擊可以更換工程圖示,左邊的圖示右鍵可以更換模式,暫時我也沒理解這個模式有什麼具體作用。
  • 如圖右鍵,可以把平鋪式順序結構變成層疊式順序結構
  • 替換過後,後皮膚看起來會簡潔一點,相當於於把原來平鋪的幀打包成了一個陣列,一次顯示一個陣列元素,可以切換顯示幀設定當前幀,不影響資料流向:
  • 插入一個布林量以及TrueFalse常量方法:

3. 迴圈結構

  • 巢狀在順序結構中的FOR迴圈和巢狀在FOR迴圈中的順序結構,如圖:
    • 在上圖中,順序結構有4層,依次執行,每一層都加了一個定時器(單獨的),右鍵定時器建立常量,即可快速為定時器設定常量,ms為單位:
    • 幾乎每層都用到的字串和布林是區域性變數,他是第三層和第四層的控制元件的中間變數,如圖可建立一個控制元件的區域性變數:
    • For迴圈中,i表示當前迴圈次數;N表示總迴圈次數(從0開始);For迴圈裡面巢狀的順序結構裡面含有定時器,那麼表示一次for迴圈的實際需要時間包括定時器的執行完成時間:
    • 隨機數生成器: 輸入的兩個常量是生成器設定的上下限,雙擊隨機數生成器,可以看到它的預設設定值,但是此處用不到;U64表示無符號64位整型:
    • labview的資料型別如下:
SGL 單精度32位
DBL 雙精度64位
EXT 擴充套件精度128位
FXP 定點資料,一種二進位制資料

I8  單位元組整型       -128~127
I16 雙位元組整型       -32768~32767
I32 長整型           -2147483648~2147483647
I64 64位整型         -1e19~1e19

U8  無符號單位元組整型  0~255
U16 無符號雙位元組整型  0~65535
U32 無符號長整型      0~4294967293
U64 無符號64位整型    0~2e19

CSG  單精度複數    32位單精的實數和虛陣列成
CDB  雙精度複數    64位IEEE單精的實數和虛陣列成
CXT  擴充套件精度複數  128位    

在Labview中浮點數表示為橙色
在Labview中整數表示為藍色
在Labview中複數跟浮點數一樣表示為橙色
在Labview中布林值表示為綠色,8位二進位制表示。8位全為零表示FALSE,非零的值表示為TRUE
  • While迴圈,此處建立了一個波形圖表用來顯示隨機數波形圖:
    • 迴圈中的定時器的作用:增加單次迴圈的時候,以免重新整理過快。
    • 停止按鈕用False常量固定住了,目的是讓它一直迴圈下去;
    • 如果想手動停止,可以換成一個停止按鈕。(如果想要暫停而不是停止迴圈,情況就要複雜一點,可以自己做程式來實現,這裡就不試了)
    • 對於For迴圈而言,如果想要條件停止,可以右鍵For迴圈,勾選條件接線端

條件結構

  • 條件結構就類似與Switch,邏輯是除了羅列出來的分支,其他分支一律按預設處理
  • 對著條件結構框右鍵,可以選擇增加一條分支或者刪除一條分支
  • 條件分支的左邊輸入如果是bool量,分支可以是真或者假,真假條件框內寫各自的邏輯;左邊輸入如果是數值,可以填具體的資料,也可以填範圍(“10..20”表示10到20的區間,“21..”表示>=21的區間);左邊輸入如果是字串,可以填字串的值。
  • 案例1,比大小和比區間範圍:
  • 案例2,在while迴圈裡面持續判斷按鈕的狀態並反饋相應的字串:

事件觸發結構

  • 平時用過C# winform或者HMI的事件處理的,對這個觸發方式應該不會陌生。
  • 下圖寫的一個按鈕觸發事件,開啟按鈕值改變的時候判斷,如果燈的值是1,就變成0;反之如果燈的值是0,就變成1。
  • 事件觸發結構最好放到while迴圈裡面,不然只會被觸發一次程式就結束了。
  • 步驟:
    • s1:拉出一個事件結構
    • s2:拉出一個while迴圈,把事件結構丟迴圈裡,在新增兩按鈕,一個指示燈,都放迴圈裡;迴圈的條件接線端常置FALSE或者設定為其他觸發條件,不然要報錯。
    • s3:右鍵事件結構,找到新增事件分支,選擇事件分支對應的控制元件,事件選擇值改變
    • s4: 現在可以在對應的觸發事件裡面寫邏輯了;這裡的邏輯是每次值改變時取反燈的狀態。我習慣引用按鈕或者燈的區域性變數到事件中去做控制或者改變值;區域性變數剛拖出來的時候預設是寫入,如圖右鍵可以轉換為讀取,注意三角箭頭的位置變化:
    • s5:按需設定超時報警事件,小沙漏這裡用來設定超時時間
    • 注意:此處while迴圈一次的過程是事件被觸發一次,如果去抓取i的變化,就可以知道這個資料流過程。

禁用結構

  • 簡單理解,就是註釋;可以註釋掉禁用結構框內的所有程式碼;
  • 禁用結構的設定值可以是禁用或者啟用,方便在除錯的時候選擇禁用和啟用一段程式碼

陣列和簇

  • 陣列,就是平時程式裡使用的陣列,有一維陣列也有多維陣列,注意下標
  • 簇,就是結構體

和西門子PLC通訊

  • 可以考慮走TCP/IP協議,暫時沒找到labview有支援S7協議。