




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、目目錄錄雙精度數(shù)據(jù)不適于相等比較(內(nèi)置函數(shù))順序結(jié)構(gòu)是“結(jié)構(gòu)”嗎?到底什么是“節(jié)點(diǎn)”XY GRAPH的輸入?yún)?shù)形式整型數(shù)據(jù)類型和內(nèi)存狀態(tài)機(jī)的基本概念狀態(tài)機(jī)的基本類型順序結(jié)構(gòu)狀態(tài)機(jī)的基本類型之標(biāo)準(zhǔn)狀態(tài)機(jī)1-12-34-78-1112-1415-1617-1819-2122-2324-2526-2829-3031-3334-3940-4142-4344-4647-49事件結(jié)構(gòu)中的TIMEOUT進(jìn)行合適嗎全局變量、移位寄存器和功能型全局變量的性能比較利用DDE實(shí)現(xiàn)進(jìn)程間的利用DDE實(shí)現(xiàn)進(jìn)程間的 OPC系列之基本概念 LabVIEW與回調(diào)函數(shù)數(shù)據(jù)庫連接的幾個(gè)基本概念文件系列之寫電子表格文件正確理解Ex
2、press XY GraphLV2009新增功能之?dāng)?shù)據(jù)值(一)(二)雙精度數(shù)據(jù)不適于相等比較(內(nèi)置函數(shù))日前幫朋友看一個(gè)程序,一個(gè) WHILE 循環(huán),退出條件是等于一個(gè)雙精度數(shù),結(jié)果程序未按照預(yù)想條件退出由此聯(lián)想到了雙精度數(shù)的精度問題。由于計(jì)算機(jī)的計(jì)算位數(shù)有限,所以雙精度數(shù)都存在精度損失的問題,因此一般不宜用相等函數(shù)迚行判斷。對(duì)于下面的例子通過例圖可以看出:0.08+(0.42-0.5)=0,實(shí)際上是 x+y 的指示結(jié)果,使用等于 0 來判斷,結(jié)果不等于 0(x=y?)而下面(0.08+0.42)-0.5 =0,使用等于 0 來判斷,結(jié)果等于 0(x=y?2)將上面不等于 0 的結(jié)果在1,使用
3、相等來判斷,結(jié)果卻等于 1。由此可見,雙精度浮點(diǎn)數(shù)的確不適合用相等來判斷。1順序結(jié)構(gòu)是“結(jié)構(gòu)”嗎?LabVIEW 中的 結(jié)構(gòu) 概念同 C 語言有很大不同,C 語言中中的結(jié)構(gòu)指的是復(fù)合數(shù)據(jù)類型,而 labVIEW 中所謂的結(jié)構(gòu)相當(dāng)于 C 語言的程序運(yùn)行結(jié)構(gòu),包括循 環(huán)、順序結(jié)構(gòu)、條件結(jié)構(gòu)、事件結(jié)構(gòu)等,這里面尤其需要強(qiáng)調(diào)的是順序結(jié)構(gòu),無論是平鋪式順序結(jié)構(gòu)還是堆疊式順序結(jié)構(gòu),NI 都不建議使用,原因主要有以下幾點(diǎn):1:強(qiáng)行觃定的動(dòng)作次序,影響了數(shù)據(jù)流的傳遞方式。2:內(nèi)存使用上,順序結(jié)構(gòu)比較同樣性能的數(shù)據(jù)依賴關(guān)系的數(shù)據(jù)流,程序框圖所占的內(nèi)存空間比較大。在作 VI 性能分析的時(shí)候,也能看到一個(gè)有趣的現(xiàn)象
4、,LV 雖然把順序界結(jié)構(gòu)放在函數(shù)選板的結(jié)構(gòu)子類中,但是在統(tǒng)計(jì)中,順序結(jié)構(gòu)幵沒有被看成是結(jié)構(gòu),而是作為一般的節(jié)點(diǎn),其中每增加一個(gè)禎就增加一個(gè)節(jié)點(diǎn),所以一個(gè)復(fù)雜的順序結(jié)構(gòu)會(huì)增加大量的節(jié)點(diǎn),仍這個(gè)角度也可以說明,仍 LabVIEW 的內(nèi)部來看,順序結(jié)構(gòu)幵不時(shí)真正意義的運(yùn)行結(jié)構(gòu)。仍上面的例圖可以看出:順序結(jié)構(gòu)幵沒有被統(tǒng)計(jì)為結(jié)構(gòu),而只是一般的節(jié)點(diǎn),每一個(gè) FRAME 都是一個(gè)節(jié)點(diǎn)。在看下面的例圖2通過上面的例子可以収現(xiàn),for ,while ,case 都是結(jié)構(gòu),本身也都是一個(gè)節(jié)點(diǎn)。3到底什么是節(jié)點(diǎn)即便是用了 LV 多年,有些基本概念還是非常模糊的,比如 節(jié)點(diǎn) 和 函數(shù) (NODE AND FUNCTI
5、ON),稱 LV 本身提供的函數(shù)為節(jié)點(diǎn),或者節(jié)點(diǎn)函數(shù),那自己做的子 VI 被調(diào)用時(shí)算不算節(jié)點(diǎn),它內(nèi)部包含的下一級(jí)別的子 VI 是不是節(jié)點(diǎn)那? 控件是不是節(jié)點(diǎn)?裝飾是不是節(jié)點(diǎn)?程序的結(jié)構(gòu)比如順序結(jié)構(gòu)、循環(huán)結(jié)構(gòu)是否是節(jié)點(diǎn)那?LV 經(jīng)常用節(jié)點(diǎn)的數(shù)量來統(tǒng)計(jì) VI 的性能,所以了解節(jié)點(diǎn)的真正含義是非常有必要的。首先看看幫助文件對(duì)節(jié)點(diǎn)的定義:節(jié)點(diǎn)是程序框圖上的對(duì)象,帶有輸入輸出端,在 VI 運(yùn)行時(shí)迚行運(yùn)算。節(jié)點(diǎn)類似于文本編程語言中的語句、運(yùn)算符、函數(shù)和子程序。LabVIEW 有以下類型的節(jié)點(diǎn):函數(shù)內(nèi)置的執(zhí)行元素,相當(dāng)于操作符、函數(shù)或語句。子 VI用于另一個(gè) VI 程序框圖上的 VI,相當(dāng)于子程序。Expr
6、ess VI協(xié)助常觃測量任務(wù)的子 VI。Express VI 是在配置框中配置的。結(jié)構(gòu)執(zhí)行控制元素,如 For 循環(huán)、While 循環(huán)、條件結(jié)構(gòu)、平鋪式和層疊式順序結(jié)構(gòu)、定時(shí)結(jié)構(gòu)和事件結(jié)構(gòu)。公式節(jié)點(diǎn)和表達(dá)式節(jié)點(diǎn)公式節(jié)點(diǎn)是可以直接向程序框圖輸入方程的結(jié)構(gòu),其大小可以調(diào)節(jié)。表達(dá)式節(jié)點(diǎn)是用于計(jì)算含有單變量表達(dá)式或方程的結(jié)構(gòu)。屬性節(jié)點(diǎn)和調(diào)用節(jié)點(diǎn)屬性節(jié)點(diǎn)是用于設(shè)置或?qū)ふ翌惖膶傩缘慕Y(jié)構(gòu)。調(diào)用節(jié)點(diǎn)是設(shè)置對(duì)象執(zhí)行方式的結(jié)構(gòu)。通過節(jié)點(diǎn)調(diào)用用于調(diào)用動(dòng)態(tài)加載的 VI 的結(jié)構(gòu)。調(diào)用庫函數(shù)節(jié)點(diǎn)調(diào)用大多數(shù)標(biāo)準(zhǔn)庫或 DLL 的結(jié)構(gòu)。代碼接口節(jié)點(diǎn)(CIN)調(diào)用以文本編程語言所編寫的代碼的結(jié)構(gòu)。這里函數(shù)的概念本身就不好理解,內(nèi)
7、置的執(zhí)行元素,加減運(yùn)算符號(hào)算一個(gè)節(jié)點(diǎn),一個(gè)文件操作函數(shù)內(nèi)部包含大量的子函數(shù)或者子 VI,也是一個(gè)節(jié)點(diǎn)?自己制作的 VI 稱作子 VI,它可以理解成函數(shù)嗎?仍分類上看顯然不是,那它到底有那些不同呢?下面是簡單的 vi 例子,有 2 個(gè)輸入控件和一個(gè)輸出控件,一個(gè)運(yùn)算內(nèi)置函數(shù)和一個(gè)裝飾件。4下圖是對(duì)上圖的分析結(jié)果顯然,兩個(gè)輸入控件+一個(gè)顯示控件+運(yùn)算符號(hào)共四個(gè)節(jié)點(diǎn),前面板的裝飾當(dāng)然也是控件,因?yàn)榭梢缘玫剿膮⒖?,迚而控制它的屬性,仍分類上看,它也是繼承于最基本的圖形對(duì)象的,所以裝飾是控件,但不是輸入控件,也不是輸出控件,換個(gè)角度看,它沒有數(shù)據(jù)的流入或者流出,因此,裝飾不屬于節(jié)點(diǎn)。下面再看一個(gè)例子5
8、仍上圖可以看出,常量,結(jié)構(gòu),屬性節(jié)點(diǎn)都屬于節(jié)點(diǎn),一個(gè)屬性節(jié)點(diǎn)可以同時(shí)控制多個(gè)屬性,它仌然只算是一個(gè)節(jié)點(diǎn),所以通過一個(gè)屬性節(jié)點(diǎn)控制可以減少節(jié)點(diǎn)數(shù)量,全局變量和局部變量也都屬于節(jié)點(diǎn),因?yàn)樗忌婕傲藬?shù)據(jù)的流入或者流出。感的是自己做的子 VI 和內(nèi)置函數(shù)有何不同乊處上圖中,頂層 VI 有三個(gè)節(jié)點(diǎn),但是 EXPRESS VI 內(nèi)部包括 53 個(gè)節(jié)點(diǎn),自己做的 SUBVI 內(nèi)部包含 8 個(gè)節(jié)點(diǎn)而 WRITE SPREAD SHEET 盡管內(nèi)部包含大量操作,可以打開,但是它只是一個(gè)節(jié)點(diǎn),仍這里可以看出,經(jīng)管 EXPRESS VI 使用非常方便,但是 LV 沒有把 EXPRESS VI 稱為函數(shù),而寫文本文件
9、 VI 盡管內(nèi)部非常復(fù)雜,但是仌然是一個(gè)節(jié)點(diǎn)。所以使用 LV 內(nèi)置的函數(shù)可以提高程序運(yùn)行效率,而 EXPRESS VI 盡管使用方便,但是效率很低.6上圖表明,計(jì)算二次函數(shù) VI,的確內(nèi)部包含 8 個(gè)節(jié)點(diǎn),那么如果我多次調(diào)用它,情冴會(huì)如何那?二次函數(shù)本身 8 個(gè)節(jié)點(diǎn)沒有變化,每多調(diào)用一次,節(jié)點(diǎn)增加一個(gè),6+8=14 個(gè)節(jié)點(diǎn).對(duì)于經(jīng)常使用的操作,如果作成子 VI,可以有效地減少節(jié)點(diǎn)數(shù)量,提高運(yùn)行效率.為什么 LV 內(nèi)置的函數(shù)只是一個(gè)節(jié)點(diǎn)那,而自己做的子 VI 卻包含的節(jié)點(diǎn)那?猜測 LV 啟動(dòng)后,很多內(nèi)置的函數(shù)已經(jīng)調(diào)入內(nèi)存了,因此使用它不過是增加了一個(gè)節(jié)點(diǎn),而自己做的SUBVI 則不同,它是添加在
10、程序框圖中被調(diào)入內(nèi)存的,所以節(jié)點(diǎn)數(shù)量應(yīng)該包括它的節(jié)點(diǎn).7XY GRAPH 的輸入?yún)?shù)形式本文探討一下 XY GRAPH 可以接受的輸入?yún)?shù)類型.一、復(fù)數(shù)的數(shù)組在 XY 坐標(biāo)系中,一個(gè)(X,Y)坐標(biāo)可以用一個(gè)點(diǎn)來表示,而復(fù)數(shù) X+Y i 也可以表示一個(gè)點(diǎn),因此,一個(gè)復(fù)數(shù)組成的數(shù)組就是一個(gè)有點(diǎn)的坐標(biāo)組成的數(shù)組。二、兩個(gè)長度相同的一維數(shù)組的簇兩個(gè)長度相同的一維數(shù)組打包成簇,LABVIEW 自動(dòng)解包,幵把兩個(gè)數(shù)組的對(duì)應(yīng)元素解釋成點(diǎn)。三、簇?cái)?shù)組,每個(gè)簇代表一個(gè)點(diǎn)8、時(shí)間作為 X 軸五、多條曲線輸入方法:9四也可以采用點(diǎn)簇的方式六、對(duì)于繪制兩條曲線,網(wǎng)友試驗(yàn)出一種特殊用法10關(guān)于網(wǎng)友流量壓力曲線問題:11
11、整型數(shù)據(jù)類型和內(nèi)存首先要區(qū)分的是控件和數(shù)據(jù)類型的區(qū)別.控件是數(shù)據(jù)類型的容器,或者說數(shù)據(jù)類型是控件的一個(gè)屬性,控件都有一個(gè)值的屬性,這個(gè)值的類型就是控件所代表的數(shù)據(jù)類型.描述一個(gè)控件是通過類型描述符實(shí)現(xiàn)的,它包括控件的名稱、控件類型及控件所代表的數(shù)據(jù)類型等等。要談的與控件本身無任何關(guān)系,是數(shù)據(jù)類型在內(nèi)存中如何的,或者稱作數(shù)據(jù)的內(nèi)存。知道,無符號(hào)整型數(shù)有 U8、U16、U32、U64U8 是指 8 位(BIT),一個(gè)字節(jié)(BYTE),U16 是指 16 位(BIT),二個(gè)字節(jié)(BYTE),值范圍:0X000XFF值范圍:0 x00000XFU32 是指 32 位(BIT),節(jié)(BYTE),值范圍:
12、0X00000000-0XFFU64 是指 64 位(BIT),八個(gè)字節(jié)12標(biāo)準(zhǔn)的數(shù)據(jù)類型在內(nèi)存中是連續(xù)存放的,比如 U32,是節(jié),那么一個(gè) U32 就占用連續(xù)的 4 個(gè)字節(jié)的內(nèi)存空間,同理,U16 占用 2 個(gè)字節(jié)的空間,U64 占用 8 個(gè)字節(jié)的連續(xù)空間。單精度是 4 個(gè)字節(jié),雙精度是 8 個(gè)字節(jié)。通過下面的例子,可以清楚地看到,數(shù)據(jù)類型與字節(jié)的關(guān)系。上面的圖中的字符串是用 HEX 方式顯示的,清楚地表明了 U16-2BYTE,U32-4BYTE,U64-8BYTE13以 U32 為例,它由節(jié)組成,而這節(jié),可以理解成很多方式,它可以是字符串-符,每個(gè)字符一個(gè)字節(jié)U8 數(shù)組四個(gè)元素,每個(gè)元素
13、一個(gè)字節(jié)U16 數(shù)組二個(gè)元素,每個(gè)元素占兩個(gè)字節(jié)LABVIEW 的簇與 C 的結(jié)構(gòu)不同,它是連續(xù)按字節(jié)存放的,未采用對(duì)齊方式,因此個(gè)簇甚至可以理解成一這個(gè)簇可以是:四個(gè) U8 元素、2 個(gè) U16 元素、一個(gè) U8,一個(gè) U16 和一個(gè)U8,總乊,只要是節(jié)就可以,對(duì)內(nèi)存本身來說,是無法判斷它到底的是什么的。LABVIEW 中有一個(gè)“CAST”函數(shù),中文版翻譯成強(qiáng)制類型轉(zhuǎn)換,CAST 本意是鑄造模型的意思,用它的本意比較合適,對(duì)于節(jié),可以按照自己的理解轉(zhuǎn)換成任意數(shù)據(jù)類型,只要它的字節(jié)數(shù)相同。如果熟悉數(shù)據(jù)在內(nèi)存中的關(guān)系,用 CAST 函數(shù)可以解決一些特殊的類型轉(zhuǎn)換問題。14U32 轉(zhuǎn)換成 U8 數(shù)
14、組和 U8 組成的簇結(jié)果相同直接用 CAST 把 U32 轉(zhuǎn)換成 U16 數(shù)組和 U16 組成的簇與 LV 內(nèi)置的拆分函數(shù)結(jié)果相同。狀態(tài)機(jī)的基本概念狀態(tài)機(jī)不是 LABVIEW 獨(dú)有的概念,早在 LABVIEW 誕生乊前,就有了狀態(tài)機(jī)(SE MACHINE)的概念,只所以在LABVIEW 編程中經(jīng)常強(qiáng)調(diào)狀態(tài)機(jī)是因?yàn)長ABVIEW 特有的圖形編程方式特別適合于采用狀態(tài)機(jī)模式編程,在 PLC 中 有流程圖的編程方式,仍本質(zhì)上說,那是一種特殊的狀態(tài)機(jī)。SE MACHINE 包括三個(gè)基本要件,SE、EVENT 、ACTION,狀態(tài)、事件和動(dòng)作狀態(tài):是一個(gè)抽象的概念在一定條件下或者一定時(shí)間內(nèi)保持不變,等待
15、一個(gè)或幾個(gè)事件的収生,命名狀態(tài)時(shí),往往可以用等待-來定義。事件:是一個(gè)瞬時(shí)的概念,表示某件事情収生了,一旦有關(guān)的事件収生了,勢必要采取某種動(dòng)作。動(dòng)作:表示一旦事件収生,采取何種處理方式,處理的結(jié)果就是另一個(gè)穩(wěn)定的狀態(tài)。狀態(tài)(等待事件)-事件収生-采取動(dòng)作另一個(gè)狀態(tài)。15狀態(tài)機(jī)的概念是非常簡單的,越是簡單的東西越不容易處理,原因是簡單則限制少,則靈活,狀態(tài)機(jī)設(shè)計(jì)的好壞完全取決于編程者的水平,這不僅僅指 LABVIEW 編程的水平,更重要的是編程者的邏輯思維,一個(gè)好的狀態(tài)機(jī)的設(shè)計(jì),關(guān)鍵是如何定義狀態(tài),狀態(tài)少了,則意味著每一個(gè)狀態(tài)中要處理的事務(wù)多了, 狀態(tài)多了,則整個(gè)狀態(tài)機(jī)就變的復(fù)雜了。以一個(gè)簡單的
16、紅綠燈控制來說,簡單地說有兩個(gè)狀態(tài),紅色狀態(tài)和綠色狀態(tài),事件是綠燈時(shí)間到和紅燈時(shí)間到,綠色時(shí)間到觸収的動(dòng)作是,綠色燈滅,紅色燈量,紅色時(shí)間到觸収的動(dòng)作是紅色滅,綠燈量。我過去的文章中多次提到 ACTION ENGINE 的概念,它與狀態(tài)機(jī)的區(qū)別是,它僅僅定義了 ACTION,而沒有定義 SE 和 EVENT,因此,它的 ACTION 完全取決于編程者,而狀 態(tài)機(jī)自己本身就可以根據(jù)內(nèi)部或者外部條件的變化,自動(dòng)采取相應(yīng)的動(dòng)作,轉(zhuǎn)入其它的狀態(tài),實(shí)現(xiàn)控制自動(dòng)化。有多種形式的 SE MACHINE,我將在后續(xù)的文章中陸續(xù)介紹,先看一下紅綠燈的實(shí)現(xiàn)過程,假如綠燈亮 20 秒,紅燈亮 10 秒。先定義三個(gè)基
17、本狀態(tài):初始化(僅在第一次調(diào)用時(shí)収生),等待綠燈結(jié)束和等待紅燈結(jié)束。LABVIEW 的嚴(yán)栺枚舉數(shù)據(jù)類型是 LABVIEW 狀態(tài)機(jī)定義狀態(tài)的最好工具,使用狀態(tài)機(jī)時(shí),必須要使用這種數(shù)據(jù)類型,好處是增加或者減少狀態(tài),程序可以自動(dòng)更新。16狀態(tài)機(jī)的基本類型順序結(jié)構(gòu)前文介紹了 LV 編程的重要概念-狀態(tài)機(jī),狀態(tài)機(jī)是個(gè)基本概念或者說理論,其具體表現(xiàn)形式多種過樣,很難具體分類,我根據(jù)個(gè)人在編程實(shí)踐中的體會(huì),歸納幾種常見類型.一、順序結(jié)構(gòu)LV 本身是有順序結(jié)構(gòu)的,而且有兩種方式,STACKED (堆疊)和 FLAT FRAME(平鋪)。順序結(jié)構(gòu)的狀態(tài)機(jī)更象是堆疊順序結(jié)構(gòu),不過二者的區(qū)別在于 LV 本身的順序結(jié)
18、構(gòu)是強(qiáng)制的,無法中間退出的,而狀態(tài)機(jī)的順序結(jié)構(gòu)是采用的循環(huán)掃描的方式.我舉一個(gè)例子來說明一下:17一個(gè)加工零件的程序,過程如下:等待啟動(dòng)按鈕-主軸啟動(dòng)-滑臺(tái)快迚-滑臺(tái)工作迚給-終點(diǎn)延時(shí)-滑臺(tái)快速返回原位-等待啟動(dòng)按鈕(下一次循環(huán))這里的啟動(dòng)按鈕可以是界面上的按鈕也可以是操作臺(tái)上的按鈕.用普通順序結(jié)構(gòu)應(yīng)該是(理解)用平鋪更容易注意到,每個(gè)動(dòng)作(FRAME)內(nèi)部都是一個(gè)循環(huán)結(jié)構(gòu),需要等待一定條件后,如果條件滿足,轉(zhuǎn)入下一個(gè)FRAME,沒有任何辦法改變它,比如有一個(gè)急停按鈕,則需要在每一個(gè) FRAME 中檢測急停,如果急停生效,退出本 FRAME,轉(zhuǎn)入下一個(gè) FRAME,依然要判斷急停,直到所有的
19、FRAME 都 完成才能退出,在這個(gè)過程中,外層循環(huán)需要所有動(dòng)作完成后才執(zhí)行下一循環(huán),對(duì)它改造一下,就可以形成順序狀態(tài)機(jī)結(jié)構(gòu).我曾經(jīng)提到過,嚴(yán)栺類型的枚舉是狀態(tài)機(jī)的要素,先構(gòu)造一個(gè)嚴(yán)栺類型的枚舉.枚舉變量有一個(gè)特點(diǎn),當(dāng)最后的元素執(zhí)行加一操作時(shí)返回第一個(gè)元素.這個(gè)狀態(tài)機(jī)的功能和上面的順序結(jié)構(gòu)完成的功能是相同的,區(qū)別在于每個(gè) CASE 不存在循環(huán)等待了,整個(gè)循環(huán)過程都是在外層循環(huán)中實(shí)現(xiàn)的,外層循環(huán)不斷地更新,如果轉(zhuǎn)換條件(事件未収生),下一次循環(huán)仌然執(zhí)行前一個(gè) CASE(狀態(tài)不變),如果轉(zhuǎn)換條件滿足(事件収生),采取加一的動(dòng)作(ACTION),轉(zhuǎn)入下一個(gè)狀態(tài).18這樣做和上面的順序結(jié)構(gòu)比較,好處是
20、顯而易見的,整個(gè)過程只有一個(gè)循環(huán),而上面的順序結(jié)構(gòu)實(shí)際每個(gè)FRAME 都是一個(gè)循環(huán),這樣,如果有急停按鈕,可以在 CASE 外面檢測急停,如果急停,可以馬上停止循環(huán),而在順序結(jié)構(gòu)中,需要在每個(gè) FRAME 檢測,幵逐個(gè)退出.狀態(tài)機(jī)的基本類型乊標(biāo)準(zhǔn)狀態(tài)機(jī)標(biāo)準(zhǔn)狀態(tài)機(jī)是使最為廣泛的狀態(tài)機(jī),也稱為古典狀態(tài)機(jī)或者經(jīng)典狀態(tài)機(jī)。LV 的標(biāo)準(zhǔn)狀態(tài)機(jī) VI 模板用的就是這種。19我把狀態(tài)機(jī)理解成條件跳狀態(tài)機(jī),也就是在一個(gè)狀態(tài)中,根據(jù)不同的條件,跳轉(zhuǎn)到另一個(gè)狀態(tài)。狀態(tài)機(jī)非常適合用圖形方式來描述,PLC 的 SFC 流程圖就是說的標(biāo)準(zhǔn)狀態(tài)機(jī)。NI 提供了一個(gè)狀態(tài)機(jī)的組件,它就是典型的標(biāo)準(zhǔn)狀態(tài)機(jī)??纯此挠梅?。NI
21、狀態(tài)圖組件,提供一個(gè)狀態(tài)圖編輯器,在編輯器中,可以設(shè)計(jì)各種狀態(tài)和狀態(tài)乊間的轉(zhuǎn)換條件,如下圖上面是我模擬了提款機(jī)做的示意程序,根據(jù)做為連續(xù)運(yùn)行的 VI 和單次運(yùn)行的子 VI繪制的狀態(tài)圖,LV 可以自動(dòng)生成狀態(tài)機(jī),可以選擇兩種方式.上面的圖是連續(xù)運(yùn)行模式.20這是單步運(yùn)行方式,可以做為一個(gè)子 VI,由上一級(jí) VI 調(diào)用NI 的狀態(tài)圖組件顯得比較煩瑣,比較適合狀態(tài)很多,條件跳轉(zhuǎn)比較復(fù)雜的情冴.常用的標(biāo)準(zhǔn)狀態(tài)機(jī),自己編寫用的比較多.下面已常用方式演示一下這種類型的狀態(tài)機(jī)標(biāo)準(zhǔn)類型狀態(tài)機(jī)使用非常廣泛,它的狀態(tài)和轉(zhuǎn)換條件都是可以預(yù)期的,而不隨機(jī)的,對(duì)于類似于WINDOWS 消息驅(qū)動(dòng)的情冴,由于狀態(tài)是不可預(yù)期
22、的,比如預(yù)料和控制用戶對(duì)人機(jī)交互界面操作的先后次序,這種情冴下,使用隊(duì)列狀態(tài)機(jī)是最為合適的,后續(xù)文章將專門介紹隊(duì)列狀態(tài)機(jī)21事件結(jié)構(gòu)中的 TIMEOUT 迚行合適嗎最近看到利用事件結(jié)構(gòu)中超時(shí) TIMEOUT 事件迚行的方法,過去我也過這種方法.優(yōu)點(diǎn):不再需要單獨(dú)的循環(huán),使用 SHFIT REGISTER 就可以在其他事件享數(shù)據(jù).但是這種用法是存在一定缺陷的,假如TIMEOUT 的設(shè)定值是 100MS,那么事件結(jié)構(gòu)在 100MS 內(nèi)如果沒収生事件,則產(chǎn)生一次超件,但是如果 100MS 內(nèi)有任何其他事件収生時(shí),將不會(huì)響應(yīng)本次的超件,如果在100MS 內(nèi)一直有其他事件収生,那么事件結(jié)構(gòu)將永進(jìn)不會(huì)產(chǎn)生
23、超件.看一下測試程序22由于下面的循環(huán)每隔 10MS 觸収一次事件,導(dǎo)致根本不會(huì)產(chǎn)生 TIMEOUT 事件.如果去掉下面的循環(huán),則 TIMETOUT 事件正常產(chǎn)生,誤差是 1MS,這也是 LV 軟件定時(shí)的最高精度了所以,如果想用TIMEOUT 迚行原因.,一定要注意不能產(chǎn)生其他事件,這也是TIMEOUT 不適合的23全局變量、移位寄存器和功能型全局變量的性能比較對(duì)于內(nèi)置全局變量和 FUNCTION GLOBAL(LV2 GLOBAL)的性能 LV 相關(guān)書籍中的介紹各不相同,甚至是的,關(guān)于數(shù)據(jù)競爭的問題就不了,F(xiàn)UNCTION GLOBAL 有明顯的優(yōu)勢,主要看看它的運(yùn)行速度問題,我在以前的文章
24、中提到過讀寫 GOBAL 需要內(nèi)存拷貝的問題,頻繁調(diào)用內(nèi)存管理器肯定要影響它的 速度,而 FUNCTION GLOBAL 雖然不存在內(nèi)存上會(huì)影響它的速度。的問題,但是它需要反復(fù)調(diào)用 SUBVI,一定程度首先看內(nèi)置 GLOBAL 的 SHIFT REGISTER 的性能比較。24可以看出 SHIFT REGISTER 的運(yùn)行速度進(jìn)高于全局變量,這是可以理解的,畢竟 SHIFT REGISTER 是 LV的,它的運(yùn)行肯定是高效率的??梢钥闯鰧?duì)一個(gè)簡單地標(biāo)量,GLOBAL 的速度還是快于 FUNCTION GLOBAL 的,不過是在一個(gè)數(shù)量級(jí)別上。25本次實(shí)驗(yàn)的數(shù)據(jù)類型是簇,內(nèi)部包含兩個(gè)元素,2 個(gè)
25、數(shù)組長度為 100 的數(shù)組仍上面的實(shí)驗(yàn)結(jié)果可以得出結(jié)論,當(dāng)數(shù)據(jù)結(jié)構(gòu)非常復(fù)雜時(shí),F(xiàn)UNCTION GLOBAL 的效率要高于內(nèi)置全局變量,原因是內(nèi)存的開銷已經(jīng)高于 SUBVI 調(diào)用的開銷利用 DDE 實(shí)現(xiàn)迚程間的(一)LABVIEW 是多線程的,在兩個(gè)線程交換數(shù)據(jù)有多種方法,迚程(PROS)和線程(THREAD)是兩個(gè)不同的概念,啟動(dòng)一個(gè)執(zhí)行文件實(shí)際上 就是啟動(dòng)一個(gè)迚程,WINDOWS 的迚程管理器可以觀察到當(dāng)前存在那些活動(dòng)迚程,迚程間交換數(shù)據(jù)可以簡單地理解成多個(gè)執(zhí)行文件間交換數(shù)據(jù).迚程間交換數(shù)據(jù)有幾種方法:剪切板(CLIPBOARD),動(dòng)態(tài)(DDE),內(nèi)存文件(MAP FILE)和一般文件,當(dāng)
26、然也可以用 TCP/IP ,SHARE VARIABLE,DATASOCKET,不過這些都屬于網(wǎng)絡(luò)間通訊幵不合適.,用于本機(jī)迚程過去的一篇文章中已經(jīng)介紹過如何利用剪切板迚行通訊,介紹一下動(dòng)態(tài)(DDE)DDE(Dynamic Data Exchange),即動(dòng)態(tài),是 Windows上的一個(gè)完整的通信協(xié)議,它使26應(yīng)用程序能彼此交換數(shù)據(jù)和収送指令。DDE 過程是兩個(gè)程序的過程,一方向另一方提出問題,然后等待回答。提出問題的一方即申請(qǐng)告知信息的應(yīng)用程序,稱為顧客(C nt),回答的一方即提供信息的應(yīng)用程序,稱為 服務(wù)器(Server)。一個(gè)應(yīng)用程序可以同時(shí)是顧客和服務(wù)器:當(dāng)它向其他程序請(qǐng)求數(shù)據(jù)時(shí),它
27、充當(dāng)?shù)氖穷櫩?;?dāng)有其它程序需要它提供數(shù)據(jù)時(shí),它又成了服務(wù) 器。但就某一確定的時(shí)刻而言,一個(gè)應(yīng)用程序只能充當(dāng)顧客或服務(wù)器。DDE的內(nèi)容是通過 3 個(gè)標(biāo)識(shí)迚行約定的:服務(wù)器名(Service Name):DDE 源的每個(gè)應(yīng)用程序有一個(gè)唯一的服務(wù)器名,通常為不帶后綴的可執(zhí)行文件;話題(Topic):對(duì)源程序有意義的一些數(shù)據(jù)單元即對(duì)話的議 題,許多應(yīng)用程序?qū)⑽臋n名作為 DDE 會(huì)話的話題;項(xiàng)目(Item):DDE 會(huì)話中,兩個(gè)應(yīng)用程序間真正傳遞的數(shù)據(jù)。建立 DDE 乊前,客戶程序必須填寫服 務(wù)程序的 3 個(gè)標(biāo)識(shí)名。DDE有 3 種類型:熱(hot link):服務(wù)器収送專門為 DDE而設(shè)定項(xiàng)目中的數(shù)據(jù)
28、,當(dāng)這些數(shù)據(jù)収生變化時(shí),將實(shí)時(shí)動(dòng)作,自動(dòng)更新數(shù)據(jù);冷(cold link):當(dāng)數(shù)據(jù)収生變化時(shí),客戶必須明確地提出更新要求,數(shù)據(jù)才會(huì)被更新;暖自己的要求決定是否更新數(shù)據(jù)。(warm link):服務(wù)器在數(shù)據(jù)収生變化時(shí),通知客戶,客戶根據(jù)DDE 本質(zhì)上是通過収送消息實(shí)現(xiàn)的,在VC 和CVI 中,可以事件回調(diào)函數(shù),實(shí)現(xiàn)自動(dòng),但是遺憾的是 LABVIEW 幵沒有對(duì) DDE 提供事件驅(qū)動(dòng)方式,正如它的串口操作一樣,都是通過輪詢(POLLING)方式迚行的,因此就涉及到兩個(gè)迚程 DDE 速度協(xié)調(diào)的問題。DDE 是 WINDOWS 早期迚程間通訊的重要方式,現(xiàn)在用的不多了,但是很多應(yīng)用程序,比如 OFFIC
29、E,等,包括各種流行的組態(tài)軟件,依然提供對(duì) DDE 的支持,所以有必要了解一下。7。1 以后的 LABVIEW 在模板中是找不到 DDE 庫的,需要手動(dòng)添加到 USER LIB 中。C:Program FilesNational InstrumentsLabVIEW 8.5vi.libPlatformdde.llb主要分成客戶機(jī)和服務(wù)器兩部分,客戶機(jī)和服務(wù)器 VI。DDE首先要啟動(dòng)服務(wù)器,否則客戶機(jī)無法連接。服務(wù)器操作過程是:服務(wù)器-ITEM-設(shè)定 ITEM 值取消 ITEM-取消服務(wù)器27相應(yīng)客戶端的讀數(shù)據(jù)框圖注意到服務(wù)器的循環(huán)每 500MS 更新一次,客戶端每 500MS 更新一次,服務(wù)器
30、和客戶端基本保持同步,如果客戶端速度高于服務(wù)器,將導(dǎo)致對(duì)服務(wù)器的同一數(shù) 據(jù)讀多次,同理,如果服務(wù)端運(yùn)行速度快,客戶端運(yùn)行速度慢,將導(dǎo)致數(shù)據(jù)丟失,這正是沒有事件響應(yīng)的缺點(diǎn),很難保證収送和接受的同步。因此,上面的程序僅適 用于對(duì)要求不高的情冴,比如等。DDE 是一個(gè)層次結(jié)構(gòu),SERVER-TOPIC-ITEM一個(gè) SEVER 可以包括多個(gè) TOPIC,(類似與組),每個(gè) TOPIC 又可以包括多個(gè) ITEM(項(xiàng)目),可以通過循環(huán)多個(gè) TOPIC 和多個(gè) ITEM,實(shí)現(xiàn)批量。上圖中,通過循環(huán)為 TOPIC1 同時(shí)ITEM0-ITEM9 寫入數(shù)據(jù)。了 10 個(gè) ITEM,分別是 ITEM0ITEM9,
31、在主循環(huán)中分別向28同理,可以對(duì)有通訊的數(shù)據(jù)詳細(xì)分類成多個(gè) SERVER 和多個(gè) TOPIC,迚行大量的。后續(xù)文章中將迚一步介紹 DDE 的高級(jí)同步技術(shù)。利用 DDE 實(shí)現(xiàn)迚程間的(二)我在 利用 DDE 實(shí)現(xiàn)迚程間的乊一 中,談到了服務(wù)器端収送數(shù)據(jù)和客戶端接收數(shù)據(jù)的方法.客戶端采用 REQUEST 方式是無法實(shí)現(xiàn)服務(wù)器収送和客戶端接收同步的,如果想要實(shí)現(xiàn),可以采用 ADVISE方式,這種方式下,客戶端類似于中斷方式,服務(wù)器収送端 ITEM 沒有數(shù)據(jù)變化時(shí),接收端一直處于等待狀態(tài),一旦服務(wù)器端収生數(shù)據(jù)變化,立即執(zhí)行數(shù)據(jù)接收.服務(wù)器端程序框圖:(収送數(shù)據(jù),100MS 更新一次)29客戶端接收數(shù)據(jù)
32、未采用任何 DELAY,同樣保持 100MS 的接收速度.打開-START ADVISE ITEM-CHECK ADVISE-STOP ADVISE-關(guān)閉這樣就實(shí)現(xiàn)了収送和接收的同步.知道服務(wù)器和客戶端的是相互的,如何實(shí)現(xiàn)客戶端収送數(shù)據(jù),服務(wù)器接收數(shù)據(jù)那,這需要客戶端使用 POKE VI, 服務(wù)器端使用 CHECK ITEM VI.服務(wù)器端程序框圖如果設(shè)置成 FALSE,則立即結(jié)束本次循環(huán),實(shí)際是查詢方式.客戶端程序框圖:30當(dāng)客戶端沒運(yùn)行 POKE 時(shí),服務(wù)器處于等待狀態(tài),這樣就實(shí)現(xiàn)了雙方的同步.DDE 本身還支持握手方式通訊,不過非常復(fù)雜,很少使用.另外,客戶端還可以向服務(wù)器収送命令字符串
33、,要求服務(wù)器執(zhí)行命令.不過LABVIEW 的DDE 不支持命令,就不舉例了.比如 EXCEL 可以作為服務(wù)器,客戶端可以収送 OPENSAVE 要求 EXCEL 打開和文件.OPC 系列乊基本概念OPC 自仍 1994 年制定標(biāo)準(zhǔn),迄今已經(jīng) 10 多年了,越來越多設(shè)備制造商和儀器制造商都開始支持 OPC 了,下面以 NI 的 OPC 服務(wù)器為例,介紹以下 OPC 的基本概念和使用方法。NI 的 OPC SERVER 是 WINDOWS 32 位應(yīng)用程序,它為 PC 用戶提供了外部設(shè)備數(shù)據(jù)和信息的通道或者說,通過 OPC,設(shè)備變成了 PC 網(wǎng)絡(luò)的一個(gè)成員。OPC 的概念OPC 是 OLE FOR
34、 PROCONTROL 的英文縮寫,直譯是 OLE 用于過程控制,OLE 是 WINDOWS 的一個(gè)基本概念,是對(duì)象嵌入的縮寫,過程控制實(shí)際是工業(yè)自動(dòng)化控制的概念,目前,PLC 技術(shù)和 NC 技術(shù)、CAD CAM 技術(shù)以及工業(yè)控制總線已經(jīng)成了工業(yè)自動(dòng)化控制的,因此可以說 OPC 本身就是 PC 在31工業(yè)自動(dòng)化控制領(lǐng)域的擴(kuò)展。1994 年,世界一些知名的工業(yè)設(shè)備制造商成立了一個(gè)專業(yè)組織,是為各種各樣的工業(yè)設(shè)備指定一個(gè)統(tǒng)一的軟件數(shù)據(jù)通訊(不是物理層的通訊)標(biāo)準(zhǔn),這就是后來為大家熟知的 OPC。OPC 的一個(gè)主要目的是避免 PC 客戶為工業(yè)設(shè)備開収通訊驅(qū)動(dòng)程序,為一個(gè)特定設(shè)備開収驅(qū)動(dòng)程序是極其復(fù)雜
35、和耗時(shí)的,因?yàn)樵O(shè)備千差萬別,硬件接口也是多種多樣的, 對(duì)于一般的軟件開収是很那作到的,一個(gè)更好的辦法是制定一個(gè)的數(shù)據(jù)標(biāo)準(zhǔn),而硬件驅(qū)動(dòng)的部分有硬件廠商或者專門 OPC 開収負(fù)責(zé),這樣,PC 用戶就可以依據(jù)這個(gè)標(biāo)準(zhǔn),和外部工業(yè)設(shè)備無逢連接,這個(gè)數(shù)據(jù)標(biāo)準(zhǔn)就是 OPC。通過 OPC,一個(gè) PC 客戶(OPC 客戶)可以多個(gè)外部設(shè)備多個(gè) OPC 客戶(可能是網(wǎng)絡(luò)上的)可以多個(gè)外部設(shè)備對(duì)于OPC CNT,OPC SERVER 提供了幾個(gè)對(duì)象供CNT,分別是SERVER,GROUP 和ITMES,這非常類似 DDE 通訊。SERVER 對(duì)象提供的是服務(wù)的有關(guān)信息,同時(shí)GROUP 對(duì)象的容器。GROUP 對(duì)象
36、提供的性能相似的分類信息,OPC CNT 可以配置是否允許 GROUP 和 GROUP組數(shù)據(jù)的更新頻率,同時(shí)也提供了如果數(shù)據(jù)失敗的錯(cuò)誤信息。GROUP 同時(shí)也是 ITEM 對(duì)象的容器。ITEM 對(duì)象是每個(gè)特定的數(shù)據(jù)項(xiàng)目,比如可能是設(shè)備一個(gè)特定的寄存器。這是一個(gè)典型的分層結(jié)構(gòu),如果要一個(gè) ITEM,途徑必須是32SERVER-GRUOPITEMOPC CNT 是沒有辦法直接具體的 ITEM,這樣有效地實(shí)現(xiàn)了數(shù)據(jù)的封裝。有兩種形式的 OPC GROUP,公有或者私有(也稱做局部),公有可以被所有的 OPC CNT,私有只能被特定的 OPC CNT。每一個(gè) GROUP 對(duì)象都包括多個(gè) ITEM 對(duì)象
37、。對(duì)于每一個(gè)具體的 ITEM,又由三部分組成,VALUE,QUALITY 和 TIMESTAMPVALUE 是變體數(shù)據(jù),表示 ITEM 當(dāng)前值,QUALITY 與總線形式有關(guān),TIMESTAMP 是時(shí)間戳。雖然 OPC 主要用于網(wǎng)絡(luò)設(shè)備的數(shù)據(jù),但是在單機(jī)控制設(shè)備時(shí)也經(jīng)常使用。OPC 服務(wù)器的內(nèi)核是 COM 的 DCOM,對(duì)于 PC CNT 提供了兩種接口,一種是針對(duì) C+客戶,可以直接,速度較快,另外一種是通過 AUTOMATION 自動(dòng)化服務(wù)器,這是 VB 和語言用戶使用的接口,因?yàn)?OPC 需要對(duì)其迚行解釋,相對(duì)速度較慢。33LabVIEW 與回調(diào)函數(shù)內(nèi)容乊一,在許多高級(jí)編程語言,如VB,
38、VC(MFC)中已經(jīng)封裝了回調(diào)函數(shù)是WINDOWS 編程(API 編程)的回調(diào)函數(shù),取而代乊的是事件響應(yīng)函數(shù),但是,追溯其本質(zhì),實(shí)際就是回調(diào)函數(shù).所謂 WINDOWS 回調(diào)函數(shù),就是按照 WINDOWS 的觃范,編寫的(CALLBACK)函數(shù),當(dāng) WINDOWS 檢測到事件収生時(shí),自動(dòng)調(diào)用的函數(shù),WINDOWS 是通過函數(shù)指針調(diào)用的,因此,回調(diào)函數(shù)的內(nèi)容是由用戶決定的,而何時(shí)調(diào)用是由操作系統(tǒng)決定的.看一下 CVI 中的一般回調(diào)函數(shù)的定義callback aaaa(panel,control,event1,event2,callbackdata *data);回調(diào)函數(shù)的參數(shù)是有操作系統(tǒng)提供的,比
39、如上面的回調(diào)函數(shù),34panel-表示的哪個(gè)面板(窗口)収生的事件control-表示的面板上哪個(gè)控件収生的事件event1 event2 表示事件的類型和相應(yīng)數(shù)據(jù),比如鼠標(biāo)坐標(biāo)等回調(diào)函數(shù)是一般高級(jí)編程語言的基本功能,但是,在 LABVIEW8.X 乊前是不支持的,這極大限制了 LABVIEW功能的擴(kuò)展,因?yàn)?ACTIVEX,.NET 都需要回調(diào)函數(shù).8.X 中,增加了回調(diào)函數(shù)的功能,主要用于 ACTIVE,.NET 和 LABVIEW 自身控件,LABVIEW 例子程序中提供了幾個(gè)例子,是有關(guān) ACTIVEX 和.NET 調(diào)用的,下面,法.通過 LABVIEW 自身控件說明一下回調(diào)函數(shù)的使用
40、方在.NET 摸板中也提供了這個(gè)節(jié)點(diǎn),仍分類上就可以看出,回調(diào)函數(shù)主要是用于 ACTIVEX 和.NET 的.下面做一個(gè)簡單的回調(diào)函數(shù)的程序,有兩個(gè)功能,返回當(dāng)前值的變化和記彔控件被點(diǎn)擊的次數(shù)35回調(diào)函數(shù)需要三個(gè)參數(shù):控件參考,用戶參數(shù)和自動(dòng)生成的回調(diào)函數(shù),有了控件參考,就可以選擇事件的類型,用戶參數(shù)主要是用于返回結(jié)果,因?yàn)榛卣{(diào)函數(shù)是由操作系統(tǒng)調(diào)用的,沒有辦法通過數(shù)據(jù)流返回處理結(jié)果.添加了這兩個(gè)參數(shù)后,就可以自動(dòng)生成回調(diào)函數(shù)了回調(diào)函數(shù)如下圖所示36簡單編程,CONTROL 的值傳遞給 INDICATOR這樣值變化的回調(diào)函數(shù)完成了,下面通過鼠標(biāo) UP 事件來記彔被點(diǎn)擊的次數(shù)37可以看出,這次,的
41、是鼠標(biāo)抬起事件,因此,系統(tǒng)傳遞了鼠標(biāo)的坐標(biāo)等信息最后看一下主程序框圖38在主程序循環(huán)中,沒有對(duì)控件和指示器做任何操作,所有操作響應(yīng)都是通過回調(diào)函數(shù)完成的39數(shù)據(jù)庫連接的幾個(gè)基本概念NI 公司對(duì)通用數(shù)據(jù)庫提供了 LABVIEW 的組件,通過 ADO 提供了對(duì)數(shù)據(jù)庫的完全支持.ADO 是通過連接字符串打開數(shù)據(jù)庫的,因此有必要了解一下數(shù)據(jù)庫連接的幾個(gè)基本概念.1.odbc,oledb,ado,adox 的關(guān)系:odbc: 曾經(jīng)的數(shù)據(jù)庫通信標(biāo)準(zhǔn)oledb: 在一切對(duì)象化的趨勢下,ms 打算用它取代 odbc.oledb 分兩種:直接的 oledb 和面向 odbc 的 oledb,后者架構(gòu)在 odbc
42、 上,這樣沒有自己的 oledb 提供者的數(shù)據(jù)庫也可以使用 oledb 的特點(diǎn)了。ado: 其實(shí)只是一個(gè)應(yīng)用程序?qū)哟蔚慕缑妫?oledb 來與數(shù)據(jù)庫通信。adox: 對(duì) ado 的安全性,性(如:創(chuàng)建一個(gè)數(shù)據(jù)庫)迚行了擴(kuò)展。2.用 odbc 連接數(shù)據(jù)庫:odbc 中提供三種 dsn,它們的區(qū)別很簡單:用戶 dsn 只能用于本用戶。系統(tǒng) dsn 和文件 dsn 的區(qū)別只在于連接信息的存放位置不同:系統(tǒng) dsn 存放在 odbc 儲(chǔ)存區(qū)里,而文件 dsn 則放在一個(gè)文本文件中。它們的創(chuàng)建方法就不說了。在 asp 中使用它們時(shí),寫法如下:A.sql server:用系統(tǒng) dsn: connstr
43、= DSN=dsnname; UID=xx; PWD=;DATABASE=dbname用文件 dsn: connstr= FILEDSN=xx; UID=xx; PWD=還可以用連接字符串(仍而不用再建立 dsn):;DATABASE=dbnameconnstr= DRIVER=SQL SERVER;SERVER=servername;UID=xx;PWD=B.acs:用系統(tǒng) dsn: connstr= DSN=dsnname(或者為:connstr= DSN=dsnname;UID=xx;PWD=用文件 dsn: connstr= FILEDSN=xx還可以用連接字符串(仍而不用再建立 ds
44、n):)connstr= DRIVER=Acs Driver;DBQ=d:abcabc.mdb3.用 oledb 連接數(shù)據(jù)庫:A.sql server:connstr= PROVIDER=SQLOLEDB;DATA SOURervername;UID=xx;PWD=;DATABASE=dbnameB.acs:connstr= PROVICER=.JET.OLEDB.4.0;DATA SOURCE=c:abcabc.mdb4.使用 UDL 文件:UDL 文件是用來存放數(shù)據(jù)庫連接信息的一個(gè)文本文件,有點(diǎn)象文件 DSN,不過 UDL 是針對(duì) OLEDB(直接的和面向 ODBC 的)的。UDL 的創(chuàng)建
45、方法:右擊桌面或資源管理器-新建-數(shù)據(jù)連接40其中的設(shè)置工作應(yīng)該比較清楚了。UDL 的用法:connstr= file name=e:abcabc.udl通過上面的介紹可以看出 ADO 操作數(shù)據(jù)庫的層次結(jié)構(gòu)ADO-OLEDB數(shù)據(jù)庫ADO-OLEDB-ODBC數(shù)據(jù)庫對(duì)于系統(tǒng) DSN,可以直接給出 ODBC 名稱,ADO COM 自動(dòng)到 ODBC 系統(tǒng)區(qū)查找,看 LV 本身的連接例子41文件系列乊寫電子表栺文件LabVIEW 文件操作種類非常豐富,最簡單易用的是 WRITE TO SPREAD SHEET FILE(通常翻譯成寫電子表栺文件),這種所謂的電子表栺文件其實(shí)是文本文件,幵非真正的電子表
46、栺文件,真正的電子表栺文件是有栺 式的,一般文本編輯 器,比如NOTEPAD 是打不開的(顯示亂碼),只能用EXCEL 打開,LABVIEW 操作這種有栺式的電子表栺文件只能通過 AUTOMATION,自動(dòng) 化服務(wù)器實(shí)現(xiàn),或者利用 NI 公司的 OFFICE TOOLKIT(實(shí)際也是利用 AUTOMATION,不過是重新封裝了一下,功能非常強(qiáng)大).WRITE TO SPREAD SHEET FILE 是以 TAB 為分隔符號(hào)(默認(rèn))的純文本文件,通過一個(gè)簡單的例子來看一下它個(gè)栺式.WRITE TO SPREAD SHEET FILE VI 是個(gè)多態(tài) VI,輸入可以是一維或者二維,類型可以是EG
47、ER 、DOUBLE 數(shù)組或者字符串?dāng)?shù)組,仍實(shí)質(zhì)來說,它的輸入是字符串?dāng)?shù)組,DOUBLE 或者它自動(dòng)轉(zhuǎn)換成字符串?dāng)?shù)組然后寫入文本文件的.EGER 數(shù)組不過是有不少初學(xué)者喜歡用這個(gè) VI,不過它不是基于磁盤流的,每次寫入都包括了打開,寫入,關(guān)閉三個(gè)過程,因此速度很慢,不適合于連續(xù)寫入,這個(gè) VI 源代碼是公開的,一下就清楚了.可以看出,無論那種數(shù)據(jù)類型,其實(shí)都是通過 ARRAY TO SPREAD SHEET 寫入一個(gè)字符串,然后寫入文本文件,繼續(xù)一下寫入文件的過程.42這里就非常清楚了,每次寫入都包括打開,寫入和關(guān)閉的過程,因此它非常適合于寫入的操作.寫入,而不適合于連續(xù)通過上面的分析,實(shí)際上
48、也間接地說明了如何連續(xù)寫入文本文件的問題,只要把文件打開和關(guān)閉的過程放在循環(huán)外面就可以實(shí)現(xiàn)連續(xù)寫入.打開文件-循環(huán)(文件指針指向末尾-寫入數(shù)據(jù))關(guān)閉文件.值得說明的是WRITE TO SPREAD SHEET FILE VI,分割符號(hào)是可以定義的,因此可以選擇自己的分隔符號(hào),比如逗號(hào)等,這個(gè)非常實(shí)用,尤其是號(hào).其它編程語言寫的文本文件,它們往往有自己特定的文件分割符43正確理解 Express XY GraphXY 圖可以說 LABVIEW 數(shù)據(jù)圖形顯示控件最為靈活的控件,可以替代波形圖和波形圖表的絕大部分功能,其輸入?yún)?shù)形式有許多變化,在下面的兩篇文章中, 具體了 XY GRAPH 的多種用
49、法。其中一篇的是利用數(shù)據(jù)緩沖區(qū)技術(shù),如何連續(xù)顯示數(shù)據(jù)的問題??焖?VI(EXPRESS VI)是 LABVIEW提供的一套可以采用框快速配置的 VI,非常有利于初學(xué)者使用。在快速 VI 中,提供了快速 XY GRAPH,該 VI 可以實(shí)現(xiàn)連續(xù)的數(shù)據(jù)顯示,但是與我提及的數(shù)據(jù)緩沖區(qū)有很大區(qū)別。我提及的數(shù)據(jù)緩沖區(qū)連續(xù)顯示數(shù)據(jù)類似于 LV 的波形圖表,本身保持一個(gè)設(shè)置為固定長度的數(shù)據(jù)緩沖區(qū),當(dāng)超過所設(shè)長度時(shí),新的數(shù)據(jù)迚入緩沖區(qū)時(shí),原有的數(shù)據(jù)被 丟棄。這樣 XY 圖始終顯示的最新數(shù)據(jù),而且長度不變,控件顯示的是示波器的效果??焖?XY 圖則不同,它有兩種不同的運(yùn)行方式。每次調(diào)用時(shí)是否清除數(shù)據(jù)決定了 EXPRESS XY GRAPH 的工作方式。1、每次調(diào)用時(shí)清除數(shù)
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 《2025年北京市物業(yè)服務(wù)合同示范文本填寫指南》
- 注冊會(huì)計(jì)師《第八章 企業(yè)破產(chǎn)法律制度》備考題庫
- 2025年華碩電腦與YY微軟公司軟件采購合同簽字儀式上的書面致辭
- 2025美好家園鏈家房屋租賃合同
- 寵物營養(yǎng)護(hù)理秘籍分享試題及答案
- 政府采購法實(shí)施條例考試題庫參考題庫(含答案)
- 滁州學(xué)院《跨境電商》2023-2024學(xué)年第二學(xué)期期末試卷
- 2025代理買賣合同
- 浙江省四校聯(lián)盟2024-2025學(xué)年高二下學(xué)期3月聯(lián)考政治試卷(PDF版含答案)
- 鄭州商學(xué)院《現(xiàn)當(dāng)代西方哲學(xué)》2023-2024學(xué)年第一學(xué)期期末試卷
- GA/T 145-2019手印鑒定文書規(guī)范
- 2023年廣東省中學(xué)生生物學(xué)聯(lián)賽試題解析(word)及答案(掃描版)
- 基于STM32的自動(dòng)灌溉系統(tǒng)
- 質(zhì)量管理體系電子線路板PCBA生產(chǎn)質(zhì)量控制計(jì)劃表
- 2002版《測繪工程產(chǎn)品價(jià)格》和《測繪工程產(chǎn)品困難類別細(xì)則全》
- 110kV盤古變電站土建的施工方案設(shè)計(jì)
- 高中信息技術(shù) 粵教版 必修1《運(yùn)用選擇結(jié)構(gòu)描述問題求解過程》教學(xué)設(shè)計(jì)
- 每周安全安全檢查記錄表
- 《這是我的家》-完整版PPT
- 浙美版六年級(jí)下冊美術(shù)全冊教案
- 《云南省食品安全地方標(biāo)準(zhǔn) 天麻》編制說明
評(píng)論
0/150
提交評(píng)論