物聯(lián)網(wǎng)感知課程設(shè)計_第1頁
物聯(lián)網(wǎng)感知課程設(shè)計_第2頁
物聯(lián)網(wǎng)感知課程設(shè)計_第3頁
物聯(lián)網(wǎng)感知課程設(shè)計_第4頁
物聯(lián)網(wǎng)感知課程設(shè)計_第5頁
已閱讀5頁,還剩17頁未讀 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

目錄TOC\o"1-2"\h\u30710物聯(lián)網(wǎng)感知課程設(shè)計 116817一.功能分析 16779二.概要設(shè)計 1254351.系統(tǒng)組成 1285302.傳感器選型 113751三.詳細設(shè)計 118531.通信模塊程序設(shè)計框圖 1148052.程序設(shè)計 212288四.系統(tǒng)說明 922874五.設(shè)計總結(jié) 1022698六.附錄 10PAGEPAGE6物聯(lián)網(wǎng)感知課程設(shè)計環(huán)境監(jiān)測系統(tǒng)程序設(shè)計課程設(shè)計報告題目:設(shè)計一個環(huán)境監(jiān)測系統(tǒng)。一.功能分析環(huán)境監(jiān)測系統(tǒng)主要包括對環(huán)境變量的采集和顯示。選擇溫濕度傳感器來完成溫度、濕度數(shù)據(jù)的采集。選擇協(xié)調(diào)器串口發(fā)送程序。(3)采用java語言制作相應(yīng)的顯示界面,將采集的變量值實時顯示并給出相應(yīng)提示。二.概要設(shè)計1.系統(tǒng)組成系統(tǒng)大體組成包括:傳感器模塊、數(shù)據(jù)傳送模塊和電機控制模塊。系統(tǒng)框圖如圖1所示。由于傳感器模塊沒有外接電路,因此需要通過中間的協(xié)調(diào)器將數(shù)據(jù)轉(zhuǎn)為串口形式發(fā)送到PC機上。 Zigbee傳輸協(xié)調(diào)器溫、濕度傳感器PC顯示串口傳輸電機圖1系統(tǒng)框圖2.傳感器選型選擇SHT10單片數(shù)字溫濕度傳感器來監(jiān)測環(huán)境。SHT10采用CMOSens專利技術(shù)將溫度濕度傳感器、A/D轉(zhuǎn)換器及數(shù)字接口無縫結(jié)合,使傳感器具有體積小、響應(yīng)速度快、接口簡單、性價比高等特點。電路連接時,接口簡單,兩線連接,SHT10的兩線串行接口(bidirectional2-wire)在傳感器信號讀取和電源功耗方面都做了優(yōu)化處理,其總線類似I2C總線但并不兼容I2C總線。三.詳細設(shè)計1.通信模塊程序設(shè)計框圖1.打開串口(邏輯串口號:根據(jù)設(shè)備管理器的端口)1.打開串口(邏輯串口號:根據(jù)設(shè)備管理器的端口)2.配置串口參數(shù)(波特率、校驗位、起始位、停止位)2.配置串口參數(shù)(波特率、校驗位、起始位、停止位)3.設(shè)置讀寫超時時間4.設(shè)置串口底層接收、發(fā)送緩沖區(qū)大小4.設(shè)置串口底層接收、發(fā)送緩沖區(qū)大小5.設(shè)置串口事件(數(shù)據(jù)可讀事件、啟動發(fā)送數(shù)據(jù)事件、工作線程結(jié)束事件等)5.設(shè)置串口事件(數(shù)據(jù)可讀事件、啟動發(fā)送數(shù)據(jù)事件、工作線程結(jié)束事件等)6.啟動串口后臺工作線程6.啟動串口后臺工作線程2.程序設(shè)計packageorg.serial;importjava.io.BufferedInputStream;importjava.io.BufferedOutputStream;importjava.io.IOException;importjava.io.InputStream;importjava.io.OutputStream;importjava.util.Enumeration;importjava.util.TooManyListenersException;importjava.awt.FlowLayout;importjavax.swing.JButton;importjavax.swing.JFrame;importjavax.swing.JTextField;importgnu.io.CommPortIdentifier;importgnu.io.PortInUseException;importgnu.io.SerialPort;importgnu.io.SerialPortEvent;importgnu.io.SerialPortEventListener;importgnu.io.UnsupportedCommOperationException;/***@項目名稱:illegalsms*@文件名稱:SerialPort.java*@所在包:org.serial*@功能描述:*串口類*@創(chuàng)建者:*@創(chuàng)建日期:2016-12-23*@修改記錄:*/@SuppressWarnings("serial")publicclassDSerialPortextendsJFrameimplementsRunnable,SerialPortEventListener{ privateStringappName="協(xié)調(diào)器數(shù)據(jù)接收";privateinttimeout=2000;//open端口時的等待時間privateintthreadTime=0;privateCommPortIdentifiercommPort;privateSerialPortserialPort;privateInputStreaminputStream;privateOutputStreamoutputStream;/***@方法名稱:listPort*@功能描述:列出所有可用的串口*@返回值類型:void*/@SuppressWarnings("rawtypes")publicvoidlistPort(){ CommPortIdentifiercpid;Enumerationen=CommPortIdentifier.getPortIdentifiers();System.out.println("nowtolistallPortofthisPC:"+en);while(en.hasMoreElements()){cpid=(CommPortIdentifier)en.nextElement();if(cpid.getPortType()==CommPortIdentifier.PORT_SERIAL){System.out.println(cpid.getName()+","+cpid.getCurrentOwner());}}}/***@方法名稱:selectPort*@功能描述:選擇一個端口,比如:COM1*@返回值類型:void*@paramportName*/@SuppressWarnings("rawtypes")publicvoidselectPort(StringportName){mPort=null;CommPortIdentifiercpid;Enumerationen=CommPortIdentifier.getPortIdentifiers();while(en.hasMoreElements()){cpid=(CommPortIdentifier)en.nextElement();if(cpid.getPortType()==CommPortIdentifier.PORT_SERIAL&&cpid.getName().equals(portName)){mPort=cpid;break;}}openPort();}/***@方法名稱:openPort*@功能描述:打開SerialPort*@返回值類型:void*/privatevoidopenPort(){ if(commPort==null)log(String.format("無法找到名字為'%1$s'的串口!",commPort.getName()));else{log("端口選擇成功,當前端口:"+commPort.getName()+",現(xiàn)在實例化SerialPort:");try{serialPort=(SerialPort)commPort.open(appName,timeout);log("實例SerialPort成功!");}catch(PortInUseExceptione){thrownewRuntimeException(String.format("端口'%1$s'正在使用中!",commPort.getName()));}} try{ serialPort.setSerialPortParams(115200,SerialPort.DATABITS_8,//設(shè)置串口讀寫參數(shù) SerialPort.STOPBITS_1,SerialPort.PARITY_NONE); }catch(UnsupportedCommOperationExceptione){}}/***@方法名稱:checkPort*@功能描述:檢查端口是否正確連接*@返回值類型:void*/privatevoidcheckPort(){if(commPort==null)thrownewRuntimeException("沒有選擇端口,請使用"+"selectPort(StringportName)方法選擇端口");if(serialPort==null){thrownewRuntimeException("SerialPort對象無效!");}}/***@方法名稱:write*@功能描述:向端口發(fā)送數(shù)據(jù),請在調(diào)用此方法前先選擇端口,并確定SerialPort正常打開!*@返回值類型:void*@parammessage*/publicvoidwrite(Stringmessage){checkPort();try{outputStream=newBufferedOutputStream(serialPort.getOutputStream());}catch(IOExceptione){thrownewRuntimeException("獲取端口的OutputStream出錯:"+e.getMessage());}try{outputStream.write(message.getBytes());log("信息發(fā)送成功!");}catch(IOExceptione){thrownewRuntimeException("向端口發(fā)送信息時出錯:"+e.getMessage());}finally{try{outputStream.close();}catch(Exceptione){}}}/***@方法名稱:startRead*@功能描述:開始監(jiān)聽從端口中接收的數(shù)據(jù)*@返回值類型:void*@paramtime監(jiān)聽程序的存活時間,單位為秒,0則是一直監(jiān)聽*/publicvoidstartRead(inttime){checkPort();ints;s=serialPort.getBaudRate();System.out.println("波特率為"+s);try{inputStream=newBufferedInputStream(serialPort.getInputStream());}catch(IOExceptione){thrownewRuntimeException("獲取端口的InputStream出錯:"+e.getMessage());}try{serialPort.addEventListener(this);}catch(TooManyListenersExceptione){thrownewRuntimeException(e.getMessage());}serialPort.notifyOnDataAvailable(true);log(String.format("開始監(jiān)聽來自'%1$s'的數(shù)據(jù)",commPort.getName()));if(time>0){this.threadTime=time*1000;Threadt=newThread(this);t.start();log(String.format("監(jiān)聽程序?qū)⒃?1$d秒后關(guān)閉。。。。",threadTime));}}/***@方法名稱:close*@功能描述:關(guān)閉SerialPort*@返回值類型:void*/publicvoidclose(){serialPort.close();serialPort=null;commPort=null;}publicvoidlog(Stringmsg){System.out.println(appName+"-->"+msg);}/***數(shù)據(jù)接收的監(jiān)聽處理函數(shù)*/@OverridepublicvoidserialEvent(SerialPortEventarg0){switch(arg0.getEventType()){caseSerialPortEvent.BI:/*Breakinterrupt,通訊中斷*/caseSerialPortEvent.OE:/*Overrunerror,溢位錯誤*/caseSerialPortEvent.FE:/*Framingerror,傳幀錯誤*/caseSerialPortEvent.PE:/*Parityerror,校驗錯誤*/caseSerialPortEvent.CD:/*Carrierdetect,載波檢測*/caseSerialPortEvent.CTS:/*Cleartosend,清除發(fā)送*/caseSerialPortEvent.DSR:/*Datasetready,數(shù)據(jù)設(shè)備就緒*/caseSerialPortEvent.RI:/*Ringindicator,響鈴指示*/caseSerialPortEvent.OUTPUT_BUFFER_EMPTY:/*Outputbufferisempty,輸出緩沖區(qū)清空*/break;caseSerialPortEvent.DATA_AVAILABLE:/*Dataavailableattheserialport,端口有可用數(shù)據(jù)。讀到緩沖數(shù)組,輸出到終端*/byte[]readBuffer=newbyte[16];try{while(inputStream.available()>0){@SuppressWarnings("unused") intnumBytes=inputStream.read(readBuffer);}outputStream.write("xiaogang".getBytes());Stringhex;StringBufferresult=newStringBuffer(); for(inti=0;i<readBuffer.length;i++){ hex=Integer.toHexString(readBuffer[i]&0xFF); if(hex.length()==1){ hex='0'+hex; } result.append(hex.toUpperCase()); }Strings=newString(result);int[]x=newint[4];int[]y=newint[4];for(inti=0;i<4;i++){ Strings1=s.substring(10+i,10+i+1); if(s1.equals("A")) x[i]=10; elseif(s1.equals("B")) x[i]=11; elseif(s1.equals("C")) x[i]=12; elseif(s1.equals("D")) x[i]=13; elseif(s1.equals("E")) x[i]=14; elseif(s1.equals("F")) x[i]=15; else x[i]=Integer.parseInt(s1); Strings2=s.substring(14+i,14+i+1); if(s2.equals("A")) y[i]=10; elseif(s2.equals("B")) y[i]=11; elseif(s2.equals("C")) y[i]=12; elseif(s2.equals("D")) y[i]=13; elseif(s2.equals("E")) y[i]=14; elseif(s2.equals("F")) y[i]=15; else y[i]=Integer.parseInt(s2);}@Overridepublicvoidrun(){ try{ Thread.sleep(threadTime);serialPort.close();log(String.format("端口''監(jiān)聽關(guān)閉了!",commPort.getName()));}catch(Exceptione){e.printStackTrace();} }四.系統(tǒng)說明本系統(tǒng)搭建了一個溫濕度的采集顯示環(huán)境,能夠采集周圍環(huán)境中的溫度、濕度值,并且實時在PC機上顯示。PC機實時顯示界面如圖:系統(tǒng)采用SHT10單片數(shù)字溫濕度傳感器將溫濕度采集集成在一起,數(shù)據(jù)的讀取要采用時序控制來進行。采集變量的實時顯示由JAVA編制界面來完成。并且在圖形化界面溫濕度上下界及理想溫濕度處輸入數(shù)值,溫濕度采集過程中能對數(shù)據(jù)進行判斷并給出五.設(shè)計總結(jié)這次選題選擇了與日常生活息息相關(guān)的基于物聯(lián)網(wǎng)的溫濕度環(huán)境檢測系統(tǒng),一開始連這個系統(tǒng)該分為哪三個模塊以及各自該做些什么都不清楚,但后來逐漸清楚了可以分為上位機、下位機和通信三個模塊,而我此次負責通信模塊,即將溫濕度傳感器的數(shù)據(jù)通過發(fā)送模塊傳到上位機實現(xiàn)通信。這部分的代碼老師給出了其中一部分(其中一部分庫文件比較老,因此需要安裝64位機的GNU庫文件),我補寫了剩下的一些,其實這里面最難的就是十六進制轉(zhuǎn)換為十進制的那段代碼了,所幸并不是無跡可尋,中途也遇到過很多問題,但通過查詢相關(guān)書籍、請教同學以及上網(wǎng)搜索都逐一解決了,因此最終還是編寫成功了。本來還嘗試擴展功能譬如當溫度過高啟用電機降溫,但由于時間較短,又因為本人能力有限,這部分代碼就沒有編寫。這次課設(shè)雖然時間短但是學到的東西一點兒也不少,對于java編程和與硬件的連接通信也有了一定的感悟,小組成員也分工有序,配合默契,相信下次我們可以實現(xiàn)擴展功能,使這個系統(tǒng)更加完善。六.附錄源程序清單:packageorg.serial;importjava.io.BufferedInputStream;importjava.io.BufferedOutputStream;importjava.io.IOException;importjava.io.InputStream;importjava.io.OutputStream;importjava.util.Enumeration;importjava.util.TooManyListenersException;importjava.awt.FlowLayout;importjavax.swing.JButton;importjavax.swing.JFrame;importjavax.swing.JTextField;importgnu.io.CommPortIdentifier;importgnu.io.PortInUseException;importgnu.io.SerialPort;importgnu.io.SerialPortEvent;importgnu.io.SerialPortEventListener;importgnu.io.UnsupportedCommOperationException;/***@項目名稱:illegalsms*@文件名稱:SerialPort.java*@所在包:org.serial*@功能描述:*串口類*@創(chuàng)建者:*@創(chuàng)建日期:2016-12-23*@修改記錄:*/@SuppressWarnings("serial")publicclassDSerialPortextendsJFrameimplementsRunnable,SerialPortEventListener{ privateStringappName="協(xié)調(diào)器數(shù)據(jù)接收";privateinttimeout=2000;//open端口時的等待時間privateintthreadTime=0;privateCommPortIdentifiercommPort;privateSerialPortserialPort;privateInputStreaminputStream;privateOutputStreamoutputStream;publicstaticintwendu1;publicstaticintwendu2;publicstaticintshidu1;publicstaticintshidu2;publicstaticbooleanopen;publicstaticdoublew1;publicstaticdoublew2;publicstaticdoubles1;publicstaticdoubles2;publicstaticdoublewx;publicstaticdoublesx;JFramef=newJFrame("環(huán)境溫度檢測");JButtonbutton1=newJButton("溫度:"); JButtonbutton2=newJButton("濕度:"); JButtonbutton3=newJButton("溫度下界:"); JButtonbutton4=newJButton("溫度上界:"); JButtonbutton5=newJButton("理想溫度:"); JButtonbutton6=newJButton("濕度上界:"); JButtonbutton7=newJButton("濕度下界:"); JButtonbutton8=newJButton("理想濕度:"); JTextFieldtf1; JTextFieldtf2; JTextFieldtf3; JTextFieldtf4; JTextFieldtf5; JTextFieldtf6; JTextFieldtf7; JTextFieldtf8; JTextFieldtf9; JTextFieldtf10; /***@方法名稱:listPort*@功能描述:列出所有可用的串口*@返回值類型:void*/@SuppressWarnings("rawtypes")publicvoidlistPort(){ CommPortIdentifiercpid;Enumerationen=CommPortIdentifier.getPortIdentifiers();System.out.println("nowtolistallPortofthisPC:"+en);while(en.hasMoreElements()){cpid=(CommPortIdentifier)en.nextElement();if(cpid.getPortType()==CommPortIdentifier.PORT_SERIAL){System.out.println(cpid.getName()+","+cpid.getCurrentOwner());}}}/***@方法名稱:selectPort*@功能描述:選擇一個端口,比如:COM1*@返回值類型:void*@paramportName*/@SuppressWarnings("rawtypes")publicvoidselectPort(StringportName){mPort=null;CommPortIdentifiercpid;Enumerationen=CommPortIdentifier.getPortIdentifiers();while(en.hasMoreElements()){cpid=(CommPortIdentifier)en.nextElement();if(cpid.getPortType()==CommPortIdentifier.PORT_SERIAL&&cpid.getName().equals(portName)){mPort=cpid;break;}}openPort();}/***@方法名稱:openPort*@功能描述:打開SerialPort*@返回值類型:void*/privatevoidopenPort(){ if(commPort==null)log(String.format("無法找到名字為'%1$s'的串口!",commPort.getName()));else{log("端口選擇成功,當前端口:"+commPort.getName()+",現(xiàn)在實例化SerialPort:");try{serialPort=(SerialPort)commPort.open(appName,timeout);log("實例SerialPort成功!");}catch(PortInUseExceptione){thrownewRuntimeException(String.format("端口'%1$s'正在使用中!",commPort.getName()));}} try{ serialPort.setSerialPortParams(115200,SerialPort.DATABITS_8,//設(shè)置串口讀寫參數(shù) SerialPort.STOPBITS_1,SerialPort.PARITY_NONE); }catch(UnsupportedCommOperationExceptione){}}/***@方法名稱:checkPort*@功能描述:檢查端口是否正確連接*@返回值類型:void*/privatevoidcheckPort(){if(commPort==null)thrownewRuntimeException("沒有選擇端口,請使用"+"selectPort(StringportName)方法選擇端口");if(serialPort==null){thrownewRuntimeException("SerialPort對象無效!");}}/***@方法名稱:write*@功能描述:向端口發(fā)送數(shù)據(jù),請在調(diào)用此方法前先選擇端口,并確定SerialPort正常打開!*@返回值類型:void*@parammessage*/publicvoidwrite(Stringmessage){checkPort();try{outputStream=newBufferedOutputStream(serialPort.getOutputStream());}catch(IOExceptione){thrownewRuntimeException("獲取端口的OutputStream出錯:"+e.getMessage());}try{outputStream.write(message.getBytes());log("信息發(fā)送成功!");}catch(IOExceptione){thrownewRuntimeException("向端口發(fā)送信息時出錯:"+e.getMessage());}finally{try{outputStream.close();}catch(Exceptione){}}}/***@方法名稱:startRead*@功能描述:開始監(jiān)聽從端口中接收的數(shù)據(jù)*@返回值類型:void*@paramtime監(jiān)聽程序的存活時間,單位為秒,0則是一直監(jiān)聽*/publicvoidstartRead(inttime){checkPort();ints;s=serialPort.getBaudRate();System.out.println("波特率為"+s);try{inputStream=newBufferedInputStream(serialPort.getInputStream());}catch(IOExceptione){thrownewRuntimeException("獲取端口的InputStream出錯:"+e.getMessage());}try{serialPort.addEventListener(this);}catch(TooManyListenersExceptione){thrownewRuntimeException(e.getMessage());}serialPort.notifyOnDataAvailable(true);log(String.format("開始監(jiān)聽來自'%1$s'的數(shù)據(jù)",commPort.getName()));if(time>0){this.threadTime=time*1000;Threadt=newThread(this);t.start();log(String.format("監(jiān)聽程序?qū)⒃?1$d秒后關(guān)閉。。。。",threadTime));}}/***@方法名稱:close*@功能描述:關(guān)閉SerialPort*@返回值類型:void*/publicvoidclose(){serialPort.close();serialPort=null;commPort=null;}publicvoidlog(Stringmsg){System.out.println(appName+"-->"+msg);}/***數(shù)據(jù)接收的監(jiān)聽處理函數(shù)*/@OverridepublicvoidserialEvent(SerialPortEventarg0){switch(arg0.getEventType()){caseSerialPortEvent.BI:/*Breakinterrupt,通訊中斷*/caseSerialPortEvent.OE:/*Overrunerror,溢位錯誤*/caseSerialPortEvent.FE:/*Framingerror,傳幀錯誤*/caseSerialPortEvent.PE:/*Parityerror,校驗錯誤*/caseSerialPortEvent.CD:/*Carrierdetect,載波檢測*/caseSerialPortEvent.CTS:/*Cleartosend,清除發(fā)送*/caseSerialPortEvent.DSR:/*Datasetready,數(shù)據(jù)設(shè)備就緒*/caseSerialPortEvent.RI:/*Ringindicator,響鈴指示*/caseSerialPortEvent.OUTPUT_BUFFER_EMPTY:/*Outputbufferisempty,輸出緩沖區(qū)清空*/break;caseSerialPortEvent.DATA_AVAILABLE:/*Dataavailableattheserialport,端口有可用數(shù)據(jù)。讀到緩沖數(shù)組,輸出到終端*/byte[]readBuffer=newbyte[16];try{while(inputStream.available()>0){@SuppressWarnings("unused") intnumBytes=inputStream.read(readBuffer);}outputStream.write("xiaogang".getBytes());Stringhex;StringBufferresult=newStringBuffer(); for(inti=0;i<readBuffer.length;i++){ hex=Integer.toHexString(readBuffer[i]&0xFF); if(hex.length()==1){ hex='0'+hex; } result.append(hex.toUpperCase()); }Strings=newString(result);int[]x=newint[4];int[]y=newint[4];for(inti=0;i<4;i++){ Strings1=s.substring(10+i,10+i+1); if(s1.equals("A")) x[i]=10; elseif(s1.equals("B")) x[i]=11; elseif(s1.equals("C")) x[i]=12; elseif(s1.equals("D")) x[i]=13; elseif(s1.equals("E")) x[i]=14; elseif(s1.equals("F")) x[i]=15; else x[i]=Integer.parseInt(s1); Strings2=s.substring(14+i,14+i+1); if(s2.equals("A")) y[i]=10; elseif(s2.equals("B")) y[i]=11; elseif(s2.equals("C")) y[i]=12; elseif(s2.equals("D")) y[i]=13; elseif(s2.equals("E")) y[i]=14; elseif(s2.equals("F")) y[i]=15; else y[i]=Integer.parseInt(s2);}wendu1=(4096*x[0]+256*x[1]+16*x[2]+x[3])/100;wendu2=(4096*x[0]+256*x[1]+16*x[2]+x[3])%100;shidu1=(4096*y[0]+256*y[1]+16*y[2]+y[3])/100;shidu2=(4096*y[0]+256*y[1]+16*y[2]+y[3])%100;if(wendu1>0&&wendu1<100){System.out.println(wendu1+"."+wendu2+"°"+""+shidu1+"."+shidu2+"%"); tf1.setText(String.valueOf(wendu1+"."+wendu2+"°")); tf2.setText(String.valueOf(shidu1+"."+shidu2+"%")); }if(open=true){ w1=Double.parseDouble(tf3.getText()); w2=Double.parseDouble(tf4.getText()); wx=Double.parseDouble(tf5.getText()); s1=Double.parseDouble(tf6.getText()); s2=Double.parseDouble(tf7.getText()); sx=Double.parseDouble(tf8.getText()); if(wendu1>0&&wendu1<100&&shidu1>0&&shidu1<100){ tf1.setText(String.valueOf(wendu1+"."+wendu2+"°")); tf2.setText(String.valueOf(shidu1+"."+shidu2+"%")); if(wendu1>=w1&&wendu1<wx){ tf9.setText(String.valueOf("當前溫度低于舒適溫度")); } if(wendu1>wx&&wendu1<=w2){

溫馨提示

  • 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)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論