基于VB的DSP-與PC機(jī)的串行通信_(tái)第1頁(yè)
基于VB的DSP-與PC機(jī)的串行通信_(tái)第2頁(yè)
基于VB的DSP-與PC機(jī)的串行通信_(tái)第3頁(yè)
基于VB的DSP-與PC機(jī)的串行通信_(tái)第4頁(yè)
基于VB的DSP-與PC機(jī)的串行通信_(tái)第5頁(yè)
已閱讀5頁(yè),還剩29頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、基于VB的DSP 與PC機(jī)的串行通信摘 要: 要實(shí)現(xiàn)對(duì)現(xiàn)代變壓器特性試驗(yàn)儀的數(shù)據(jù)處理和分析, 必須解決PC 機(jī)和DSP 的串行通信問(wèn)題。文中介紹了基于Visual Basic6. 0 的DSP 與PC 機(jī)的串行通信, 構(gòu)建了兩者的串行通信體系結(jié)構(gòu), 并通過(guò)具體的實(shí)例給出了DSP 與PC 機(jī)之間串行通信的方法。結(jié)果表明, 該方法簡(jiǎn)單有效、功能強(qiáng)大, 方便地實(shí)現(xiàn)了PC 機(jī)和DSP 之間的通信, 借鑒性高。關(guān)鍵詞: 串行通信; DSP ;DSC 計(jì)算機(jī)技術(shù)在工業(yè)控制領(lǐng)域的運(yùn)用越來(lái)越廣泛,往往需要由一臺(tái)主機(jī)去控制多臺(tái)從機(jī),當(dāng)上位機(jī)距離下位機(jī)較遠(yuǎn)時(shí),就需要使用串行數(shù)據(jù)通信。串行通信由于具有通信線路簡(jiǎn)單,

2、數(shù)據(jù)傳輸可靠等優(yōu)點(diǎn),在工業(yè)控制。數(shù)據(jù)采集和實(shí)時(shí)控制等場(chǎng)合得到了廣泛的運(yùn)用。其中, DSP 主要進(jìn)行對(duì)數(shù)據(jù)的實(shí)時(shí)采集、處理、控制, 再通過(guò)串口將數(shù)據(jù)送入PC 機(jī)的緩沖區(qū), 然后由PC 機(jī)對(duì)數(shù)據(jù)進(jìn)行進(jìn)一步處理, 以便得到所需的圖形、圖像及實(shí)驗(yàn)結(jié)果。采用VB 語(yǔ)言中的通信控件MSComm 能夠很好地完成二者之間的通信功能。 系統(tǒng)簡(jiǎn)介 近年來(lái),隨著集成電路技術(shù)和制造工藝的突飛猛進(jìn),推動(dòng)了數(shù)字信號(hào)處理方法和運(yùn)用的研究。告訴數(shù)字信號(hào)處理方法和運(yùn)用的研究。告訴數(shù)字信號(hào)處理技術(shù)的發(fā)展及其制造成本的降低,使數(shù)字信號(hào)處理技術(shù)在電力系統(tǒng)的各個(gè)研究領(lǐng)域得到了廣泛的運(yùn)用,DSP技術(shù)被運(yùn)用于某些電力產(chǎn)品的開發(fā)研究中。TM

3、S320F2812 DSP是美國(guó)德州儀器公司最新推出的數(shù)字信號(hào)處理器之一,其運(yùn)算精度達(dá)到了32位,處理能力達(dá)到150MI/S,從而大大改善了運(yùn)用的靈活性,尤其是為電機(jī)及其他運(yùn)動(dòng)控制領(lǐng)域的運(yùn)用提供了良好的平臺(tái)。 CCS是TI公司推出的用于各個(gè)系列DSP芯片的集成開發(fā)壞境,它采用了Windows風(fēng)格的界面,集編輯,翻譯,鏈接,軟件仿真,硬件調(diào)試以及實(shí)時(shí)跟蹤等功能于一體,極大的方便了程序的設(shè)計(jì)和開發(fā)。在使用CCS前首先要在PC機(jī)上進(jìn)行安裝,在安裝完畢后,就可以通過(guò)Setup CCS設(shè)置硬件和軟件,在進(jìn)入CCS環(huán)境進(jìn)行編輯或修改。2.通信原理和方法 上位機(jī)首先向DSP 發(fā)出接收數(shù)據(jù)的指令, DSP 接

4、收到來(lái)自上位機(jī)的指令后, 進(jìn)行判斷, 看其是否正確。如果正確, 則向上位機(jī)傳送數(shù)據(jù)( 包含首尾校驗(yàn)字節(jié)) ; 否則, DSP 拒絕向上位機(jī)傳送數(shù)據(jù)。上位機(jī)接收到DSP 傳來(lái)的數(shù)據(jù)后同樣要判斷正確與否, 如果正確, 則接收, 否則拒絕接收。DSP 接收到此指令后, 進(jìn)行判斷, 如果正確, 則向上位機(jī)發(fā)送相應(yīng)的組數(shù)據(jù)2 次;如果不正確, DSP 則處于等待狀態(tài), 不發(fā)送數(shù)據(jù)。上位機(jī)收到來(lái)自DSP 的數(shù)據(jù)后, 首先進(jìn)行數(shù)據(jù)校驗(yàn), 如果校驗(yàn)成功( 即接收到的兩組數(shù)據(jù)相同) , 則說(shuō)明接收到的數(shù)據(jù)是正確的, 從而可以進(jìn)行處理, 否則拒絕接收, 并顯示相關(guān)警告信息。VC編寫串口程序的方法和流程建立項(xiàng)目:打

5、開VC6.0,建立一個(gè)基于對(duì)話框的MFC應(yīng)用程序SCommTest在項(xiàng)目中插入MSComm控件選擇Project菜單下AddToProject子菜單中的ComponentsandControls選項(xiàng),在彈出的對(duì)話框中雙擊RegisteredActiveXControls項(xiàng),則所有注冊(cè)過(guò)的ActiveX控件出現(xiàn)在列表框中。選擇MicrosoftCommunicationsControl,version6.0,單擊Insert按鈕將它插入到Project中來(lái),接受缺省的選項(xiàng)。這時(shí)在ClassView視窗中就可以看到CMSComm類了,并且在控件工具欄Controls中出現(xiàn)了電話圖標(biāo),用鼠標(biāo)將此圖標(biāo)

6、拖到對(duì)話框中,程序運(yùn)行后,這個(gè)圖標(biāo)是看不到的。3.利用ClassWizard定義CMSComm類控制對(duì)象打開ClassWizardMemberViariables選項(xiàng)卡,選擇CSCommTestDlg類,為IDC_MSCOMM1添加控制變量:m_ctrlComm,這時(shí)在對(duì)話框頭文件中自動(dòng)加入了/AFX_INCLUDES()#includemscomm.h/AFX_INCLUDES。4.在對(duì)話框中添加控件向主對(duì)話框中添加兩個(gè)編輯框,一個(gè)用于接收顯示數(shù)據(jù)ID為IDC_EDIT_RXDATA,另一個(gè)用于輸入發(fā)送數(shù)據(jù),ID為IDC_EDIT_TXDATA,再添加一個(gè)按鈕,功能是按一次就把發(fā)送編輯框中的

7、內(nèi)容發(fā)送一次,將其ID設(shè)為IDC_BUTTON_MANUALSEND。將接收編輯框的PropertiesStyles中把Miltiline和VerticalScroll屬性選上。再打開ClassWizardMemberViariables選項(xiàng)卡,選擇CSCommTestDlg類,為IDC_EDIT_RXDATA添加CString變量m_strRXData,為IDC_EDIT_TXDATA添加CString變量m_strTXData。說(shuō)明:m_strRXData和m_strTXData分別用來(lái)放入接收和發(fā)送的字符數(shù)據(jù)。5.添加串口事件消息處理函數(shù)OnComm()打開ClassWizardMess

8、ageMaps,選擇類CSCommTestDlg,選擇IDC_MSCOMM1,雙擊消息OnComm,將彈出的對(duì)話框中將函數(shù)名改為OnComm,(好記而已)OK。這個(gè)函數(shù)是用來(lái)處理串口消息事件的,如每當(dāng)串口接收到數(shù)據(jù),就會(huì)產(chǎn)生一個(gè)串口接收數(shù)據(jù)緩沖區(qū)中有字符的消息事件,我們剛才添加的函數(shù)就會(huì)執(zhí)行,我們?cè)贠nComm()函數(shù)加入相應(yīng)的處理代碼就能實(shí)現(xiàn)自已想要的功能了。請(qǐng)你在函數(shù)中加入如下代碼:voidCSCommTestDlg:OnComm()/TODO:AddyourcontrolnotificationhandlercodehereVARIANTvariant_inp;COleSafeArray

9、safearray_inp;LONGlen,k;BYTErxdata2048;/設(shè)置BYTE數(shù)組An8-bitintegerthatisnotsigned.CStringstrtemp;if(m_ctrlComm.GetCommEvent()=2)/事件值為2表示接收緩沖區(qū)內(nèi)有字符/以下你可以根據(jù)自己的通信協(xié)議加入處理代碼variant_inp=m_ctrlComm.GetInput();/讀緩沖區(qū)safearray_inp=variant_inp;/VARIANT型變量轉(zhuǎn)換為ColeSafeArray型變量len=safearray_inp.GetOneDimSize();/得到有效數(shù)據(jù)長(zhǎng)度

10、for(k=0;klen;k+)safearray_inp.GetElement(&k,rxdata+k);/轉(zhuǎn)換為BYTE型數(shù)組for(k=0;kMessageMaps,選擇類CSCommTestDlg,選擇IDC_BUTTON_MANUALSEND,雙擊BN_CLICKED添加OnButtonManualsend()函數(shù),并在函數(shù)中添加如下代碼:voidCSCommTestDlg:OnButtonManualsend()/TODO:AddyourcontrolnotificationhandlercodehereUpdateData(TRUE);/讀取編輯框內(nèi)容m_ctrlComm.Set

11、Output(COleVariant(m_strTXData);/發(fā)送數(shù)據(jù)運(yùn)行程序,在發(fā)送編輯框中隨意輸入點(diǎn)什么,單擊發(fā)送按鈕,??!看看,在另一端的串口調(diào)試助手(或別的調(diào)試工具)接收框里出現(xiàn)了什么。最后說(shuō)明一下,由于用到VC控件,在沒有安裝VC的計(jì)算機(jī)上運(yùn)行時(shí)要從VC中把mscomm32.ocx、msvcrt.dll、mfc42.dll拷到Windows目錄下的System子目錄中(win2000為System32)DSC控制UART芯片的機(jī)制異步串口通信協(xié)議,工作原理是將傳輸數(shù)據(jù)的每個(gè)字符以串行方式一位接一位的傳輸.UART工作原理其中每一位(bit)的意義如下:起始位:先發(fā)出一個(gè)邏輯“0”

12、的信號(hào),表示傳輸字符的開始。數(shù)據(jù)位:緊跟起始位之后。數(shù)據(jù)位的個(gè)數(shù)可以是4、5、6、7、8等,構(gòu)成一個(gè)字符。通常采用ASCII碼。從最低位開始傳送,靠時(shí)鐘來(lái)定位。奇偶校驗(yàn)位:數(shù)據(jù)位加上這一位后(跟在數(shù)據(jù)位尾部),使得“1”的位數(shù)應(yīng)為偶數(shù)(偶校驗(yàn))或奇數(shù)(奇校驗(yàn)),以此來(lái)校驗(yàn)數(shù)據(jù)傳送的正確性。停止位:它是一個(gè)字符數(shù)據(jù)的結(jié)束標(biāo)志??梢允?位、1.5位、2位的高電平(邏輯“1”)。-2-空閑位:處于邏輯“1”狀態(tài),表示當(dāng)前線路上沒有數(shù)據(jù)的傳送。波特率:是衡量數(shù)據(jù)傳輸速率的指針。表示為每秒鐘傳送的二進(jìn)制位數(shù)(bit數(shù))。例如資料傳送速率為120字符/秒,而每一個(gè)字符為10位,則其傳送的波特率為10120

13、1200字符/秒1200波特。5.PC機(jī)于DSP串口的通信設(shè)計(jì)5.1 PC機(jī)的通信流程設(shè)計(jì) 在編程時(shí),首先要接受DSP發(fā)送來(lái)的信息,證明DSP與PC機(jī)通信成功。然后再在PC機(jī)上輸入數(shù)據(jù)通過(guò)RS-232傳送給DSP,DSP接收后再通過(guò)RS-232把數(shù)據(jù)回送給PC機(jī)、3.2PC機(jī)通信的軟件實(shí)現(xiàn) 以下是手動(dòng)發(fā)送和接收的部分程序:Private Sub Form_Load()MSComm1.Commport =1MSComm1.Settings=”9600,n,8,1”MSComm1.PortOpen = TureEnd SubPrivate Sub commandl_Click()MSComml.o

14、utput = Text.TextEnd SubPrivate Sub command2_Click()Dim at As Stringst = MSComm1,InputText2.Text = stEnd Sub 設(shè)計(jì)自動(dòng)發(fā)送和接收時(shí),需要再加入一個(gè)時(shí)鐘控件,暫時(shí)設(shè)定時(shí)間隔為3000ms,這樣每個(gè)3s就會(huì)自動(dòng)發(fā)送和接收到一組數(shù)據(jù)。5.3 DSP的通信流程設(shè)計(jì)在設(shè)計(jì)時(shí),首先由DSP向PC機(jī)發(fā)送一串字符,證明DSP與PC機(jī)通信成功。如果PC機(jī)有數(shù)據(jù)向DSP發(fā)送,那么DSP就將PC機(jī)發(fā)送來(lái)的數(shù)據(jù)會(huì)送給PC機(jī)。 DSP通信流程圖如圖所示開始 初始化DSP時(shí)鐘初始化SCI各控制寄存器 發(fā)送啟動(dòng)信息到

15、串口 串口是否有輸入信息? 否 接收到信息回發(fā) 是 DSP通信流程圖5.4 DSP通信的軟件設(shè)計(jì)上位機(jī)VC串口程序/ SCommTestDlg.cpp : implementation file/#include stdafx.h#include SCommTest.h#include SCommTestDlg.h#ifdef _DEBUG#define new DEBUG_NEW#undef THIS_FILEstatic char THIS_FILE = _FILE_;#endif/ CSCommTestDlg dialogCString statecom=COM1,statebit=8;

16、/注意全局變量的初始化,用于顯示狀態(tài)編輯框int com_position=0,bit_position=3,baud_position=3,stop_position=0,check_position=0;/用來(lái)設(shè)置初始化光標(biāo)位置const CString baud10=1200,2400,4800,9600,14400,19200,38400,56000,57600,115200;/設(shè)置波特率全局變量const CString stop2=1,2;/停止位const CString check3=N,O,E;/校驗(yàn)位int NUM_RX=0,NUM_TX=0;/接收數(shù)據(jù)的計(jì)數(shù)值CSComm

17、TestDlg:CSCommTestDlg(CWnd* pParent /*=NULL*/): CDialog(CSCommTestDlg:IDD, pParent)/AFX_DATA_INIT(CSCommTestDlg)m_strEditTXData = _T();m_strEditRXData = _T();m_strRxdata = _T();m_strTxNum = _T();/AFX_DATA_INIT/ Note that LoadIcon does not require a subsequent DestroyIcon in Win32m_hIcon = AfxGetApp(

18、)-LoadIcon(IDR_MAINFRAME);void CSCommTestDlg:DoDataExchange(CDataExchange* pDX)CDialog:DoDataExchange(pDX);/AFX_DATA_MAP(CSCommTestDlg)DDX_Control(pDX, IDC_COMBO3_CHECKBIT, m_ctrlCheck);DDX_Control(pDX, IDC_COMBO5_STOPBIT, m_ctrlStopBit);DDX_Control(pDX, IDC_COMBO4_DATABIT, m_ctrlDataBit);DDX_Contro

19、l(pDX, IDC_COMBO2_BAUD, m_ctrlBaud);DDX_Control(pDX, IDC_EDIT1_STATE, m_ctrlState);DDX_Control(pDX, IDC_COMBO1_COMSECLET, m_ctrlComSelect);DDX_Control(pDX, IDC_BUTTON2_OPENIF, m_ctrlOpenIf);DDX_Control(pDX, IDC_MSCOMM1, m_ctrlComm);DDX_Text(pDX, IDC_EDIT2_TXDATA, m_strEditTXData);DDX_Text(pDX, IDC_E

20、DIT1_RXDATA, m_strEditRXData);DDX_Text(pDX, IDC_EDIT3_RX, m_strRxdata);DDX_Text(pDX, IDC_EDIT2_TX, m_strTxNum);/AFX_DATA_MAPBEGIN_MESSAGE_MAP(CSCommTestDlg, CDialog)/AFX_MSG_MAP(CSCommTestDlg)ON_WM_PAINT()ON_WM_QUERYDRAGICON()ON_BN_CLICKED(IDC_BUTTON1_SEND, OnButton1Send)ON_BN_CLICKED(IDC_BUTTON2_OP

21、ENIF, OnButton2Openif)ON_BN_CLICKED(IDC_BUTTON1_CLEARSHOW, OnButton1Clearshow)ON_BN_CLICKED(IDC_BUTTON2_CLEARSEND, OnButton2Clearsend)ON_CBN_CLOSEUP(IDC_COMBO1_COMSECLET, OnCloseComseclet)ON_CBN_CLOSEUP(IDC_COMBO2_BAUD, OnCloseupCombo2Baud)ON_CBN_CLOSEUP(IDC_COMBO4_DATABIT, OnCloseupCombo4Databit)ON

22、_CBN_CLOSEUP(IDC_COMBO5_STOPBIT, OnCloseupCombo5Stopbit)ON_CBN_CLOSEUP(IDC_COMBO3_CHECKBIT, OnCloseupCombo3Checkbit)ON_BN_CLICKED(IDC_BUTTON1_RESETCOUN, OnButton1Resetcoun)/AFX_MSG_MAPEND_MESSAGE_MAP()/ CSCommTestDlg message handlersBOOL CSCommTestDlg:OnInitDialog()/*串口端的選擇列表*(CComboBox*)GetDlgItem(

23、IDC_COMBO1_COMSECLET)-AddString(_T(COM1);*/CDialog:OnInitDialog();CString com;for(int i=16;i0;i-)com.Format(COM%d,i);/com口轉(zhuǎn)換整形變成字符型m_ctrlComSelect.InsertString(0,com);/將字符插入到組合框在m_ctrlComSelect.SetCurSel(0); /光標(biāo)定位/*波特率選擇列表*/for(int j=9;j=0;j-)m_ctrlBaud.InsertString(0,baudj);/將波特率字符插入m_ctrlBaud.SetC

24、urSel(3);/*數(shù)據(jù)位列表*/CString a1;for(int n=8;n=5;n-)a1.Format(%d位,n);/整形波特率數(shù)據(jù)轉(zhuǎn)化成字符型m_ctrlDataBit.InsertString(0,a1);/將波特率字符插入m_ctrlDataBit.SetCurSel(3);/*停止位列表*/for(int k=1;k=0;k-)m_ctrlStopBit.InsertString(0,stopk);m_ctrlStopBit.SetCurSel(0);/*校驗(yàn)位列表*/for(int w=2;w=0;w-)m_ctrlCheck.InsertString(0,checkw

25、);m_ctrlCheck.SetCurSel(0);/*串口端的初始化*/m_ctrlComm.SetCommPort(1);/選擇Com1m_ctrlComm.SetInputMode(1);/設(shè)置輸入方式為二進(jìn)制方式m_ctrlComm.SetInBufferSize(1024);/設(shè)置輸入緩沖區(qū)大小m_ctrlComm.SetOutBufferSize(512);/設(shè)置輸出緩沖區(qū)大小m_ctrlComm.SetSettings(9600,n,8,1);/波特率是9600,無(wú)校驗(yàn),8個(gè)數(shù)據(jù)位,1個(gè)停止位if(!m_ctrlComm.GetPortOpen()m_ctrlComm.SetP

26、ortOpen(TRUE);/初始化打開串口m_ctrlComm.SetRThreshold(1);/參數(shù)1表示每當(dāng)串口接受緩沖區(qū)中有多于或者等于1個(gè)字符時(shí)將引發(fā)OnComm事件m_ctrlComm.SetInputLen(0);/設(shè)置當(dāng)前接手區(qū)數(shù)據(jù)長(zhǎng)度為0m_ctrlComm.GetInput();/預(yù)讀緩沖區(qū)以清除殘留數(shù)據(jù)m_ctrlState.SetWindowText(端口:+statecom+ 波特率:+baudbaud_position+ 數(shù)據(jù)位:+statebit+ 停止位:+stopstop_position+ 校驗(yàn)位:+checkcheck_position);/顯示在狀態(tài)編

27、輯框return TRUE; / return TRUE unless you set the focus to a control /*int a = 2;char b=A;CString str;str.Format(%d%c,a,b);m_ctrlComSelect.InsertString(16,str);*/格式化的形式S.Format(%a%b%c,A,B,C),代表把類型a,b,c的值A(chǔ),B,C轉(zhuǎn)化為字符串,存入S中/*波特率選擇列表*/void CSCommTestDlg:OnPaint() if (IsIconic()CPaintDC dc(this); / device c

28、ontext for paintingSendMessage(WM_ICONERASEBKGND, (WPARAM) dc.GetSafeHdc(), 0);/ Center icon in client rectangleint cxIcon = GetSystemMetrics(SM_CXICON);int cyIcon = GetSystemMetrics(SM_CYICON);CRect rect;GetClientRect(&rect);int x = (rect.Width() - cxIcon + 1) / 2;int y = (rect.Height() - cyIcon +

29、1) / 2;/ Draw the icondc.DrawIcon(x, y, m_hIcon);elseCDialog:OnPaint();/ The system calls this to obtain the cursor to display while the user drags/ the minimized window.HCURSOR CSCommTestDlg:OnQueryDragIcon()return (HCURSOR) m_hIcon;/串口開關(guān)按鈕處理函數(shù)void CSCommTestDlg:OnButton2Openif() BOOL open=m_ctrlCo

30、mm.GetPortOpen();CString data;if(open)m_ctrlOpenIf.SetWindowText(連接串口);m_ctrlComm.SetPortOpen(FALSE);/關(guān)閉串口else m_ctrlOpenIf.SetWindowText(斷開串口);m_ctrlComm.SetCommPort(com_position+1);/定義全部變量com_position設(shè)置COM口data.Format(%s,%s,%d,%s,baudbaud_position,checkcheck_position,bit_position+5,stopstop_positi

31、on);/將波特率,校驗(yàn)位,數(shù)據(jù)位,停止位格式化,方便設(shè)置m_ctrlComm.SetSettings(data);/設(shè)置(波特率、數(shù)據(jù)位、校驗(yàn)位、停止位)m_ctrlComm.SetPortOpen(TRUE);/開打串口m_ctrlState.SetWindowText(端口:+statecom+ 波特率:+baudbaud_position+ 數(shù)據(jù)位:+statebit+ 停止位:+stopstop_position+ 校驗(yàn)位:+checkcheck_position);m_ctrlState.LineScroll(0,1);BEGIN_EVENTSINK_MAP(CSCommTestD

32、lg, CDialog) /AFX_EVENTSINK_MAP(CSCommTestDlg)ON_EVENT(CSCommTestDlg, IDC_MSCOMM1, 1 /* OnComm */, Oncomm, VTS_NONE)/AFX_EVENTSINK_MAPEND_EVENTSINK_MAP()/接收端串口消息處理函數(shù)void CSCommTestDlg:Oncomm() VARIANT variant_inp;COleSafeArray safearray_inp;LONG len,k;BYTE rxdata2048;/設(shè)置BYTE數(shù)組CString strtemp,Char_Rx

33、;if(m_ctrlComm.GetCommEvent()=2)/當(dāng)事件值為2時(shí),表示接收緩沖區(qū)內(nèi)有字符variant_inp=m_ctrlComm.GetInput();/讀緩沖區(qū)safearray_inp=variant_inp;/variant_inp類型轉(zhuǎn)換safearray_inplen=safearray_inp.GetOneDimSize();/計(jì)算得到有效數(shù)據(jù)的長(zhǎng)度f(wàn)or(k=0;klen;k+)safearray_inp.GetElement(&k,rxdata+k);/轉(zhuǎn)換為BYTE類型for(k=0;k=10)Light_Change(Light_Run_PORT,Lig

34、ht_Run);/指示燈的亮、暗狀態(tài)切換runcount=0;/2 主循環(huán)執(zhí)行的任務(wù) mQSCIReflag = QSCIReN(0,1,SerialBuffRxdata); /等待接收1個(gè)數(shù)據(jù) if (mQSCIReflag = 0) QSCISendN(0,19,SerialBuff1); QSCISendN(0,1,SerialBuffRxdata);/發(fā)送接到的數(shù)據(jù) 體會(huì)收獲 本次課程設(shè)計(jì)的初步完成讓我頗為感觸,首先由于DSP學(xué)的不是太好,導(dǎo)致很多問(wèn)題都處于一知半解狀態(tài),只能通過(guò)上網(wǎng)查詢資料進(jìn)行課程設(shè)計(jì)的制作,其次就是對(duì)于該原理只能通過(guò)百度文庫(kù)進(jìn)行了解。再有就是最后程序的設(shè)計(jì)編寫基本上

35、本次試驗(yàn)的最難點(diǎn),幸好上學(xué)期DSP.DSC考試設(shè)計(jì)到這個(gè)問(wèn)題,翻閱課本才模模糊糊的套用下來(lái)。過(guò)程頗為艱辛,但結(jié)果還是比較欣慰的。經(jīng)歷這次課程設(shè)計(jì)后我會(huì)加強(qiáng)對(duì)課程設(shè)計(jì)的重視和所學(xué)知識(shí)運(yùn)用的問(wèn)題,希望以后的課程設(shè)計(jì)越來(lái)越好。參考文獻(xiàn): 1 . 胡啟凡, 曹利安. 變壓器試驗(yàn)技術(shù) M . 北京: 機(jī)械工業(yè)出版社, 2000. 2 . 劉和平. TMS320LF2407XDSP 結(jié)構(gòu)、原理及應(yīng)用 M . 北京: 北京航空航天大學(xué)出版社, 2002. 3 . 李. 卓, 王德春. VB 環(huán)境下實(shí)現(xiàn)GPS GLONASS 組合接收機(jī)的串行通信 J . 微機(jī)發(fā)展, 2004, 14( 10) : 82- 8

36、4. 4 . 仵. 浩. Visual Basic 串口通信工程開發(fā)實(shí)例導(dǎo)航 M . 北京: 人民郵電出版社, 2003. 5 . 范逸之. Visual Basic 與RS232 串行通訊控制 M . 北京: 中國(guó)青年出版社, 1998. ( 上接第95 頁(yè)) 現(xiàn)在嵌入系統(tǒng)配置越來(lái)越高已經(jīng)變成了必然的趨勢(shì), 然而還是存在大量的低端產(chǎn)品, 在處理速度和內(nèi)存方面還達(dá)不到利用圖形庫(kù)的性能, 所以依然有字符方式下的需求, 文中介紹的一種在Linux 控制臺(tái)方式下應(yīng)用程序集成的機(jī)制, 為能在字符方式下實(shí)現(xiàn)成型系統(tǒng)打下了基礎(chǔ)。1 . 探矽工作室. 嵌入式系統(tǒng)開發(fā)圣經(jīng) M . 北京: 中國(guó)青年出版社, 2

37、002. 2 . 毛德操, 胡希明. Linux 內(nèi)核原代碼情景分析 M . 杭州: 浙江大學(xué)出版社, 2001. 3 . RUBINI A, CORBET J. LINUX設(shè)備驅(qū)動(dòng)程序 M . 魏永明, 駱. 剛, 姜. 君譯. 北京: 中國(guó)電力出版社, 2002. 4 . Newbam C, Rosenblatt B. 學(xué)習(xí)bash M . 徐. 炎, 查石祥譯. 北京: 機(jī)械工業(yè)出版社, 2003. 5 . BOVET D P, CESAT I M. 深入理解L INUX 內(nèi)核 M . 陳莉君譯. 北京: 中國(guó)電力出版社, 2004. .98.微 機(jī) 發(fā) 展. 第 15 卷附錄資料:不需

38、要的可以自行刪除bat文件的基本應(yīng)用bat是dos下的批處理文件 .cmd是nt內(nèi)核命令行環(huán)境的另一種批處理文件 從更廣義的角度來(lái)看,unix的shell腳本以及其它操作系統(tǒng)甚至應(yīng)用程序中由外殼進(jìn)行解釋執(zhí)行的文本,都具有與批處理文件十分相似的作用,而且同樣是由專用解釋器以行為單位解釋執(zhí)行,這種文本形式更通用的稱謂是腳本語(yǔ)言。所以從某個(gè)程度分析,batch, unix shell, awk, basic, perl 等腳本語(yǔ)言都是一樣的,只不過(guò)應(yīng)用的范圍和解釋的平臺(tái)各有不同而已。甚至有些應(yīng)用程序仍然沿用批處理這一稱呼,而其內(nèi)容和擴(kuò)展名與dos的批處理卻又完全不同。 = 首先批處理文件是一個(gè)文本文

39、件,這個(gè)文件的每一行都是一條DOS命令(大部分時(shí)候就好象我們?cè)贒OS提示符下執(zhí)行的命令行一樣),你可以使用DOS下的Edit或者Windows的記事本(notepad)等任何文本文件編輯工具創(chuàng)建和修改批處理文件。 = 注 = 批處理文件中完全可以使用非dos命令,甚至可以使用不具有可執(zhí)行特性的普通數(shù)據(jù)性文件,這緣于windows系統(tǒng)這個(gè)新型解釋平臺(tái)的涉入,使得批處理的應(yīng)用越來(lái)越邊緣化。所以我們討論的批處理應(yīng)該限定在dos環(huán)境或者命令行環(huán)境中,否則很多觀念和設(shè)定都需要做比較大的變動(dòng)。 = 其次,批處理文件是一種簡(jiǎn)單的程序,可以通過(guò)條件語(yǔ)句(if)和流程控制語(yǔ)句(goto)來(lái)控制命令運(yùn)行的流程,在

40、批處理中也可以使用循環(huán)語(yǔ)句(for)來(lái)循環(huán)執(zhí)行一條命令。當(dāng)然,批處理文件的編程能力與C語(yǔ)言等編程語(yǔ)句比起來(lái)是十分有限的,也是十分不規(guī)范的。批處理的程序語(yǔ)句就是一條條的DOS命令(包括內(nèi)部命令和外部命令),而批處理的能力主要取決于你所使用的命令。 = 注 = 批處理文件(batch file)也可以稱之為批處理程序(batch program),這一點(diǎn)與編譯型語(yǔ)言有所不同,就c語(yǔ)言來(lái)說(shuō),擴(kuò)展名為c或者cpp的文件可以稱之為c語(yǔ)言文件或者c語(yǔ)言源代碼,但只有編譯連接后的exe文件才可以稱之為c語(yǔ)言程序。因?yàn)榕幚砦募旧砑染哂形谋镜目勺x性,又具有程序的可執(zhí)行性,這些稱謂的界限是比較模糊的。 = 第

41、三,每個(gè)編寫好的批處理文件都相當(dāng)于一個(gè)DOS的外部命令,你可以把它所在的目錄放到你的DOS搜索路徑(path)中來(lái)使得它可以在任意位置運(yùn)行。一個(gè)良好的習(xí)慣是在硬盤上建立一個(gè)bat或者batch目錄(例如C:BATCH),然后將所有你編寫的批處理文件放到該目錄中,這樣只要在path中設(shè)置上c:batch,你就可以在任意位置運(yùn)行所有你編寫的批處理程序。 = 注 = 純以dos系統(tǒng)而言,可執(zhí)行程序大約可以細(xì)分為五類,依照?qǐng)?zhí)行優(yōu)先級(jí)由高到低排列分別是:DOSKEY宏命令(預(yù)先駐留內(nèi)存),COMMAND.COM中的內(nèi)部命令(根據(jù)內(nèi)存的環(huán)境隨時(shí)進(jìn)駐內(nèi)存),以com為擴(kuò)展名的可執(zhí)行程序(由 直接載入內(nèi)存),

42、以exe位擴(kuò)展名的可執(zhí)行程序(由 重定位后載入內(nèi)存),以bat位擴(kuò)展名的批處理程序(由 解釋分析,根據(jù)其內(nèi)容按優(yōu)先級(jí)順序調(diào)用第2,3,4,5種可執(zhí)行程序,分析一行,執(zhí)行一行,文件本身不載入內(nèi)存) = 第四,在DOS和Win9x/Me系統(tǒng)下,C:盤根目錄下的AUTOEXEC.BAT批處理文件是自動(dòng)運(yùn)行批處理文件,每次系統(tǒng)啟動(dòng)時(shí)會(huì)自動(dòng)運(yùn)行該文件,你可以將系統(tǒng)每次啟動(dòng)時(shí)都要運(yùn)行的命令放入該文件中,例如設(shè)置搜索路徑,調(diào)入鼠標(biāo)驅(qū)動(dòng)和磁盤緩存,設(shè)置系統(tǒng)環(huán)境變量等。下面是一個(gè)運(yùn)行于Windows 98下的autoexec.bat的示例: ECHO OFF PATH C:WINDOWS;C:WINDOWSCO

43、MMAND;C:UCDOS;C:DOSTools; C:SYSTOOLS;C:WINTOOLS;C:BATCH LH SMARTDRV.EXE /X LH DOSKEY.COM /insert LH CTMOUSE.EXE SET TEMP=D:TEMP SET TMP=D:TEMP = 注 = AUTOEXEC.BAT為DOS系統(tǒng)的自動(dòng)運(yùn)行批處理文件,由COMMAND.COM啟動(dòng)時(shí)解釋執(zhí)行; 而在Win9x環(huán)境中,不僅增加支持了 DOSSTART.BAT, WINSTART.BAT 等許多其它自動(dòng)運(yùn)行的批處理文件,對(duì)AUTOEXEC.BAT 也增加了 .DOS .W40 .BAK .OLD

44、.PWS 等許多變體以適應(yīng)復(fù)雜的環(huán)境和多變的需求。 = willsort 編注 = 以下關(guān)于命令的分類,有很多值得推敲的地方。常用命令中的本不是命令,而dir、copy等也很常用的命令卻沒有列入, 而特殊命令中所有命令對(duì)我來(lái)說(shuō)都是常用命令。建議將批處理所引用的命令分為內(nèi)部命令、外部命令、第三方程序三類。而內(nèi)部命令和外部命令中別有一類是專用于或常用于批處理中的命令可稱之為批處理命令。 以下摘錄MS-DOS 6.22 幫助文檔中關(guān)于批處理命令的文字,當(dāng)然,其中有些概念和定義已經(jīng)有些落后了。 批處理命令 批處理文件或批處理程序是一個(gè)包含若干MS-DOS命令的正文文件,擴(kuò)展名為.BAT。當(dāng)在命令提示符

45、下敲入批處理程序的名稱時(shí),MS-DOS成組執(zhí)行此批處理程序中的命令。 任何在命令提示符下可使用的命令都可用在批處理程序中。此外,下面MS-DOS命令是專門在批處理程序中使用的。 = 常用命令 echo、call、pause、rem(小技巧:用:代替rem)是批處理文件最常用的幾個(gè)命令,我們就從他們開始學(xué)起。 = 注 = 首先, 不是一個(gè)命令, 而是DOS 批處理的一個(gè)特殊標(biāo)記符, 僅用于屏蔽命令行回顯. 下面是DOS命令行或批處理中可能會(huì)見到的一些特殊標(biāo)記符: CR(0D) 命令行結(jié)束符 Escape(1B) ANSI轉(zhuǎn)義字符引導(dǎo)符 Space(20) 常用的參數(shù)界定符 Tab(09) ; =

46、 不常用的參數(shù)界定符 + COPY命令文件連接符 * ? 文件通配符 字符串界定符 | 命令管道符 文件重定向符 命令行回顯屏蔽符 / 參數(shù)開關(guān)引導(dǎo)符 : 批處理標(biāo)簽引導(dǎo)符 % 批處理變量引導(dǎo)符 其次, : 確實(shí)可以起到rem 的注釋作用, 而且更簡(jiǎn)潔有效; 但有兩點(diǎn)需要注意: 第一, 除了 : 之外, 任何以 :開頭的字符行, 在批處理中都被視作標(biāo)號(hào), 而直接忽略其后的所有內(nèi)容, 只是為了與正常的標(biāo)號(hào)相區(qū)別, 建議使用 goto 所無(wú)法識(shí)別的標(biāo)號(hào), 即在 :后緊跟一個(gè)非字母數(shù)字的一個(gè)特殊符號(hào). 第二, 與rem 不同的是, :后的字符行在執(zhí)行時(shí)不會(huì)回顯, 無(wú)論是否用echo on打開命令行回

47、顯狀態(tài), 因?yàn)槊罱忉屍鞑徽J(rèn)為他是一個(gè)有效的命令行, 就此點(diǎn)來(lái)看, rem 在某些場(chǎng)合下將比 : 更為適用; 另外, rem 可以用于 config.sys 文件中. = echo 表示顯示此命令后的字符 echo off 表示在此語(yǔ)句后所有運(yùn)行的命令都不顯示命令行本身 與echo off相象,但它是加在每個(gè)命令行的最前面,表示運(yùn)行時(shí)不顯示這一行的命令行(只能影響當(dāng)前行)。 call 調(diào)用另一個(gè)批處理文件(如果不用call而直接調(diào)用別的批處理文件,那么執(zhí)行完那個(gè)批處理文件后將無(wú)法返回當(dāng)前文件并執(zhí)行當(dāng)前文件的后續(xù)命令)。 pause 運(yùn)行此句會(huì)暫停批處理的執(zhí)行并在屏幕上顯示Press any k

48、ey to continue.的提示,等待用戶按任意鍵后繼續(xù) rem 表示此命令后的字符為解釋行(注釋),不執(zhí)行,只是給自己今后參考用的(相當(dāng)于程序中的注釋)。 = 注 = 此處的描述較為混亂, 不如直接引用個(gè)命令的命令行幫助更為條理 - ECHO 當(dāng)程序運(yùn)行時(shí),顯示或隱藏批處理程序中的正文。也可用于允許或禁止命令的回顯。 在運(yùn)行批處理程序時(shí),MS-DOS一般在屏幕上顯示(回顯)批處理程序中的命令。 使用ECHO命令可關(guān)閉此功能。 語(yǔ)法 ECHO ON|OFF 若要用echo命令顯示一條命令,可用下述語(yǔ)法: echo message 參數(shù) ON|OFF 指定是否允許命令的回顯。若要顯示當(dāng)前的E

49、CHO的設(shè)置,可使用不帶參數(shù)的ECHO 命令。 message 指定讓MS-DOS在屏幕上顯示的正文。 - CALL 從一個(gè)批處理程序中調(diào)用另一個(gè)批處理程序,而不會(huì)引起第一個(gè)批處理的中止。 語(yǔ)法 CALL drive:pathfilename batch-parameters 參數(shù) drive:pathfilename 指定要調(diào)用的批處理程序的名字及其存放處。文件名必須用.BAT作擴(kuò)展名。 batch-parameters 指定批處理程序所需的命令行信息。 - PAUSE 暫停批處理程序的執(zhí)行并顯示一條消息,提示用戶按任意鍵繼續(xù)執(zhí)行。只能在批處 理程序中使用該命令。 語(yǔ)法 PAUSE REM

50、在批處理文件或CONFIG.SYS中加入注解。也可用REM命令來(lái)屏蔽命令(在CONFIG.SYS 中也可以用分號(hào) ; 代替REM命令,但在批處理文件中則不能替代)。 語(yǔ)法 REM string 參數(shù) string 指定要屏蔽的命令或要包含的注解。 = 例1:用edit編輯a.bat文件,輸入下列內(nèi)容后存盤為c:a.bat,執(zhí)行該批處理文件后可實(shí)現(xiàn):將根目錄中所有文件寫入 a.txt中,啟動(dòng)UCDOS,進(jìn)入WPS等功能。 批處理文件的內(nèi)容為: 命令注釋: echo off 不顯示后續(xù)命令行及當(dāng)前命令行 dir c:*.* a.txt 將c盤文件列表寫入a.txt call c:ucdosucdo

51、s.bat 調(diào)用ucdos echo 你好 顯示你好 pause 暫停,等待按鍵繼續(xù) rem 準(zhǔn)備運(yùn)行wps 注釋:準(zhǔn)備運(yùn)行wps cd ucdos 進(jìn)入ucdos目錄 wps 運(yùn)行wps 批處理文件的參數(shù) 批處理文件還可以像C語(yǔ)言的函數(shù)一樣使用參數(shù)(相當(dāng)于DOS命令的命令行參數(shù)),這需要用到一個(gè)參數(shù)表示符%。 %1-9表示參數(shù),參數(shù)是指在運(yùn)行批處理文件時(shí)在文件名后加的以空格(或者Tab)分隔的字符串。變量可以從%0到%9,%0表示批處理命令本身,其它參數(shù)字符串用%1到%9順序表示。 例2:C:根目錄下有一批處理文件名為f.bat,內(nèi)容為: echo off format %1 如果執(zhí)行C:f

52、 a: 那么在執(zhí)行f.bat時(shí),%1就表示a:,這樣format %1就相當(dāng)于format a:,于是上面的命令運(yùn)行時(shí)實(shí)際執(zhí)行的是format a: 例3:C:根目錄下一批處理文件名為t.bat,內(nèi)容為: echo off type %1 type %2 那么運(yùn)行C:t a.txt b.txt %1 : 表示a.txt %2 : 表示b.txt 于是上面的命令將順序地顯示a.txt和b.txt文件的內(nèi)容。 = 注 = 參數(shù)在批處理中也作為變量處理, 所以同樣使用百分號(hào)作為引導(dǎo)符, 其后跟0-9中的一個(gè)數(shù)字構(gòu)成參數(shù)引用符. 引用符和參數(shù)之間 (例如上文中的 %1 與 a: ) 的關(guān)系類似于變量指

53、針與變量值的關(guān)系. 當(dāng)我們要引用第十一個(gè)或更多個(gè)參數(shù)時(shí), 就必須移動(dòng)DOS 的參數(shù)起始指針. shift 命令正充當(dāng)了這個(gè)移動(dòng)指針的角色, 它將參數(shù)的起始指針移動(dòng)到下一個(gè)參數(shù), 類似C 語(yǔ)言中的指針操作. 圖示如下: 初始狀態(tài), cmd 為命令名, 可以用 %0 引用 cmd arg1 arg2 arg3 arg4 arg5 arg6 arg7 arg8 arg9 arg10 | | | | | | | | | | %0 %1 %2 %3 %4 %5 %6 %7 %8 %9 經(jīng)過(guò)1次shift后, cmd 將無(wú)法被引用 cmd arg1 arg2 arg3 arg4 arg5 arg6 arg

54、7 arg8 arg9 arg10 | | | | | | | | | | %0 %1 %2 %3 %4 %5 %6 %7 %8 %9 經(jīng)過(guò)2次shift后, arg1也被廢棄, %9指向?yàn)榭? 沒有引用意義 cmd arg1 arg2 arg3 arg4 arg5 arg6 arg7 arg8 arg9 arg10 | | | | | | | | | %0 %1 %2 %3 %4 %5 %6 %7 %8 遺憾的是, win9x 和DOS下均不支持 shift 的逆操作. 只有在 nt 內(nèi)核命令行環(huán)境下, shift 才支持 /n 參數(shù), 可以以第一參數(shù)為基準(zhǔn)返復(fù)移動(dòng)起始指針. = 特殊命令

55、if goto choice for是批處理文件中比較高級(jí)的命令,如果這幾個(gè)你用得很熟練,你就是批處理文件的專家啦。 一、if 是條件語(yǔ)句,用來(lái)判斷是否符合規(guī)定的條件,從而決定執(zhí)行不同的命令。 有三種格式: 1、if not 參數(shù) = 字符串 待執(zhí)行的命令 參數(shù)如果等于(not表示不等,下同)指定的字符串,則條件成立,運(yùn)行命令,否則運(yùn)行下一句。 例:if %1=a format a: = if 的命令行幫助中關(guān)于此點(diǎn)的描述為: IF NOT string1=string2 command 在此有以下幾點(diǎn)需要注意: 1. 包含字符串的雙引號(hào)不是語(yǔ)法所必須的, 而只是習(xí)慣上使用的一種防空字符 2.

56、 string1 未必是參數(shù), 它也可以是環(huán)境變量, 循環(huán)變量以及其他字符串常量或變量 3. command 不是語(yǔ)法所必須的, string2 后跟一個(gè)空格就可以構(gòu)成一個(gè)有效的命令行 = 2、if not exist 路徑文件名 待執(zhí)行的命令 如果有指定的文件,則條件成立,運(yùn)行命令,否則運(yùn)行下一句。 如: if exist c:config.sys type c:config.sys 表示如果存在c:config.sys文件,則顯示它的內(nèi)容。 * 注 * 也可以使用以下的用法: if exist command device 是指DOS系統(tǒng)中已加載的設(shè)備, 在win98下通常有: AUX,

57、PRN, CON, NUL COM1, COM2, COM3, COM4 LPT1, LPT2, LPT3, LPT4 XMSXXXX0, EMMXXXX0 A: B: C: ., CLOCK$, CONFIG$, DblBuff$, IFS$HLP$ 具體的內(nèi)容會(huì)因硬軟件環(huán)境的不同而略有差異, 使用這些設(shè)備名稱時(shí), 需要保證以下三點(diǎn): 1. 該設(shè)備確實(shí)存在(由軟件虛擬的設(shè)備除外) 2. 該設(shè)備驅(qū)動(dòng)程序已加載(aux, prn等標(biāo)準(zhǔn)設(shè)備由系統(tǒng)缺省定義) 3. 該設(shè)備已準(zhǔn)備好(主要是指a: b: ., com1., lpt1.等) 可通過(guò)命令 mem/d | find device /i 來(lái)檢閱

58、你的系統(tǒng)中所加載的設(shè)備 另外, 在DOS系統(tǒng)中, 設(shè)備也被認(rèn)為是一種特殊的文件, 而文件也可以稱作字符設(shè)備; 因?yàn)樵O(shè)備(device)與文件都是使用句柄(handle)來(lái)管理的, 句柄就是名字, 類似于文件名, 只不過(guò)句柄不是應(yīng)用于磁盤管理, 而是應(yīng)用于內(nèi)存管理而已, 所謂設(shè)備加載也即指在內(nèi)存中為其分配可引用的句柄. = 3、if errorlevel 待執(zhí)行的命令 很多DOS程序在運(yùn)行結(jié)束后會(huì)返回一個(gè)數(shù)字值用來(lái)表示程序運(yùn)行的結(jié)果(或者狀態(tài)),通過(guò)if errorlevel命令可以判斷程序的返回值,根據(jù)不同的返回值來(lái)決定執(zhí)行不同的命令(返回值必須按照從大到小的順序排列)。如果返回值等于指定的數(shù)

59、字,則條件成立,運(yùn)行命令,否則運(yùn)行下一句。 如if errorlevel 2 goto x2 = 注 = 返回值從大到小的順序排列不是必須的, 而只是執(zhí)行命令為 goto 時(shí)的習(xí)慣用法, 當(dāng)使用 set 作為執(zhí)行命令時(shí), 通常會(huì)從小到大順序排列, 比如需將返回碼置入環(huán)境變量, 就需使用以下的順序形式: if errorlevel 1 set el=1 if errorlevel 2 set el=2 if errorlevel 3 set el=3 if errorlevel 4 set el=4 if errorlevel 5 set el=5 . 當(dāng)然, 也可以使用以下循環(huán)來(lái)替代, 原理是

60、一致的: for %e in (1 2 3 4 5 6 7 8.) do if errorlevel %e set el=%e 更高效簡(jiǎn)潔的用法, 可以參考我寫的另一篇關(guān)于獲取 errorlevel 的文章 出現(xiàn)此種現(xiàn)象的原因是, if errorlevel 比較返回碼的判斷條件并非等于, 而是大于等于. 由于 goto 的跳轉(zhuǎn)特性, 由小到大排序會(huì)導(dǎo)致在較小的返回碼處就跳出; 而由于 set命令的 重復(fù) 賦值特性, 由大到小排序會(huì)導(dǎo)致較小的返回碼 覆蓋 較大的返回碼. 另外, 雖然 if errorlevel= command 也是有效的命令行, 但也只是 解釋命令行時(shí)將 = 作為命令行切分

溫馨提示

  • 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ù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 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ì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論