LabVIEW中的數(shù)據(jù)流編程基礎(chǔ)
LabVIEW按照數(shù)據(jù)流(dataflow)模式運(yùn)行VI。 當(dāng)接受到所有所需的輸入時,程序框圖節(jié)點將運(yùn)行。節(jié)點在運(yùn)行時產(chǎn)生輸出端數(shù)據(jù)并將該數(shù)據(jù)傳送給數(shù)據(jù)流路徑中的下一個節(jié)點。 數(shù)據(jù)流經(jīng)節(jié)點的過程決定了程序框圖上VI和函數(shù)的執(zhí)行順序。
Visual Basic,C++,JAVA以及絕大多數(shù)其它文本編程語言都遵循程序執(zhí)行的控制流模式。 在控制流中,程序元素的先后順序決定了程序的執(zhí)行順序。
圖1顯示了一個數(shù)據(jù)流編程的范例,程序框圖中兩個數(shù)字相加,然后從結(jié)果中減去50.00。 在這個范例中,程序框圖從左向右執(zhí)行,這并非因為對象的放置順序,而是因為“減”函數(shù)必須在“加”函數(shù)執(zhí)行完,并將數(shù)據(jù)傳到“減”法函數(shù)后才能執(zhí)行。 節(jié)點只有在所有輸入接線端數(shù)據(jù)準(zhǔn)備好后才能執(zhí)行,只有在節(jié)點完成執(zhí)行后才能向輸出接線端提供數(shù)據(jù)。
圖1.數(shù)據(jù)流編程范例
在圖2中,考慮哪段代碼先執(zhí)行—“加”、“隨機(jī)數(shù)”,還是“除”函數(shù)。 您無法知道答案,因為“加”和“除”函數(shù)的輸入同時可用,而隨機(jī)數(shù)并沒有輸入。 在一個代碼段必須在另一個前執(zhí)行,并且兩個函數(shù)間沒有數(shù)據(jù)依賴關(guān)系的情況下,可以采用其它編程方法(例如順序結(jié)構(gòu)或錯誤簇)強(qiáng)制設(shè)定執(zhí)行的順序。
圖2.多代碼段的數(shù)據(jù)流范例
最后補(bǔ)充一下:
如果兩個或兩個以上的線程在同一時間企圖訪問同一個內(nèi)存 地址,那么將會發(fā)生數(shù)據(jù)沖突。顯然,在應(yīng)用程序中識別可能產(chǎn)生沖突的代碼是一項艱巨的任務(wù)。但是,通過在 LabVIEW中以 圖形化的方式創(chuàng)建程序框圖,用戶可以迅速展開具體工作,并實現(xiàn)自己的構(gòu)想,而無需考慮線程同步。兩個并行化的圖形代碼段在寫入文件時都需要訪問硬盤,LabVIEW可 以自動地處理這兩個線程的同步。