版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、第9章 S-函数S-函数,即S-Function,是system-function的缩写。说得简单,S-函数就是用MATLAB所提供的模型不能完全满足用户,而提供给用户自己编写程序来满足自己要求模型的接口。S-Function可以使用MATLAB,C,C+,Ada,或Fortran语言来编写。使用MEX实用工具,将C,C+,Ada,和Fortran语言的S-Function编译成MEX-文件,在需要的时候,它们可与其它的MEX-文件一起动态地连接到MATLAB中。S-函数由一种特定的语法构成,用来描述并实现连续系统、离散系统以及复合系统等动态系统;S-函数能够接受来自Simulink求解器的相
2、关信息,并对求解器发出的命令作出适当的响应,这种交互作用非常类似于Simulink系统模块与求解器的交互作用。一个结构体系完整的S-函数包含了描述动态系统所需的全部能力,所有其他的使用情况都是这个结构体系的特例。往往S-函数模块是整个Simulink动态系统的核心。S-函数作为与其他语言相结合的接口,可以使用这个语言所提供的强大能力。例如,MATLAB语言编写的S-函数可以充分利用MATLAB所提供的丰富资源,方便地调用各种工具箱函数和图形函数;使用C语言编写的S-函数可以实现对操作系统的访问,如实现与其它进程的通信和同步等。9.1 基本概念理解下列与S-函数相关的一些基本概念对于用户理解S-
3、函数的概念与编写都是非常有益的;而且这些概念在其它的仿真语言中也是会经常遇到的。1. 仿真例程(Routines)Simulink在仿真的特定阶段调用对应的S-函数功能模块(函数),来完成不同的任务,如初始化、计算输出、更新离散状态、计算导数、结束仿真等,这些功能模块(函数)称为仿真例程或者回调函数(call back functions)。2. 直接馈通(Direct feedthrough)直接馈通意味着输出或可变采样时间与输入直接相关。在如下的两种情况下需要直接馈通:(1)某一时刻的系统输出y中包含某一时刻的系统输入u。(2)系统是一个变采样时间系统(variable sample ti
4、me system)且采样时间计算与输入u相关。 time=(nsample_time_value)+offset+time其中n表示第n个采样点。Simulink在每一个采样点上调用mdlOutput和mdlUpdate例程。对于连续时间系统采样时间和偏移量的值应该设置为零。采样时间还可以继承自驱动模块、目标模块或者系统最小采样时间,这种情况下采样时间值应该设置为-1,或者INHERITED_SAMPLE_TIME。3. 动态输入(Dynamically sized inputs)S-函数支持动态可变维数的输入。S-函数的输入变量u的维数决定于驱动S-函数模块的输入信号的维数。 9.2 工作
5、原理在对动态系统建模时,总是能够采用广义的状态空间形式对无论是线性系统还是非线性系统进行描述。这个描述包含两个方程,即状态方程与输出方程。状态方程描述了状态变量的一阶导数与状态变量、输入量之间的关系。n阶系统具有n个独立的状态变量,系统状态方程则是n个联立的一阶微分方程或者差分方程。对于一个系统,由于所选择的状态变量不同,会导出不同的状态方程,因此状态方程的形式不是唯一的。输出方程描述了输出与状态变量、输入量之间的关系。输出量根据任务的需要确定。9.3 Level-1 M文件型用M语言编写的S-函数称为M文件的S函数,根据API版本不同,分为Level-1 M文件型S-函数和Level-2 M
6、文件型S函数。本节将通过Level-1 M文件型S-函数的概述、编写方法以及大量的实例来介绍该类型的S函数,以满足用户不同的需求。9.3.1 概述在MATLAB命令窗口中输入命令sfundemos,可以查看S-函数示例,如图9-3所示,其中列出了多种方式书写的S-函数的实例。双击“M-files”,可以看到如图9-4所示的界面,其中列出了用两种方式书写的M文件型S-函数的实例。图9-3 S-函数实例演示模块图9-4 M文件S函数实例演示模块继续双击“Level-1 M-files”,可以看到如图9-5所示的界面,其中列出了Level-1 M文件型S-函数的大量实例。图9-5 Level-1 M
7、文件型S-函数实例演示模块图9-5中包含一个Level1 M-file S-function Template示例,它提供了书写该类型S-函数的模板,删除注释后的具体内容如下;function sys,x0,str,ts,simStateCompliance = sfuntmpl(t,x,u,flag)switch flag, case 0, sys,x0,str,ts,simStateCompliance=mdlInitializeSizes; case 1, sys=mdlDerivatives(t,x,u); case 2, sys=mdlUpdate(t,x,u); case 3, s
8、ys=mdlOutputs(t,x,u); case 4, sys=mdlGetTimeOfNextVarHit(t,x,u); case 9, sys=mdlTerminate(t,x,u); otherwise DAStudio.error(Simulink:blocks:unhandledFlag, num2str(flag); endfunction sys,x0,str,ts,simStateCompliance=mdlInitializeSizes sizes = simsizes; sizes.NumContStates = 0;sizes.NumDiscStates = 0;s
9、izes.NumOutputs = 0;sizes.NumInputs = 0;sizes.DirFeedthrough = 1;sizes.NumSampleTimes = 1; % at least one sample time is needed sys = simsizes(sizes); x0 = ;str = ;ts = 0 0;simStateCompliance = UnknownSimState;function sys=mdlDerivatives(t,x,u)sys = ;function sys=mdlUpdate(t,x,u)sys = ;function sys=
10、mdlOutputs(t,x,u)sys = ;function sys=mdlGetTimeOfNextVarHit(t,x,u)sampleTime = 1; % Example, set the next hit to be one second later.sys = t + sampleTime;function sys=mdlTerminate(t,x,u)sys = ;9.3.2 编写方法本小节主要针对9.3.1节中模板的各部分加以详细解释。编写S-函数就是根据需求,用相应的代码去代替模板中对应部分的代码。 1.函数声明 第一行“functionsys,x0,str,ts = s
11、funtmpl(t,x,u,flag)”是函数的声明。同时完整的函数声明如下所示:sys,x0,str,ts = sfunc(t,x,u,flag,p1,pn)其中p1,pn为S-函数模块的参数。2.回调函数调用在仿真过程中,Simulink重复地调用S-函数,并根据不同仿真步骤为参数flag赋予不同的值,以便调用指定的回调函数。语句“DAStudio.error(Simulink:blocks:unhandledFlag,num2str(flag);”用于在S-函数运行出错时显示报错信息。3.回调函数mdlInitializeSizes回调函数mdlInitializeSizes中的Size
12、s是一个结构体其中直接馈入是指系统的输出或可变采样时间是否受到输入的控制,如y = ku(u是输入,k是放大因子,y是输出)是直接馈入的,y = kx(x是状态,k是放大因子,y是输出)不是直接馈入的。下述语句的含义是,x0表示状态的初始值,str始终是空矩阵,ts为 的矩阵,其中n为采样时间的个数,每个采样时间的设置如表9-5所示。x0 = ;str = ;ts = 0 0;取值含义0 0连续采样时间0 1连续采样时间,以最小步长运算period offset定步长离散采样时间,period为周期,offset为偏置量,且0offsetperiod此时第m步的采样时间 Tm = m * pe
13、riod + offset-2 0变步长离散采样时间,采样时间由 flag = 4 的回调函数设置-1 0在最小步长内改变的函数并且采用驱动模块的采样时间-1 1在最小步长内不改变的函数并且采用驱动模块的采样时间4.回调函数mdlDerivatives下述语句的含义是:sys表示状态的导数,如 ,则其中 (i = 1,2,n); 等号右边的“”表示导数的表达式。sys = 5.回调函数mdlUpdate 下述语句的含义是:sys表示状态的下一步取值x(n+1),同理sys可以为向量;等号右边的“”表示下一步状态值的表达式。sys = ;6.回调函数mdlOutputs 下述语句的含义是:sys
14、表示输出y,同理sys可以为向量;等号右边的“”表示输出的表达式。sys = ;Tnxxxxx).(321Tnsyssyssyssys)().2()1 (.)(xisys7.回调函数mdlGetTimeOfNextVarHit 下述语句的含义是,sampleTime表示采样步长,sys表示下一步的采样时间,t+sampleTime的位置为下一步采样时间的表达式,这里表示下一步的采样时间为在当前采样时间的基础上增加1秒。sampleTime = 1;sys = t+sampleTime;8.回调函数mdlTerminate下述语句表示sys输出为空值。sys = ;9.4 Level-2 M文件
15、型在上节中,从多个角度详细介绍了Level-1 M文件型S-函数的编写方法,因为这是当前应用最广,用户使用最数量的方式。目前,MATLAB在保留Level-1 M文件型S-函数的基础上,力推Level-2 M文件型S-函数,并提供了由Level-1 M文件型到Level-2 M文件型S-函数的转换方法。本节将着重介绍Level-2 M文件型S-函数。9.4.1 概述与查看Level-1 M文件型S-函数演示程序的过程类似,可以通过操作看到如图9-4所示的界面,继续双击“Level-2 M-files”,可以看到如图9-19所示的界面,其中列出了Level-2 M文件型S-函数的大量实例。图9-
16、19 Level-2 M文件型S-函数实例演示模块9.4.2 编写方法本小节主要针对9.4.1节中模板的各部分加以详细解释。编写S-函数就是根据需求,用相应的代码去替代末班中对应部分的代码。1两种M文件型S-函数的关系首先,以Level-2 M文件型S-函数的参数flag为基准,建立Level-1 M文件型和Level-2 M文件型S-函数两个模板间的对应关系,如表9-6所示。Level-1 M文件型Level-2 M文件型functionsys,x0,str,ts = MySfunction(t,x,u,flag)function MySfunction(block)case 0, sys,
17、x0,str,ts = mdlInitializeSizes;setup(block)case 1, sys = mdlDerivatives(t,x,u);block.RegBlockMethod(Derivatives,Derivatives);case 2, sys = mdlUpdate(t,x,u);block.RegBlockMethod(Update,Update);case 3, sys = mdlOutputs(t,x,u);block.RegBlockMethod(Outputs,Output);case 4, sys = mdlGetTimeOfNextVarHit(t,
18、x,u);模板中无对应语句设置,可通过如下回调函数实现:block.RegBlockMethod(Outputs,Output)case 9, sys = mdlTerminate(t,x,u);block.RegBlockMethod(Terminate,Terminate)注意如下两点:Level-2 M文件型S-函数不支持过零检验。functionsys,x0,str,ts = MySfunction(t,x,u,flag)中的参数flag在Level-2 M文件型S-函数中已经不存在,参数t对应block.CurrentTime,参数x对应block.Dwork,参数u对应block.
19、InputPort.Data,参数ts对应block.SampleTimes,参数str已经不存在,参数x0的内容将在后面讲解,参数sys在系统输出时对应block.OutputPort.Data。其次,以Level-1 M文件型S-函数的回调函数mdlInitializeSizes为基准,建立Level-1 M文件型和Level-2 M文件型S-函数两个模板间的对应关系。如下表所示。Level-1 M文件型Level-2 Msizes.NumContStates = 0;function DoPostPropSetup(block)block.NumContStates = 1; %声明连续
20、状态数block.AutoRegRuntimePrms; %将所有可调参数注册为运行参数sizes.NumDiscStates = 0;function DoPostPropSetup(block)block.NumDworks = 1; %声明离散状态数block.Dwork(1).Name = x1; %状态名block.Dwork(1).Dimensions = 1; %状态维数block.Dwork(1).DatatypeID = 0; %状态数据类型,0为double型block.Dwork(1).Complexity = Real; %状态数据类型,Real为实数block.Dwo
21、rk(1).UsedAsDiscState = true; %状态类型,ture为离散,false为连续block.AutoRegRuntimePrms; %将所有可调参数注册为运行参数sizes.NumOutputs = 0;function setup(block)sizes.NumInputs = 0;block.NumInputPorts = 1; %设置输入端口数,每个端口可包含多个输入block.NumOutputPorts = 1; %设置输出端口数,每个端口可包含多个输出block.InputPort(1).DatatypeID = 0; %第一个输入端口数据类型,double
22、型block.InputPort(1).Complexity = Real %数据类型,实数型block.OutputPort(1).DatatypeID = 0; %第一个输出端口数据类型,double型block.OutputPort(1).Complexity = Real; %数据类型,实数型模板中无对应语句设置端口的输入数目,可以在function setup(block)中如下设置: block.InputPort(1).Dimensions = 2; %第一个输入端口包含2个输入sizes.DirFeedthrough = 1;模板中无对应语句设置,可以在function set
23、up(block)中设置如下:block.InputPort(1).DirectFeedthrough = true;sizes.NumSampleTimes = 1;模板中无对应语句设置,在block.SampleTimes中隐含x0 = ;在function InitializeConditions(block)中设置str = ;模板中无对应语句设置ts = 0 0;function setup(block)block.SampleTimes = 0 0;最后,以Level-1 M文件型S-函数的回调函数为基准,建立Level-1 M文件型和Level-2 M文件型S-函数两个模板间的对
24、应关系,如表9-8所示。Level-1 M文件型Level-2 M文件型function sys = mdlDerivatives(t,x,u)sys=;function Derivatives(block)block.Derivatives.Data = ;function sys = mdlUpdate(t,x,u)sys=;function Update(block)block.Dwork.Data = ;function sys = mdlOutputs(t,x,u)sys=;function Outputs(block)block.OutputPort.Data = ;functio
25、n sys = mdlGetTimeOfNextVarHit(t,x,u)功能包含在function Outputs(block)中function sys = mdlTerminate(t,x,u)function Terminate(block)表9-8 两种M文件型S-函数模板间基于回调函数的对应关系综上,按照Level-1 M文件型书写模板,给出了其中语句及参数与Level-2 M文件型S-函数的对应关系。这为Level-1 M文件型S-函数的移植提供了方法,同时也介绍了Level-2 M文件型S-函数模板的有关内容。9.5 C MEX文件型前面详细介绍了两类M文件型S-函数的编写方法
26、,本节将重点介绍C MEX文件型S-函数的编写方法。除了C MEX文件型,还有C+ MEX、Fortran MEX文件型S-函数。在这些MEX文件型S-函数中,C MEX文件型是最常用的。9.5.1 概述1.MEX文件简介在MATLAB中,可调用的C或Fortran语言程序称为MEX文件,MATLAB可以直接把MEX文件视为它的内建函数进行调用。MEX文件是动态链接的例程,MATLAB解释器可以自动载入并执行它。MEX文件主要有以下几方面的应用:在MATLAB中,M文件的计算速度特别是循环迭代的速度远比C语言慢,因此可以把要求大量循环迭代的部分用C语言编写为MEX文件,以提高计算速度。对于已经
27、开发的C语言程序,则不必将其转化为M文件而重复劳动,通过添加入口程序mexFunction,即可由MATLAB调用。直接控制硬件,如A/D采集卡、D/A输出卡等,以用于数据采集或控制应用。2. C MEX文件简介C MEX文件,就是基于C语言编写的MEX文件,是MATLAB应用程序接口的一个重要组成部分。通过它不但可以将现有的使用C语言编写的函数轻松地引入MATLAB环境中使用,避免了重复的程序设计,而且可以使用C语言为MATLAB定制用于特定目的的函数,以完成在MATLAB中不易实现的任务,同时还可以使用C语言提高MATLAB环境中数据的处理效率。C语言的MEX文件的源程序由两个非常明显的部
28、分组成:计算程序,即在MEX文件中完成计算功能的程序代码。计算可以是普通的C语言程序,按照C语言规则编写即可。入口程序,将计算程序与MATLAB连接的入口函数mexFunction。需要注意的是,MEX文件虽然具有较强大的功能,但并不是对所有的应用都恰当。MATLAB是一个高效率的编程系统,特别适合于工程计算、系统仿真等应用,它的最大优点就是将人们从繁杂的程序中解放出来。因此,能够用M文件完成的程序,应尽量使用MATLAB编写,除非遇到必须使用MEX文件的情况。与查看Level-1和Level-2 M文件型S-函数演示程序的过程类似,可以通过操作看到如图9-3所示的界面,继续双击“C-file
29、s”,可以看到如图9-24所示的界面,其中列出了C MEX文件型S-函数的大量实例。图9-24 C-MEX文件型S-函数实例演示模块9.5.2 编写方法本节将对Basic C-MEX模板中的各部分加以详细说明。编写S-函数就是根据需求,用相应的代码去代替模板中对应部分的代码。1. Level-2 M文件型和C MEX文件型S-函数的关系Level-2文件型与C MEX文件型S-函数在书写上比较类似。2.C MEX文件型S-函数的特性C MEX文件型S-函数的编写满足C语言的规范,这是与前面M文件型S-函数的最大区别。下面具体解释各段代码的含义。(1)S-函数声明#define S_FUNCTI
30、ON_NAME MySfunction /*函数命名*/#define S_FUNCTION_LEVEL 2 /*指定LEVEL 2类型*/(2)导入支持SimStruct的库文件#include simstruc.h(3)模块初始化回调函数static void mdlInitializeSizes(SimStruct *S) /*S相当于Level-2 M文件型S-函数中的block*/ssSetNumSFcnParams(S,0); /*设置外部参数个数*/if(ssGetNumSFcnParams(S)!=ssGetSFcnParamsCount(S) return; /*期望参数个数
31、不等于实际参数个数的处理方法*/ssSetNumContStates(S,0) /*设置连续状态个数*/ssSetNumDiscStates(S,0) /*设置离散状态个数*/if(!ssSetNumInputPorts(S,1) return; /*ssSetNumInputPorts(S,1)设置输入端口个数为1*/ssSetInputPortWidth(S,0,1); /*设置第一个输入端口的输入个数,C语言中第一个元素下标为0*/ssSetInputPortRequiredContinuous(S,0,true); /*设置第一个输入端口始终输入*/ssSetInputPortDire
32、ctFeedThrough(S,0,1); /*设置第一个输入端口有直接馈入*/if(!ssSetNumOutputPorts(S,1) return; /*ssSetNumOutputPorts(S,1)设置输出端口个数为1*/ssSetOutputPortWidth(S,0,1); /*设置第一个输出端口的输入个数*/ssSetNumSampleTimes(S,1); /*设置采样时间个数为1*/ssSetNumRWork(S,0); /*设置实数元素个数*/ssSetNumIWork(S,0); /*设置整数元素个数*/ssSetNumPWork(S,0); /*设置指针元素个数*/ss
33、SetNumMWork(S,0); /*设置模式元素个数*/ssSetNumNonsampledZCs(S,0); /*设置非采样过零个数*/ssSetOptions(S,0); /*具体选项设置在simstruc.h文件中*/(4)采样时间初始化回调函数static void mdlIntializeSampleTimes(SimStruct *S)ssSetSampleTime(S,0,CONTINUOUS_SAMPLE_TIME); /*为第一个采样时间设置采样周期*/ssSetOffsetTime(S,0,0.0); /*为第一个采样时间设置偏置量*/(5)状态初始值设置回调函数#de
34、fine MDL_INITIALIZE_CONDITIONS#if defined(MDL_INITIALIZE_CONDITIONS) static void mdlIntializeConditions(SimStruct *S) real_T *xc0 = ssGetContStates(S); /*设定连续状态初始值的指针,进而赋值*/ real_T *xd0 = ssGetRealDiscStates(S); /*设定离散状态初始值的指针,进而赋值*/(6)模块自动启动设置回调函数#define MDL_START#if defined(MDL_START)static void m
35、dlStart(SimStruct *S)#endif(7)输出回调函数static void mdlOutputs(SimStruct *S,int_T tid)const real_T *u = (const real_T*)ssGetInputPortSignal(S,0); /*将第1个输入端口的值赋给变量*/real_T *y = ssGetOutputPortSignal(S,0); /*声明第1个输出端口值所对应的指针*/y0 = u0; /*将待输出的值赋给第1个输出端口*/(8)更新回调函数#define MDL_UPDATE#if defined(MDL_UPDATE)st
36、atic void mdlUpdate(SimStruct *S,int_T tid)*real_T *x = ssGetRealDiscStates(S); /*将连续状态的值赋给指定变量*/*const real_T *u = (const real_T*)ssGetInputPortSignal(S,0); /*将第1个输入端口的值赋给变量*/#endif(9)微分回调函数#define MDL_DERIVATIVES#if defined(MDL_DERIVATES)*real_T *dx = ssGetdX(S); /*将连续状态的导数值赋给指定变量*/*real_T *x = ss
37、GetContStates(S); /*将连续状态的值赋给指定变量*/*const real_T *u = (const real_T*)ssGetInputPortSignal(S,0); /*将第1个输入端口的值赋给变量*/#endif(10)终止回调函数static void mdlTermiante(SimStruct *S)(11)S-函数结尾#ifdef MATLAB_MEX_FILE#include simulink.c /*加载simulink.c*/#else#include cg_sfun.h /*加载simulink.cg_sfun.h*/#endif综上,详细介绍了C
38、MEX文件型S-函数模板的内容,这为C MEX文件型S-函数的书写提供了便利。9.5.3 实例前面介绍了C MEX文件型S-函数的写法,下面通过不同类型的实例进一步说明C MEX文件型S-函数的编写方法和编写技巧。1连续系统下面给出一个连续系统的例子。【例9-9】用C MEX文件型S-函数(MySFunction9.c)描述方程 (其中 ),其内容如下:#define S_FUNCTION_NAME MySfunction9#define S_FUNCTION_LEVEL 2#include simstruc.h static void mdlInitializeSizes(SimStruct
39、 *S)ssSetNumContStates(S, 3); if (!ssSetNumInputPorts(S, 1) return; ssSetInputPortWidth(S, 0, 1); ssSetInputPortRequiredContiguous(S, 0, true); ssSetInputPortDirectFeedThrough(S, 0, 1);DuCXYXBuAXX0)0(21,010001,100,321100010DCBA if (!ssSetNumOutputPorts(S, 1) return; ssSetOutputPortWidth(S, 0, 2); ss
40、SetNumSampleTimes(S, 1); ssSetOptions(S, 0); static void mdlInitializeSampleTimes(SimStruct *S) ssSetSampleTime(S, 0, CONTINUOUS_SAMPLE_TIME); ssSetOffsetTime(S, 0, 0.0); #define MDL_INITIALIZE_CONDITIONSstatic void mdlInitializeConditions(SimStruct *S) real_T *x0 = ssGetContStates(S); int_T i; /X0=
41、0 for (i=0; i3; i+) x0i = 0; static void mdlOutputs(SimStruct *S, int_T tid) real_T *y = ssGetOutputPortRealSignal(S,0); real_T *x = ssGetContStates(S); real_T *u = (const real_T*) ssGetInputPortSignal(S,0); /Y=CX+Du y0 = x0 + u0; y1 = x1 + 2*u0; #define MDL_DERIVATIVESstatic void mdlDerivatives(Sim
42、Struct *S) real_T*dx= ssGetdX(S); real_T*x= ssGetContStates(S); real_T *u = (const real_T*) ssGetInputPortSignal(S,0); /dX=AX+Bu dx0 = x1; dx1 = x2; dx2 = -2*x0-3*x1-5*x2+u0; static void mdlTerminate(SimStruct *S) #ifdef MATLAB_MEX_FILE #include simulink.c #else#include cg_sfun.h #endif 在仿真前,需要首先使用如
43、下指令编译MySfunction9.c:mex MySfunction9.c此时,MySfunction9.c所在目录下增加了一个文件MySfunction9.mexw32。在Simulink中,使用该S-函数的实例如图9-25所示,运行后双击Scope模块可得到如图9-26所示的结果。图9-25 Simulink仿真框图 图9-26 Simulink仿真运行结果本例需要说明的是,上述代码不支持中文注释。9.6 使用S-函数创建器编写C MEX文件型前面介绍了如何使用各类模板生成S-函数,MATLAB还提供了S-函数创建器(S-functions Builder),以便通过界面生成C MEX文件型S-函数。下面通过一个实例说明基于S-函数创建器生成C MEX文件型S-函数的方法。【例9-11】用S-函数创建器生成S-函数(MySfunction11.c)描述方程 (其中 )。具体步骤如下: )()()(0) 0 ()()() 1(nDunCXnYXnBunAXnX321,1,010001,100,321100010pppEqDCBpppA(1)创建如图9-30所示的Simulink仿真初始框图。(2)双击“system”模块,可以看到如图9-32所示的S-函数设计界面。(3)在如图9-3
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 护理教育中的领导力培养
- 四川德阳市2026年中考模拟试题英语试卷2(含答案无听力音频及原文)
- 异丁烯装置操作工操作安全水平考核试卷含答案
- 货运代理服务员岗前技能实操考核试卷含答案
- 矿井轨道工安全演练模拟考核试卷含答案
- 2026年新科教版高中高一化学上册第一单元化学计量综合计算卷含答案
- 风机装配调试工安全防护知识考核试卷含答案
- 2026年新科教版高中高二生物上册第一单元基因工程工具酶卷含答案
- 音响调音员7S执行考核试卷含答案
- 啤酒酿造工标准化评优考核试卷含答案
- 车位包销合同协议模板
- 国家职业技术技能标准 6-12-03-00 药物制剂工 人社厅发201957号
- 医务人员职业暴露预防及处理课件
- 专题04 绿色植物的蒸腾作用、光合作用和呼吸作用-5年(2020-2024)中考1年模拟地理真题分类汇编(广东专用)
- GB/T 2684-2025铸造用砂及混合料试验方法
- 集中空调通风系统应急预案
- 如何预防夏季食堂中毒
- 黑龙江省中职毕业生对口专业升高职院校招生统一考试英语卷
- 艺术展览品牌影响力研究-洞察分析
- 人为因素和飞行事故中人的因素
- 房地产销售部门绩效考核方案
评论
0/150
提交评论