




版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、 基于RS485和VB的遠(yuǎn)程溫度采集系統(tǒng) 信息工程學(xué)院生醫(yī)0701摘要:本系統(tǒng)以RS485總線和VB上位機(jī)控制臺(tái)為核心,構(gòu)成了一個(gè)可遠(yuǎn)達(dá)1200M范圍內(nèi)的遠(yuǎn)程溫度采集網(wǎng)絡(luò)。系統(tǒng)通過(guò)雙絞線作為信號(hào)傳輸媒介,引入RS485總線信號(hào)傳輸?shù)囊恍┨幚泶胧?,具有良好的信息傳輸?zhǔn)確性和系統(tǒng)抗干擾性。另外,本系統(tǒng)可以在RS485總線上掛接最多由51單片機(jī)和DS18B20構(gòu)成的32個(gè)溫度采集節(jié)點(diǎn),并且系統(tǒng)密切與RS485總線的“輪詢”思想和VB上位機(jī)控制臺(tái)相結(jié)合,因此可以說(shuō)是構(gòu)成了真正意義上的遠(yuǎn)程智能溫度采集網(wǎng)絡(luò)!該系統(tǒng)可以廣泛應(yīng)用在需要對(duì)溫度進(jìn)行實(shí)時(shí)和全天候觀察的各種場(chǎng)合,具有較高的實(shí)際應(yīng)用價(jià)值!關(guān)鍵詞:RS
2、485總線 輪詢 VB上位機(jī) 51單片機(jī) DS18B20 正文 RS485總線接口做為多點(diǎn)、差分?jǐn)?shù)據(jù)傳輸?shù)囊?guī)范,現(xiàn)已成為業(yè)界應(yīng)用較為廣泛的標(biāo)準(zhǔn)通信接口之一。RS485標(biāo)準(zhǔn)只對(duì)接口的電氣特性做出了規(guī)定,而不涉及接插件、電纜或協(xié)議,因此,用戶可在此基礎(chǔ)上建立自己的高層通信協(xié)議。在工業(yè)自動(dòng)控制中,計(jì)算機(jī)通過(guò)串口與單片機(jī)系統(tǒng)之間進(jìn)行通信的應(yīng)用越來(lái)越廣泛。一般情況下,控制系統(tǒng)需要一個(gè)高級(jí)語(yǔ)言開(kāi)發(fā)的相當(dāng)于控制臺(tái)的用戶界面,用來(lái)進(jìn)行參數(shù)設(shè)置,發(fā)送指令和系統(tǒng)檢測(cè),VB在這一領(lǐng)域用著很強(qiáng)的優(yōu)勢(shì)。從控制臺(tái)發(fā)出的指令經(jīng)過(guò)計(jì)算機(jī)串口傳送給單片機(jī)系統(tǒng),此時(shí)VB攜帶的通信控件MSComm起到了橋梁作用,給編程者帶來(lái)了極大
3、的方便。DALLAS公司生產(chǎn)的 DS18B20可組網(wǎng)數(shù)字溫度傳感器具有“一線總線”接口、測(cè)溫范圍 55125、固有測(cè)溫分辨率0.5、體積小、耐磨耐碰等特點(diǎn),非常適合與傳統(tǒng)的51單片機(jī)構(gòu)成溫度采集節(jié)點(diǎn)。將RS485總線及“輪詢思想”、VB上位機(jī)控制臺(tái)、51單片機(jī)和DS18B20構(gòu)成的溫度采集節(jié)點(diǎn)有機(jī)的結(jié)合起來(lái)就可以構(gòu)成一個(gè)遠(yuǎn)程的智能溫度采集系統(tǒng)。RS485總線1.1 RS485總線介紹電子工業(yè)協(xié)會(huì) (EIA) 于 1983年制訂并發(fā)布 RS-485 標(biāo)準(zhǔn),并經(jīng)通訊工業(yè)協(xié)會(huì)( TIA)修訂后命名為 TIA/EIA-485-A,習(xí)慣地稱之為 RS-485標(biāo)準(zhǔn)。RS-485標(biāo)準(zhǔn)是為彌補(bǔ) RS-232
4、通信距離短、速率低等缺點(diǎn)而產(chǎn)生的。 RS-485標(biāo)準(zhǔn)只規(guī)定了平衡發(fā)送器和接收器的電特性,而沒(méi)有規(guī)定接插件、傳輸電纜和應(yīng)用層通信協(xié)議。1.2 RS485總線獨(dú)特之處RS-485標(biāo)準(zhǔn)與 RS-232不一樣,數(shù)據(jù)信號(hào)采用差分傳輸方式( Differential Driver Mode),也稱作平衡傳輸,它使用一對(duì)雙絞線,將其中一線定義為 A,另一線定義為 B,如圖1-1所示。 圖 1-1通常情況下,發(fā)送發(fā)送器 A、B之間的正電平在+2+6V,是一個(gè)邏輯狀態(tài);負(fù)電平在 -2-6V,是另一個(gè)邏輯狀態(tài)。另有一個(gè)信號(hào)地 C。在 RS-485器件中,一般還有一個(gè)“使能”控制信號(hào)?!笆鼓堋毙盘?hào)用于控制發(fā)送器與傳
5、輸線的切斷與連接,當(dāng)“使能”端起作用時(shí),發(fā)送發(fā)送器處于高阻狀態(tài),稱作“第三態(tài)”,它是有別于邏輯“ 1”與“ 0”的第三種狀態(tài)。 對(duì)于接收發(fā)送器,也作出與發(fā)送發(fā)送器相對(duì)的規(guī)定,收、發(fā)端通過(guò)平衡雙絞線將 A-A與 B-B對(duì)應(yīng)相連。當(dāng)在接收端 A-B之間有大于+200mV的電平時(shí),輸出為正邏輯電平;小于-200mV時(shí),輸出為負(fù)邏輯電平。在接收發(fā)送器的接收平衡線上,電平范圍通常在 200mV至 6V之間。參見(jiàn)圖 1-2所示。 圖1-2定義邏輯 1(正邏輯電平)為 BA的狀態(tài),邏輯 0(負(fù)邏輯電平)為 AB的狀態(tài), A、B之間的壓差不小于 200mV。 TIA/EIA-485串行通訊標(biāo)準(zhǔn)的性能如表格 1
6、-2所示:規(guī)格 TIA/EIA-485 傳輸模式 平衡 電纜長(zhǎng)度90Kbps 4000 ft(1200m) 電纜長(zhǎng)度10Mbps 50 ft(15m) 數(shù)據(jù)傳輸速度 10 Mbps 昀大差動(dòng)輸出 6V 昀小差動(dòng)輸出 1.5V 接收器敏感度 0.2 V 發(fā)送器負(fù)載(歐姆) 60 昀大發(fā)送器數(shù)量 32 單位負(fù)載 昀大接收器數(shù)量 32 單位負(fù)載 RS-485標(biāo)準(zhǔn)的最大傳輸距離約為 1219米,最大傳輸速率為 10Mbps。通常,RS-485網(wǎng)絡(luò)采用平衡雙絞線作為傳輸媒體。平衡雙絞線的長(zhǎng)度與傳輸速率成反比,只有在 20kbps速率以下,才可能使用規(guī)定昀長(zhǎng)的電纜長(zhǎng)度。只有在很短的距離下才能獲得昀高速率傳
7、輸。一般來(lái)說(shuō),15米長(zhǎng)雙絞線昀大傳輸速率僅為 1Mbps。RS-485網(wǎng)絡(luò)采用直線拓樸結(jié)構(gòu),需要安裝 2個(gè)終端匹配電阻,其阻值要求等于傳輸電纜的特性阻抗(一般取值為 120)。在矩距離、或低波特率波數(shù)據(jù)傳輸時(shí)可不需終端匹配。 RS485轉(zhuǎn)換器及RS-485網(wǎng)絡(luò)直線拓?fù)浣Y(jié)構(gòu)1.3.1 RS485轉(zhuǎn)換器外形圖1.3.2 RS485轉(zhuǎn)換器內(nèi)部電路圖1.3.3 RS-485網(wǎng)絡(luò)直線拓?fù)浣Y(jié)構(gòu)下位機(jī)RS485通信接口電路較為理想的下位機(jī)RS485通信接口電路本電路采用 MAX485作為 RS485總線的驅(qū)動(dòng)芯片,如圖1-3所示,將/RE和DE短接,由MCS-51的P10端口經(jīng)反相器控制半雙工通信時(shí)接收和發(fā)
8、送的狀態(tài)切換。三極管Q1及電阻R1、R2構(gòu)成反向電路;R3、R4為總線空閑時(shí)的上拉電阻,抗隨機(jī)干擾作用;R7為阻抗匹配電阻,以減小信號(hào)反射;R5、R6及四個(gè)快恢復(fù)穩(wěn)壓管D1D4均為保護(hù)和抗干擾作用。 圖1-3實(shí)驗(yàn)室用下位機(jī)RS485通信接口電路在環(huán)境不是十分惡劣的現(xiàn)場(chǎng)中,可以采用圖1-4中的RS485通信接口電路,圖1-4實(shí)際上就是圖1-3的精簡(jiǎn)版。圖1-4RS485總線軟件設(shè)計(jì)8051串行口的控制寄存器SCON 是一個(gè)特殊功能寄存器,用以設(shè)定串行口的工作方式、接收/發(fā)送控制以及設(shè)置狀態(tài)標(biāo)志:M0和SM1為工作方式選擇位,可選擇四種工作方式:SM2,多機(jī)通信控制位,主要用于方式2和方式3。當(dāng)接
9、收機(jī)的SM2=1時(shí)可以利用收到的RB8來(lái)控制是否激活RI(RB80時(shí)不激活RI,收到的信息丟棄;RB81時(shí)收到的數(shù)據(jù)進(jìn)入SBUF,并激活RI,進(jìn)而在中斷服務(wù)中將數(shù)據(jù)從SBUF讀走)。當(dāng)SM2=0時(shí),不論收到的RB8為0和1,均可以使收到的數(shù)據(jù)進(jìn)入SBUF,并激活RI(即此時(shí)RB8不具有控制RI激活的功能)。通過(guò)控制SM2,可以實(shí)現(xiàn)多機(jī)通信。TB8/RB8在方式2或方式3中,是發(fā)送數(shù)據(jù)的第九位,在多機(jī)通信中,作為地址幀/數(shù)據(jù)幀的標(biāo)志位。RS485總線的程序?qū)崿F(xiàn)流程所有從機(jī)的SM2位置1,處于接收地址幀狀態(tài)。主機(jī)發(fā)送一地址幀,其中8位是地址,第9位為地址/數(shù)據(jù)的區(qū)分標(biāo)志,該位置1表示該幀為地址幀。
10、所有從機(jī)收到地址幀后,都將接收的地址與本機(jī)的地址比較。對(duì)于地址相符的從機(jī),使自己的SM2位置0(以接收主機(jī)隨后發(fā)來(lái)的數(shù)據(jù)幀),并把本站地址發(fā)回主機(jī)作為應(yīng)答;對(duì)于地址不符的從機(jī),仍保持SM2=1,對(duì)主機(jī)隨后發(fā)來(lái)的數(shù)據(jù)幀不予理睬。主機(jī)收到從機(jī)應(yīng)答地址后,確認(rèn)地址是否相符,如果地址不符,發(fā)復(fù)位信號(hào)(數(shù)據(jù)幀中TB8=1);如果地址相符,則清TB8,開(kāi)始發(fā)送數(shù)據(jù).在前一步的基礎(chǔ)上,如果從機(jī)收到的是復(fù)位命令則回到監(jiān)聽(tīng)地址狀態(tài)(SM2=1)。否則開(kāi)始接收數(shù)據(jù)和命令,并相應(yīng)的向上位機(jī)傳送數(shù)據(jù)!從機(jī)發(fā)送數(shù)據(jù)結(jié)束后,置第9位(TB8)為1,再發(fā)送一幀校驗(yàn)和給上位機(jī),作為從機(jī)數(shù)據(jù)傳送結(jié)束的標(biāo)志。 (可以忽略)主機(jī)接
11、收數(shù)據(jù)時(shí)先判斷數(shù)據(jù)接收標(biāo)志(RB8),若RB8=1,表示數(shù)據(jù)傳送結(jié)束,并比較此幀校驗(yàn)和,若正確則回送正確信號(hào)00H,此信號(hào)命令該從機(jī)復(fù)位(即重新等待地址幀);若校驗(yàn)和出錯(cuò),則發(fā)送FFH,命令該從機(jī)重發(fā)數(shù)據(jù)。若接收幀的RB8=0,則存數(shù)據(jù)到緩沖區(qū),并準(zhǔn)備接收下幀信息。(可以忽略)從機(jī)發(fā)送或接收完畢后置SM2=1,繼續(xù)地址偵聽(tīng)。主機(jī)發(fā)送或接收完畢后修改MSComm的Settings屬性為”9600,M,8,1”,并退出本次通信。發(fā)送另一從機(jī)地址幀準(zhǔn)備進(jìn)行一次通信。RS485總線接口程序清單#include#include#include#define uchar unsigned char#def
12、ine uint unsigned intsbit RT=P20; / MAX485收發(fā)控制位,低-接收,高發(fā)送 uchar qian,bai,shi,ge,data_crc; uint flag; /flag為從機(jī)地址驗(yàn)證正確標(biāo)志位 void delay(uint z) uint x,y;for(x=0;xz;x+) for(y=0;yThe second bitwhile(TI!=1);TI=0;SBUF=48+bai;/向主機(jī)發(fā)送信息 while(TI!=1);TI=0;SBUF=48+shi;/向主機(jī)發(fā)送信息 while(TI!=1);TI=0;SBUF=48+ge;/向主機(jī)發(fā)送信息
13、while(TI!=1);TI=0;SBUF= ;/向主機(jī)發(fā)送信息 while(TI!=1);TI=0;RT=0;TB8=0; if(SBUF=0 x30) /預(yù)定的結(jié)束通信指令 TB8=0; /其實(shí)這里我們可以不管TB8,因?yàn)槌跏蓟臅r(shí)候TB8=0;RT=0;SM2=1; flag=0;P1=0 xff; ES=1; /*主程序部分*/void main(void) TMOD=0 x20; TL1=0 xfd; TH1=0 xfd; PCON=0 x00; /SCON=0 xf0; SM0=1 ; SM1=1; SM2=1; REN=1; EA=1; ES=1; TR1=1; RT=0; /
14、 接收/發(fā)送數(shù)據(jù)控制位,初始化為接收 while(1) VB上位機(jī)控制臺(tái)AT89S52與電腦的通信接口芯片比較:綜合觀察比較,我們可以利用“校驗(yàn)位”模擬單片機(jī)的TB8/RB8.具體就是發(fā)送地址的時(shí)候校驗(yàn)位設(shè)定為”M”(值為1),發(fā)送指令的時(shí)候校驗(yàn)位設(shè)定為”S”(值為0);VB MSComm通信控件的屬性及參數(shù)設(shè)置Commport設(shè)置打開(kāi)端口號(hào)位1或2,3,4;Handshaking=0時(shí)無(wú)握手協(xié)議;InBufferSize=1024,接收緩沖區(qū)中字節(jié)數(shù);InputLen=1,設(shè)置一次接收緩沖字節(jié)數(shù)位1;InputMode=0表示數(shù)據(jù)通過(guò)Input屬性以文本形式取回,為1表示數(shù)據(jù)通過(guò)Input屬
15、性以二進(jìn)制形式取回;OutBufferSize=512,設(shè)置并返回傳輸緩沖區(qū)的大?。籖htreshold=1,在發(fā)生接收事件后并觸發(fā)OnComm事件之前,設(shè)置并返回要接收的字節(jié)數(shù)。即接收緩沖區(qū)收到每一個(gè)字節(jié)后都會(huì)使MSComm控件產(chǎn)生OnComm事件。RTSEnable=False,若設(shè)為T(mén)rue則會(huì)發(fā)送信息到調(diào)制解調(diào)器,而不是通過(guò)串口通信;Setting=”9600,N,8,1”,設(shè)置并返回波特率、奇偶校驗(yàn)、數(shù)據(jù)位、停止位參數(shù)。9600,N,8,1即波特率為9600,無(wú)奇偶校驗(yàn),8個(gè)數(shù)據(jù)位,1個(gè)停止位;Sthreshold=0( 缺省值),數(shù)據(jù)傳輸事件不會(huì)產(chǎn)生OnComm事件。若設(shè)置Sthr
16、eshold屬性為1,當(dāng)傳輸緩沖區(qū)完全為空時(shí),MSComm控件產(chǎn)生OnComm事件。主從式多機(jī)通信中,必須為每個(gè)從機(jī)分配不同的地址,主機(jī)通過(guò)發(fā)送地址與從機(jī)取得聯(lián)絡(luò)后再與該從機(jī)進(jìn)行數(shù)據(jù)幀或命令幀的交互,MCS-51中可通過(guò)靈活地控制串行口控制器 SCON的 SM2位和發(fā)送/接收的第 9位 TB8/RB8來(lái)區(qū)分地址或數(shù)據(jù)信息。本系統(tǒng)中以 PC機(jī)為主機(jī),使用 VB6.0的 MSComm控件與單片機(jī)通信,PC機(jī)要區(qū)分下發(fā)的是地址信息還是數(shù)據(jù)信息,是通過(guò)設(shè)置 MSComm控件Settings屬性中的奇偶校驗(yàn)位來(lái)巧妙實(shí)現(xiàn)的。發(fā)送地址時(shí)設(shè)置為 M,即 Settings =“9600,M, 8,1”,則主機(jī)發(fā)
17、送地址時(shí)置發(fā)送的第 9位為 1;發(fā)送數(shù)據(jù)時(shí),設(shè)置為 S,則主機(jī)在每個(gè)字節(jié)數(shù)據(jù)時(shí)置發(fā)送的第 9位為 0;由于上位機(jī)中數(shù)據(jù)的發(fā)送和接收涉及到的情形比較多,因此在這里不詳加介紹。關(guān)于這方面比較好的論文有深圳職業(yè)技術(shù)學(xué)院溫曉軍的VB在串行通信中的應(yīng)用,當(dāng)然該論文講得比較淺顯,如果想要更深入的了解學(xué)習(xí)必須參看更多其它相關(guān)資料。VB上位機(jī)控制臺(tái)及軟件特色用VB6.0編寫(xiě)的上位機(jī)控制臺(tái)如圖1-5所示。 圖1-5軟件特色解析:“通信設(shè)置”區(qū)域該區(qū)域可進(jìn)行串口號(hào)、波特率、數(shù)據(jù)位數(shù)、停止位數(shù)以及地址/數(shù)據(jù)幀設(shè)置。這些是通過(guò)MSComm控件的Settings屬性來(lái)實(shí)現(xiàn)的。通常,在某些情況下我們會(huì)結(jié)合下位機(jī)進(jìn)行波特率
18、的修改,其它幾個(gè)參數(shù)保持不變?!肮?jié)點(diǎn)檢測(cè)”區(qū)域該區(qū)域可進(jìn)行下位機(jī)節(jié)點(diǎn)是否正常性檢查,做為后面節(jié)點(diǎn)選擇的依據(jù)。在實(shí)際操作的時(shí)候是這樣實(shí)現(xiàn)的:上位機(jī)發(fā)送從機(jī)地址并開(kāi)啟一個(gè)定時(shí)器,如果在500ms內(nèi)收到了從機(jī)的應(yīng)答地址則彈出提示框“正常工作!”,否則彈出提示框“非正常工作!”?!跋挛粰C(jī)節(jié)點(diǎn)”區(qū)域該區(qū)域可進(jìn)行下位機(jī)節(jié)點(diǎn)選擇、“輪詢”時(shí)間間隔設(shè)置和目標(biāo)數(shù)據(jù)以Excel保存的名稱和位置設(shè)置。在這里可以將所選擇的下位機(jī)節(jié)點(diǎn)一天24小時(shí)所采集的溫度數(shù)據(jù)連續(xù)保存在所指定的Excel表格中,以供后續(xù)的數(shù)據(jù)分析。該區(qū)域功能的實(shí)現(xiàn)主要通過(guò)數(shù)組及相應(yīng)算法、定時(shí)器、VB調(diào)用Excel表格的靈活組合應(yīng)用來(lái)完成的。實(shí)現(xiàn)效果如
19、圖1-6、圖1-7所示。圖1-6圖1-7(4)“節(jié)點(diǎn)顯示單元”區(qū)域通過(guò)該區(qū)域可以實(shí)時(shí)的觀察所選擇節(jié)點(diǎn)的溫度數(shù)據(jù)。(5)其它特性該上位機(jī)軟件還具有端口開(kāi)閉檢測(cè)能力和突發(fā)事件處理能力。這里著重介紹一下突發(fā)事件處理能力。該上位機(jī)軟件的突發(fā)事件處理能力體現(xiàn)在當(dāng)選擇的某一個(gè)下位機(jī)節(jié)點(diǎn)出現(xiàn)崩潰的時(shí)候可以很好的進(jìn)行應(yīng)急處理,從而避免對(duì)整個(gè)系統(tǒng)造成影響。該功能同樣是通過(guò)定時(shí)器的靈活應(yīng)用來(lái)實(shí)現(xiàn)的。下位機(jī)溫度采集節(jié)點(diǎn)微處理器目前微處理器領(lǐng)域最火爆的莫過(guò)于32位的ARM,但出于本系統(tǒng)對(duì)微處理要求不高和性價(jià)比的考慮,因此選擇傳統(tǒng)的8051單片機(jī).。本系統(tǒng)選擇國(guó)產(chǎn)宏晶STC89C52RC,不選擇AT89S52是因?yàn)閮烧?/p>
20、性能基本一樣,但STC價(jià)格便宜一半。STC89C52具有如下特點(diǎn):40個(gè)引腳,8k Bytes Flash片內(nèi)程序存儲(chǔ)器,512 bytes的隨機(jī)存取數(shù)據(jù)存儲(chǔ)器(RAM),32個(gè)外部雙向輸入/輸出(I/O)口,5個(gè)中斷優(yōu)先級(jí)2層中斷嵌套中斷,3個(gè)16位可編程定時(shí)計(jì)數(shù)器,2個(gè)全雙工串行通信口,看門(mén)狗(WDT)電路,片內(nèi)時(shí)鐘振蕩器。可以看出STC89C52完全滿足系統(tǒng)對(duì)微處理的要求。DS18B20DS18B20特性簡(jiǎn)介DALLAS半導(dǎo)體公司的數(shù)字化溫度傳感器DS1820是世界上第一片支持“一線總線”接口的溫度傳感器。一線總線獨(dú)特而且經(jīng)濟(jì)的特點(diǎn),使用戶可以輕松的組建傳感器網(wǎng)絡(luò),為測(cè)量系統(tǒng)的構(gòu)建引入全
21、新概念?,F(xiàn)在新一代DS18B20體積更小、更經(jīng)濟(jì)、更靈活,使你可以充分發(fā)揮“一線總線”的長(zhǎng)處。DS18B20的具體特性如下:獨(dú)特的單線接口僅需一個(gè)端口引腳進(jìn)行通訊簡(jiǎn)單的多點(diǎn)分布應(yīng)用無(wú)需外部器件可通過(guò)數(shù)據(jù)線供電零待機(jī)功耗測(cè)溫范圍-55+125攝氏度,以0.5攝氏度遞增912位可選分辨率溫度數(shù)字量轉(zhuǎn)換時(shí)間200ms(典型值)用戶可定義的非易失性溫度報(bào)警設(shè)置應(yīng)用包括溫度控制、工業(yè)系統(tǒng)、消費(fèi)品、溫度計(jì)或任何熱感測(cè)系統(tǒng)DS18B20典型應(yīng)用電路上圖是通過(guò)VDD引腳引入一個(gè)外部電源,這樣做的好處是I/O線上不需要加強(qiáng)上拉,而且總線控制器不用在溫度轉(zhuǎn)換期間總保持高電平。這樣在轉(zhuǎn)換期間可以允許在單線總線上進(jìn)行
22、其它數(shù)據(jù)往來(lái)。另外,在單線總線上可以掛任意多片DS18B20,并且如果它們使用外部電源的話,就可以先發(fā)一個(gè)Skip ROM命令,再接一個(gè)Convert T命令,讓它們同時(shí)進(jìn)行溫度轉(zhuǎn)化。注意當(dāng)加上外部電源時(shí),GND引腳不能懸空。51單片機(jī)驅(qū)動(dòng)DS18B20溫度轉(zhuǎn)化流程圖51單片機(jī)和DS18B20溫度采集部分程序清單#include #include #include #include #define uchar unsigned char#define uint unsigned intsbit DS = P32;/DS18b20的數(shù)據(jù)線端口sbit key = P33;uchar code t
23、able0=0 xc0,0 xf9,0 xa4,0 xb0,0 x99,0 x92,0 x82,0 xf8,0 x80,0 x90,0 xbf;/ 0到9與“-”編碼 uchar code table3= 0 x40, 0 x79, 0 x24, 0 x30,0 x19,0 x12,0 x02,0 x78,0 x00,0 x10, 0 x08, 0 x03, 0 x46, 0 x21,0 x06,0 x0E,0 xff;/共陽(yáng)帶小數(shù)點(diǎn)段選 uchar code table18=0 x28,0 x1e,0 x45,0 xe9,0 x00,0 x00,0 x00,0 xb7;/兩1820的ROM編
24、碼,可在單個(gè)時(shí)用read rom讀出uchar code table28=0 x28,0 x87,0 x3f,0 x08,0 x02,0 x00,0 x00,0 xc9;uchar zf_flag=0,temph,templ,ge,shi,bai,qian;uchar choose=0;/1-wire總線,尋訪不同1820的標(biāo)志位int temper;/溫度真實(shí)值/*函數(shù)名稱:delay_us(uint t)入口參數(shù): t出口參數(shù):無(wú)注備:此程序是為了1wire總線寫(xiě)時(shí)的us級(jí)延時(shí)而寫(xiě)的;其中在外部晶振為11.0592MHz時(shí),每次進(jìn)入函數(shù)大約要18us左右,每次循環(huán)大約13us左右*/voi
25、d delay_us(uint t)uint i;for(i=0;it;i+);/*函數(shù)名稱:delay_nms(uint t)入口參數(shù): t出口參數(shù):無(wú)注備: 毫秒級(jí)軟件延時(shí)*/void delay_nms(uint t)uint i;uchar j;for(i=0;it;i+)for(j=0;j110;j+);/*函數(shù)名稱:reset_1820()入口參數(shù):無(wú)出口參數(shù):bit一位數(shù): 返回1,初始化成功;返回0,初始化失敗注備:這里主要要注意的是延時(shí)的問(wèn)題*/bit resert_1820()DS = 1;_nop_();/MCU將DS拉低后,要保持至少大于1us,數(shù)據(jù)手冊(cè)上說(shuō)的。_nop
26、_();/這里為確保穩(wěn)定延時(shí)2us左右DS = 0;delay_us(55);/這里延時(shí)大約750us左右DS = 1;/delay_us(2);/這里大約50us左右 *適當(dāng)調(diào)整!delay_us(3);if(!DS)delay_us(50); /這個(gè)延時(shí)很重要!650us!*可能有點(diǎn)偏長(zhǎng)!DS = 1; /一定要在初始化完成后將DS置1,以釋放總線return 1;elsereturn 0;/*函數(shù)名稱:write_bit(bit wei)入口參數(shù):bit wei出口參數(shù):無(wú)注備:*/void write_bit(bit wei)DS = 1;DS = 0;_nop_(); /MCU將DS
27、拉低后,要保持至少大于1us,數(shù)據(jù)手冊(cè)上說(shuō)的。_nop_(); /這里為確保穩(wěn)定延時(shí)2us左右if(wei)DS = 1;elseDS = 0;delay_us(6); /*大概81usDS = 1;_nop_();/*函數(shù)名稱:read_bit()入口參數(shù):無(wú)出口參數(shù):bit 一位注備:*/bit read_bit()/初期寫(xiě)程序出問(wèn)題處!DS = 1;DS = 0; _nop_();_nop_();/MCU將DS拉低后,要保持至少大于1us,數(shù)據(jù)手冊(cè)上說(shuō)的。 /這里為確保穩(wěn)定延時(shí)2us左右 DS=1; /這里必須拉高:讓MCU釋放總線,好讓DS18B20利用總線回送數(shù)據(jù)_nop_();_n
28、op_(); /等待一定時(shí)間,讓DS18B20回送的數(shù)據(jù)穩(wěn)定_nop_();_nop_(); _nop_();_nop_();_nop_();_nop_();return DS;/*函數(shù)名稱:write_byte(uchar byte)入口參數(shù):byte出口參數(shù):無(wú)注 備:DB18B20寫(xiě)入數(shù)據(jù)或讀出數(shù)據(jù)都是從最低位開(kāi)始的*/void write_byte(uchar byte)bit flag1;uchar i,temp;temp = byte;for(i=0;i1);/DB18B20寫(xiě)入數(shù)據(jù)或讀出數(shù)據(jù)都是從最低位開(kāi)始的flag1 = CY; /*這種方式還是不錯(cuò)的!*/write_bit(
29、flag1);/*函數(shù)名稱:read_byte()入口參數(shù):無(wú)出口參數(shù):byte型注 備:DB18B20寫(xiě)入數(shù)據(jù)或讀出數(shù)據(jù)都是從最低位開(kāi)始的*/uchar read_byte()bit flag2;uchar i,j,temp;for(i=0;i1);flag2 = read_bit();if(flag2) /*中間變量對(duì)一個(gè)位進(jìn)行操作!*/j = 0 x80;else j = 0 x00;temp = temp|j;return temp;/*函數(shù)名稱:uintconversion(uchar h_byte,uchar l_byte)入口參數(shù):uchar h_byte,uchar l_byt
30、e出口參數(shù):uint型注 備:將DB18B20讀出的數(shù)據(jù)轉(zhuǎn)化為真正的溫度值*/uint conversion(uchar h_byte,uchar l_byte)int wendu;float tt;/注意數(shù)據(jù)類型對(duì)運(yùn)算的影響!if(h_byte7|h_byte=7)zf_flag = 0;/溫度正負(fù)標(biāo)志位:1,為負(fù);0,為正wendu = h_byte;/將讀入的帶字符的高字節(jié)放入int型溫度變量中wendu = wendu8;/將其左移八位,讓其進(jìn)入高字節(jié)wendu = wendu|l_byte;/并與溫度的低字節(jié)相或,湊成整型值tt = wendu*0.0625;/乘以最小分辨率,獲得真
31、正溫度值wendu = tt*10+0.5;/為了能得到溫度的第一小數(shù)位,將其乘10,并加上0.5以四舍五入/近似操作elsezf_flag = 1;/溫度正負(fù)標(biāo)志位:1,為負(fù);0,為正wendu = h_byte;wendu = wendu8;wendu = wendu|l_byte;wendu = (wendu)+1;/因?yàn)閺?820中讀出的是補(bǔ)碼,所以對(duì)于溫度值要取反加1,以獲得其絕對(duì)值tt = wendu*0.0625;/注意數(shù)據(jù)類型對(duì)運(yùn)算的影響!wendu = tt*10+0.5;/教訓(xùn):我在這里原來(lái)寫(xiě)的是:wendu=wendu*0.0625;return wendu;void m
32、ain()uchar i;while(1)resert_1820(); /初始化1820 write_byte(0 xCC); /單個(gè)1820,跳過(guò)匹配ROMwrite_byte(0 x44); /發(fā)送溫度轉(zhuǎn)化命令for(i=0;i20;i+) /這里要用數(shù)碼管顯示溫度,就干脆用來(lái)掃描數(shù)碼管show(qian,bai,shi,ge);resert_1820(); /初始化1820 write_byte(0 xCC); /單個(gè)1820,跳過(guò)匹配ROMwrite_byte(0 xBE); /讀暫存器中溫度的值templ = read_byte(); /讀暫存器中溫度的低字節(jié)temph = read
33、_byte(); /讀暫存器中溫度的帶符號(hào)的高字節(jié)temper=conversion(temph,templ);/將讀回來(lái)溫度的值轉(zhuǎn)化為實(shí)際真值qian= temper/1000; /千bai= temper%1000/100; /百shi = temper/100/10; /十 ge=temper%10; /個(gè)結(jié)束語(yǔ)本設(shè)計(jì)中的RS485總線接口和上位機(jī)控制臺(tái)被用于工廠現(xiàn)場(chǎng)中,實(shí)踐證明性能穩(wěn)定,通信可靠。因此,可直接移植于其它工業(yè)自動(dòng)控制設(shè)計(jì)中。參考文獻(xiàn)(1)、Visual Basic 實(shí)用教程(第二版) 鄭阿齊 電子工業(yè)出版社 (2)、VB在串口通信中的應(yīng)用 溫曉軍 (3)、單片機(jī)原理及應(yīng)用
34、 姜志海 電子工業(yè)出版社 (4)、ATMEL89系列單片機(jī)的原理與開(kāi)發(fā)實(shí)踐 歐陽(yáng)文 中國(guó)電力出版社 (5)、RS485上下位機(jī)多機(jī)通信網(wǎng)絡(luò)系統(tǒng)設(shè)計(jì) 吳桂林 鄭建勇 (6)、基于RS485主從通信協(xié)議的實(shí)現(xiàn) 周紅嶺 (7)、基于RS485總線技術(shù)的PC機(jī)與單片機(jī)多機(jī)通訊設(shè)計(jì) 田擁軍附錄資料:不需要的可以自行刪除VB HOOK(鉤子)超級(jí)無(wú)敵詳細(xì)用法(介紹)hook是WINDOWS提供的一種消息處理機(jī)制,它使得程序員可以使用子過(guò)程來(lái)監(jiān)視系統(tǒng)消息,并在消息到達(dá)目標(biāo)過(guò)程前得到處理。 下面將介紹WINNDOWS HOOKS并且說(shuō)明如何在WINDOWS 程序中使用它。關(guān)于HOOKS 使用HOOK 將會(huì)降低
35、系統(tǒng)效率,因?yàn)樗黾恿讼到y(tǒng)處量消息的工作量。建議在必要時(shí)才使用HOOK,并在消息處理完成后立即移去該HOOK。HOOK鏈 WINDOWS提供了幾種不同類型的HOOKS;不同的HOOK可以處理不同的消息。例如,WH_MOUSE HOOK用來(lái)監(jiān)視鼠標(biāo)消息。 WINDOWS為這幾種HOOKS維護(hù)著各自的HOOK鏈。HOOK鏈?zhǔn)且粋€(gè)由應(yīng)用程序定義的回調(diào)函數(shù)隊(duì)列,當(dāng)某種類型的消息發(fā)生時(shí),WINDOWS向此種類型的HOOK鏈的第一個(gè)函數(shù)發(fā)送該消息,在第一函數(shù)處理完該消息后由該函數(shù)向鏈表中的下一個(gè)函數(shù)傳遞消息,依次向下。如果鏈中某個(gè)函數(shù)沒(méi)有向下傳送該消息,那么鏈表中后面的函數(shù)將得不到此消息。(對(duì)于某些類型的
36、HOOK,不管HOOK鏈中的函數(shù)是否向下傳遞消息,與此類型HOOK聯(lián)系的所有HOOK函數(shù)都會(huì)收到系統(tǒng)發(fā)送的消息)HOOK過(guò)程 為了攔截特定的消息,你可以使用SetWindowsHookEx函數(shù)在該類型的HOOK鏈中安裝你自己的HOOK函數(shù)。該函數(shù)語(yǔ)法如下: public function MyHook(nCode,wParam,iParam) as long 加入代碼 end function 其中MyHook可以隨便命名,其它不能變。該函數(shù)必須放在模塊段。nCode指定HOOK類型。wParam,iParam的取值隨nCode不同而不同,它代表了某種類型的HOOK的某個(gè)特定的動(dòng)作。 SetW
37、indowsHookEx總是將你的HOOK函數(shù)放置在HOOK鏈的頂端。你可以使用CallNextHookEx函數(shù)將系統(tǒng)消息傳遞給HOOK鏈中的下一個(gè)函數(shù)。 注釋對(duì)于某些類型的HOOK,系統(tǒng)將向該類的所有HOOK函數(shù)發(fā)送消息,這時(shí),HOOK函數(shù)中的CallNextHookEx語(yǔ)句將被忽略。 全局HOOK函數(shù)可以攔截系統(tǒng)中所有線程的某個(gè)特定的消息(此時(shí)該HOOK函數(shù)必須放置在DLL中),局部HOOK函數(shù)可以攔截指定線程的某特定消息(此時(shí)該HOOK函數(shù)可以放置在DLL中,也可以放置在應(yīng)用程序的模塊段)。 注釋 建議只在調(diào)試時(shí)使用全局HOOK函數(shù)。全局HOOK函數(shù)將降低系統(tǒng)效率,并且會(huì)同其它使用該類H
38、OOK的應(yīng)用程序產(chǎn)生沖突。HOOK類型 WH_CALLWNDPROC 和 WH_CALLWNDPROCRET HOOK WH_C ALLWNDPROC 和WH_CALLWNDPROCRET HOOK可以監(jiān)視SendMessage發(fā)送的消息。系統(tǒng)在向窗體過(guò)程發(fā)送消息前,將調(diào)用WH_CALLWNDPROC;在窗體過(guò)程處理完該消息后系統(tǒng)將調(diào)用WH_CALLWNDPROCRET。 WH_CALLWNDPROCRET HOOK會(huì)向HOOK過(guò)程傳送一個(gè)CWPRETSTRUCT結(jié)構(gòu)的地址。該結(jié)構(gòu)包含了窗體過(guò)程處理系統(tǒng)消息后的一些信息。 WH_CBT Hook 系統(tǒng)在激活,創(chuàng)建,消毀,最小化,最大化,移動(dòng),改
39、變窗體前;在完成一條系統(tǒng)命令前;在從系統(tǒng)消息隊(duì)列中移去鼠標(biāo)或鍵盤(pán)事件前;在設(shè)置輸入焦點(diǎn)前,或同步系統(tǒng)消息隊(duì)列前,將調(diào)用WH_CBT HOOK。你可以在你的HOOK 過(guò)程攔截該類HOOK,并返回一個(gè)值,告訴系統(tǒng),是否繼續(xù)執(zhí)行上面的操作。 WH_DEBUG HOOK 系統(tǒng)在調(diào)用與某種HOOK類型聯(lián)系的HOOK過(guò)程前,將調(diào)用WH_DEBUG ,應(yīng)用程序可以使用該HOOK決定是否讓系統(tǒng)執(zhí)行某種類型的HOOK。 WH_FOREGROUNDIDLE Hook 系統(tǒng)在空閑時(shí)調(diào)用該HOOK,在后臺(tái)執(zhí)行優(yōu)先權(quán)較低的應(yīng)用程序。 WH_GETMESSAGE Hook WH_GETMESSAGE Hook使應(yīng)用程序可
40、以攔截GetMessage 或 PeekMessage的消息。應(yīng)用程序使用WH_GETMESSAGE HOOK監(jiān)視鼠標(biāo)、鍵盤(pán)輸入和發(fā)送到隊(duì)列中的其它消息。 WH_JOURNALRECORD Hook WH_JOURNALRECORD Hook使應(yīng)用程序可以監(jiān)視輸入事件。典型地,應(yīng)用程序使用該HOOK記錄鼠標(biāo)、鍵盤(pán)輸入事件以供以后回放。該HOOK是全局HOOK,并且不能在指定線程中使用。 WH_JOURNALPLAYBACK Hook WH_JOURNALPLAYBACK Hook使應(yīng)用程序可以向系統(tǒng)消息隊(duì)列中插入消息。該HOOK可以回放以前由WH_JOURNALRECORD HOOK錄制的鼠標(biāo)
41、、鍵盤(pán)輸入事件。在WH_JOURNALPLAYBACK Hook安裝到系統(tǒng)時(shí),鼠標(biāo)、鍵盤(pán)輸入事件將被屏蔽。該HOOK同樣是一個(gè)全局HOOK,不能在指定線程中使用。 WH_JOURNALPLAYBACK Hook返回一個(gè)時(shí)間暫停值,它告訴系統(tǒng),在處理當(dāng)前回放的消息時(shí),系統(tǒng)等待百分之幾秒。這使得此HOOK可以控制在回放時(shí)的時(shí)間事件。 WH_KEYBOARD Hook WH_KEYBOARD Hook使應(yīng)用程序可以監(jiān)視由GetMessage和PeekMessage返回的WM_KEYDOWN 及WM_KEYUP消息。應(yīng)用程序使用該HOOK監(jiān)視發(fā)送到消息隊(duì)列中的鍵盤(pán)輸入。 WH_MOUSE Hook W
42、H_MOUSE Hook 使應(yīng)用程序可以監(jiān)視由GetMessage和PeekMessage返回的消息。應(yīng)用程序使用該HOOK監(jiān)視發(fā)送到消息隊(duì)列中的鼠標(biāo)輸入。 WH_MSGFILTER and WH_SYSMSGFILTER Hooks WH_MSGFILTER 和WH_SYSMSGFILTER Hooks使應(yīng)用程序可以監(jiān)視菜單、滾動(dòng)條、消息框、對(duì)話框,當(dāng)用戶使用ALT+TAB或ALT+ESC來(lái)切換窗體時(shí),該HOOK也可以攔截到消息。WH_MSGFILTER僅在應(yīng)用程序內(nèi)部監(jiān)視菜單、滾動(dòng)條、消息框、對(duì)話框,而WH_SYSMSGFILTER則可以在系統(tǒng)內(nèi)監(jiān)視所有應(yīng)用程序的這些事件。 WH_SHEL
43、L Hook 一個(gè)SHELL程序可以使用WH_SHELL Hook來(lái)接收重要的信息。當(dāng)一個(gè)SHELL程序被激活前或當(dāng)前窗體被創(chuàng)建、消毀時(shí),系統(tǒng)會(huì)調(diào)用WH_SHELL Hook過(guò)程。 使用HOOK 安裝、銷毀HOOK過(guò)程 監(jiān)視系統(tǒng)事件安裝、銷毀HOOK過(guò)程 使用SetWindowsHookEx函數(shù),指定一個(gè)HOOK類型,自己的HOOK過(guò)程是全局還是局部HOOK,同時(shí)給出HOOK過(guò)程的進(jìn)入點(diǎn),就可以輕松的安裝你自己的HOOK過(guò)程。Declare Function SetWindowsHookEx Lib user32 Alias SetWindowsHookExA _ (ByVal idHook
44、As Long, _ ByVal lpfn As Long, _ ByVal hmod As Long, _ ByVal dwThreadId As Long) As LongidHook代表是何種Hook,有以下幾種 Public Const WH_CALLWNDPROC = 4 Public Const WH_CALLWNDPROCRET = 12 Public Const WH_CBT = 5 Public Const WH_DEBUG = 9 Public Const WH_FOREGROUNDIDLE = 11 Public Const WH_GETMESSAGE = 3 Publi
45、c Const WH_HARDWARE = 8 Public Const WH_JOURNALPLAYBACK = 1 Public Const WH_JOURNALRECORD = 0 Public Const WH_KEYBOARD = 2 Public Const WH_MOUSE = 7 Public Const WH_MSGFILTER = (-1) Public Const WH_SHELL = 10 Public Const WH_SYSMSGFILTER = 6lpfn代表Hook Function所在的Address,這是一個(gè)CallBack Fucnction,當(dāng)掛上某個(gè)H
46、ook時(shí),我們便得定義一個(gè)Function來(lái)當(dāng)作某個(gè)訊息產(chǎn)生時(shí),來(lái)處理它的Function,這個(gè)Hook Function有一定的叁數(shù)格式 Private Function HookFunc(ByVal nCode As Long, _ ByVal wParam As Long, _ ByVal lParam As Long ) As Long nCode 代表是什麼請(qǐng)況之下所產(chǎn)生的Hook,隨Hook的不同而有不同組的可能值。 wParam lParam 傳回值則隨Hook的種類和nCode的值之不同而不同。 因這個(gè)叁數(shù)是一個(gè) Function的Address所以我們固定將Hook Func
47、tion放在.Bas中,并以AddressOf HookFunc傳入。至於Hook Function的名稱我們可以任意給定,不一定叫 HookFunchmod 代表.DLL的hInstance,如果是Local Hook,該值可以是Null(VB中可傳0進(jìn)去),而如果是Remote Hook,則可以使用GetModuleHandle(.dll名稱)來(lái)傳入。dwThreadId 代表執(zhí)行這個(gè)Hook的ThreadId,如果不設(shè)定是那個(gè)Thread來(lái)做,則傳0(所以一般來(lái)說(shuō),Remote Hook傳0進(jìn)去),而VB的Local Hook一般可傳App.ThreadId進(jìn)去。值回值 如果SetWin
48、dowsHookEx()成功,它會(huì)傳回一個(gè)值,代表目前的Hook的Handle,這個(gè)值要記錄下來(lái)。因?yàn)锳程式可以有一個(gè)System Hook(Remote Hook),如KeyBoard Hook,而B(niǎo)程式也來(lái)設(shè)一個(gè)Remote的KeyBoard Hook,那麼到底KeyBoard的訊息誰(shuí)所攔截?答案是,最後的那一個(gè)所攔截,也就是說(shuō)A先做keyboard Hook,而後B才做,那訊息被B攔截,那A呢?就看B的Hook Function如何做。如果B想讓A的Hook Function也得這個(gè)訊息,那B就得呼叫CallNextHookEx()將這訊息Pass給A,於是產(chǎn)生Hook的一個(gè)連線。如果B
49、中不想Pass這訊息給A,那就不要呼叫CallNextHookEx()。Declare Function CallNextHookEx Lib user32 Alias CallNextHookEx _ (ByVal hHook As Long, _ ByVal ncode As Long, _ ByVal wParam As Long, _ lParam As Any) As LonghHook值是SetWindowsHookEx()的傳回值,nCode, wParam, lParam則是Hook Procedure中的三個(gè)叁數(shù)。最後是將這Hook去除掉,請(qǐng)呼叫UnHookWindowHoo
50、kEx()Declare Function UnhookWindowsHookEx Lib user32 Alias UnhookWindowsHookEx _ (ByVal hHook As Long) As LonghHook便是SetWindowsHookEx()的傳回值。此時(shí),以上例來(lái)說(shuō),B程式結(jié)束Hook,則換A可以直接攔截訊息。KeyBoard Hook的范例Hook Function的三個(gè)叁數(shù)nCode wParam lParam 傳回值HC_ACTION表按鍵Virtual Key與WM_KEYDOWN同若訊息要被處理傳0或 反之傳1HC_NOREMOVEPublic hHoo
51、k as LongPublic Sub UnHookKBD ()If hnexthookproc 0 Then UnhookWindowsHookEx hHook hHook = 0End IfEnd SubPublic Function EnableKBDHook()If hHook 0 Then Exit FunctionEnd Ifhhook = SetWindowsHookEx(WH_KEYBOARD, AddressOf _ MyKBHFunc, App.hInstance, App.ThreadId)End FunctionPublic Function MyKBHFunc(ByV
52、al iCode As Long, _ ByVal wParam As Long, ByVal lParam As Long) As Long MyKBHfunc = 0 表示要處理這個(gè)訊息 If wParam = vbKeySnapshot Then 偵測(cè) 有沒(méi)有按到PrintScreen鍵 MyKBHFunc = 1 在這個(gè)Hook便吃掉這個(gè)訊息 End If Call CallNextHookEx(hHook, iCode, wParam, lParam) 傳給下一個(gè)HookEnd Function鼠標(biāo)鉤子的示例列下。(1)模塊中輸入:Public Const WM_MOUSEMOVE
53、= &H200Public Const WM_LBUTTONDOWN = &H201Public Const WM_LBUTTONUP = &H202Public Const WM_LBUTTONDBLCLK = &H203Public Const WM_RBUTTONDOWN = &H204Public Const WM_RBUTTONUP = &H205Public Const WM_RBUTTONDBLCLK = &H206Public Const WM_MBUTTONDOWN = &H207Public Const WM_MBUTTONUP = &H208Public Const WM
54、_MBUTTONDBLCLK = &H209Public Const WM_MOUSEACTIVATE = &H21Public Const WM_MOUSEFIRST = &H200Public Const WM_MOUSELAST = &H209Public Const WM_MOUSEWHEEL = &H20A 以上是鼠標(biāo)的各個(gè)值Private Declare Function CallNextHookEx Lib user32 (ByVal hHook As Long, ByVal nCode As Long, ByVal wParam As Long, lparam As Any)
55、As LongPublic Function HookProc(ByVal nCode As Long, ByVal wParam As Long, ByVal lparam As Long) As Long If nCode 0 Then HookProc = CallNextHookEx(hHook, nCode, wParam, lparam) Exit Function End If If wParam = WM_RBUTTONDOWN Then MsgBox aa End IfEnd Function(2)窗體中輸入:Private Declare Function SetWindo
56、wsHookEx Lib user32 Alias SetWindowsHookExA (ByVal idHook As Long, ByVal lpfn As Long, ByVal hmod As Long, ByVal dwThreadId As Long) As LongPrivate Declare Function UnhookWindowsHookEx Lib user32 (ByVal hHook As Long) As LongPrivate Const WH_MOUSE_LL As Long = 14Private Sub Form_Load() hHook = SetWindowsHookEx(WH_MOUSE_LL, Addres
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 改造擴(kuò)建別墅合同范本
- 廢紙板轉(zhuǎn)讓合同范本
- 臺(tái)球店店長(zhǎng)合同范本
- 預(yù)防和控制野生菌的食用
- 適老化改造政策培訓(xùn)
- 靜脈留置針的并發(fā)癥及護(hù)理
- 靜脈血栓的形成和護(hù)理
- 銀發(fā)旅游產(chǎn)品設(shè)計(jì)
- 雷雨第二幕解析
- 道路交通安全駕駛知識(shí)
- 中華民族共同體概論知到課后答案智慧樹(shù)章節(jié)測(cè)試答案2025年春麗水學(xué)院
- 專職消防合同范例
- 《油氣儲(chǔ)存企業(yè)安全風(fēng)險(xiǎn)評(píng)估細(xì)則(2025年修訂版)》解讀與培訓(xùn)
- 【歷史】隋唐時(shí)期的科技與文化課件 2024-2025學(xué)年統(tǒng)編版七年級(jí)歷史下冊(cè)
- 電網(wǎng)工程設(shè)備材料信息參考價(jià)(2024年第四季度)
- 醫(yī)務(wù)部督導(dǎo)檢查表-輸血科(共3頁(yè))
- (完整)“六宮格”數(shù)獨(dú)—中級(jí)—180題
- 球團(tuán)實(shí)驗(yàn)方案
- 客戶滿意度調(diào)查表(模板)6頁(yè)
- 清明節(jié)畫(huà)彩蛋PPT課件
- 黃道吉日的推算方法
評(píng)論
0/150
提交評(píng)論