2015年1月16日 星期五

動態與靜態運行子程式說明

本篇要來介紹子程式載入與呼叫的方式,分別有分為靜態與動態,說明如下:

靜態裝載(static load):只要程式碼一開啟,即裝載進記憶體(不一定是程式執行的狀態下,編譯程式的狀態也會)
動態裝載(dynamic load):程式執行時,才裝載進記憶體

靜態呼叫(static call):呼叫的SubVI路徑只能於程式編譯時,做設定
動態呼叫(dynamic call):呼叫的SubVI路徑可以於程式執行的時候再設定

1.靜態裝載&靜態呼叫:

Load with callers:caller VI load後也一併load subVI(不用等到程式執行時)



2.動態裝載&靜態呼叫:

2.1 Reload for each call:

caller VI 運行並每次呼叫 SubVI時都會重新load(實際上是如果subVI沒有在記憶體內就會reload。故此選項也不保證運行完後SubVI會保留在記憶體內)



2.2 Load and retain on first call:

caller VI運行時第一次呼叫SubVI時,subVI才會Load,並存在記憶體內。



3.動態裝載&動態呼叫:

3.1 藉由invoke node 呼叫(call by vi method):

此種方法可以建立不影響主程式運行流程的背景程式但有個缺點就是要輸入跟輸出SubVI的資料很麻煩!!!

  

3.2 藉由reference呼叫(call by ref):

無法建立背景程式,主程式中如果透過該方式呼叫SubVI,則一定執行完SubVI的程式後,才可以繼續執行主程式



LabVIEW2011之後的版本,新增了

3.3 Start Asynchronous Call Node:

這個元件有很多功能,之後再另外開一篇文章來介紹。這篇只講其中一個,就是可以有(call by vi method)的優點,可以建立背景程式,並且又可以像(call by ref),有簡單的方式可以輸入跟輸出資料,設定的重點是圖中圈起來的地方必須設定為0x80



沒有留言 :

張貼留言