Truetime网络仿真
更新时间:2023-09-18 03:32:01 阅读量: 幼儿教育 文档下载
- truetime网络仿真推荐度:
- 相关推荐
网络控制系统的调度研究与仿真(Truetime工具)
1. 节点的驱动方式
网络控制系统中的传感器一般采用时钟驱动,传感器的时钟即为系统的时钟,而控制器和执行器既可以是时钟驱动,也可以是事件驱动。但事件驱动相比于时钟驱动具有以下优点: (1)控制器或执行器为事件驱动方式时,从源节点(传感器或控制器)发送的数据一旦到达目标节点(控制器或执行器)便马上执行,而在时钟驱动方式时控制器或执行器的数据被执行要等到规定的时间点,因此事件驱动方式客观上减少了网络诱导时延;
(2)控制器或执行器为事件驱动方式时,避免了控制器或执行器为时钟驱动方式时与传感器时钟同步的困难;
(3)控制器或执行器采用事件驱动方式时,避免了控制器或执行器为时钟驱动方式时容易出现的空采样和数据丢失,提高了反馈数据的利用率。
事件驱动相对于时钟驱动也有一定缺点: (1)在实际运用中事件驱动较难实现。
(2)部分实际的网络控制系统不支持事件驱动方式。
2. TrueTime工具箱结构与功能
Truetime是由瑞典Lund工学院Henriksson等人开发的一个基于Matlab/Simulink的实时网络控制系统的仿真工具箱,为NCS理论的仿真研究提供了简易可行、功能齐全的手段,拜托了软件编程实现特定的网络通讯协议、通信延迟所带来的困难,支持控制与实时调度同时仿真可以方便地仿真实时系统中的资源调度问题。TrueTime仿真软件主要包括两个基本模块:内核模块(TrueTime Kernel)和网络模块(TrueTime Network),如图1所示。
内核模块可以是时间驱动也可以是事件驱动的,它主要包含了一个实时内核,A/D,D/A转换端口,与网络模块连接的信号端口(信号接收(Rcv),信号发送(Snd)),实时调度(schedule)显示端口等,调度器与监视器的输出用于显示仿真过程中公共资源(CPU、监控器、网络)的分配,此外,它还有一个外部中断通道(Interrupts)可以处理外部中断。任务和中断处理器的执行需要通过用户自定义函数来实现。调度策略使用一个优先权函数来决定任务的属性。
图1 Truetime工具箱
网络模块是事件驱动的,当有消息进入或离开网络时它便执行。一条消息包含的信息有发送和接收节点号,用户数据(如测量信号和控制信号),消息的长度和其他可选的实时属性(如优先级或最终时限等)。网络模块包含两个信号端口(信号接收(Rcv),信号发送(Snd)),以及一个实时调度(schedule)显示端口。其中收发信号端口可以通过Matlab模块扩充至多个接口,TrueTime中预定义了多种调度策略,包括固定优先级(Fixed Priority),单调速率(RM,Rate Monotonic),截止期单调(DM,Dead line Monotonic),最小截止期优先(EDF,Earliest Dead line First),同时,它还有多种介质访问控制协议(CSMA/CD,CSMA/CA,Round Robin,FDMA或TDMA)和相应的参数可以选择,如图2所示。
图2 Truetime网络模块
Network number:网络模块的数量。
Number of nodes:连接在网络模块的节点数量。 Data rate (bits/s):网络传输速率。
Minimum frame size (bits):协议的最小结构长度。
Pre-processing delay (s):信息在网络接口上的发送时延。 Post-processing delay (s):信息在网络接口上的接收时延。 Loss probability (0–1):丢包率。
利用TrueTime仿真软件,网络控制系统中的各个处理单元(包括传感器、控制器和执行器)都可以由计算机模块构建,而网络控制系统的实时网络可以由所需协议的网络模块来构建,另外,再结合Matlab/Simulink的其他控制模块,就可以简便而又快速的构建一个实
时的网络控制系统。
利用TrueTime仿真软件包的优点在于:
(1) 由于该仿真软件中两个基本模块具有通用性,在构建各个处理单元时只需选用
其相应的接口功能进行连接即可,因此大大加快模型构建的速度。
(2)该仿真软件可以比较方便模拟各种实时调度策略,并通过Scope可以很方便地观察各个任务的调度情况和对象的输出情况。
(3)在网络模块中,可以很方便的模拟数据传输率、数据包的大小和丢包率等网络参数,有利于分析各类参数对网络控制系统的性能影响。
使用TrueTime进行仿真时,首先要对网络控制系统中的内核模块TrueTime Kernel和网络模块TrueTime Network以及各个节点进行初始化,在初始化中需要完成以下工作:
1. 初始化功能块内核,设置功能块输入、输出端口的数目和调度策略。
2. 定义消息函数,并根据节点采用的驱动方式,设置不同的消息调度策略。对于时钟
驱动的节点,调用ttCreatPeriodicTask函数,设置周期性的任务调度策略,以实现定时采样功能。对于事件驱动的节点,调用ttCreateInterruptHandler函数,设置中断式消息调度策略,使节点在接受到网络数据后触发相应的消息。
3. 初始化网络端口,设置节点对应的网络端口代号。控制网络功能由TrueTime
Network功能块实现。网络类型、节点数、传输速率以及丢包率等参数可以通过TrueTime Network功能块的设置窗口进行设置。具体的参数选项根据网络类型的不同而不同。
表1 伪码举例 伪码名称 ttAnalogIn ttAnalogOut ttSendMsg ttGetMsg ttWait ttCreateTimer ttSetpriority ttCurrentTime 接口 A/D Interrupts Rcv D/A Snd Schedule Monitors P 功能 把从外界接收的模拟信息转换成数字信息 为该模块提供中断句柄 接收数字信息 把模拟信息转换成数字信息输出 发送数字信息 和“Monitors”查看仿真过程中系统资源的分配情况 和“Schedule”查看仿真过程中系统资源的分配情况 如果需要,可以接通电池(TrueTime提供电池模块) 功能 从输入通道取值 设定输出通道值 在网络上发送信息 从网络输入队列中获取信息 等一个事件 在指定时间触发中断句柄 改变任务优先级 获取当前系统时间 表2 TrueTime核心模块接口功能
TrueTime Network模块提供了3个接口来进行数据的传递或者监控系统的运行,其功能
如表3所示。
表3 TrueTime网络模块接口功能 接口 Snd 功能 接收由TrueTime Kernel模块的Snd端口发送的数字信息
Rcv Schedule 发送数字信息至TrueTime Kernel模块的Rcv端口 查看仿真过程中系统资源的分配情况 上述2个模块均为事件驱动,包括内部事件和外部事件。内部事件通常是由时钟中断触发的,如时间队列释放一个任务或是计时终结都会引发时钟中断。而外部事件主要是和网络模块的外部中断通道有关,当相应的通道的信号值改变就会触发中断。除了计算机模块的A/D转换借口的输入信号是连续时间信号外,这两个模块所有端口的输入都是离散时间信号,输出也都是离散时间信号。
3. 仿真举例
根据节点不同的工作方式,可以得到不同的系统离散时间模型。为了对网络控制系统进行建模,首先对系统作如下假设:
1. 传感器节点采用时间驱动方式,对被控对象的输出进行等周期采样,采样周期为h; 2. 控制器节点和执行器节点都采用事件驱动方式,即信息的到达时间即为响应节点的
动作时间。
控制系统将传感器、控制器和执行器作为系统的3个节点分别用一个TrueTime Kernel模块仿真,传感器节点采用时间驱动方式,它包含了一个周期性任务,将定期采样的信号通过网络传送到控制器节点;控制器和执行器节点采用事件驱动方式,控制节点处理控制信号并将结果送至执行器节点,执行器节点执行控制信号并输出结果。
该网络控制系统的仿真模型如图3所示。
图3 网络控制系统仿真模型
图4 参数设置界面
图5 以太网下的系统输出
图6 令牌网下的系统输出
图7 设备网下的系统输出
网络传输过程中的数据丢失是影响网络控制系统性能的另外一个重要的因素,通过设定不同的丢包率来研究其对系统性能的影响。
无丢包:
丢包率0.1:
图8 参数设置界面
图9系统的输入和输出
图10系统的输入和输出
丢包率0.15:
图11系统的输入和输出
丢包率0.2:
图12 系统的输入和输出
丢包率越大,对系统性能的影响越大,当丢包率达到一定程度时,就会使系统不再稳定。 (1)在令牌网下,传输速率为1.5M:
图13 系统响应曲线(无冲突、干扰和数据丢失)
网络干扰节点占网络资源的20%情况下,调度策略为固定优先级(Fixed Priority) ,系统的输出和网络资源调度情况:
图14 系统响应曲线
(2)在令牌网下,传输速率为93.75Kbit/s,调度策略为固定优先级(Fixed Priority) :
图15 系统响应曲线
图16 网络资源调度
网络干扰节点占网络资源的20%情况下,系统的输出和网络资源调度情况,调度策略为固定优先级(Fixed Priority):
图14 系统响应曲线
图15 网络资源调度
(3)在令牌网下,传输速率为93.75Kbit/s,网络干扰节点占网络资源的20%、丢包率为10%情况下,调度策略为固定优先级(Fixed Priority),系统的输出和网络资源调度情况:
图16系统响应曲线
图18 网络资源调度
在令牌网下,传输速率为93.75Kbit/s,网络干扰节点占网络资源的20%、丢包率为10%情况下,系统的输出和网络资源调度情况,调度策略为PrioRM(单调速率):
图19系统响应曲线
图20 网络资源调度
在令牌网下,传输速率为93.75Kbit/s,网络干扰节点占网络资源的20%、丢包率为10%情况下,系统的输出和网络资源调度情况,调度策略为PrioEDF:
图20 系统响应曲线
图21 网络资源调度
在令牌网下,传输速率为93.75Kbit/s,网络干扰节点占网络资源的20%、丢包率为10%情况下,系统的输出和网络资源调度情况,调度策略为PrioDM:
图20 系统响应曲线
图21 网络资源调度
在网络控制系统中,不同的网络传输协议,传输速率、干扰率、数据包的丢失率以及数据包的大小都会影响到网络控制性能,对于多任务的控制系统调度策略对控制性能也有很大的影响。
调度策略对控制系统性能的影响。 网络的调度问题:
网络控制系统是基于网络的分布式控制系统。网络控制系统中的所有控制信息都要通过实时网络传输,由于网络带宽的限制,网络中传送的信息不可避免产生碰撞、丢失和重发等现象,因此必须对网络中传输信息进行合理调度,否则控制信息产生的较大时延,会降低控制系统的控制性能,严重时将导致系统破坏,因此在网络控制系统的设计与研究中必须考虑网络的调度问题。
从仿真结果可见,网络控制系统不仅依赖于传统控制算法的设计,而且依赖于网络资源的调度与优化,由于调度的影响,使得控制系统传感器的采样周期产生变化,不是一个定值,同时从传感器检测到执行器之间时间也产生了变化,从而使得系统产生波动,导致性能降低。
不同的调度策略将决定网络与计算机的不同执行与传输方式以及不同的控制性能。仿真表明,网络控制系统那个的性能不仅与常规的控制系统的控制方法有关,而且与网络的调度有关,所以必须对网络控制系统的控制方法与调度进行集成研究。
从图中可以看出,当无冲突任务、干扰节点和数据丢失时,信号的传输延时是常数,系统性能较好。当加入冲突任务、干扰节点时,引起了信息在控制节点内和网络中对资源的争夺,竞争使某些低优先级的任务处于等待状态或闲置状态,这些任务不能得到及时处理,导致系统延时变大,而且在多任务竞争这个不确定特性下,时延是时变的,从而使系统指标恶化。
图和图分别为控制器调度图和网络调度图,其中,信号高表示任务正在执行,中表示任务在等待,低表示任务闲置。从图可以看到各任务在控制器内的执行情况,从图中可以看到各个节点信息在网络中的传输情况。
从图中可以看到当未加冲突任务和干扰节点时,传感器周期性的采集信号,并通过网络把信号传给控制器,控制器接收传感信号,计算出控制信号并通过网络传给执行器,执行器接收控制信号并产生相应的动作。此时控制器中存在控制任务调度,网络中存在控制器节点和传感器节点调度。
当控制器节点内部存在冲突任务,而网络中存在干扰节点时,控制器内存在控制任务和冲突任务的调度,网络中存在控制器节点、传感器节点和干扰节点的调度。由于冲突任务和干扰节点的存在,使得信息在控制器节点内处理时以及在网络中传输时存在冲突和资源争夺。该例中规定干扰具有最高优先级,所以从图和图,可以看到控制器内部冲突任务的执行机率大,而网络中干扰信息的传输机率大,导致了传感器的采样周期发生变化,不是一个定值,同时从传感器检测到执行器之间时间也发生了变化,从而使得系统产生波动,性能降低,如图所示。
仿真系统可以通过Proprocessing delay(发送时延)与Postprocessing delay(接收时延)进行传输时延的设定。由于时延增加,系统的稳定性降低。图所示给出了网络传输时延为0.001的系统变化曲线,由于存在传输时延,系统振荡加强,性能降低,网络控制系统的处理时延会对系统性能产生很大的影响。,这里采用调整控制器参数方法进行补偿调节。
TrueTime模块配置与初始化
1. TrueTime Network模块的配置
TrueTime Network模块的配置需要通过块任务对话完成。包括:指定网络模式(Network type)、网络模块的访问地址(Network number)、连接到该模块的网络节点数(Number 偶发nodes)、通信速率(Data rate(bit/s)0、最小数据帧(Minimum frame size(bytes))、网络发送端时延(Pre-processing delay(s))、网络接收端时延(Post-processing delay(s))和信息传输丢失率(Loss probability(0-1))等。可供选择的网络模式有CSMA/CD(如Ethernet)、CSMA、AMP(如CAN)、Round Robin(如Token Bus)、FDMA(Frequency Division Multiple Access)、TDMA(Time Division Multiple Access,如TTP)和Switched Ethernet。
2. TrueTime Kernel模块的配置和初始化
TrueTime Kernel模块的配置可以通过快任务对话完成。可以通过任务对话配置的参数
有:指定初始化脚本函数名称(Name of init function(MEX of MATLAB))、选择初始化脚本变量(Init function argument)、内核模块是否依赖电池(Battery)、时间漂移(Clock drift)和时间偏移量(Clock offset)等。某些其它的参数也可以通过命令ttSetKernelParameter进行设置。
TrueTime Kernel模块的初始化(Initialization)涉及:指定仿真中模块的输入输出通道地址(number of Inputs and outputs),定义调度策略(scheduling policy),创建任务(tasks)、中断柄(interrupt handlers)、事件(events)和监视器(monitors)等。TrueTime Kernel模块的初始化通过编写初始化脚本代码来实现。每个TrueTime Kernel模块必须进行初始化。(在Matlab中,某些初始化参数也可以在图形界面窗口中通过选择参数实现)。
从网络调度图中可以看到,事件驱动型的控制器,在传感器数据到达时立即计算出控制信号;事件驱动型的控制器,从采样时刻运作。从Ethernet网络控制系统的仿真结果来分析,事件驱动型的网络控制系统比时间驱动型的网络控制系统,在阶跃响应下,超调量小,回复时间短,系统性能明显优越。 TrueTime初始化问题:
初始化中计算机内核与网络是两个基本的初始化内容,分别采用了ttInitKernel(nbrInp,nbrOutp,prioFcn)与ttInitNetwork(nodenumber,handlename)形式表示。ttInitKernel中nbrlnp为输入通道的数目,nbrOutp为输出通道的数目,prioFcn为采用的调度策略,而ttInitNetwork中nodenumber为网络中节点的地址,handlername为被调用的中断句柄名,如ttInitKernel(1,0,‘RM’)表示采用了RM(单调速率)调度策略。如网络中节点4控制器初始化为ttInitNetwork(4,‘msgRcv’)。
TrueTime工具箱实例代码(distributed): 1. function actuator_init
%执行器初始化
% Distributed control system: actuator node % Receives messages from the controller and actuates % the plant.
% Initialize TrueTime kernel
ttInitKernel(0, 1, 'prioFP'); % nbr Of Inputs, nbr Of Outputs, fixed priority,初始化内核,设置功能块输入、输出端口的数目和调度策略 % Create actuator task 创建任务 deadline = 100; prio = 1;
ttCreateTask('act_task', deadline, prio, 'actcode');任务名称,最终期限(截止期),代码名称 % Initialize network
ttCreateInterruptHandler('nw_handler', prio, 'msgRcvActuator'); 对于事件驱动的节点,调用ttCreateInterruptHandler函数,设置中断式消息调度策略,使节点在接受到网络数据后触发相应的
消息。
ttInitNetwork(2, 'nw_handler'); % node #2 in the network初始化网络接口,网络数目,当事件到达时,激发的端口名称
2. function [exectime, data] = actcode(seg, data)
switch seg, case 1,
data.u = ttGetMsg; 从网络输入队列中获取信息 exectime = 0.0005;执行时间 case 2,
ttAnalogOut(1, data.u) 设定输出通道值,通道号,通道值 exectime = -1; % finished end
3. function controller_init(arg) 控制器初始化
% Distributed control system: controller node %
% Receives messages from the sensor node, computes control signal % and sends it to the actuator node. Also contains a high-priority % disturbing task.
% Initialize TrueTime kernel
ttInitKernel(1, 0, 'prioFP'); % nbrOfInputs, nbrOfOutputs, fixed priority初始化内核,设置功能块输入、输出端口的数目和调度策略
% Controller parameters 控制器参数设置,h为采样周期,N为采样次数 h = 0.010; N = 100000; Td = 0.035; K = 1.5;
% Create task data (local memory) data.u = 0.0; data.K = K; data.ad = Td/(N*h+Td); data.bd = N*K*Td/(N*h+Td); data.Dold = 0.0; data.yold = 0.0; % Create controller task deadline = h; prio = 2;
ttCreateTask('pid_task', deadline, prio, 'ctrlcode', data); 任务名称,最终期限(截止期),代码名称 % Optional disturbance task 随机扰动任务 if arg > 0 offset = 0.0002; period = 0.007; prio = 1;
ttCreatePeriodicTask('dummy', offset, period, prio, 'dummycode'); 对于时钟驱动的节点,调用ttCreatPeriodicTask函数,设置周期性的任务调度策略,以实现定时采样功能。
end
% Initialize network
ttCreateInterruptHandler('nw_handler', prio, 'msgRcvCtrl'); 对于事件驱动的节点,调用
ttCreateInterruptHandler函数,设置中断式消息调度策略,使节点在接受到网络数据后触发相应的消息。
ttInitNetwork(3, 'nw_handler'); % node #3 in the network,初始化网络接口,网络数目,当事件到达时,激发的端口名称
4. function [exectime, data] = ctrlcode(seg, data)
switch seg, case 1,
y = ttGetMsg; % Obtain sensor value,从网络输入队列中获取信息 r = ttAnalogIn(1); % Read reference value,从输入通道取值 P = data.K*(r-y);
D = data.ad*data.Dold + data.bd*(data.yold-y); data.u = P + D; data.Dold = D; data.yold = y; exectime = 0.0005; case 2,
ttSendMsg(2, data.u, 80); % Send 80 bits to node 2 (actuator),在网络上发送信息,发送数据内容的80个字节到执行器节点2 exectime = -1; % finished end
5. function [exectime, data] = dummycode(seg, data) 虚拟节点功能
switch seg, case 1, exectime = 0.004; case 2, exectime = -1; end
6. function [exectime, data] = interfcode(seg, data) 干扰节点功能
BWshare = 0.0; % Fraction of the network bandwidth occupied by this node 节点占用网络带宽 if (rand(1) < BWshare)
ttSendMsg(1, 1, 80); % send 80 bits to myself,发送80个字节给自己 end exectime = -1;
7. function interference_init
% Distributed control system: interference node 离散控制系统的干扰节点 % Generates disturbing network traffic. 产生网络干扰通信量 % Initialize TrueTime kernel
ttInitKernel(0, 0, 'prioFP'); % nbrOfInputs, nbrOfOutputs, fixed priority,初始化内核,设置功能块输入、输出端口的数目和调度策略 % Create sender task 创建发送任务 offset = 0;
period = 0.001; prio = 1;
ttCreatePeriodicTask('interf_task', offset, period, prio, 'interfcode'); % Initialize network
ttCreateInterruptHandler('nw_handler', prio, 'msgRcvInterf'); 对于事件驱动的节点,调用
ttCreateInterruptHandler函数,设置中断式消息调度策略,使节点在接受到网络数据后触发相应的消息。
ttInitNetwork(1, 'nw_handler'); % node #1 in the network,初始化网络节点1
8. function [exectime, data] = msgRcvActuator(seg, data) 执行器与网络连接的信号端口功能
ttCreateJob('act_task') 创建任务,任务名称,负责激发到达的任务 exectime = -1;
9. function [exectime, data] = msgRcvCtrl(seg, data) 控制器与网络连接的信号端口功能
ttCreateJob('pid_task') exectime = -1;
10. function [exectime, data] = msgRcvInterf(seg, data) 干扰节点与网络连接的信号端口功能
msg = ttGetMsg; exectime = -1;
11. function [exectime, data] = msgRcvSensor(seg, data) 传感器节点与网络连接的信号端口功能
disp('ERROR: sensor received a message'); exectime = -1;
12. function [exectime, data] = senscode(seg, data) 传感器节点功能
switch seg, case 1,
data.y = ttAnalogIn(1); 从输入通道取值 exectime = 0.00005; case 2,
ttSendMsg(3, data.y, 80); % Send message (80 bits) to node 3 (controller)发送80个字节到节点3(控制器) exectime = 0.0004; case 3,
exectime = -1; % finished end
13. function sensor_init 传感器初始化
% Distributed control system: sensor node
% Samples the plant periodically and sends the samples to the controller node. % Initialize TrueTime kernel
ttInitKernel(1, 0, 'prioFP'); % nbrOfInputs, nbrOfOutputs, fixed priority,初始化内核,设置功能块输入、输出端口的数目和调度策略 % Create sensor task 建立传感器任务 data.y = 0; offset = 0; period = 0.010; prio = 1;
ttCreatePeriodicTask('sens_task', offset, period, prio, 'senscode', data); 对于时钟驱动的节点,调用
ttCreatPeriodicTask函数,设置周期性的任务调度策略,以实现定时采样功能。 % Initialize network 初始化网络
ttCreateInterruptHandler('nw_handler', prio, 'msgRcvSensor'); 对于事件驱动的节点,调用
ttCreateInterruptHandler函数,设置中断式消息调度策略,使节点在接受到网络数据后触发相应的消息。
ttInitNetwork(4, 'nw_handler'); % node #4 in the network
Distributed Control System:
包含了四个计算机节点,时钟驱动的传感器节点周期性的对过程进行采样,并通过网络传递给计算机节点。控制任务在这个节点上运算控制信号,并发送运算结果给执行器,立即执行。同时,干扰节点发送通过网络干扰信号,作为高优先级任务在计算机节点执行。 干扰节点占用网络的设置通过interfcode.m中的变量BWshare,当设置为零时表示没有干扰,同时,研究网络调度(高电平代表节点发送,中电平表示节点等待,低电平表示节点空闲)。 改变网络调度策略进行研究。
ttSendMsg/ttGetMsg stand-alone network blocks:
时间触发和事件触发两个实例表明单机网络模块用来模拟网络闭环控制系统。
在时间触发实例中,发送模块被脉冲发生器(周期为0.1s)触发,脉冲发生器的第二个节点有0.05s的相位延迟。比例控制器补偿白噪声的干扰。
在事件触发实例中,当过程输出幅值超过0.25时,发送模块被触发。控制器也是事件触发的,第二个发送模块轮流延迟0.001s被触发。 网络利用率
8个网络节点的仿真模型:
默认条件下的仿真结果及网络调度:
在令牌网下,传输速率为93.75Kbit/s,系统的输出和网络资源调度情况,调度策略为PrioRM(单调速率),(相同条件下,增加网络节点对控制系统性能的影响):
因此,在设计控制系统时,各节点必须选择合适的驱动方式。在小时延情况下,也就是网络节点数较少、网络负荷较小时,采用事件驱动的网络控制系统,系统性能优于时间驱动的网络控制系统性能;而在网络堵塞较严重,可能出现大时延,也就是τ>>T的情况下,采用时间驱动的网络控制系统,将会得到较好的系统性能。
改变传输数据量的情况下研究调度算法。
正在阅读:
Truetime网络仿真09-18
材料科学基础总复习307-09
案件授权委托书12-14
模拟试题二04-03
学院保密工作自查报告范文08-03
【麦子学院】Android TextView 预渲染05-02
市场营销多选题05-20
复方聚乙二醇电解质散05-24
传感器综合题答案09-17
纪检监察业务知识试题209-17
- 广西民族师范学院2013年科技文化艺术节实施方案001
- 层次分析法在毕业论文成绩评定中的应用
- 台湾魔幻冰凉巾的作用原理是什么?
- 自测练习题
- 西宁市商业地产市场调研分析报告 - 图文
- 《桃花源记》名句理解性默写
- 新闻学概论
- 2016部编人教版小学一年级语文下册 期末模拟测试卷(二)
- 2017-2022年中国网球市场行情动态研究报告(目录) - 图文
- 工程测量大赛
- 教育统计学总复习(含答案)
- 浅谈电厂SIS系统
- Bobath疗法
- 企业标准化良好行为自我评价评分标准 - 图文
- 隧道通风照明课程设计
- 2019年中国单轨交通行业深度研究与投资可行性报告(定制版)目录
- 农二师概况
- 材料分析测试复习题及答案
- 如何建立基于胜任素质的绩效管理
- 五十五岁到八十五岁才是人生的黄金年龄段