版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
1、LabVIEW8.20程序設(shè)計(jì)從入門到精通樣章試讀: 順序結(jié)構(gòu)、多面板程序設(shè)計(jì)、TCP編程 入門篇中 程序結(jié)構(gòu)一章中的內(nèi)容節(jié)選:5.1 順序結(jié)構(gòu)(Sequence Structure)5.1.1 LabVIEW程序的執(zhí)行順序 如果你用傳統(tǒng)的文本程序語言寫過程序,你一定相當(dāng)然的認(rèn)為程序是按照語句的順序從上到下一條條執(zhí)行的,除非遇到goto語句或是函數(shù)才會跳到另外一段代碼去執(zhí)行。但是作為一種圖形化開發(fā)語言,LabVIEW有它獨(dú)特的方法來確定它的執(zhí)行順序。首先是根據(jù)數(shù)據(jù)流執(zhí)行,只有當(dāng)節(jié)點(diǎn)的所有輸入點(diǎn)的數(shù)據(jù)都“流到”時,
2、才會執(zhí)行該節(jié)點(diǎn)。一般來說荻際前湊沾幼蟮接業(yè)姆較頡傲鞫鋇摹繽?/SPAN>5.1所示,這段代碼就代表了Result=(5+Rand)×2這個表達(dá)式。 圖5.1 數(shù)據(jù)流式的編程方法 如果你再放一段類似代碼在同一個Block Diagram里的話,它又是如何執(zhí)行的呢?如圖5.2所示,這兩段代碼并不是按照從左到右或從上到下地順序執(zhí)行的,而是并行獨(dú)立地執(zhí)行的。這是因?yàn)長abVIEW實(shí)現(xiàn)了自動多線程。它使代碼的執(zhí)行效率大大提高了。如果用文本程序語言,實(shí)現(xiàn)多線程編程是非常費(fèi)力的。 圖5.2 多段代碼同時執(zhí)行 5.1.2 F
3、lat Sequence Structure和Stacked Sequence Structure 按照上述辦法雖然能提高代碼執(zhí)行效率,但你不知道哪一段代碼是先執(zhí)行的。在很多情況下,程序員也會需要多段代碼能按照設(shè)定的順序執(zhí)行。這時候,我們就需要順序結(jié)構(gòu)(Sequence Structure)來幫忙了。有兩種順序結(jié)構(gòu),一種是Flat Sequence Structure, 它是按照從左到右的順序執(zhí)行的。這樣的好處是你能看到所有的代碼,但是當(dāng)代碼段數(shù)太多時就會很難看了。另一種是Stacked Sequence Structu
4、re,它按照標(biāo)定的順序執(zhí)行代碼。與Flat Sequence Structure不同的是,它將每段代碼都“疊放”在了一起,因此你同時只能看一段代碼。它們在Functions Palette中的位置如圖5.3所示。1 / 33 圖5.3 順序結(jié)構(gòu)在Functions Palette中的位置 當(dāng)鼠標(biāo)單擊Functions Palette中對應(yīng)的圖標(biāo)后,再在Block Diagram中按住鼠標(biāo)左鍵向右下方拉動,估計(jì)大小合適的時候放開鼠標(biāo)左鍵即可??梢钥闯鏊芟耠娪澳z片,意思就是一幀一幀的按順序執(zhí)行。通過右擊其邊框選擇Add Frame Before或Add Fram
5、e After來增加Frame。同理,可以選擇Delete This Frame來刪除Frame。下面我們將圖5.2中的兩段代碼重新改寫為按照順序結(jié)構(gòu)執(zhí)行的兩段代碼。分別如圖5.4和圖5.5所示。 圖5.4 Flat Sequence Structure 圖5.5 Stacked Sequence Structure 5.1.3 在Frame間傳遞數(shù)據(jù) 對于Flat Sequence Structure,只需要將Frame間的數(shù)據(jù)流用線連起來就能實(shí)現(xiàn)將前一個Fram
6、e的數(shù)據(jù)傳遞到后一個Frame中去。如圖5.5所示。其中Frame之間的數(shù)據(jù)連接點(diǎn)是可以用鼠標(biāo)拖動的,你可以通過拖動來合理布線。下面介紹到各種程序結(jié)構(gòu)的數(shù)據(jù)連接端子都是一樣可以拖動的。 圖5.6 在Flat Sequence Structure的Frame間傳遞數(shù)據(jù) 而對于Stacked Sequence Structure則要復(fù)雜些。首先右擊前一個Frame的下邊框,選擇Add Sequence Local,于是右擊之處就出現(xiàn)了一個小黃色端子,可以將其拖拽到邊框的任何位置。然后將需要傳遞的數(shù)據(jù)與該端子連接。接著進(jìn)入后一個Frame,這時你仍然能看到這個端子,將其與你需
7、要連接的點(diǎn)連接即可。如圖5.7所示。 圖5.7 在Stacked Sequence Structure的Frame間傳遞數(shù)據(jù) 高級篇中 動態(tài)程序控制技術(shù)一章中的內(nèi)容節(jié)選: 17.3.3 多面板程序設(shè)計(jì)在設(shè)計(jì)稍具規(guī)模的系統(tǒng)時,往往一個前面板很難顯示下所有的內(nèi)容,就算勉強(qiáng)顯示得下,也會使界面臃腫難看。有些情況下,我們可以通過Tab Control控件進(jìn)行分頁顯示,但是如果前面板控件過多,程序框圖必然會更加繁亂。其實(shí),類似于常見的Windows程序,我們可以通過按鈕或菜單彈出更多的界面。這樣,無論多么復(fù)雜的系統(tǒng)都可以用很簡潔的多面板人機(jī)界面實(shí)現(xiàn)。下面我們
8、來看如何在LabVIEW中實(shí)現(xiàn)多面板的程序設(shè)計(jì)。這里,我們將多面板程序分為兩種情況:一種是在彈出子面板時,主程序處于等待狀態(tài),直到子面板運(yùn)行完成。另一種是彈出子面板后,子面板與主程序相互獨(dú)立運(yùn)行。對于第一種情況,我們可以簡單的通過子VI實(shí)現(xiàn)。在子VI的File->VI Properties.->Window Appearance->Customize.對話框中使能“Show front panel when called”選項(xiàng),當(dāng)主VI調(diào)用到該子VI時,該子VI的前面板便會自動彈出。子VI可以是靜態(tài)調(diào)用也可以是動態(tài)調(diào)用。對于第二種情況,則需要通過VI Reference的方法
9、節(jié)點(diǎn)來實(shí)現(xiàn)。下面我們通過一個實(shí)例來說明,其前面板和程序框圖如圖17.11所示。前面板的Panel1、Panel2和Panel3三個按鈕分別對應(yīng)三個VI面板。每當(dāng)用戶點(diǎn)擊其中一個按鈕就會彈出相應(yīng)的程序面板。運(yùn)行過程中,我們可以看到各個面板之間是互不相關(guān)的,即其中一個面板的運(yùn)行不影響另一個面板的操作。下面來看程序框圖是如何實(shí)現(xiàn)的。程序框圖中最主要的是一個事件結(jié)構(gòu),該事件結(jié)構(gòu)的觸發(fā)條件來源于用戶點(diǎn)擊界面上四個按鈕中的任何一個按鈕。譬如當(dāng)用戶點(diǎn)擊Panel1按鈕時,我們通過CtlRef的Label.Text屬性獲得按鈕的Label,由此得到該按鈕對應(yīng)VI的絕對路徑。通過Open VI Referenc
10、e函數(shù)獲得VI Reference后,由VI的Execution.State屬性獲得VI的運(yùn)行狀態(tài),如果VI處于Idle狀態(tài)(即不運(yùn)行狀態(tài)),則通過Run VI方法運(yùn)行該VI,設(shè)置Wait Until Done參數(shù)為False表明該動態(tài)加載的VI與主VI相互獨(dú)立運(yùn)行。最后通過設(shè)置Front Panel Window.Open屬性為True來打開動態(tài)加載VI的前面板。 圖17.11 多面板程序示例 下面我們來看子面板的寫法,如圖17.12所示。為了使用戶點(diǎn)擊按鈕Quit實(shí)現(xiàn)面板的關(guān)閉,我們用到了VI的Front Panel.Close方法。 圖17.
11、12 子面板程序示例 子面板可以有不同的行為模式,譬如子面板始終在界面最前面,或者是對話框方式,即子面板打開時用戶不能操作其它面板。這可以在子面板程序的File->VI Properties.->Window Appearance->Customize.對話框中設(shè)置,對應(yīng)與Window Behavior欄。它有三種模式:Default:普通模式,即如同普通面板一樣沒有特殊行為。Floating:面板總是浮在窗口最前面,用戶此時仍然可以操作其它面板。Modal:對話框模式,即如圖對話框一樣,當(dāng)該面板運(yùn)行時,用戶不可以操作其它面板。 除了通過按鈕實(shí)現(xiàn)多面板的
12、調(diào)用,我們也可以通過菜單實(shí)現(xiàn),如圖17.13所示。這里我們是通過選中菜單項(xiàng)的ItemTag來實(shí)現(xiàn)菜單項(xiàng)與相應(yīng)面板VI的對應(yīng)。 圖17.13 通過菜單實(shí)現(xiàn)多面板程序 以上的例子中,子面板與主面板之間不存在數(shù)據(jù)流,因此可以用同一段代碼實(shí)現(xiàn)打開多個面板。若主面板VI與子面板VI存在數(shù)據(jù)流則會稍微復(fù)雜一些,請參考圖17.10所示的例子。如果對數(shù)據(jù)的流向沒有要求,我們則可以通過全局變量來實(shí)現(xiàn)數(shù)據(jù)的交換,從而簡化編程。 高級篇中 LabVIEW網(wǎng)絡(luò)編程一章中的內(nèi)容節(jié)選: 20.4.2 TCP通信LabVIEW中用于TCP編程的VI函數(shù)位于Funct
13、ions Palette的Data Communication->Protocols->TCP面板下,如圖20.22所示。 圖20.22 TCP 編程VI函數(shù)面板 通過這些函數(shù),原本復(fù)雜的TCP編程在LabVIEW中也變得簡單起來。具體函數(shù)的含義如表20-4所示。 表20-4 TCP 編程VI函數(shù)列表VI函數(shù)名稱功能TCP Listen在指定端口創(chuàng)建一個監(jiān)聽端(Listener),并等待客戶端的連接。TCP Create Listener在指定端口創(chuàng)建一個監(jiān)聽端(Listener)。TCP Wait On Li
14、stener在指定端口等待客戶端的連接。TCP Open Connection打開與遠(yuǎn)程Server端的連接。TCP Read從指定的TCP連接讀取數(shù)據(jù)。TCP Write向指定的TCP連接寫入數(shù)據(jù)。TCP Close Connection關(guān)閉指定的TCP連接。IP To String將IP地址轉(zhuǎn)換為計(jì)算機(jī)名稱。String To IP將計(jì)算機(jī)名轉(zhuǎn)換為IP地址。Resolve Machine Alias通過VI Server或計(jì)算機(jī)別名返回計(jì)算機(jī)的IP地址。 TCP通信的兩端分別為服務(wù)器端(Server)和客戶端(Client)。服務(wù)器端先對指定的端口(Port)監(jiān)聽,客戶端向服務(wù)
15、器端被監(jiān)聽的端口發(fā)出請求,服務(wù)器端接收到請求后便建立客戶端與服務(wù)器端的連接,然后就可以利用該連接進(jìn)行通信了。通信完畢后,兩端通過關(guān)閉連接函數(shù)斷開連接。其過程如圖20.23所示。注意:由于有些端口已經(jīng)被分配給指定的用途,例如80被分配給HTTP服務(wù),20通常被分配給FTP服務(wù),因此在選擇端口時,最好不要選擇小于1024的端口號,1024以下的端口號是保留給特定用途的,例如FTP,HTTP和Telnet等。 圖20.23 雙機(jī)TCP通訊流程圖 下面通過幾個代表性的實(shí)例來介紹具體如何在LabVIEW中進(jìn)行TCP編程。 例20.1 利用TCP協(xié)議進(jìn)行簡單
16、點(diǎn)對點(diǎn)通信本例中,Server端不斷的向客戶端發(fā)送數(shù)組數(shù)據(jù),Client不斷接收數(shù)據(jù)。Server端程序如圖20.24所示。首先通過TCP Listen函數(shù)在指定端口2052監(jiān)聽是否有Client端請求連接,當(dāng)Client端發(fā)出連接請求后,進(jìn)入主循環(huán)發(fā)送數(shù)據(jù)。最后關(guān)閉連接,并過濾掉因?yàn)檎jP(guān)閉導(dǎo)致的錯誤信息。Client程序如圖20.25所示。首先通過TCP Open Connection函數(shù)向Server端請求連接并建立連接,建立連接后,進(jìn)入主循環(huán)接收數(shù)據(jù)。最后關(guān)閉連接,并過濾掉因?yàn)檎jP(guān)閉導(dǎo)致的錯誤信息。運(yùn)行程序時,必須先運(yùn)行Server端再運(yùn)行Client端。注意: 1.
17、160; 由于TCP Write函數(shù)的數(shù)據(jù)輸入只能是字符串,因此你需要通過Type Cast或Flatten To String函數(shù)將數(shù)據(jù)類型轉(zhuǎn)換為字符串。同樣,在接受端需要再通過Type Cast或Unflatten From String函數(shù)將字符串重新轉(zhuǎn)換為原始數(shù)據(jù)。2.
18、; 由于TCP傳遞的數(shù)據(jù)沒有結(jié)束符,因此你最好在數(shù)據(jù)發(fā)送前先發(fā)送該數(shù)據(jù)包的長度給接收端,接收端獲知數(shù)據(jù)包的長度后才能知道應(yīng)該從發(fā)送端讀出多少數(shù)據(jù)。 圖20.24 利用TCP協(xié)議進(jìn)行點(diǎn)對點(diǎn)通信Server端程序 圖20.25 利用TCP協(xié)議進(jìn)行點(diǎn)對點(diǎn)通信Client端程序 例20.2 利用TCP協(xié)議進(jìn)行交互式點(diǎn)對點(diǎn)通信在上例中只是進(jìn)行了簡單的服務(wù)器端發(fā)送數(shù)據(jù),客戶端接收數(shù)據(jù)。實(shí)際上,服務(wù)器端與客戶端可以同時進(jìn)行交互式通信,即服務(wù)器端可以同時向客戶端發(fā)送數(shù)據(jù)并從客戶端接收數(shù)據(jù),客戶端也一樣。由于TCP協(xié)議自動管理數(shù)據(jù)分組、排隊(duì)等
19、,因此不會照成沖突。用戶可以打開本書自帶實(shí)例:交互式點(diǎn)對點(diǎn)通訊舉例_TCP Server.vi和交互式點(diǎn)對點(diǎn)通訊舉例_TCP Client.vi學(xué)習(xí)。運(yùn)行程序時,必須先運(yùn)行Server端再運(yùn)行Client端。 例20.3 利用TCP協(xié)議進(jìn)行一點(diǎn)對多點(diǎn)通信上面兩個例子都是點(diǎn)對點(diǎn)通信,實(shí)際上對于TCP編程也可以進(jìn)行一點(diǎn)對多點(diǎn)進(jìn)行通信。Server端只需要添加一個循環(huán)不斷的監(jiān)聽連接,一旦有Client端請求連接,則與該Client建立連接,并將連接放入隊(duì)列。主循環(huán)對隊(duì)列中的每一個元素逐個進(jìn)行讀寫。當(dāng)然,這實(shí)際上仍然利用的是點(diǎn)對點(diǎn)的通信,即客戶端與服務(wù)器必須建立點(diǎn)對點(diǎn)的連接。只不過這里是通
20、過連接隊(duì)列來逐個處理每一個連接。因此,這里并不是“廣播”通訊,真正的“廣播”需要通過UDP協(xié)議才能實(shí)現(xiàn)。該例Server端程序框圖和Client端程序框圖分別如圖20.26與圖20.27所示。Server端程序利用到了隊(duì)列,關(guān)于隊(duì)列的知識將在下一章介紹。運(yùn)行程序時,必須先運(yùn)行Server端再運(yùn)行Client端,Client端可以有多個。 圖20.26 利用TCP協(xié)議進(jìn)行一點(diǎn)對多點(diǎn)通信Server端程序框圖 圖20.27 利用TCP協(xié)議進(jìn)行一點(diǎn)對多點(diǎn)通信Client端程序框圖LabVIEW8.20程序設(shè)計(jì)從入門到精通樣章試讀: 順序結(jié)構(gòu)、多面板程序
21、設(shè)計(jì)、TCP編程 入門篇中 程序結(jié)構(gòu)一章中的內(nèi)容節(jié)選:5.1 順序結(jié)構(gòu)(Sequence Structure)5.1.1 LabVIEW程序的執(zhí)行順序 如果你用傳統(tǒng)的文本程序語言寫過程序,你一定相當(dāng)然的認(rèn)為程序是按照語句的順序從上到下一條條執(zhí)行的,除非遇到goto語句或是函數(shù)才會跳到另外一段代碼去執(zhí)行。但是作為一種圖形化開發(fā)語言,LabVIEW有它獨(dú)特的方法來確定它的執(zhí)行順序。首先是根據(jù)數(shù)據(jù)流執(zhí)行,只有當(dāng)節(jié)點(diǎn)的所有輸入點(diǎn)的數(shù)據(jù)都“流到”時,才會執(zhí)行該節(jié)點(diǎn)。一般來說荻際前湊沾幼蟮接業(yè)姆較頡傲鞫鋇摹繽?/SPAN&g
22、t;5.1所示,這段代碼就代表了Result=(5+Rand)×2這個表達(dá)式。 圖5.1 數(shù)據(jù)流式的編程方法 如果你再放一段類似代碼在同一個Block Diagram里的話,它又是如何執(zhí)行的呢?如圖5.2所示,這兩段代碼并不是按照從左到右或從上到下地順序執(zhí)行的,而是并行獨(dú)立地執(zhí)行的。這是因?yàn)長abVIEW實(shí)現(xiàn)了自動多線程。它使代碼的執(zhí)行效率大大提高了。如果用文本程序語言,實(shí)現(xiàn)多線程編程是非常費(fèi)力的。 圖5.2 多段代碼同時執(zhí)行 5.1.2 Flat Sequence Structure和Stacked Sequen
23、ce Structure 按照上述辦法雖然能提高代碼執(zhí)行效率,但你不知道哪一段代碼是先執(zhí)行的。在很多情況下,程序員也會需要多段代碼能按照設(shè)定的順序執(zhí)行。這時候,我們就需要順序結(jié)構(gòu)(Sequence Structure)來幫忙了。有兩種順序結(jié)構(gòu),一種是Flat Sequence Structure, 它是按照從左到右的順序執(zhí)行的。這樣的好處是你能看到所有的代碼,但是當(dāng)代碼段數(shù)太多時就會很難看了。另一種是Stacked Sequence Structure,它按照標(biāo)定的順序執(zhí)行代碼。與Flat Sequence Struct
24、ure不同的是,它將每段代碼都“疊放”在了一起,因此你同時只能看一段代碼。它們在Functions Palette中的位置如圖5.3所示。 圖5.3 順序結(jié)構(gòu)在Functions Palette中的位置 當(dāng)鼠標(biāo)單擊Functions Palette中對應(yīng)的圖標(biāo)后,再在Block Diagram中按住鼠標(biāo)左鍵向右下方拉動,估計(jì)大小合適的時候放開鼠標(biāo)左鍵即可。可以看出它很像電影膠片,意思就是一幀一幀的按順序執(zhí)行。通過右擊其邊框選擇Add Frame Before或Add Frame After來增加Frame。同理,可以選擇Delete This Frame來刪除
25、Frame。下面我們將圖5.2中的兩段代碼重新改寫為按照順序結(jié)構(gòu)執(zhí)行的兩段代碼。分別如圖5.4和圖5.5所示。 圖5.4 Flat Sequence Structure 圖5.5 Stacked Sequence Structure 5.1.3 在Frame間傳遞數(shù)據(jù) 對于Flat Sequence Structure,只需要將Frame間的數(shù)據(jù)流用線連起來就能實(shí)現(xiàn)將前一個Frame的數(shù)據(jù)傳遞到后一個Frame中去。如圖5.5所示。其中Frame之間的數(shù)據(jù)連接點(diǎn)是可
26、以用鼠標(biāo)拖動的,你可以通過拖動來合理布線。下面介紹到各種程序結(jié)構(gòu)的數(shù)據(jù)連接端子都是一樣可以拖動的。 圖5.6 在Flat Sequence Structure的Frame間傳遞數(shù)據(jù) 而對于Stacked Sequence Structure則要復(fù)雜些。首先右擊前一個Frame的下邊框,選擇Add Sequence Local,于是右擊之處就出現(xiàn)了一個小黃色端子,可以將其拖拽到邊框的任何位置。然后將需要傳遞的數(shù)據(jù)與該端子連接。接著進(jìn)入后一個Frame,這時你仍然能看到這個端子,將其與你需要連接的點(diǎn)連接即可。如圖5.7所示。 圖5.7 在Stacke
27、d Sequence Structure的Frame間傳遞數(shù)據(jù) 高級篇中 動態(tài)程序控制技術(shù)一章中的內(nèi)容節(jié)選: 17.3.3 多面板程序設(shè)計(jì)在設(shè)計(jì)稍具規(guī)模的系統(tǒng)時,往往一個前面板很難顯示下所有的內(nèi)容,就算勉強(qiáng)顯示得下,也會使界面臃腫難看。有些情況下,我們可以通過Tab Control控件進(jìn)行分頁顯示,但是如果前面板控件過多,程序框圖必然會更加繁亂。其實(shí),類似于常見的Windows程序,我們可以通過按鈕或菜單彈出更多的界面。這樣,無論多么復(fù)雜的系統(tǒng)都可以用很簡潔的多面板人機(jī)界面實(shí)現(xiàn)。下面我們來看如何在LabVIEW中實(shí)現(xiàn)多面板的程序設(shè)計(jì)。這里,我們將多面板程序分為兩種情況:一
28、種是在彈出子面板時,主程序處于等待狀態(tài),直到子面板運(yùn)行完成。另一種是彈出子面板后,子面板與主程序相互獨(dú)立運(yùn)行。對于第一種情況,我們可以簡單的通過子VI實(shí)現(xiàn)。在子VI的File->VI Properties.->Window Appearance->Customize.對話框中使能“Show front panel when called”選項(xiàng),當(dāng)主VI調(diào)用到該子VI時,該子VI的前面板便會自動彈出。子VI可以是靜態(tài)調(diào)用也可以是動態(tài)調(diào)用。對于第二種情況,則需要通過VI Reference的方法節(jié)點(diǎn)來實(shí)現(xiàn)。下面我們通過一個實(shí)例來說明,其前面板和程序框圖如圖17.11所示。前面板的
29、Panel1、Panel2和Panel3三個按鈕分別對應(yīng)三個VI面板。每當(dāng)用戶點(diǎn)擊其中一個按鈕就會彈出相應(yīng)的程序面板。運(yùn)行過程中,我們可以看到各個面板之間是互不相關(guān)的,即其中一個面板的運(yùn)行不影響另一個面板的操作。下面來看程序框圖是如何實(shí)現(xiàn)的。程序框圖中最主要的是一個事件結(jié)構(gòu),該事件結(jié)構(gòu)的觸發(fā)條件來源于用戶點(diǎn)擊界面上四個按鈕中的任何一個按鈕。譬如當(dāng)用戶點(diǎn)擊Panel1按鈕時,我們通過CtlRef的Label.Text屬性獲得按鈕的Label,由此得到該按鈕對應(yīng)VI的絕對路徑。通過Open VI Reference函數(shù)獲得VI Reference后,由VI的Execution.State屬性獲得V
30、I的運(yùn)行狀態(tài),如果VI處于Idle狀態(tài)(即不運(yùn)行狀態(tài)),則通過Run VI方法運(yùn)行該VI,設(shè)置Wait Until Done參數(shù)為False表明該動態(tài)加載的VI與主VI相互獨(dú)立運(yùn)行。最后通過設(shè)置Front Panel Window.Open屬性為True來打開動態(tài)加載VI的前面板。 圖17.11 多面板程序示例 下面我們來看子面板的寫法,如圖17.12所示。為了使用戶點(diǎn)擊按鈕Quit實(shí)現(xiàn)面板的關(guān)閉,我們用到了VI的Front Panel.Close方法。 圖17.12 子面板程序示例 子面板可以有不同的行為模式,譬如子面板始終
31、在界面最前面,或者是對話框方式,即子面板打開時用戶不能操作其它面板。這可以在子面板程序的File->VI Properties.->Window Appearance->Customize.對話框中設(shè)置,對應(yīng)與Window Behavior欄。它有三種模式:Default:普通模式,即如同普通面板一樣沒有特殊行為。Floating:面板總是浮在窗口最前面,用戶此時仍然可以操作其它面板。Modal:對話框模式,即如圖對話框一樣,當(dāng)該面板運(yùn)行時,用戶不可以操作其它面板。 除了通過按鈕實(shí)現(xiàn)多面板的調(diào)用,我們也可以通過菜單實(shí)現(xiàn),如圖17.13所示。這里我們是通過選中菜單項(xiàng)的ItemT
32、ag來實(shí)現(xiàn)菜單項(xiàng)與相應(yīng)面板VI的對應(yīng)。 圖17.13 通過菜單實(shí)現(xiàn)多面板程序 以上的例子中,子面板與主面板之間不存在數(shù)據(jù)流,因此可以用同一段代碼實(shí)現(xiàn)打開多個面板。若主面板VI與子面板VI存在數(shù)據(jù)流則會稍微復(fù)雜一些,請參考圖17.10所示的例子。如果對數(shù)據(jù)的流向沒有要求,我們則可以通過全局變量來實(shí)現(xiàn)數(shù)據(jù)的交換,從而簡化編程。 高級篇中 LabVIEW網(wǎng)絡(luò)編程一章中的內(nèi)容節(jié)選: 20.4.2 TCP通信LabVIEW中用于TCP編程的VI函數(shù)位于Functions Palette的Data Communication->Protoco
33、ls->TCP面板下,如圖20.22所示。 圖20.22 TCP 編程VI函數(shù)面板 通過這些函數(shù),原本復(fù)雜的TCP編程在LabVIEW中也變得簡單起來。具體函數(shù)的含義如表20-4所示。 表20-4 TCP 編程VI函數(shù)列表VI函數(shù)名稱功能TCP Listen在指定端口創(chuàng)建一個監(jiān)聽端(Listener),并等待客戶端的連接。TCP Create Listener在指定端口創(chuàng)建一個監(jiān)聽端(Listener)。TCP Wait On Listener在指定端口等待客戶端的連接。TCP Open Connection打開與遠(yuǎn)
34、程Server端的連接。TCP Read從指定的TCP連接讀取數(shù)據(jù)。TCP Write向指定的TCP連接寫入數(shù)據(jù)。TCP Close Connection關(guān)閉指定的TCP連接。IP To String將IP地址轉(zhuǎn)換為計(jì)算機(jī)名稱。String To IP將計(jì)算機(jī)名轉(zhuǎn)換為IP地址。Resolve Machine Alias通過VI Server或計(jì)算機(jī)別名返回計(jì)算機(jī)的IP地址。 TCP通信的兩端分別為服務(wù)器端(Server)和客戶端(Client)。服務(wù)器端先對指定的端口(Port)監(jiān)聽,客戶端向服務(wù)器端被監(jiān)聽的端口發(fā)出請求,服務(wù)器端接收到請求后便建立客戶端與服務(wù)器端的連接,然后就可以
35、利用該連接進(jìn)行通信了。通信完畢后,兩端通過關(guān)閉連接函數(shù)斷開連接。其過程如圖20.23所示。注意:由于有些端口已經(jīng)被分配給指定的用途,例如80被分配給HTTP服務(wù),20通常被分配給FTP服務(wù),因此在選擇端口時,最好不要選擇小于1024的端口號,1024以下的端口號是保留給特定用途的,例如FTP,HTTP和Telnet等。 圖20.23 雙機(jī)TCP通訊流程圖 下面通過幾個代表性的實(shí)例來介紹具體如何在LabVIEW中進(jìn)行TCP編程。 例20.1 利用TCP協(xié)議進(jìn)行簡單點(diǎn)對點(diǎn)通信本例中,Server端不斷的向客戶端發(fā)送數(shù)組數(shù)據(jù),Client不斷接收數(shù)據(jù)。
36、Server端程序如圖20.24所示。首先通過TCP Listen函數(shù)在指定端口2052監(jiān)聽是否有Client端請求連接,當(dāng)Client端發(fā)出連接請求后,進(jìn)入主循環(huán)發(fā)送數(shù)據(jù)。最后關(guān)閉連接,并過濾掉因?yàn)檎jP(guān)閉導(dǎo)致的錯誤信息。Client程序如圖20.25所示。首先通過TCP Open Connection函數(shù)向Server端請求連接并建立連接,建立連接后,進(jìn)入主循環(huán)接收數(shù)據(jù)。最后關(guān)閉連接,并過濾掉因?yàn)檎jP(guān)閉導(dǎo)致的錯誤信息。運(yùn)行程序時,必須先運(yùn)行Server端再運(yùn)行Client端。注意: 1.
37、60; 由于TCP Write函數(shù)的數(shù)據(jù)輸入只能是字符串,因此你需要通過Type Cast或Flatten To String函數(shù)將數(shù)據(jù)類型轉(zhuǎn)換為字符串。同樣,在接受端需要再通過Type Cast或Unflatten From String函數(shù)將字符串重新轉(zhuǎn)換為原始數(shù)據(jù)。2. 由于TCP傳遞的數(shù)據(jù)沒有結(jié)束符,因此你最好在數(shù)據(jù)發(fā)送前先發(fā)送該數(shù)據(jù)包的長
38、度給接收端,接收端獲知數(shù)據(jù)包的長度后才能知道應(yīng)該從發(fā)送端讀出多少數(shù)據(jù)。 圖20.24 利用TCP協(xié)議進(jìn)行點(diǎn)對點(diǎn)通信Server端程序 圖20.25 利用TCP協(xié)議進(jìn)行點(diǎn)對點(diǎn)通信Client端程序 例20.2 利用TCP協(xié)議進(jìn)行交互式點(diǎn)對點(diǎn)通信在上例中只是進(jìn)行了簡單的服務(wù)器端發(fā)送數(shù)據(jù),客戶端接收數(shù)據(jù)。實(shí)際上,服務(wù)器端與客戶端可以同時進(jìn)行交互式通信,即服務(wù)器端可以同時向客戶端發(fā)送數(shù)據(jù)并從客戶端接收數(shù)據(jù),客戶端也一樣。由于TCP協(xié)議自動管理數(shù)據(jù)分組、排隊(duì)等,因此不會照成沖突。用戶可以打開本書自帶實(shí)例:交互式點(diǎn)對點(diǎn)通訊舉例_TCP Serve
39、r.vi和交互式點(diǎn)對點(diǎn)通訊舉例_TCP Client.vi學(xué)習(xí)。運(yùn)行程序時,必須先運(yùn)行Server端再運(yùn)行Client端。 例20.3 利用TCP協(xié)議進(jìn)行一點(diǎn)對多點(diǎn)通信上面兩個例子都是點(diǎn)對點(diǎn)通信,實(shí)際上對于TCP編程也可以進(jìn)行一點(diǎn)對多點(diǎn)進(jìn)行通信。Server端只需要添加一個循環(huán)不斷的監(jiān)聽連接,一旦有Client端請求連接,則與該Client建立連接,并將連接放入隊(duì)列。主循環(huán)對隊(duì)列中的每一個元素逐個進(jìn)行讀寫。當(dāng)然,這實(shí)際上仍然利用的是點(diǎn)對點(diǎn)的通信,即客戶端與服務(wù)器必須建立點(diǎn)對點(diǎn)的連接。只不過這里是通過連接隊(duì)列來逐個處理每一個連接。因此,這里并不是“廣播”通訊,真正的“廣播”需要通過U
40、DP協(xié)議才能實(shí)現(xiàn)。該例Server端程序框圖和Client端程序框圖分別如圖20.26與圖20.27所示。Server端程序利用到了隊(duì)列,關(guān)于隊(duì)列的知識將在下一章介紹。運(yùn)行程序時,必須先運(yùn)行Server端再運(yùn)行Client端,Client端可以有多個。 圖20.26 利用TCP協(xié)議進(jìn)行一點(diǎn)對多點(diǎn)通信Server端程序框圖 圖20.27 利用TCP協(xié)議進(jìn)行一點(diǎn)對多點(diǎn)通信Client端程序框圖基于LabVIEW的虛擬示波器的設(shè)計(jì)和實(shí)現(xiàn) 2007-06-01 10:33:08 作者: 來源:中國電子測試網(wǎng)
41、160; 瀏覽次數(shù):623 文字大?。骸敬蟆俊局小俊拘 亢喗椋禾摂M儀器的出現(xiàn)使人類的測試技術(shù)進(jìn)入了新的發(fā)展紀(jì)元。以虛擬雙通道示波器為例,從系統(tǒng)構(gòu)造、軟硬件實(shí)現(xiàn)等方面詳細(xì)介紹了如何應(yīng)用數(shù)據(jù)采集卡和開發(fā)工具LabVIEW構(gòu)造和實(shí)現(xiàn)這一儀器。關(guān)鍵字:虛擬儀器; 示波器; 數(shù)據(jù)采集卡; LabVIEW 1 儀器的工作原理及系統(tǒng)構(gòu)成虛擬示波器是由信號調(diào)理器,PCI總線的數(shù)據(jù)采集卡組成的外部采集系統(tǒng)加上軟件構(gòu)成的分析處理系統(tǒng)組成。被測信號送到信號調(diào)理電路,進(jìn)行隔離、放大、濾波整流后送數(shù)據(jù)采集卡進(jìn)行A/D轉(zhuǎn)換,最后由控制軟件對測試信號進(jìn)行數(shù)據(jù)處理,完成波形顯示,參數(shù)測量、頻譜
42、分析等功能。系統(tǒng)結(jié)構(gòu)如圖1顯示圖1 系統(tǒng)結(jié)構(gòu)圖2 系統(tǒng)的設(shè)計(jì)及功能實(shí)現(xiàn)2.1硬件部分 硬件部分主要包括傳感器、信號調(diào)理電路及數(shù)據(jù)采集卡。而傳感器和信號調(diào)理電路針對不同的測試對象有不同的選擇和設(shè)計(jì)。數(shù)據(jù)采集是硬件部分的核心,它的性能直接影響數(shù)據(jù)采集的速度和精度。另外,LabVIEW可對NI公司的數(shù)據(jù)采集卡進(jìn)行驅(qū)動和配置,可充分利用采集卡的性能?;诖?,我選擇的數(shù)據(jù)采集卡是NI公司生產(chǎn)的。下面主要介紹數(shù)據(jù)采集卡的性能和安裝配置。2.1.1 PCI6010數(shù)據(jù)采集卡的簡介PCI6010采集卡是基于32位PCI總線的多通道的數(shù)據(jù)采集設(shè)備,具有數(shù)字輸入/輸出、模擬輸入/輸出和計(jì)數(shù)器等功能。它通過SH37
43、F37M電纜與CB37FLF 輸入輸出接口面板連接,該接口面板具有37個螺旋狀的接口終端。同時此數(shù)據(jù)采集卡具有3個完全獨(dú)立的DMA控制(模擬輸入、定時/計(jì)數(shù)器0、定時/計(jì)數(shù)器1)。本卡還具有刻度校準(zhǔn)電路系統(tǒng)。由于運(yùn)行時,時間和溫度漂移會引起一定的模擬輸入、輸出誤差,為了使此誤差最小,可以調(diào)整設(shè)備的校準(zhǔn)刻度。而它的出廠校準(zhǔn)信息存儲在EEPROM中,不能修改。而修改此信息必須通過軟件來實(shí)現(xiàn)。 該數(shù)據(jù)采集卡具有8個差動模擬輸入通道(即16個對地單信號模擬輸入通道),電壓范圍為±5V, ±1V,±0.2V;2個模擬輸出通道,電壓范圍為±5
44、V。同時它還具有6個數(shù)字輸入通道,4個數(shù)字輸出通道。數(shù)字輸入的VIH(Input high voltage)的最小值是2.0 V, 最大值是5.25 V,VIL(Input low voltage)的最大值是0.8 V, 最小值是0.3 V;數(shù)字輸出的IOH(Output high current)的最大值是6 mA ,IOL (Output low current) 的最大值是2 mA。信號通道的最大采樣速率是200 kS/s (single channel) ,掃描時最大采樣速率是33.3 kS/s (scanning)。2.1.2 PCI6010數(shù)據(jù)采集卡的安裝
45、將NI PCI6010數(shù)據(jù)采集卡插到計(jì)算機(jī)主板的一個插槽中,接好附件。附件包括一個型號為CB37FLF的轉(zhuǎn)接板,和一條SH37F37M電纜。轉(zhuǎn)接板直接與外部信號連接。在完成了NI PCI6010數(shù)據(jù)采集卡的硬件連接后,就需要安裝該卡的驅(qū)動程序。安裝步驟如下:(1) 運(yùn)行程序àNational Instrument DAQàNI-DAQ Setup。在出現(xiàn)對話框中單擊NEXT按鈕。(2) 在出現(xiàn)的Seletct DAQ Devices對話框中選中NI PCI6010,單擊NEXT按鈕。(3) 在后續(xù)出現(xiàn)的全部對話框中單擊NEXT按鈕,即可完成NI PCI6010數(shù)據(jù)采集卡的安
46、裝。(4) 重新啟動計(jì)算機(jī)。完成數(shù)據(jù)采集卡的安裝。2.1.3 PCI6010數(shù)據(jù)采集卡的配置 在安裝好數(shù)據(jù)采集卡后就要對其進(jìn)行系統(tǒng)配置。點(diǎn)擊圖標(biāo)Measurement & Automation Explorer,在彈出的Devices and Interface 中進(jìn)行I/O配置。(1) 這支采集卡在系統(tǒng)的設(shè)備的編號:將參數(shù)Device值設(shè)為1;(2) 設(shè)置模擬輸入AI的屬性:將Polarity 值設(shè)為-5V+5V,將Mode屬性設(shè)置為Differentioal(差動);(3) 設(shè)置模擬輸出AO的屬性:在AO窗口中,將屬性設(shè)為Bipolar(雙極性)。 在完成上述設(shè)定之后,單擊“確定”
47、按鈕。在Systerm窗口中 有“Test Resources”按鈕,可檢驗(yàn)設(shè)備是否正確配置。通過后再進(jìn)行簡單的通道配置,即可完成數(shù)據(jù)采集卡的全部設(shè)置。 2.2 軟件部分 LabVIEW(laboratory virtual instrument engineering workbench實(shí)驗(yàn)室虛擬儀器工程平臺)是美國國家儀器公司(NI公司)推出的一種基于“圖形”方式的集成化程序開發(fā)環(huán)境,是目前國際上唯一的編譯型圖形化編程語言。它是NI公司開
48、發(fā)的面向儀器與測控過程的圖形化開發(fā)平臺,它的概念,是直觀的前面板與流程圖式的編程方法的結(jié)合。本設(shè)計(jì)中采用LabVIEW7.1。 概括地講,系統(tǒng)軟件總體上包括數(shù)據(jù)采集、波形顯示、參數(shù)測量等三大模塊,其流程如圖2所示:圖2 軟件流程圖2.2.1 數(shù)據(jù)采集模塊的設(shè)計(jì) 數(shù)據(jù)采集模塊式虛擬示波器軟件的核心,主要完成數(shù)據(jù)采集的控制,數(shù)據(jù)的讀取及數(shù)據(jù)的轉(zhuǎn)換。數(shù)據(jù)采集卡通過多路開關(guān)、A/D 轉(zhuǎn)換新片和數(shù)據(jù)緩存的幾個部件將多通道的模擬信號轉(zhuǎn)換成數(shù)字信號并貯存在其緩存中,而計(jì)算機(jī)通過LabVIEW中的數(shù)據(jù)采集VI對數(shù)據(jù)采集卡中的幾個部件的運(yùn)作進(jìn)行控制,數(shù)據(jù)采集卡和計(jì)算機(jī)之間通過計(jì)算機(jī)總線含通信,交換數(shù)據(jù)和控制信息
49、。一個多通道波形數(shù)據(jù)采集的過程一般包括以下幾個步驟:(1) 數(shù)據(jù)采集卡有關(guān)的采樣參數(shù)(采集頻率、采集次數(shù)、采集通道、數(shù)據(jù)緩存的大?。?2) 采樣開始,多路開關(guān)對采樣通道進(jìn)行一次掃描,每個通道采樣一個點(diǎn)。(3)A/D 轉(zhuǎn)換。(4) 數(shù)字信號存到數(shù)據(jù)緩存。(5)重復(fù)(2)(4),直到采集到了所需的采樣次數(shù),全部數(shù)據(jù)順序存儲到緩存中。(6)從數(shù)據(jù)采集卡的緩存中讀取數(shù)據(jù)到計(jì)算機(jī)的內(nèi)存中。 其程序代碼如圖3:圖3 數(shù)據(jù)采集部件2.2.2 波形顯示模塊 波形顯示模塊主要包括幅值調(diào)整、位移調(diào)整和精度調(diào)整。波形顯示主要用Waveform chart 控件。通過幅值、位移及精度的調(diào)整,可方便的放大或延展波形,便
50、于觀察。其代碼如圖4:圖4 參數(shù)控制部件 儀器前面板如圖5所示。 圖5 儀器面板圖總的程序代碼如圖6所示。圖6 總的程序代碼圖 3 結(jié)束語 外接一臺信號發(fā)生器,皆能輕松實(shí)現(xiàn)虛擬儀器的調(diào)試和檢驗(yàn)。經(jīng)過軟件修改,在一臺示波器上還能實(shí)現(xiàn)頻譜分析、頻率電壓轉(zhuǎn)換等普通示波器所根本不具有的功能,充分體現(xiàn)了軟件設(shè)計(jì)的靈活性。另外,將虛擬儀器技術(shù)與網(wǎng)絡(luò)技術(shù)結(jié)合進(jìn)行遠(yuǎn)程數(shù)據(jù)采集,可以充分發(fā)揮虛擬儀器的優(yōu)勢,最大限度地實(shí)現(xiàn)硬件資源共享,隨著計(jì)算機(jī)技術(shù)的迅猛發(fā)展以及各種高性能的數(shù)據(jù)采集卡的大量涌現(xiàn),虛擬儀器的應(yīng)用前景將非常廣闊。LabVIEW是一種通用的編程語言嗎?作者:Jeff Kodosky
51、,LabVIEW之父我經(jīng)常聽到,甚至有時關(guān)注于對LabVIEW的爭論,即LabVIEW是一種通用的語言還是一種用于測量和自動化的特定應(yīng)用程序的開發(fā)環(huán)境。一方面,有經(jīng)驗(yàn)的程序員指出了LabVIEW缺乏的流行編程語言所具有的特性,但是另一方面,一些用戶詳細(xì)闡述了他們使用LabVIEW所建立的通用應(yīng)用程序,而完全沒有使用任何數(shù)據(jù)采集或分析。對LabVIEW用戶的調(diào)查可能與最近一個非正式的對一個團(tuán)隊(duì)中的開發(fā)者的調(diào)查一致,這個團(tuán)隊(duì)中的絕大多數(shù)人都認(rèn)為LabVIEW已具有足夠的功能來被歸為通用語言類,而且事實(shí)上,正是以這種方式在使用它。LabVIEW被提到次數(shù)最多的不足是常用的遞歸和遞歸式數(shù)據(jù)類型,以及面
52、向?qū)ο蟮慕Y(jié)構(gòu),但是這些都不是建立通用應(yīng)用程序的嚴(yán)重障礙。錯誤的問題盡管有了調(diào)查結(jié)果,但是我認(rèn)為這是一個錯誤的問題而且試圖回答它會導(dǎo)致錯誤的方向。對我來說,這有點(diǎn)像在問:汽車是不是用來就座的地方?當(dāng)然你可以在汽車?yán)锞妥侨绻鞘悄憷盟龅娜?,那么你失去了擁有它可以得到的主要用途。一個較好的問題是:LabVIEW可以被用作通用編程語言嗎?或者更好的是:LabVIEW能夠被用來創(chuàng)建通用的應(yīng)用程序嗎?這個問題的新表述在什么被視為通用這個方面仍然是同樣模糊的,但是它沒有強(qiáng)調(diào)有時顯得嚴(yán)謹(jǐn)?shù)臓幷?,即LabVIEW是不是一種編程語言?一些人并不認(rèn)為它是一種語言,因?yàn)樗皇腔谖谋镜亩宜皇琼樞蚧?/p>
53、。更為奇怪的是,關(guān)于什么被看作是一種編程語言的這個問題上,那些具有計(jì)算機(jī)科學(xué)背景的人持有最為狹隘的觀點(diǎn)。但是,經(jīng)過改正后的問題最為重要的一個方面是它將包容性轉(zhuǎn)換到了正確的方向。換一種方式來表達(dá),即最初的問題間接地暗示了通用編程語言在某種程度上是一個更大的問題或者是測量和自動化編程的一個父集,然而,實(shí)際上子集卻在其他的方向。通常,測量和自動化的程序必須處理所有與通用程序一樣的問題,如數(shù)據(jù)結(jié)構(gòu)和算法、文件I/O、網(wǎng)絡(luò)I/O、用戶I/O和數(shù)據(jù)庫存取、打印等等這些常見的問題。但是測量和自動化程序也必須處理比通用程序更多的問題,例如物理I/O、實(shí)時性約束和硬件配置。它們也可以具有一些最為苛刻的用戶界面要
54、求。測量和自動化程序處理了一個通用程序所處理問題的父集。如果工具A和工具B可以被用于一定的任務(wù)集,但是工具B具有更多的功能可使它益于完成額外的任務(wù),哪一種工具是事實(shí)上更為通用的呢?這正是我們關(guān)于LabVIEW問題。LabVIEW適于測量和自動化應(yīng)用程序的能力不是來自于它的基本編程能力被某種方式所限制,而是因?yàn)樗鼈兘?jīng)過了增強(qiáng)和擴(kuò)展。這就是為什么有必要提出“LabVIEW能夠被用來創(chuàng)建通用的應(yīng)用程序嗎?”這個問題而不是“LabVIEW是一種通用編程語言嗎?”。我們不希望通過把LabVIEW僅視為一種編程語言而限制了它的范圍或它將來的發(fā)展。LabVIEW不僅僅是一種編程語言。它是一種高度交互式的開發(fā)
55、環(huán)境用來快速設(shè)計(jì)原型和應(yīng)用程序的漸進(jìn)式開發(fā),從測量和自動化到實(shí)時嵌入式系統(tǒng),再到通用場合。而且現(xiàn)在,LabVIEW具有了對FPGA編程下載的能力,所以LabVIEW也是一個硬件設(shè)計(jì)工具。數(shù)據(jù)流 LabVIEW的核心是結(jié)構(gòu)化的數(shù)據(jù)流圖。數(shù)據(jù)流已存在了很長一段時間而且已被深入地理解。事實(shí)上,它是一個比流行的基于文本語言的控制流更為豐富的計(jì)算模型,因?yàn)樗谋举|(zhì)是并行的,而C/C+和BASIC則不是它們必須依賴于對操作系統(tǒng)的庫函數(shù)調(diào)用來實(shí)現(xiàn)并行機(jī)制。因此,編譯器不能確保代碼的共享部分被適當(dāng)?shù)乇Wo(hù),這使得它難以建立并行程序。這些問題在LabVIEW中則不存在。甚至一個初學(xué)者都可以設(shè)計(jì)一個高度并行的應(yīng)用程序,而且無需額外的努力或知識就可以自動地將它擴(kuò)展至多個緊密連接的處理器。數(shù)據(jù)流一直被倡導(dǎo)為一個用于商業(yè)應(yīng)用程序的設(shè)計(jì)工具。它被改進(jìn)為一種備選的計(jì)算機(jī)體系結(jié)構(gòu)來避免馮·諾依曼(von Neumann)瓶
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 12富起來到強(qiáng)起來 第一課時(說課稿)-2023-2024學(xué)年道德與法治五年級下冊統(tǒng)編版
- 13《貓》說課稿-2023-2024學(xué)年四年級語文下冊統(tǒng)編版
- Unit 4 Customs and Traditions:Review of Passives 語法銜接活動案例說課稿-2024-2025學(xué)年高中英語滬外版必修第一冊
- 8 安全記心上《平安出行》(說課稿)-部編版道德與法治三年級上冊
- 西藏小區(qū)變壓器施工方案
- 27《巨人的花園》(說課稿)-2023-2024學(xué)年統(tǒng)編版語文四年級下冊
- 《3 我的本領(lǐng)大-循環(huán)模塊與執(zhí)行器模塊組合應(yīng)用》說課稿-2023-2024學(xué)年清華版(2012)信息技術(shù)六年級下冊001
- 9元日說課稿-2023-2024學(xué)年三年級下冊語文統(tǒng)編版
- Unit 3 Seasons Lesson 2(說課稿)-2023-2024學(xué)年人教新起點(diǎn)版英語二年級下冊
- 倒賣人口合同范例
- 2023年全國4月高等教育自學(xué)考試管理學(xué)原理00054試題及答案新編
- 邵陽市職工勞動能力鑒定表
- 稀土配合物和量子點(diǎn)共摻雜構(gòu)筑發(fā)光軟材料及其熒光性能研究
- 衛(wèi)生部手術(shù)分級目錄(2023年1月份修訂)
- JJG 921-2021環(huán)境振動分析儀
- 中藥炮制學(xué)-第五、六章
- 中國風(fēng)軍令狀誓師大會PPT模板
- 小兒高熱驚厥精品課件
- 2022年電拖實(shí)驗(yàn)報告伍宏淳
- 豐田汽車戰(zhàn)略規(guī)劃與戰(zhàn)略管理體系研究(2021)
- 即興口語(姜燕)-課件-即興口語第一章PPT-中國傳媒大學(xué)
評論
0/150
提交評論