大學(xué)畢業(yè)設(shè)計-基于單總線的實時溫度監(jiān)控系統(tǒng)_第1頁
大學(xué)畢業(yè)設(shè)計-基于單總線的實時溫度監(jiān)控系統(tǒng)_第2頁
大學(xué)畢業(yè)設(shè)計-基于單總線的實時溫度監(jiān)控系統(tǒng)_第3頁
大學(xué)畢業(yè)設(shè)計-基于單總線的實時溫度監(jiān)控系統(tǒng)_第4頁
大學(xué)畢業(yè)設(shè)計-基于單總線的實時溫度監(jiān)控系統(tǒng)_第5頁
已閱讀5頁,還剩21頁未讀 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認(rèn)領(lǐng)

文檔簡介

1、;.基于單總線的實時溫度監(jiān)控系統(tǒng)2硬件電路設(shè)計在硬件電路設(shè)計時,應(yīng)著重考慮電子器件的供電方式,以及對器件的限壓和限流保護。因為本次設(shè)計要求利用單總線技術(shù),所以可以考慮使用寄生供電方式。設(shè)計的電路圖如下。圖2 基于單總線的溫度實時監(jiān)控系統(tǒng)硬件電路總圖2.3軟件設(shè)計2.3.1設(shè)計窗體本次設(shè)計要求軟件的可視化窗體中包含實時溫度顯示、數(shù)據(jù)記錄、存儲管理和ROM數(shù)據(jù),并且能將測得的數(shù)據(jù)保存到指定的數(shù)據(jù)庫中。窗體界面如下。圖3 窗體界面實時溫度顯示中可以看到當(dāng)前室溫,并且可以顯示攝氏溫度和華氏溫度。數(shù)據(jù)記錄包含溫度曲線和溫度日志,可以顯示一天內(nèi)的溫度變化曲線。存儲管理和ROM數(shù)據(jù)用來對數(shù)據(jù)庫中已經(jīng)保存的溫

2、度數(shù)據(jù)進行管理,如刪除、轉(zhuǎn)移等操作。2.3.2軟件編程本系統(tǒng)軟件部分采用Delphi來實現(xiàn)初始化、數(shù)據(jù)采集處理、溫度報表管理,其主程序的流程圖見圖4。 圖4 主程序流程圖本系統(tǒng)軟件部分共分為3個部分,分別是:1)初始化程序。a設(shè)置串行通信波特率;b串行通訊方式的初始化;c對TO,T1兩個計數(shù)器的初始化;d中斷控制程序的初始化。此外,還負(fù)責(zé)從E2PROM 中調(diào)出以前的采樣參數(shù),使器件能夠以它采樣溫度數(shù)據(jù)。2) 當(dāng)監(jiān)控到ONTIME1和NTIME2標(biāo)記時作相應(yīng)溫度的存儲、轉(zhuǎn)換、發(fā)送處理。ONTIME1和NTIME2的標(biāo)記主要有定時電路決定,當(dāng)?shù)竭_(dá)采樣間隔時,做出相應(yīng)的處理。3)采用動態(tài)顯示方式即時

3、顯示溫度,以節(jié)省電路規(guī)模,使得整個系統(tǒng)的體積變小。3元器件的選擇3.1主要元器件知識3.1.1DS18B20DS18B20是DALLAS公司生產(chǎn)的一線式數(shù)字溫度傳感器,具有3引腳TO92小體積封裝形式;溫度測量范圍為55125,可編程為9位12位A/D轉(zhuǎn)換精度,測溫分辨率可達(dá)0.0625,被測溫度用符號擴展的16位數(shù)字量方式串行輸出;其工作電源既可在遠(yuǎn)端引入,也可采用寄生電源方式產(chǎn)生;多個DS18B20可以并聯(lián)到3根或2根線上,只需一根端口線就能與諸多DS18B20通信,占用微處理器的端口較少,可節(jié)省大量的引線和邏輯電路。以上特點使DS18B20非常適用于遠(yuǎn)距離多點溫度檢測系統(tǒng)。 1) DS1

4、8B20的內(nèi)部結(jié)構(gòu)DS18B20內(nèi)部結(jié)構(gòu)如圖5所示,主要由4部分組成:64位ROM、溫度傳感器、非揮發(fā)的溫度報警觸發(fā)器TH和TL、配置寄存器。DS18B20的管腳排列如圖7-1-2所示,DQ為數(shù)字信號輸入輸出端;GND為電源地;VDD為外接供電電源輸入端,在寄生電源接線方式時接地,見圖6。圖5 DS18B20的內(nèi)部結(jié)構(gòu)圖6 DS18B20的管腳排列ROM中的64位序列號是出廠前被光刻好的,它可以看作是該DS18B20的地址序列碼,每個DS18B20的64位序列號均不相同。64位ROM的排的循環(huán)冗余校驗碼(CRC=X8X5X41)。ROM的作用是使每一個DS18B20都各不相同,這樣就可以實現(xiàn)一

5、根總線上掛接多個DS18B20的目的。DS18B20中的溫度傳感器完成對溫度的測量,用16位符號擴展的二進制補碼讀數(shù)形式提供,以0.0625/LSB形式表達(dá),其中S為符號位。例如125的數(shù)字輸出為07D0H,25.0625的數(shù)字輸出為0191H,25.0625的數(shù)字輸出為FF6FH,55的數(shù)字輸出為FC90H。 高低溫報警觸發(fā)器TH和TL、配置寄存器均由一個字節(jié)的EEPROM組成,使用一個存儲器功能命令可對TH、TL或配置寄存器寫入。其中配置寄存器的格式如下:0 R1 R0 1 1 1 1 1 MSBLSBR1、R0決定溫度轉(zhuǎn)換的精度位數(shù):R1R0=“00”,9位精度,最大轉(zhuǎn)換時間為93.75

6、ms;R1R0=“01”,10位精度,最大轉(zhuǎn)換時間為187.5ms;R1R0=“10”,11位精度,最大轉(zhuǎn)換時間為375ms;R1R0=“11”,12位精度,最大轉(zhuǎn)換時間為750ms;未編程時默認(rèn)為12位精度。高速暫存器是一個9字節(jié)的存儲器。開始兩個字節(jié)包含被測溫度的數(shù)字量信息;第3、4、5字節(jié)分別是TH、TL、配置寄存器的臨時拷貝,每一次上電復(fù)位時被刷新;第6、7、8字節(jié)未用,表現(xiàn)為全邏輯1;第9字節(jié)讀出的是前面所有8個字節(jié)的CRC碼,可用來保證通信正確。 2) DS18B20的工作時序DS18B20的一線工作協(xié)議流程是:初始化ROM操作指令存儲器操作指令數(shù)據(jù)傳輸。其工作時序包括初始化時序、

7、寫時序和讀時序,如圖7(a)(b)(c)所示。(a)初始化時序(b)寫時序(c)讀時序圖7 DS18B20的工作時序圖3) DS18B20與微處理器的連接DS18B20與微處理器的連接如下圖8所示。(a)寄生電源工作方式(b)外接電源工作方式圖8 DS18B20與微處理器的典型連接圖3.1.2DS2480B1) DS2480B主要特性串口UART/RS232至單總線通信協(xié)議的轉(zhuǎn)接橋,可直接連到UART和5V RS232系統(tǒng)中, 支持Dallas全系列單總線器件,如數(shù)字溫度傳感器DS18B20、A/D轉(zhuǎn)換器DS2450等;將主機從單總線時序控制中解脫出來,提供規(guī)范的、靈活的和強驅(qū)動的單總線定時;

8、支持標(biāo)準(zhǔn)UART通信,支持9.6(默認(rèn))、19.2、57.6和115.2 kbps速率;具有較強的總線驅(qū)動能力,通信距離可達(dá)300 m;可編程下拉擺率控制和有源上拉,工作范圍 5 V,-40 +85 ,8引腳SOIC封裝。12348765RXDTXDPOLVPPGND1-WNCVDD2)管腳圖及引腳說明圖9 DS2480B的封裝和引腳DS2480B為8腳貼片式封裝,如圖9所示。引腳功能如表1所列引腳號引腳名稱引 腳 功 能1GND地線21-W單總線輸入輸出端3NC懸空4VDD4.55.5V電壓5VPPEPROM編程電壓6POLRXD/TXD選擇端7TXD發(fā)送端8RXD接收端表1 引腳功能說明D

9、S2480B工作原理框圖如圖10所示。圖10 DS2480B工作原理框圖3) DS2480B與RS232的接口技術(shù):DS2480B與RS232的接口如圖11所示。 圖11 DS2480B與RS232的接口圖 3.2元件清單序號元件個數(shù)1PC機串行口UART/RS2321 個2轉(zhuǎn)接橋DS2480B1 個3數(shù)字溫度傳感器DS18B201 個4電容U07HF1 個5穩(wěn)壓管2 個6二極管M72 個7電路板XF071 個 表2 元件清單4 學(xué)習(xí)心得通過該溫度監(jiān)控實驗,我們可以發(fā)現(xiàn):基于DS18B20數(shù)字溫度傳感器構(gòu)成的實時監(jiān)控系統(tǒng)確實具有精度高、抗干擾能力強、電路簡單等諸多優(yōu)點,溫度傳感器得到電纜長度達(dá)

10、到幾十米都可以正常讀取溫度數(shù)據(jù),并且已經(jīng)在站長開發(fā)的機房安全監(jiān)控系統(tǒng)中得到了實際考驗,那可是要365天從不間斷地對機房及相關(guān)設(shè)備提供實時溫度監(jiān)控的哦。 相比之下,傳統(tǒng)的溫度檢測系統(tǒng)采用熱敏電阻等溫度敏感元件,熱敏電阻成本低,但需要后續(xù)信號調(diào)理、AD轉(zhuǎn)換處理電路才能將溫度信號轉(zhuǎn)換成數(shù)字信號,不但電路復(fù)雜,而且熱敏電阻的可靠性相對較差,測量溫度的精度差,很難保證熱敏電阻的一致性和線性,在應(yīng)用中需要很好的解決引線誤差補償問題、共模干擾問題和放大電路零點漂移誤差等技術(shù)問題。 因此,如果你開發(fā)的系統(tǒng)對溫度監(jiān)控精度要求不是非常高,而且測溫的范圍DS18B20的-55+125 之間的話,那么采用DS18B2

11、0是一個不錯的選擇,通過軟件的插值運算,其實DS18B20的測溫精度還可以進一步提高的,具體的實現(xiàn)方法大家可以參考DALLAS公司相關(guān)技術(shù)資料。當(dāng)然,如果你有條件的話,也可以預(yù)先對每一個DS18B20進行一次校驗,在標(biāo)準(zhǔn)恒溫箱中測量并記錄下每個傳感器的測溫誤差,在實際應(yīng)用中,我們就可以根據(jù)每個傳感器的實際校準(zhǔn)對讀出的實時溫度進行適當(dāng)?shù)恼`差糾正,這樣也不失為提高DS18B20測溫精度的一個好辦法。可惜的是,并非大家都有這種高精度的恒溫箱來校驗傳感器,如果你的參考溫度不準(zhǔn)確,那么校準(zhǔn)將會適得其反。 通過對這個課程設(shè)計的學(xué)習(xí),為我們掌握單片機實時溫度監(jiān)控的開發(fā)、串口通信程序的開發(fā)及計算機串口實時控制

12、開發(fā)原理及PC監(jiān)控軟件的開發(fā),以及開發(fā)其他功能更加完善的單片機綜合應(yīng)用系統(tǒng)打好基礎(chǔ)。5 參考文獻1 DS18B20 Programmable Resolution 1-Wire Digital Thermometer2 DS2480B Serial 1-Wire Line Driver with Load Sensor3 左冬紅,謝瑞和.實現(xiàn)單總線搜索ROM命令的一種算法4 求是科技.單片機典型模塊設(shè)計實例導(dǎo)航附:源程序清單- TEMPDL32 : This utility uses TMEX to view a read the temperature from a DS18B20. It

13、requires the 32-Bit Windows TMEX drivers to be present. Compiler : Borland Delphi 5.0 procedure TForm1.FormCreate(Sender: Tobject;Var ztbuf : array0.200 of Char; Typebuf : array 0.200 of Char; i,k,RetValue : smallint; RetStr : array0.200 of Char; SetupDone: Boolean; PortNum, PortType : smallint; beg

14、indieer :=false; SetupDone := FALSE; TMSetup not done yet Label4.Caption := '' Read default Port Number and Port Type from registry RetValue := TMReadDefaultPort(PortNum, PortType); if (RetValue < 1) then TMReadDefaultPort(PortNum, PortType) begin ShowMessage('Please set port first

15、9;); Halt; end else begin read the tmex version and type version Get_Version(ztbuf); Label1.Caption := StrPas(ztbuf); TMGetTypeVersion(PortType,Typebuf); Label2.Caption := StrPas(Typebuf); attemp to get a session Done := False; Repeat SHandle := TMExtendedStartSession(PortNum,PortType,NIL); If (SHan

16、dle > 0) Then begin if (TMSetup(SHandle) = 1) then The device that will be found is Temperature Device DS18B20, so Family Type is set to $28 FindFirstFamily($28,SHandle) else begin TMEndSession(SHandle); ShowMessage('Fail to setup MicroLan!'); Halt; end; end else begin if (SHandle < 0

17、) then Begin ShowMessage('The Default Port Type does not have a driver !'); Halt; end; end; Release control back to window Application.ProcessMessages; until (Done); Done := False; Repeat SHandle := TMExtendedStartSession(PortNum,PortType,NIL); If (SHandle > 0) Then begin if (TMSetup(SHan

18、dle) = 1) then The device that will be found is Temperature Device DS18B20, so Family Type is set to $28 FindSecondFamily($28,SHandle) else begin TMEndSession(SHandle); ShowMessage('Fail to setup MicroLan!'); Halt; end; end else begin if (SHandle < 0 ) then Begin ShowMessage('The Defa

19、ult Port Type does not have a driver !'); Halt; end; end; Release control back to window Application.ProcessMessages; until (Done); label18.Caption :=keke1; label19.caption :=keke2; table1.Active :=true; if table1.CanModify then begin table1.Append; table1.Fields0.AsDateTime :=now; table1.Fields

20、1.AsString :=floattostr(diwei1); table1.Fields2.AsFloat :=shangxian1; table1.Fields3.AsFloat :=xiaxian1; table1.Fields4.AsString :=floattostr(diwei2); table1.Fields5.AsFloat :=shangxian2; table1.Fields6.AsFloat:=xiaxian2; table1.Post; end; end;end;procedure TForm1.FindFirstFamily(family : smallint;

21、SHandle: longint); var i , flag : smallint; romstr : string; rom : array0.8 of smallint;begin Set up to find the first device with the family 'family' if (TMFamilySearchSetup(SHandle,stateBuf,family ) = 1 ) then begin if (TMNext(SHandle, stateBuf)= 1) then begin Read the rom number by settin

22、g rom0 to 0 for reading and using TMRom rom0 := 0; TMRom(SHandle,stateBuf,rom); Check if correct type romstr := '' if (family and $7F )= (rom0 and $7F) then begin for i := 7 downto 0 do romstr := romstr + IntToHex(ROMi,2); Label3.caption := 'Serial ROM ID1 : ' + romstr; ReadTemperatu

23、re1(SHandle); end else begin ShowMessage('There is no Temperature Device on the port'); halt; end; end else begin TMEndSession(SHandle); ShowMessage('There is no Temperature Device on the port'); halt; end; end else begin TMEndSession(SHandle); ShowMessage('There is no Temperatur

24、e Device on the port'); halt; end;end;procedure TForm1.ReadTemperature1(session_handle : longint);var tsht, i, tmp1 : smallint; cr,cpc, tmpf,tmp : Extended; rbuf : array0.9 of smallint ; st : longint; CRCByte,xiaxianbyte : Byte;begin tmp := 0.00; access the device if (TMAccess(session_handle,Sta

25、teBuf)= 1) then begin Send the recall E2 command (by setting $B8 to outbyte in TMTouchByte) make sure Scratch is correct TMTouchByte(session_handle, $B8); Send the start T command if (TMAccess(session_handle,StateBuf) = 1) then begin Prepare the strong pullup after next TMTouchByte TMOneWireLevel(se

26、ssion_handle,LEVEL_SET,LEVEL_STRONG_PULL_UP, PRIMED_BYTE); Send the conversion command (by setting $44 to outbyte in TMTouchByte) TMTouchByte(session_handle, $44); Sleep for a second st := GetTickCount + 1000; While (GetTickCount < st) do TMValidSession(Session_handle); Disable the strong pullup

27、TMOneWireLevel(session_handle, LEVEL_SET,LEVEL_NORMAL,PRIMED_NONE); verify conversion is complete by setting $01 to outbit in TMTouchBit and check the return value with 1 if (TMTouchBit(session_handle,$01) = $01) then begin Access device If (TMAccess(session_handle,StateBuf) = 1 ) then begin Send re

28、ad scratch command by setting $BE to outbyte in TMTouchByte TMTouchByte(session_handle,$BE); CRC8 := 0; Read scratch (setting $FF to outbyte in TMTouchByte) and check crc for each byte for i := 0 to 7 do begin rbufi:= TMTouchByte(session_handle, $FF); CRCByte := Byte(rbufi); the byte to run through

29、CRC8 routine CRC8 := TMCRC(1, CRCByte, CRC8, 0); end; Check crc CRCByte := Byte(TMTouchByte(session_handle, $FF); the byte to run through CRC8 routine CRC8 := TMCRC(1, CRCByte, CRC8, 0); if ( CRC8 = 0 ) then begin Calculate the temperarure tsht := rbuf0; if (rbuf1 and $01)= 1) then tsht := tsht or (

30、-256); tmp1 := Round(tsht)/2); tmp := tmp1; cr := rbuf6; cpc := rbuf 7; if (rbuf7 <> 0) then tmp := tmp - (0.25) + (cpc-cr)/cpc; if (rbuf1 and $F8)= $F8) then BEGIN END ELSE BEGIN case (rbuf4 and $60) of $00: begin fenbianlv1 :=9; tmp:=(rbuf1 and $07)*16+(rbuf0 and $f8)/16; diwei1 :=(rbuf0 and

31、 $f8)/16; end; $20: begin fenbianlv1 :=10; tmp:=(rbuf1 and $07)*16+(rbuf0 and $fc)/16; diwei1 :=(rbuf0 and $fc)/16; end; $40: begin fenbianlv1 :=11; tmp:=(rbuf1 and $07)*16+(rbuf0 and $fe)/16; diwei1 :=(rbuf0 and $fe)/16; end; $60: begin fenbianlv1 :=12; tmp:=(rbuf1 and $07)*16+rbuf0/16; diwei1 :=rb

32、uf0/16; end; end; END; tmpf := (tmp * 9 )/5 + 32; label4.caption := 'Current temp1 : ' + FormatFloat('0.0000',tmp) + ' C or ' + FormatFloat('0.0000', tmpf) + ' F' keke1 :=FormatFloat('0.0000',tmp); yuanshi1 :=rbuf4; shangxian1 :=rbuf2 and $7f; xiaxianb

33、yte :=rbuf3 and $80; if xiaxianbyte = 1 then xiaxian1 := (rbuf3 and $7f) * (-1) else xiaxian1 := rbuf3 and $7f; MessageBeep(0); TMEndSession(session_handle); Done := True; end; end; end; end; end;end;procedure TForm1.FindSecondFamily(family : smallint; SHandle: longint); var i , flag : smallint; rom

34、str : string; rom : array0.8 of smallint;begin Set up to find the first device with the family 'family' if (TMFamilySearchSetup(SHandle,stateBuf,family ) = 1 ) then begin Get first device if (TMNext(SHandle, stateBuf)= 1) then if (TMNext(SHandle, stateBuf)= 1) then begin Read the rom number

35、by setting rom0 to 0 for reading and using TMRom rom0 := 0; TMRom(SHandle,stateBuf,rom); Check if correct type romstr := '' if (family and $7F )= (rom0 and $7F) then begin for i := 7 downto 0 do romstr := romstr + IntToHex(ROMi,2); Label10.caption := 'Serial ROM ID2 : ' + romstr; Rea

36、dTemperature2(SHandle); end else begin ShowMessage('There is no Temperature Device on the port'); halt; end; end else begin TMEndSession(SHandle); ShowMessage('There is no Temperature Device on the port'); halt; end else begin TMEndSession(SHandle); ShowMessage('There is no Tempe

37、rature Device on the port'); halt; end; end else begin TMEndSession(SHandle); ShowMessage('There is no Temperature Device on the port'); halt; end;end;procedure TForm1.ReadTemperature2(session_handle : longint);var tsht, i, tmp1 : smallint; cr,cpc, tmpf,tmp : Extended; rbuf : array0.9 of

38、 smallint ; st : longint; CRCByte ,xiaxianbyte: Byte;begin tmp := 0.00; access the device if (TMAccess(session_handle,StateBuf)= 1) then begin Send the recall E2 command (by setting $B8 to outbyte in TMTouchByte) make sure Scratch is correct TMTouchByte(session_handle, $B8); Send the start T command

39、 if (TMAccess(session_handle,StateBuf) = 1) then begin Prepare the strong pullup after next TMTouchByte TMOneWireLevel(session_handle,LEVEL_SET,LEVEL_STRONG_PULL_UP, PRIMED_BYTE); Send the conversion command (by setting $44 to outbyte in TMTouchByte) TMTouchByte(session_handle, $44); Sleep for a sec

40、ond st := GetTickCount + 1000; While (GetTickCount < st) do TMValidSession(Session_handle); Disable the strong pullup TMOneWireLevel(session_handle, LEVEL_SET,LEVEL_NORMAL,PRIMED_NONE); verify conversion is complete by setting $01 to outbit in TMTouchBit and check the return value with 1 if (TMTo

41、uchBit(session_handle,$01) = $01) then begin Access device If (TMAccess(session_handle,StateBuf) = 1 ) then begin Send read scratch command by setting $BE to outbyte in TMTouchByte TMTouchByte(session_handle,$BE); CRC8 := 0; Read scratch (setting $FF to outbyte in TMTouchByte) and check crc for each

42、 byte for i := 0 to 7 do begin rbufi:= TMTouchByte(session_handle, $FF); CRCByte := Byte(rbufi); the byte to run through CRC8 routine CRC8 := TMCRC(1, CRCByte, CRC8, 0); end; Check crc CRCByte := Byte(TMTouchByte(session_handle, $FF); the byte to run through CRC8 routine CRC8 := TMCRC(1, CRCByte, CR

43、C8, 0); if ( CRC8 = 0 ) then begin Calculate the temperarure tsht := rbuf0; if (rbuf1 and $01)= 1) then tsht := tsht or (-256); tmp1 := Round(tsht)/2); tmp := tmp1; cr := rbuf6; cpc := rbuf 7; if (rbuf7 <> 0) then tmp := tmp - (0.25) + (cpc-cr)/cpc; if (rbuf1 and $F8)= $F8) then BEGIN END ELSE

44、 BEGIN case (rbuf4 and $60) of $00: begin tmp:=(rbuf1 and $07)*16+(rbuf0 and $f8)/16; fenbianlv2 :=9; diwei2 :=(rbuf0 and $f8)/16; end; $20: begin fenbianlv2 :=10; tmp:=(rbuf1 and $07)*16+(rbuf0 and $fc)/16; diwei2 :=(rbuf0 and $fc)/16; end; $40: begin fenbianlv2 :=11; tmp:=(rbuf1 and $07)*16+(rbuf0

45、 and $fe)/16;/11位分辨率 diwei2 :=(rbuf0 and $fe)/16; end; $60: begin fenbianlv2 :=12; tmp:=(rbuf1 and $07)*16+rbuf0/16;/12位分辨率 diwei2 :=rbuf0/16; end; end; END; tmpf := (tmp * 9 )/5 + 32; label11.caption := 'Current temp2 : ' + FormatFloat('0.0000',tmp) + ' C or ' + FormatFloat('0.0000', tmpf) + ' F' keke2 :=FormatFloat('0.0000',tmp); yuanshi2 := rbuf4; shangxian2 :=rbuf2 and $7f; xiaxianbyte :=rbuf3 and $80; if xi

溫馨提示

  • 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)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論