虚拟仪器课程设计

上传人:ch****o 文档编号:156899133 上传时间:2022-09-28 格式:DOC 页数:26 大小:127.51KB
返回 下载 相关 举报
虚拟仪器课程设计_第1页
第1页 / 共26页
虚拟仪器课程设计_第2页
第2页 / 共26页
虚拟仪器课程设计_第3页
第3页 / 共26页
点击查看更多>>
资源描述
电控学院虚拟仪器课程设计 院 (系): 专业班级: 姓 名: 学 号: 指导教师: 2011年 12 月 30 日摘 要运用虚拟仪器的设计思想,介绍了一种基于LabWindows/CVI软件平台的多路数据采集系统的设计原理及过程。利用LabWindows/CVI开发环境设计上位机的监测界面,上位机通过串行口与STCAT89C52单片机通信,从而实现上位机与下位机之间的同步通信,运用LabWindows/CVI进行系统开发具有很强的灵活性,能较容易地实现系统的各项功能,并使系统具有很强扩展性。关键词:虚拟仪器 STCAT89C52单片机 摘 要1第一章 设计要求31.1设计要求31.2设计思路3第二章 原理介绍32.1 LabWindows/CVI简介:32.2 LabWindows/CVI的应用:3第三章 硬件部分43.1 上位机简介43.2 RS232串口简介53.3 RS-232 接口标准5 3.4 RS-232 缺点.5第四章 上位机界面6第五章 实习心得6第六章 参考文献7第七章 致谢7第八章 附录7第一章 设计要求第一章 设计要求1.1设计要求 1)用虚拟仪器LabWindows/CVI画出单片机流水灯相应器件及外围扩展电路。 2)编写虚拟仪器串口程序实现与单片机的连接。 3)从单片机发送数据给PC机,使得虚拟仪器与单片机的流水灯实现同步运行。1.2设计思路 1)首先了解虚拟仪器LabWindows/CVI软件和单片机(52型)。 2)用CVI画相应图形并仿真运行。 3)连接单片机和PC机,实现设计最终效果。第二章 原理介绍2.1 LabWindows/CVI简介: LabWindows/CVI 是National Instruments 公司(美国国家仪器公司,简称NI 公司)推出的交互式C 语言开发平台。LabWindows/CVI 将功能强大、使用灵活的C 语言平台与用于数据采集分析和显示的测控专业工具有机地结合起来,利用它的集成化开发环境、交互式编程方法、函数面板和丰富的库函数大大增强了C 语言的功能,为熟悉C 语言的开发设计人员编写检测系统、自动测试环境、数据采集系统、过程监控系统等应用软件提供了一个理想的软件开发环境。 开发人员可以在设计阶段利用LabWindows/CVI的硬件配置助手、综合调试工具以及交互式执行功能,来运行各项功能,使得这些领域的开发流水线化。LabWindows/CVI 是为C 语言程序员提供的软件开发系统,在其交互式开发环境中编写的程序必须符合标准C 规范。2.2 LabWindows/CVI的应用:使用LabWindows/CVI 可以完成如下工作:交互式的程序开发;具有功能强大的函数库,用来创建数据采集和仪器控制的应用程序;充分利用完备的软件工具进行数据采集、分析和显示;利用向导开发IVI 仪器驱动程序和创建ActiveX 服务器;为其它程序开发C 目标模块、动态连接库(DLL)、C 语言库。在LabWindows/CVI 开发环境中可以利用其提供的库函数来实现程序设计、编辑、编译、链接和标准C 语言程序调试。在该开发环境中可以用LabWindows/CVI 丰富的函数库来编写程序,此外每个函数都有一个叫做函数面板(Function Panel)的交互式操作界面,在函数面板中可以执行该函数并可以生成调用该函数的代码,也可通过右击面板或控件获得有关函数、参数、函数类和函数库的帮助。在LabWindnows/CVI 的交互式环境中编写程序必须符合标准C 语言的规范。另外,在开发应用程序时可以使用编译好的C 语言目标模块,动态链接库(DLL),C 静态库和仪器驱动程序。LabWindows/CVI 的功能强大在于它提供了丰富的函数库。利用这些库函数除可实现常规的程序设计外,还可实现更加复杂的数据采集和仪器控制系统的开发。仪器库是LabWindows/CVI 的特殊资源。它包GPIB、VXI 和RS-232 仪器的驱动程序,如示波器、多用表和函数发生器,每个驱动程序都提供可编辑的源代码。使用 LabWindows/CVI 开发工具提供的库函数可以创建自己的仪器驱动程序,可以创建单个仪器、多个仪器或实际上并不存在的虚拟仪器的驱动程序,在创建仪器驱动程序过程中可以使用LabWindows/CVI 的其它库函数。使用LabWindows/CVI 的用户界面编辑器可以创建并编辑图形用户界面(GUI),而使用LabWindows/CVI 的用户界面库函数可以在程序中创建并控制GUI。此外,LabWindows/CVI为GUI 面板的设计,准备了许多专业控件,如:曲线图控件、带状图控件、表头、旋钮和指示灯等,以适应测控系统软件开发的需求,利用这些控件可以设计出专业的测控程序界面。2009年12月美国国家仪器有限公司(National Instruments,简称NI)宣布推出LabWindows/CVI 2009,这是最新版本的ANSI C开发环境,用于构建可靠的测试与测量解决方案。该软件支持包括可连接LabVIEW FPGA的C接口在内的PC新技术,能够实现与基于现场可编程门阵列(FPGA)的硬件、微软Windows 7和64位操作系统的连接,以简化开发和部署LabWindows/CVI的应用程序。工程师和科学家们可以通过使用新的软件执行分析工具包,来分析和优化标有图示的应用源代码运行时的性能,而这些图示会显示运行该应用程序的每个阶段所需的时间,以此可以进一步提高应用程序的可靠性和生产效率。此外,LabWindows/CVI 2009通过运用最新的属性浏览器提高生产效率,方便了自定义用户界面的快速设计和调试性能的改善。第三章 硬件部分3.1 上位机简介 上位机是指人可以直接发出操控命令的计算机,一般是PC,屏幕上显示各种信号变化(液压,水位,温度等)。上位机发出的命令首先给下位机,下位机再根据此命令解释成相应时序信号直接控制相应设备。下位机不时读取设备状态数据(一般为模拟量),转换成数字信号反馈给上位机。简言之如此,实际情况千差万别,但万变不离其宗:上下位机都需要编程,都有专门的开发系统。通常上位机和下位机通讯可以采用不同的通讯协议, 可以有RS232的串口通讯,或者采用RS485串行通讯,当用计算机和PLC通讯的时候不但可以采用传统的D形式的串行通讯,还可以采用更适合工业控制的双线的profibus-dp通讯,采用封装好的程序开发工具就可以实现PLC和上位机的通讯。当然可以自己编写驱动类的接口协议控制上位机和下位机的通讯。目前,在许多单片机应用系统中,上、下位机分工明确,作为下位机核心器件的单片机往往只负责数据的采集和通信,而上位机通常以基于图形界面Windows系统作为操作平台。为了便于查询和保存数据,还需要数据库的支持,这种应用的核心是数据通信,它包括单片机的上位机之间、客户端的服务器之间以及客户端的客户端之间的通信,而单片机的上位机之间数据通信则是整个系统的基础。单片机和PC的通信是通过单片机的串口和PC串口之间的硬件连接实现的。3.2 RS232串口简介 RS232是个人计算机上的通讯接口之一,由电子工业协会(Electronic Industries Association,EIA) 所制定的异步传输标准接口。通常 RS-232 接口以9个引脚 (DB-9) 或是25个引脚 (DB-25) 的型态出现,一般个人计算机上会有两组 RS-232 接口,分别称为 COM1 和 COM23.3 RS-232 接口标准 串行通信接口标准经过使用和发展,目前已经有几种。但都是在RS-232标准的基础上经过改进而形成的。所以,以RS-232C为主来讨论。RS-232C标准是美国EIA(电子工业联合会)与BELL等公司一起开发的1969年公布的通信协议。它适合于数据传输速率在020000b/s范围内的通信。这个标准对串行通信接口的有关问题,如信号线功能、电器特性都作了明确规定。由于通行设备厂商都生产与RS-232C制式兼容的通信设备,因此,它作为一种标准,目前已在微机通信接口中广泛采用。RS-232-C标准规定,驱动器允许有2500pF的电容负载,通信距离将受此电容限制,例如,采用150pF/m的通信电缆时,最大通信距离为15m;若每米电缆的电容量减小,通信距离可以增加。传输距离短的另一原因是RS-232属单端信号传送,存在共地噪声和不能抑制共模干扰等问题,因此一般用于20m以内的通信。串行通信接口标准经过使用和发展,目前已经有几种。但都是在RS-232标准的基础上经过改进而形成的。3.4 RS-232 缺点(1)接口的信号电平值较高,易损坏接口电路的芯片,又因为与TTL电平不兼容故需使用电平转换电路方能与TTL电路连接。 (2)传输速率较低,在异步传输时,波特率为20Kbps;因此在“南方的老树51CPLD开发板”中,综合程序波特率只能采用19200,也是这个原因。 (3)接口使用一根信号线和一根信号返回线而构成共地的传输形式,这种共地传输容易产生共模干扰,所以抗噪声干扰性弱。 (4) 传输距离有限,最大传输距离标准值为50英尺,实际上也只能用在15米左右。第四章 上位机界面第五章 实习心得 一周的实习结束了,我们学到了很多很多,总体来说这次的课程设计总的来说并不是特别容易,虽然我们在课堂上学到了不少有用的知识,可真正实践起来就发现自己缺少的太少。我到图书馆来找过资料,也上网差了不少资料,在查找和阅读的过程中真的学到不少的知识。当然,在做作业的时候我遇到了不少问题,在和周围同学的探讨中我们找到了答案,大家共同进步。通过课程设计让我们更加深刻的体会到实践的重要性,平时我们多是学习理论知识,上机实践的机会少,自己也少练习,在实践方面确实欠缺不少,需要我们今后加强练习。 通过这次实习,我知道了任何事都要靠自己,只有自己的知识才是真正的知识,这让我在以后的工作生活中有了更好的动力!感谢老师的耐心指导和悉心教导。通过此次实习,开阔了我们的视野,使我们的理论和实践结合在一起,也培养了我的实际动手能力,增加了实际的操作经验,更好地为我们今后的工作积累经验。同时也使我们对课本一些比较模糊的概念、抽象的原理有了一个崭新的认识和理解。使我们对以往所学的知识有了更进一步的巩固,对以前没接触过的知识有了深刻地了解,让我们对以后的基本动作有了深入认识。第六章 参考文献Labwindows/CVI虚拟仪器测试技术及工程应用化学工业出版社。Labview虚拟仪器数据采集与串口通信测控应用实战人民邮电出版社。Labwindows/CVI的虚拟仪器设计与应用电子工业出版社。第七章 附录 在这次的实习过程中,我们遇到了各种专业问题和软件操作问题等等,好多都是自己很难解决的,所以就请教了王老师、昝老师和彭老师,很感谢三位老师的耐心讲解,帮助我们解决各种问题,在这里我们组对三位老师表示深深的谢意!当然实验过程中,各位同学也对我们帮助不少,最后感谢好多同学对我组的细微照顾。真挚的谢谢以上同学和老师的帮助!第八章 附录上位机程序清单:/*/*/* File: InstallCommCallback.c */* Purpose: This example illustrates the use of the RS232 Librarys InstallComCallback */* function to respond to the LWRS_RXFLAG event. The user will be asked to enter */* an event character. Whenever this event character is detected on the COM port, */* a callback function will be executed. */* Notes: To run this example you need to do a Loopback Test, i.e. connect pin 2 to */* pin 3 on the serial port. */*/*/*/* Include files */*/#include #include #include #include #include #include commcallback.h#include cfg.h #include /*/* Globals */*/static int gHelpPanelHandle;static int gPanelHandle;static int gComCfgPanelHandle; static char gEventChar2;char state60=0;char AutoSaveDIR1024;char AutoSaveFileName40;char AutoSaveFileDIR_Name1024;/全路径char ValidCom20;char COM_State=COM_STATE_CLOSE;char chCurrentTime40;int COM_Port = 2;long Baud_Rate = 9600;int Parity = 0;int Data_Bits = 8;int Stop_Bits = 1;int Input_Queue_Size = 512;int Output_Queue_Size = 512;int SendIsHex = 0,RecvIsHex = 0;int nAutoSaveToFile = 0;int nFileHandle;/*/* Prototypes */*/void CVICALLBACK Event_Char_Detect_Func (int portNo,int eventMask,void *callbackData);int ComDetect(char ValidCom);int OpenCloseTheCom(void);/*/* Application entry point. */*/int main (int argc, char *argv)int i,y;if (InitCVIRTE (0, argv, 0) = 0) /* Initialize CVI libraries */return -1; /* out of memory */if (gPanelHandle = LoadPanel(0, e:programCVIrs232commcallback.uir, PANEL) 0)return -1;if (gHelpPanelHandle = LoadPanel(0, commcallback.uir, HELP_PANEL) 0)return -1;if (gComCfgPanelHandle = LoadPanel(0, commcallback.uir, COM_CFG) 0)return -1;/* Open and Configure Com port 1 */OpenComConfig (2, , 9600, 0, 8, 1, 512, 512);/* Turn off Hardware handshaking (loopback test will not function with it on) */SetCTSMode (2, LWRS_HWHANDSHAKE_OFF);/* Make sure Serial buffers are empty */FlushInQ (2);/FlushOutQ (2); /* Promt the user to enter an event character. */PromptPopup (Event Character, Enter the Event Character, gEventChar, 1);/* Install a callback such that if the event character appears at the receive buffer, our function will be notified. */InstallComCallback (2, LWRS_RECEIVE, 1, (int)gEventChar0 , Event_Char_Detect_Func, 0); SetCtrlVal (gComCfgPanelHandle, COM_CFG_RING_COM, COM_Port);SetCtrlVal (gComCfgPanelHandle, COM_CFG_RING_RATE, Baud_Rate);SetCtrlVal (gComCfgPanelHandle, COM_CFG_RING_PARITY, Parity);SetCtrlVal (gComCfgPanelHandle, COM_CFG_RING_DATA_BIT, Data_Bits);SetCtrlVal (gComCfgPanelHandle, COM_CFG_RING_STOP_BIT, Stop_Bits);SetCtrlVal (gComCfgPanelHandle, COM_CFG_NUMERIC_INQ_LEN, Input_Queue_Size);SetCtrlVal (gComCfgPanelHandle, COM_CFG_NUMERIC_OUTQ_LEN, Output_Queue_Size);/update COM StateFlashState();SetCtrlVal (gPanelHandle, PANEL_STRING,state);/Set COM State colorSetCtrlAttribute (gPanelHandle, PANEL_STRING, ATTR_TEXT_COLOR, VAL_BLACK); /Set LED color SetCtrlAttribute (gPanelHandle,PANEL_LED , ATTR_ON_COLOR, VAL_GREEN);SetCtrlAttribute (gPanelHandle,PANEL_LED , ATTR_OFF_COLOR, VAL_DK_GRAY); /GetCurrentDIRGetDir (AutoSaveDIR);/将探测的存在的串口加入到 串口选择的下拉列表中y = ComDetect(ValidCom);char ComName5 = COM00;for(i=0;iy;i+)Fmt(ComName,COM%d,ValidComi);InsertListItem (gComCfgPanelHandle, COM_CFG_RING_COM, i, ComName,(int)ValidComi);/SetCtrlAttribute (gComCfgPanelHandle, COM_CFG, ATTR_LABEL_TEXT, );/SetCtrlAttribute (gComCfgPanelHandle, COM_CFG, ATTR_CTRL_VAL, );/* Display the panel and run the UI */DisplayPanel (gPanelHandle);RunUserInterface ();/* Close the open COM port before exiting */CloseCom (COM_Port);/* Discard the loaded panels from memory */DiscardPanel (gPanelHandle);DiscardPanel (gHelpPanelHandle);return 0;/可用串口探测/参数:/ ValidCom,输出可用串口ID号/返回:/ 可用串口数量(0-127),0为无串口可以使用int ComDetect(char ValidCom)int i = 0;int j = 0;int ComState = 0;int ValidNum = 0;for(i=1;i=0 )CloseCom(i);if( (ComState=0)|(ComState=-7) )/-7 Cannot open port ValidNum+;/可用串口数量加1 ValidComj+ = i;/记录可用串口ID号/printf(%d:%dn,i,ComState);return ValidNum;/*/* SendData (): Respond to the Send button to send characters out of the serial port. */*/* Event_Char_Detect_Func (): Fuction called when the event character is detected. */*/void CVICALLBACK Event_Char_Detect_Func (int portNo,int eventMask,void *callbackData)char outMessage256;char readBufCOM_BUF_LEN = 0;unsigned char hexBufCOM_BUF_LEN = 0;int strLen;int i,j;/Fmt (outMessage, %s (int)COM_BUF_LEN)MessagePopup (Warning!,自定义的串口缓冲区太小);/return;i = j = 0;if( RecvIsHex = 1 )ComRd (COM_Port, hexBuf, strLen);for(i = 0;i 4) 4) + 0;elseif( (hexBufi4) 4) + A - 10;if( (hexBufi&0x0F) 0x0A )readBufj+ = (hexBufi&0x0F) + 0;elseif( (hexBufi&0x0F) = 0x0F )readBufj+ = (hexBufi&0x0F) + A - 10;readBufj+ = ;readBufj+ = 0;elseComRd (COM_Port, readBuf, strLen);SetCtrlVal (gPanelHandle, PANEL_OUTOUT_STRING, readBuf);if ( readBuf0=DA ) SetCtrlVal (gPanelHandle, PANEL_LED2, 1); SetCtrlVal (gPanelHandle, PANEL_LED3 ,0); SetCtrlVal (gPanelHandle, PANEL_LED4, 1); SetCtrlVal (gPanelHandle, PANEL_LED5,0); SetCtrlVal (gPanelHandle, PANEL_LED6,1);SetCtrlVal (gPanelHandle, PANEL_LED7,0);SetCtrlVal (gPanelHandle, PANEL_LED8,1);SetCtrlVal (gPanelHandle, PANEL_LED9,0);if(readBuf0=A5) SetCtrlVal (gPanelHandle, PANEL_LED2,0); SetCtrlVal (gPanelHandle, PANEL_LED3 ,1); SetCtrlVal (gPanelHandle, PANEL_LED4, 0); SetCtrlVal (gPanelHandle, PANEL_LED5,1); SetCtrlVal (gPanelHandle, PANEL_LED6,0);SetCtrlVal (gPanelHandle, PANEL_LED7,1);SetCtrlVal (gPanelHandle, PANEL_LED8,0);SetCtrlVal (gPanelHandle, PANEL_LED9,1);if(readBuf0=CA) SetCtrlVal (gPanelHandle, PANEL_LED2, 1); SetCtrlVal (gPanelHandle, PANEL_LED3 ,0); SetCtrlVal (gPanelHandle, PANEL_LED4, 1); SetCtrlVal (gPanelHandle, PANEL_LED5,0); SetCtrlVal (gPanelHandle, PANEL_LED6,1);SetCtrlVal (gPanelHandle, PANEL_LED7,0);SetCtrlVal (gPanelHandle, PANEL_LED8,1);SetCtrlVal (gPanelHandle, PANEL_LED9,0);if(readBuf0=B5) SetCtrlVal (gPanelHandle, PANEL_LED2, 0); SetCtrlVal (gPanelHandle, PANEL_LED3 ,1); SetCtrlVal (gPanelHandle, PANEL_LED4, 0); SetCtrlVal (gPanelHandle, PANEL_LED5,1); SetCtrlVal (gPanelHandle, PANEL_LED6,0);SetCtrlVal (gPanelHandle, PANEL_LED7,1);SetCtrlVal (gPanelHandle, PANEL_LED8,0);SetCtrlVal (gPanelHandle, PANEL_LED9,1);if(nAutoSaveToFile = 1)WriteFile (nFileHandle, readBuf, strlen(readBuf);WriteFile (nFileHandle, n, 1);return; /*/* Help (): Display help text. */*/int CVICALLBACK Help (int panel, int control, int event, void *callbackData, int eventData1,int eventData2)switch (event)case EVENT_COMMIT:SetCtrlAttribute (gHelpPanelHandle, HELP_PANEL_TEXTBOX, ATTR_TEXT_COLOR, VAL_BLUE);InstallPopup (gHelpPanelHandle);break;return 0;/*/* QuitHelpCB (): Remove help text. */*/int CVICALLBACK QuitHelp (int panel, int control, int event, void *callbackData, int eventData1, int eventData2)switch (event) case EVENT_COMMIT:RemovePopup (0);break;return 0;/*/* ReceiveData (): Read the data on the serial COM port. */*/int CVICALLBACK ReceiveData (int panel, int control, int event, void *callbackData, int eventData1, int eventData2)char readBuf1 = 0;int strLen = 0;switch (event)case EVENT_COMMIT:/* Read the characters from the port */if( GetComStat(COM_Port) (int)COM_BUF_LEN) MessagePopup (Warning!,自定义的串口缓冲区太小);/ return 0; else if( strLen = 0 ) MessagePopup (Warning!,无接收数据);/ return 0; ComRd (COM_Port, readBuf, strLen); / SetCtrlVal (gPanelHandle, PANEL_OUTOUT_STRING, readBuf); MessagePopup(dsdd,dd);if ( readBuf0=D9 ) SetCtrlVal (gPanelHandle, PANEL_LED2, 0); SetCtrlVal (gPanelHandle, PANEL_LED3 ,1); SetCtrlVal (gPanelHandle, PANEL_LED4, 1); SetCtrlVal (gPanelHandle, PANEL_LED5,0); SetCtrlVal (gPanelHandle, PANEL_LED6,0);SetCtrlVal (gPanelHandle, PANEL_LED7,1);SetCtrlVal (gPanelHandle, PANEL_LED8,1);SetCtrlVal (gPanelHandle, PANEL_LED9,0);if(readBuf=C9) SetCtrlVal (gPanelHandle, PANEL_LED2, 0); SetCtrlVal (gPanelHandle, PANEL_LED3 ,1); SetCtrlVal (gPanelHandle, PANEL_LED4, 1); SetCtrlVal (gPanelHandle, PANEL_LED5,0); SetCtrlVal (gPanelHandle, PANEL_LED6,0);SetCtrlVal (gPanelHandle, PANEL_LED7,1);SetCtrlVal (gPanelHandle, PANEL_LED8,1);SetCtrlVal (gPanelHandle, PANEL_LED9,0);if(readBuf=B6) SetCtrlVal (gPanelHandle, PANEL_LED2, 1); SetCtrlVal (gPanelHandle, PANEL_LED3 ,0); SetCtrlVal (gPanelHandle, PANEL_LED4, 0); SetCtrlVal (gPanelHandle, PANEL_LED5,1); SetCtrlVal (gPanelHandle, PANEL_LED6,1);SetCtrlVal (gPanelHandle, PANEL_LED7,0);SetCtrlVal (gPanelHandle, PANEL_LED8,0);SetCtrlVal (gPanelHandle, PANEL_LED9,1);if(readBuf=A6) SetCtrlVal (gPanelHandle, PANEL_LED2, 1); SetCtrlVal (gPanelHandle, PANEL_LED3 ,0); SetCtrlVal (gPanelHandle, PANEL_LED4, 0); SetCtrlVal (gPanelHandle, PANEL_LED5,0); SetCtrlVal (gPanelHandle, PANEL_LED6,0);SetCtrlVal (gPanelHandle, PANEL_LED7,0);SetCtrlVal (gPanelHandle, PANEL_LED8,0);SetCtrlVal (gPanelHandle, PANEL_LED9,1);else SetCtrlVal (gPanelHandle, PANEL_LED2, 1); SetCtrlVal (gPanelHandle, PANEL_LED3 ,0); SetCtrlVal (gPanelHandle, PANEL_LED4, 0); SetCtrlVal (gPanelHandle, PANEL_LED5,0); SetCtrlVal (gPanelHandle, PANEL_LED6,0);SetCtrlVal (gPanelHandle, PANEL_LED7,0);SetCtrlVal (gPanelHandle, PANEL_LED8,0);SetCtrlVal (gPanelHandle, PANEL_LED9,1); break;return 0;/*/* PanelCB (): Quits this application. */*/int CVICALLBACK PanelCB (int panel, int event, void *callbackData,int eventData1, int eventData2)switch (event) case EVENT_CLOSE:CloseFile(nFileHandle);QuitUserInterface (0);break;return 0;/*
展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 建筑环境 > 建筑工程


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!