虚拟仪器软件编程_第1页
虚拟仪器软件编程_第2页
虚拟仪器软件编程_第3页
虚拟仪器软件编程_第4页
虚拟仪器软件编程_第5页
已阅读5页,还剩83页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

6-2DAQ虚拟仪器软件编程2.1DAQ软件的组成

2.2LabVIEW的DAQ软件概述2.3模拟输入2.4模拟输出2.2数字I/O和计数器2.6DAQmx

2.7DAQ驱动程序的开发2.7数据采集卡驱动程序设计及动态链接库开发2.1DAQ软件的组成

DAQ软件包括DAQ驱动软件和DAQ仪器应用软件两大部分1.数据采集卡的驱动软件2.PC-DAQ仪器的应用软件编程数据采集卡的驱动软件1)驱动软件的作用在基于DAQ插卡的虚拟仪器系统中,驱动软件起着非常重要的作用,它将DAQ插卡和计算机组合成为一个DAQ仪器系统,进行完整的数据采集、分析和显示。

2)驱动软件的基本要求用户在选择或开发通用驱动软件时,应注意以下问题。(1)驱动软件支持的编程语言和软件开发环境(2)驱动函数的可用性

PC-DAQ仪器的应用软件编程

在设计DAQ仪器的时候,用户必须根据选择DAQ数据采集卡的情况,分以下两种情况进行考虑。(1)NI公司生产的数据采集卡可利用编程语言驱动程序函数来驱动数据采集卡。用户只需正确设置输入参数,就可实现数据采集的任务,而不需编写代码程序。(2)非NI公司生产的数据采集卡可利用变成直接驱动的方法来实现采集卡的软件驱动,此时,用户需要自己编写DAQ卡的驱动软件。

下面介绍在驱动软件的基础上,如何来进行PC-DAQ仪器的应用软件设计。

1)数据采集卡驱动程序的安装2)数据采集卡的参数设置(1)模拟信号输入部分的设置:(2)A/D转换部分的设置(3)D/A转换部分的设置2.2LabVIEW的DAQ软件概述1、引言数据采集(DAQ)是虚拟仪器获取信息的必不可少的基本功能,DAQ软件是LabVIEW的核心,使用LabVIEW,必须要掌握如何使用DAQ软件。本节讨论的DAQ软件主要指DAQ硬件的驱动程序。NI推出了LabVIEW7.0后,使得原本十分强大的DAQ功能变得更加完善。它包含有很多DAQ卡的驱动,分别有各自的API函数。本章将分两部分讲述如何使用DAQ。第一部分讲述LabVIEW老版本的DAQ,第二部分将简单讲述LabVIEW新版本的DAQ的新特性。重点介绍DAQ章VI的应用,从初级VI入手,再结合一些非常有用的高级VI的用法。1)在某些情况下,是必须要用到传统DAQ的,这些情况有:

NI-DAQmx不支持的装置,使用了带有加速计、线性电压差分变换(LVDT)或者旋转可变差分变换(RVDT)虚拟通道的SCXI-1230、SCXI-1231、SCXI-1240装置使用了LabVIEW实时(RT)模块。已从NI-DAQ6.9升级,但是应用程序没有完全升级。使用7.0版本以前的LabVIEW、LabWindows/CVI、MeasurementStudio。使用VisualBasic6.0。2)在NI-DAQ6.9版中支持,但是NI-DAQ7.0版中不再支持的包括:

LabVIEW、LabWindows/CVI、MeasurementStudio应用软件6.0以前的版本;Windows92操作系统;一些较老的设备2、传统DAQ库VI

所有功能模块内的VI可以分为三个层次,这三个层次也体现了用户对DAQ不同层次的操作。

DAQ子模块第一层次DAQ子模块第二层次DAQ子模块第三层次1.初级入门级的VI,功能相当有限,是对DAQ底层操作的简化,位于最高层。用户在这个层面上操作DAQ,不管是获得模拟数据还是模拟输出,或者是数字I/O以及计数器和定时器的使用,几乎不需要知道DAQ库VI的细节。初级VI是对开发者工作的最大简化。但是某些操作,甚至非常常用的操作不能够用初级VI来实现。这些包括连续缓冲输入输出、触发等。2.中级当用户对DAQ驱动库有一定的了解后,中级VI是用得最多的,因为它们可以提供相对于初级VI多得多的功能,并且可以完成大部分的工作。中级VI的重要功能包括:①高级缓冲管理,如循环缓冲;②外部时钟和触发选择;③暂停限制;④校准以及硬件配置控制;⑤具有RTSI总线互连函数访问权;⑥直接访问状态信息。3.高级高级VI和它的名字正相反,是对DAQ最底层的操作。它通过CIN节点直接访问DAQ驱动,一般只有在很少的特殊功能中用到,包括:①多个缓存;②可访问所有的状态信息;③直接控制极性和增益;④通过采样时钟周期和时钟因子确定采样频率;⑤无缩放输出数据规范。2.3模拟输入1.模入模块分类2.简易模入设计

3.中级模入设计

4.设计示例——连续信号采集与显示仪模入模块分类模拟输入用于采集模拟信号,分为:(1)简单模入VI(2)中级模入VI(3)通用模入VI(4)高级模入VI

简易模入设计

简易模入是LabVIEW提供的一组标准的、简单易用的采集VI,主要有:

AISampleChannels:完成多通道的单点采集

AIAcquireWaveform:完成通道的波形采集

AIAcquireWaveforms:完成多通道的波形采集

1)AIAcquireWaveform.vi图标(1)AIAcquireWaveform.vi的调用路径选择Functions>>DataAcquisition>>AnalogInput>>AIAcquireWaveform.vi>>create.后,出现该图标及其端口图,如图所示。AIAcquireWaveform.vi图标及其端口(2)AIAcquireWaveform.vi图标输入端口参数设置device:设置DAQ的设备号channel:设置待采集的模拟信号所在通道号numberofsamples:设置采样点数samplerate:设置采集速率highlimit(0.0):设置模拟信号的最大输入值lowlimit(0.0):设置模拟输入量的最小值(3)AIAcquireWaveform.vi图标输出端口参数设置waveform:1D数组,存放采集得到的数据,数据类型为double型。actualsampleperiod(sec):采集卡返回的实际采样率,有时相对于设定值有一定误差,是double型的变量。2)AIAcquireWaveforms.vi图标(1)AIAcquireWaveforms.vi的调用路径选择Funcations>>DataAcquisition>>AnalogInput>>AIAcquireWaveforms.vi>>create.,完成上述步骤后,出现该图标及其端口图,如图所示。AIAcquireWaveforms.vi图标及其端口(2)AIAcquireWaveforms.vi图标输入端口参数设置这里的输入端口参数设置含义同AIAcquireWaveform.vi的输入端口设置。(3)AIAcquireWaveforms.vi图标输出端口参数设置waveforms:2D数组,存放采集得到的数据和信号所在的通道。数据类型为double型。actualsampleperiod(sec):含义同上述的AIAcquireWaveform.vi图标。3)AISampleChannel.vi图标(1)AISampleChannel.vi图标的调用路径选择Functions>>DataAcquisition>>AnalogInput>>AISampleChannel.vi>>create,完成上述步骤后,出现该图标及其端口图,如图所示。AISampleChannel.vi图标及其端口(2)AISampleChannel.vi图标输入端口参数设置这里的输入端口参数设置含义同AIAcquireWaveform.vi的输入端口设置。(3)AISampleChannel.vi图标输出端口参数设置sample:模拟信号采集结果,是一个double型数值。因输出值只有一个,因此对该模块调用一次只能得到一个采集数据。4)AISampleChannels.vi图标(1)AISampleChannels.vi图标的调用路径选择Functions>>DataAcquisition>>AnalogInput>>AISampleChannel.vi>>create,完成上述步骤后,出现该图标及其端口图,如图所示。AISampleChannel.vi图标及其端口(2)AISampleChannels.vi图标输入端口参数设置这里的输入端口参数设置含义同AIAcquireWaveform.vi的输入端口设置。(3)AISampleChannels.vi图标输出端口参数设置sample:模拟信号采集结果,是一个1D数组,由使用者自己设定采样频率和采样点数。【例2.1】单点采集练习打开一个新的VI,切换到BlockDiagram面板,添加一个AISampleChannel,并且添加Channel控件。Channel控件的添加方式有两种:一种简便的方式是在AISampleChannel的Channel端子单击鼠标右键,选择CreateControl命令选项;另一种方式是切换到前面板,选择I/O子面板的TraditionalDAQChannel控件。设置输入信号的上下限为10V和-10V。I/O子面板及TraditionalDAQChannel函数切换到前面板,添加合适的指示器。这里用的是Numeric里的Meter指示器。

单点采集系统的流程图程序及前面板设计

【例2.2】波形采集练习YB1634函数发生器输出频率为302Hz,幅度(峰值)约4V的正弦波信号,送给PC1200采集卡的模拟输入0通道。使用数据采集模板的模拟输入子模板中的”AIAcquireWaveform”进行采集,采样率设为100kHz,采样点数为1000。采集结果用波形图形和波形数组显示。波形采集系统前面板和框图程序设计【例2.3】波形采集练习(1)准备一个方波信号源和一个正弦波信号源,分别连接到模入通道0和1。(2)设置前面板和框图如图所示。(3)设置scan速率、通道号、每通道样本数,如前面板所示。(4)运行该程序。(2)保存为AcquireMultipleChannels.vi。(6)该程序是无缓冲、软件触发的双通道采样的前面板与流程图中级模入设计中级模入有更好的功能与灵活性,可以更有效地开发用户应用。它的特点包括控制内部采样率、使用外部触发、执行连续外部触发等。下面将描述它的各种VI,应该注意其大量输入、输出端子中的部分内容一般是不必理会的。有效地使用这些VI只需要关注需要的例子。如图所示。

中级模入VI1)AIConfig.vi图标AIConfig对指定的通道设置模入操作,包括硬件、计算机内buffer的分配。(1)AIConfig.vi图标的调用路径选择Functions>>DataAcquisition>>AnalogInput>>AIConfig.vi>>create.,完成上述步骤后,出现该图标及其端口图,如图所示。AILonfig.vi图标及其端口(2)AIConfig.vi图标输入端口参数设置device:DAQ设备的编号,默认值为1。channels:待采集的模拟信号所在通道号。buffersize:存储采集数据的缓冲区大小(Int32),默认值为1000。errorin:前级输入的错误代码和信息。如果已经发生了错误,则VI不执行任何操作,将errorin由errorout传送给后面的VI。(3)AIConfig.vi图标输出端口参数设置TaskID:任务标识符,用来指示当前任务的无符号整型量。errorout:给出错误代码和信息。如果errorin已经输入错误代码和信息,则errorout原封不动地传给后面的VI,或者输出错误代码和信息。2)AIStart.vi图标AIStart.vi启动带缓冲的模入操作。它控制数据采集速率、采集点的数目及使用任何硬件触发的选择。(1)AIStart.vi图标调用路径选择选择Functions>>DataAcquisition>>AnalogInput>>AIStart.vi>>create.,完成上述步骤后,出现该图标及其端口如图所示。AIStart.vi图标及其端口(2)AIStart.vi图标的输入端口参数设置taskIDin:采集任务的标识符,标识该项采集任务。等于前面VI的输出taskIDout的值。numberofscanstoacquire:设置需采集的采样点数。默认值为-1,表示采集了一个缓冲区数据。scanrate:采样速率,单位为点数/秒,默认值为1000个/秒;errorin:错误描述符,与AIConfig.vi模块中的相同;(3)AIStart.vi图标的输出端口参数设置taskIDout:该值与taskIDin相同,把该标识符传给下一个采集VI的taskIDin输入端。errorout:输出错误,与AIConfig.vi模块中的相同;3)AIRead.vi图标选择Functions>>DataAcquisition>>AnalogInput>>AIRead.vi>>create.,完成上述步骤后,出现该图标及其端口如图所示。AIRead.vi图标及其端口(2)AIRead.vi图标输入端口参数设置taskIDin:同AIStart.vi。numberofscanstoread:要读取的数据总数(Int32),默认值是-1,表示读取和numberofscanstoacquire相同个数的数据。errorin:同AIStart.vi。(3)AIRead.vi图标的输出端口参数设置taskIDout:同AIStart.vi。scaleddata:double型2D数组,存放采集结果。errorout:同AIStart.vi。4)AIClear.vi图标AIClear的功能是清除模入操作、计算机中分配的缓冲、释放所有数据采集卡的资源,例如计数器。(1)AIClear.vi图标的调用路径选择Functions>>DataAcquisition>>AnalogInput>>AIClear.vi>>create.,完成上述步骤后,出现该图标及其端口图,如图2-18(a)和(b)所示。AIClear.vi图标及其端口(2)AIClear.vi图标输入端口参数设置taskIDin:同AIRead.vi。errorin:同AIRead.vi。(3)AIClear.vi图标的输出端口参数设置taskIDout:同AIRead.vi。errorout:同AIRead.vi。2)AIReadOneScan.vi图标AISingleScan(S-Scan)的功能是返回一个扫描数据。它的电压数据输出是由通道列表中的每个通道读出的电压数据。使用这个VI仅与AIConfig有关联,不需要AIStart和AIRead。(1)AIReadOneScan.vi图标的调用路径(2)AIReadOneScan.vi图标输入端口参数设置(3)AIReadOneScan.vi图标输出口参数设置AIReadOneScan.vi图标及其端口4.设计示例——连续信号采集与显示仪1)功能描述2)设计步骤(1)参数设置(2)前面板设计(3)流程图设计AIAcquireWaveform.vi图标及其端口2.4模拟输出Analogoutput子模板的调用路径为Functions>>DataAcquisition>>AnalogOutput。鼠标单击后,出现AnalogOutput子模板,如图所示。AnalogOutput对话框1.初级(简易)模出设计(EasyAnalogOutput)这个模块的初级VI有以下几种:AOGenerateWaveformAOGenerateWaveformsAOUpdateChannelAOUpdateChannels与模拟输入VI类似,输入端有以下几个。Device:DAQ的设备号。Channel:要测的模拟输入通道名称,缺省值是0。Value:写入模拟输出通道的数据。Waveform:写入模拟输出通道的波形数据。Updaterate:写入数据速率。缺省值为每秒1000次。AOUpdateChannel函数及端口AOGenerateWaveform函数及端口【例2.4】生成单点数据练习使用AOUpdateChannel,实现单个模拟输出通道的单点数据更新,一般用于产生激励信号。流程图程序如下图所示。利用AOUpdateChannel函数实现单个模拟输出通道的单点数据更新【例2.5】生成波形数据练习使用AOGenerateWaveform生成模拟输出。在本例中,需要产生连续的波形数据,这可以用LabVIEW自带的波形发生器来实现。在Function面板的Analyze子面板的Waveformgeneration子面板内,有各种波形数据发生器。用户也可用Analyze子面板的SignalProcessing子面板内的SignalGeneration子面板内的SignalGenerationbyDuration。如下图所示Analyze子面板及所需函数生成波形数据流程图程序设计系统前面板设计【例2.6】产生一个模出电平。面板及框图如图2-28所示。运行该程序,可以看到表的输出将指示3。这个指示并非模出,为了看到模出,可以使用一块数字万用表直接测量DAC0OUT。你会发现万用表的指示一直维持在3V,尽管程序早已执行完了。面板及框图【例2.7】产生一个模出波形面板及框图2.中级模出(AnalogOutput)中级模出VI下图所示1)AOConfig对指定的通道设置模出操作,包括硬件、计算机内buffer的分配。常用的端子有:(1)Device——采集卡的设备号。(2)Channel——指定模出通道号的串数组。(3)Limitsettings——指定输出信号的范围。(4)taskID——用于所有后来的模出VI以规定操作的设备和通道。2)AOWrite以电压数据的方式写数据到模出数据缓冲区。3)AOStart启动带缓冲的模出操作。4)AOWait在返回之前一直等待直到波形发生任务完成。5)AOClear的功能为清除模出操作、计算机中分配的缓冲、释放所有数据采集卡的资源。【例2.8】产生一个连续的正弦信号。面板及框图说明以下几点(1)由于AOWrite要求输入数据的要示,这里正弦波发生器的输出是一个waveform数据类型,首先将其中的Y数据提出,然后将它扩充为一个二维数组,再经转置后才可连接到AOWrite上。(2)在AOConfig中主要是设置了Buffer,这对于连续输出是必须的,其他都选默认值。(3)Buffer的大小有时需要经过调试,过大或过小都可能导致不能正常工作。使用AnalogOutputUtilities提供的连续模出的现成模块也可以生成一个连续的正弦信号发生器,面板及框图如图2-32所示。该例子中开关是控制AOC-GEN内部的AOClear模块。当其状态为T时,运行程序将释放计算机及采集卡资源,无信号输出。在程序框图上单击AOC-GEN图标,可以看到其内部结构。面板及框图3.设计示例——连续信号输出仪1)功能描述2)设计步骤(1)参数设置(2)前面板设计(3)流程图设计3)运行检验AOUpdateChannel.vi图标及端口参数2.2数字I/O和计数器1.数字I/O本节将讲述数字信号的采集。数字I/O位于DataAcquisition面板的DigitalI/O子面板内,如图所示。数字I/O子模板数字I/O的初级VI有以下几种。ReadfromDigitalLine:从数字线读出以数据。ReadfromDigitalPort:从数字端口读取数据。WritetoDigitalLine:向数字线写入数据。WritetoDigitalPort:向数字端口写入数据。数字I/O有两种方式:数字线和端口。数字I/O的端口初级数字I/OVI的使用和模拟I/OVI类似,下图所示为数字输入的流程图程序。2.计数器1)计数器功能简介2)计数器VI计数器VI计数器VI包含三层VI,低级用于简单的操作,中级VI实现大多数功能,高级VI实现特有的底层操作。初级VI包含以下几种:CountEventsorTime:事件和时间计数GenerateDelayedPulse:产生延迟脉冲GeneratePulseTrain:产生脉冲序列MeasureFrequency:测量频率MeasurePulseWidthorPeriod:测量脉宽或周期【例2.9】下图所示是一个CountEventsorTimeVI,用于时间和事件的计数。它从一开始进行计数,然后通过While循环连续进行。在这里EventSource/Timebase输入设置为0,代表用户信号被用作计数器源输入信号。循环外的布尔常量用于开启计数,用户通过Stop按钮终止计数。计数装置的系统流程图设计2.6DAQmx1.概述DAQmx的优点如下:(1)增加DAQAssistant(2)更加完美的表现(3)更简捷和直观的API函数(4)功能得到扩展(2)增加与ANSIC、LabWindows/CVI、MeasurementStudio中API函数相近的API函数和功能使用DAQmx的必备条件(1)Windows操作系统(2)使用了PCI或者PXIE串行多功能DAQ装置,并且支持SCXI或SCC模块。(3)LabVIEW、LabWindows/CVI、MeasurementStudio的版本至少是7.0版本以上(包括7.0)。2.DAQAssistant

DAQmx所有的VI都位于Function面板的NIMeasurement子面板的DAQmx-DataAcquisition子面板内,如图所示。DAQmx的VI所在面板有两种方式可以选择DAQAssistant:一种是在DAQmx-DataAcquisition子面板内选择;另外一种是分别在ExpressFunction的Input和Output子面板内选择,如下图所示。ExpressFunction的Input子面板和Output子面板选择DAQmxAssistant,系统将自动打开一个新的窗口,即DAQmx图形设置窗口,如图所示。

AnalogInput界面模拟输入信号被划分为以下几大类:Voltage(电压)、Temperature(温度)、Strain(应变)、Current(电流)、Resistance(电阻)、Frequency(频率)等,如图所示。DigitalI/O界面【例2.10】频率计数是计数器非常重要的作用之一。实现频率计数的方法包括适用于低频计数的周期时间求倒数法和适用于高频计数的边沿计数法。频率计数的系统流程图程序设计3.DAQmx的应用DAQmx

Write.vi:向指定的虚拟通道或者任务写入数据。DAQmx

Read.vi:从指定的虚拟通道或者任务读取数据。DAQmxWaitUntilDone.vi:等待数据采集完成。DAQmx

Timing.vi:为数据采集配置采集速率和创建缓冲器。DAQmx

Trigger.vi:为数据采集任务配置触发源,触发数据采集。DAQmxStartTask.vi:开始数据采集或者产生即将输出的数据。DAQmxStopTask.vi:停止数据采集或者停止产生数据的输出。DAQmxCreateVirtualChannel:创建虚拟数据采集通道。DAQmxClearTask.vi:清除数据采集任务。DAQmxAssistantExpressVI:使用NI-DAQmx创建、编辑或运行一个采集任务。【例2.11】利用NIUSB-6009数据采集卡实现单通道数据采集。主要技术指标如下:8个模拟通道(14位、48位kS/s采样速度)。2路14位模拟输出通道。12个I/O通道。1个32位计数器/定时器。利用LabVIEW8.2的【DAQmxDataAcquisition】数据采集VI所构成单通道数据采集VI的前面板和程序框图单通道数据采集VI的程序框图单通道数据采集VI的前面板【例2.12】多通道循环数据采集。多通道循环数据采集VI的前面板多通道循环数据采集VI的程序框图4.共用传统DAQ和DAQmxLabVIEW7.0支持在同一台计算机里共用传统DAQAPI和DAQmxAPI,但是这必须在一定的规则允许下才能够实现。(1)同一时间内控制装置的API函数只能有一个。(2)使用DAQmx控制装置之后,在使用系统DAQ之前,必须释放所有的DAQmx任务,这可以通过调用DAQmxClearTaskVI来实现。(3)使用传统DAQ控制装置之后,若使用DAQmx则必须重新设置DAQ装置,一种方法是调用传统DAQ的DeviceResetVI;另一种方法是在Measurement&AutomationExplore(MAX)的传统DAQ装置目录上单击鼠标右键选择ResetDriverforTraditionalNI-DAQ。(4)必须使用同样的API去设置所有已连接的DAQ装置和已插入的SCXI模块。2.7DAQ驱动程序的开发1.引言

LabVIEW、LabWindows/CVI提供的DAQ库仅适用于NI公司的数据采集产品,而对非NI公司生产的数据采集卡通常采用以下几种驱动方式。自己编写数据采集卡的驱动程序对于用标准C语言编写的驱动程序软件的数据采集卡,可以直接调用该驱动软件的动态连接库文件(.dll文件)。因此,一般多采用这种驱动方式来驱动数据采集卡。当使用非NI公司的数据采集卡,且使用NI的LabVIEW软件,也可以利用在LabVIEW中编写数据采集卡驱动程序的方法实现数据采集。2.数据采集卡驱动程序的开发方式

LabVIEW提供的数据采集卡驱动程序的开发方式有3种。1)直接端口读/写方式(I/O方式)“InPort.vi”的图标及端口“OutPort.vi”的图标及端口2)调用C语言源代码的方式(CIN方式)3)调用动态链接库的方式(CLF方式)【调用库函数】对话框3.数据采集卡驱动程序设计举例【例2.13】用“端口读/写”函数驱动数据采集卡。

1)PC-6310简介表2-1控制端口的地址与功能端口地址操作命令功能基地址+0写写通道代码基地址+1写启动A/D转换器基地址+2读查询A/D转换状态,读高4位转换结果基地址+3读读低8位转换结果命令D7D6D5D4D3D2D1D0A/D转换状态读1×××××××正在转换读0×××××××转换结束表2-2A/D转换状态数据格式(×表示任)端口地址命令D7D6D2D4D3D2D1D0A/D转换结果基地址+2读0000DB11DB10DB9DB8读高4位结果基地址+3读DB7DB6DB2DB4DB3DB2DB1DB0读低8位结果表2-3A/D数据转换结果格式2)前面板设计数据采集VI的前面板3)程序框图设计数据采集VI的程序框图,如下列图所示。【例2.14】利用动态链接库(DLL)进行数据采集。1)数据采集动态链接库的建立建立动态链接库的工具很多,下面主要介绍用C语言编写动态链接库的步骤。①生成C语言文件

②编写动态链接库中的函数

③将C语言文件编译成工程文件。④在MFC界面菜单上做相应的修改⑤生成MyFunctionl.dll的动态链接库生成的程序中编写输出函数代码如下。#

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论