




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
Zigbee无线传感网技术与应用智能家居传感网0601了解ZigbeeOSAL运行原理03掌握Zigbee网络串口编程方法04了解Zigbee无线传感网传输方式02了解Zigbee协议栈原理学习目标Learningobjectives任务二:无线智能窗帘控制系统任务要求要求读者掌握使用Z-Stack组网程序,一个节点设备使用光照传感器接收光照数值实时发送数据至协调器,协调器接收数据发送数据至PC上位机模拟开启窗帘,当光照大于设定数值时关闭窗帘,小于时打开窗帘。任务目标Missionobjectives01了解什么是Z-Stack03使用OASL进行Z-Stack组网02了解Z-Stack基本概念储备知识Z-stack是挪威半导体公司Chipcon(目前已经被TI公司收购)推出其CC2430开发平台时,推出的一款业界领先的商业级协议栈软件,由于这个协议栈软件的出现,用户可以很容易地开发出具体的应用程序来,也就是大家说的掌握10个函数就能使用ZigBee通讯的原因。它使用瑞典公司IAR开发的IAREmbeddedWorkbenchforMCS-51作为它的集成开发环境。Chipcon公司为自己设计的Z-Stack协议栈中提供了一个名为操作系统抽象层OSAL的协议栈调度程序。对于用户来说,除了能够看到这个调度程序外,其它任何协议栈操作的具体实现细节都被封装在库代码中。用户在进行具体的应用开发时只能够通过调用API接口来进行,而无权知道ZigBee协议栈实现的具体细节,也没必要去知道。因此在这里提醒各位开发者,在使用ZigBee协议栈进行实际项目开发时,不需要关心协议栈是具体怎么实现的,当然有兴趣的也可以深入分析。1.什么是Z-StackZ-Stack概述储备知识TI公司的基于ZigBee2007的协议栈Z-Stack-CC2530-2.3.0,所有文件目录如图红色框所示,我们可以把它看做一个庞大的工程。或者是一个小型的操作系统。采用任务轮询的方法运行。图:Z-Stack工程ZigBee协议栈已经实现ZigBee协议,用户可以使用协议栈提供的API进行应用程序的开发,在开发过程中完全不必关心ZigBee协议的具体实现细节,要关心的问题是:应用层的数据是使用哪些函数通过什么方式把数据发送出去或者把数据接收过来的。所以最重要的是我们要学会使用ZigBee协议栈。1.什么是Z-Stack储备知识协议是一系列的通信标准,通信双方需要共同按照这一标准进行正常的数据发射和接收。协议栈是协议的具体实现形式,通俗点来理解就是协议栈是协议和用户之间的一个接口,开发人员通过使用协议栈来使用这个协议的,进而实现无线数据收发。ZigBee的协议分为两部分,IEEE802.15.4定义了PHY(物理层)和MAC(介质访问层)技术规范;ZigBee联盟定义了NWK(网络层)、APS(应用程序支持子层)、APL(应用层)技术规范。ZigBee协议栈就是将各个层定义的协议都集合在一起,以函数的形式实现,并给用户提供API(应用层),用户可以直接调用。1.什么是Z-StackZ-Stack协议储备知识用户实现一个简单的无线数据通信时的一般步骤为:组网:抵用协议栈的组网函数、加入网络函数,实现网络的建立与节点的加入。发送:发送节点调用协议栈的无线数据发送函数,实现无线数据发送。接收:接收节点调用协议栈的无线数据接收函数,实现无线数据接收。通信步骤1.什么是Z-StackZibge无线传感网层Zigbee无线传感器网络的协议栈主要分为物理层、数据链路层(MAC)、网络层、传输层和应用层5层。储备知识1.什么是Z-Stack图:Zigbee层级关系储备知识现教材制作了一套上位机软件,用来模拟窗帘控制,使用串口与电脑通信,软件使用波特率19200、无奇偶校验位、默认COM连接COM11接口(需要手动设置COM口为COM11)。其具体通信协议如下表所示。指令部分0xff表示为启始符、中间两位为光照度数据高8位与低8位、无终止符。表:上位机通信指令集合功能指令备注接收光照值0xFF0x110x10无图:模拟窗帘上位机2.模拟窗帘上位机3.最简单的Z-Stack本任务所需硬件:下载器、1块ZigBee开发板、光照传感器、5V电源适配器、USB下载线。环境准备任务实施任务实施
打开“Zstack”工程,编写协调器代码与节点代码;
如果组网成功后,接收到节点发送的数据“1”,LED开始闪烁。任务要求编写代码步骤1:复制“配套资料\项目六\z-stack”目录保存为“工程1”,并打开“工程1\Projects\zstack\Samples\SampleApp\CC2530DB\SampleApp.eww”工程文件,如图所示。图:打开工程文件与工程目录3.最简单的Z-Stack任务实施步骤2:删除Coordinator.c与Coordinator.h、EndDevice.c、EndDevice.h文件,重写协调器、节点代码,如图所示。3.最简单的Z-Stack图:删除文件任务实施3.最简单的Z-Stack图:添加文件步骤3:在“Source”目录下新建mycoordinator.c与mycoordinator.h文件并在App目录下添加,如图所示。Source目录为用户编写程序目录,表示协调器代码与头文件。任务实施3.最简单的Z-Stack步骤4:在mycoordinator.c文件下编写添加头文件,代码如下所示。#include"ZComDef.h"#include"OSAL.h"#include"AF.h”#include"ZDAPP.h"#include"mycoordinator.h"#include"hal_led.h"代码小贴士:代码:#include"AF.h"说明:后续代码需要调用Z-Stack组网函数,故需要添加该头文件。代码:#include"hal_led.h"说明:后续代码需要调用LED闪烁函数。故需要添加头文件。任务实施3.最简单的Z-Stack步骤5:在mycoordinator.c代码中编写任务初始化函数App_Init(),代码如下所示。#include"ZComDef.h"#include"OSAL.h"#include"AF.h"#include"mycoordinator.h"#include"hal_led.h"uint8app_taskid;voidApp_Init(uint8task_id){app_taskid=task_id;}任务实施3.最简单的Z-Stack步骤6:在mycoordinator.c代码中编写任务初始化函数App_Event(),代码如右所示。uint16App_Event(uint8task_id,uint16events){
return
0;}步骤7:编写mycoordinator.h头文件,把初始化函数、事件处理函数设为外部可调用函数,代码如下所示。#ifndefTEST_H#defineTEST_H#include"comdef.h"extern
voidApp_Init(uint8task_id);externuint16App_Event(uint8task_id,uint16events);#endif任务实施3.最简单的Z-Stack步骤8:在App目录下找到OSAL_SampleApp.c文件如图所示,在OSAL_SampleApp.c中osalInitTask函数中删除之前任务代码,添加新任务初始化函数test_init()并传入任务id号,代码如右所示。voidosalInitTasks(void){uint8taskID=0;tasksEvents=(uint16*)osal_mem_alloc(sizeof(uint16)*tasksCnt);osal_memset(tasksEvents,0,(sizeof(uint16)*tasksCnt));macTaskInit(taskID++);nwk_init(taskID++);Hal_Init(taskID++);#ifdefined(MT_TASK)MT_TaskInit(taskID++);#endifAPS_Init(taskID++);#ifdefined(ZIGBEE_FRAGMENTATION)APSF_Init(taskID++);#endifZDApp_Init(taskID++);#ifdefined(ZIGBEE_FREQ_AGILITY)||defined(ZIGBEE_PANID_CONFLICT)ZDNwkMgr_Init(taskID++);#endif/*添加的新初始化函数*/test_Init(taskID);/********************/}任务实施3.最简单的Z-Stack步骤9:在OSAL_SampleApp.c文件tasksArr[]数组最后,添加编写的事件函数名App_Event,并删除SampleApp_ProcessEvent事件,代码如右所示。//TheorderinthistablemustbeidenticaltothetaskinitializationcallsbelowinosalInitTask.constpTaskEventHandlerFntasksArr[]={macEventLoop,nwk_event_loop,Hal_ProcessEvent,#ifdefined(MT_TASK)MT_ProcessEvent,#endifAPS_event_loop,#ifdefined(ZIGBEE_FRAGMENTATION)APSF_ProcessEvent,#endifZDApp_event_loop,#ifdefined(ZIGBEE_FREQ_AGILITY)||defined(ZIGBEE_PANID_CONFLICT)ZDNwkMgr_event_loop,#endif/*添加的事件*/App_Event/************/};任务实施3.最简单的Z-Stack步骤10:在完成OSAL代码流程编写完成后,开始编写组网代码其中初始化注册标志代码,在mycoordinator.c文件,AppInit函数中编写代码,代码如右所示。uint8app_taskid;endPointDesc_tAppDesc;//节点描述符uint16list[2]={
1};//用来描述一个ZigBee设备节点,称为简单设备描述符constSimpleDescriptionFormat_tApp_SimDesc={
20,0x0f08,0x0001,0,0,2,(cId_t*)list,0,(cId_t*)NULL,};voidApp_Init(uint8task_id){app_taskid=task_id;AppDesc.endPoint=20;//端口号AppDesc.task_id=&app_taskid;//任务IDAppDesc.simpleDesc=(SimpleDescriptionFormat_t*)&App_SimDesc;AppDesc.latencyReq=noLatencyReqs;//延时策略afRegister(&AppDesc);//注册组网}任务实施3.最简单的Z-Stack代码小贴士:代码:endPointDesc_tAppDesc;说明:结构体为节点描述符,提供给afRegister函数注册使用。包含有端口任务ID等信息。代码:constSimpleDescriptionFormat_tApp_SimDesc={ 20,0x0f08,0x0001,0,0,2,(cId_t*)list,0,(cId_t*)NULL,}说明:在AppDesc结构体中更具体的通信地址等信息,暂不理解直接使用。代码:afRegister(&AppDesc);说明:注册组网信息,只有注册才可使用组网功能函数。任务实施3.最简单的Z-Stack步骤11:在mycoordinator.c文件编写,事件处理函数App_Event()代码,代码如下所示。uint16App_Event(uint8task_id,uint16events){afIncomingMSGPacket_t*msg;
if(events&SYS_EVENT_MSG){//接收事件与数据msg=(afIncomingMSGPacket_t*)osal_msg_receive(app_taskid);
while(msg){}
return(events^SYS_EVENT_MSG);}
return
0;}代码小贴士:代码:afIncomingMSGPacket_t*msg;说明:该结构体保存着各种事件与接收的数据。代码:msg=(afIncomingMSGPacket_t*)osal_msg_receive(app_taskid);说明:osal_msg_receive函数为接收事件消息数据的函数。任务实施步骤12:在mycoordinator.c文件编写,事件处理函数App_Event()代码,代码如下所示。3.最简单的Z-Stackuint16App_Event(uint8task_id,uint16events){afIncomingMSGPacket_t*msg;
if(events&SYS_EVENT_MSG){//接收数据
msg=(afIncomingMSGPacket_t*)osal_msg_receive(app_taskid);
while(msg){
switch(msg->hdr.event){
caseAF_INCOMING_MSG_CMD://接收到数据
App_Msg(msg);//接收到数据处理函数
break;
}osal_msg_deallocate((uint8*)msg);//清除缓存空间//再次接收数据,直到没有事件
msg=(afIncomingMSGPacket_t*)osal_msg_receive(app_taskid);}
return(events^SYS_EVENT_MSG);}
return
0;}任务实施3.最简单的Z-Stack代码小贴士:代码:while(msg)说明:循环接收数据,直到没有事件数据后退出。代码:switch(msg->hdr.event)说明:msg结构体中hdr.event变量为系统接收事件标志,其中AF_INCOMING_MSG_CMD表示接收到数据代码:osal_msg_deallocate((uint8*)msg);说明:处理事件后,需要释放存储空间,在Zigbee协议栈中存放是一直累加的,所以需要使用函数释放空间。任务实施步骤13:在mycoordinator.c文件编写,事件接收到数据处理函数App_Msg()代码,代码如下所示。3.最简单的Z-Stackuint16tmp=0;voidApp_Msg(afIncomingMSGPacket_t*m){
switch(m->clusterId){
case
0x0001://接收到包
if(m->cmd.Data[0]=='1'){HalLedBlink(HAL_LED_2,0,50,500);}
break;}}任务实施3.最简单的Z-Stack代码小贴士:代码:switch(m->clusterId)说明:m->cluserID表示数据包的标识符,0x0001为节点发送数据给协调器时的数据包标识符。代码:case0x0001:说明:如果标识符为0x0001,则开始判断包内容代码:if(m->cmd.Data[0]=='1')说明:m->cmd.Data有着发送数据包的具体内容,判断第0位是否为字符1,如果是则执行if内代码。任务实施3.最简单的Z-Stack代码小贴士:代码:HalLedBlink(HAL_LED_2,0,50,500);说明:函数在hal_led.h头文件中被定义,调用函数则LED开始闪烁 参数1:表示LED的IO 参数2:闪缩次数,0表示一直闪 参数3:亮与灭的比例,50表示各占一半 参数4:周期,500表示0.5s闪烁任务实施步骤14:在mycoordinator.h头文件编写,事件接收到数据处理函数App_Msg()引用,代码如下所示。3.最简单的Z-Stack#ifndefMYCOORDINATOR_H#defineMYCOORDINATOR_Hextern
voidApp_Init(uint8task_id);externuint16App_Event(uint8task_id,uint16events);extern
voidApp_Msg(afIncomingMSGPacket_t*m);#endif任务实施步骤15:编译代码,设置系统是否被运行成功,成功进入事件,如图所示。3.最简单的Z-Stack图:成功进入事件任务实施步骤16:协调器代码编写完成,接下来开始编写节点代码,新建一个文件“myenddevice.c”文件,并添加至APP目录下如图所示。3.最简单的Z-Stack图:节点文件任务实施步骤17:将在CoordinatorEB工程下屏蔽myenddevice.c,如图所示。3.最简单的Z-Stack图:屏蔽文件任务实施步骤18:切换至EndDeviceEB,并屏蔽mycoordinator.c文件,如图所示。3.最简单的Z-Stack图:模式切换、屏蔽文件任务实施步骤19:复制mycoordinator.c代码至myenddevice.c文件下,删除接收数据事件AF_INCOMING_MSG_CMD代码,保留其他代码。删除后的App_Event函数代码如右所示。3.最简单的Z-Stackuint16App_Event(uint8task_id,uint16events){afIncomingMSGPacket_t*msg;
if(events&SYS_EVENT_MSG){//接收数据msg=(afIncomingMSGPacket_t*)osal_msg_receive(app_taskid);
while(msg){
switch(msg->hdr.event){
}osal_msg_deallocate((uint8*)msg);//清除缓存空间//再次接收数据,直到没有事件msg=(afIncomingMSGPacket_t*)osal_msg_receive(app_taskid);}
return(events^SYS_EVENT_MSG);}
return
0;}任务实施步骤20:在myenddevice.c判断事件函数代码中添加一段代码,用于判断组网是否完成,代码如下所示。3.最简单的Z-Stackuint16App_Event(uint8task_id,uint16events){afIncomingMSGPacket_t*msg;
//系统事件定义
if(events&SYS_EVENT_MSG){//接收数据msg=(afIncomingMSGPacket_t*)osal_msg_receive(app_taskid);
while(msg){
switch(msg->hdr.event){
caseZDO_STATE_CHANGE://组网发送改变
if(msg->hdr.status==DEV_ZB_COORD||
msg->hdr.status==DEV_ROUTER||msg->hdr.status==DEV_END_DEVICE)App_Send();//发送数据函数}
break;}osal_msg_deallocate((uint8*)msg);//清楚缓存空间//接收数据msg=(afIncomingMSGPacket_t*)osal_msg_receive(app_taskid);}
return(events^SYS_EVENT_MSG);}
return
0;}任务实施3.最简单的Z-Stack代码小贴士:代码:caseZDO_STATE_CHANGE:说明:该事件为组网发生改变时的事件。代码:if(msg->hdr.status==DEV_ZB_COORD||msg->hdr.status==DEV_ROUTER||msg->hdr.status==DEV_END_DEVICE)说明:判断组网标志是否为指定标志,DEV_ZB_COORD为协调器、DEV_ROUTER为路由器、DEV_END_DEVICE为节点。为其中一个则证明组网成功。可发送数据给协调器。任务实施步骤21:在myenddevice.c文件下,添加一个发送数据函数“App_Send()”代码如下所示。3.最简单的Z-StackvoidApp_Send(void){afAddrType_tmyaddr;myaddr.addrMode=(afAddrMode_t)Addr16Bit;//地址模式为16位模式myaddr.endPoint=20;myaddr.addr.shortAddr=0x0000;//表示发送给协调器AF_DataRequest(&myaddr,&AppDesc,1,2,"1",0,AF_DISCV_ROUTE,AF_DEFAULT_RADIUS);}任务实施3.最简单的Z-Stack代码小贴士:代码:afAddrType_tmyaddr;说明:发送数据给协调器时需要声明该结构体,该结构体存储发送的模式地址等信息。代码:myaddr.addrMode=(afAddrMode_t)Addr16Bit;说明:表示地址模式共三种 1、短地址模式Addr16Bit 2、扩展地址模式Addr64Bit 3、无地址模式AddrNotPresent代码:myaddr.endPoint=20;说明:与协调器保持一致即可,为20。代码:myaddr.addr.shortAddr=0x0000;说明:0x0000表示均表示为发送给协调器任务实施3.最简单的Z-Stack代码小贴士:代码:AF_DataRequest(&myaddr,&AppDesc,0x0001,2,"1",0,AF_DISCV_ROUTE,AF_DEFAULT_RADIUS);说明:该函数为发送数据函数至指定设备板函数。 参数1:afAddrType_t结构体发送设备地址等信息 参数2:描述符 参数3:事件ID号、与接收中事件m->clusterId匹配 参数4:发送数据的长度 参数5:发送的数据 参数6:校验包自动加1 参数7:发现路由默认为AF_DISCV_ROUTE 参数8:传送跳数默认为AF_DEFAULT_RADIUS任务实施步骤22:在mycoordinator.h头文件编写,事件接收到数据处理函数App_Send()引用,代码如下所示。3.最简单的Z-Stack#ifndefMYCOORDINATOR_H#defineMYCOORDINATOR_Hextern
voidApp_Init(uint8task_id);externuint16App_Event(uint8task_id,uint16events);extern
voidApp_Msg(afIncomingMSGPacket_t*m);externvoidApp_Send(void);#endif任务实施步骤23:开启协调器设备电源,下载节点代码至设备中,设置断点查看是否组网成功,如图所示。3.最简单的Z-Stack图:组网成功任务实施步骤24:全速执行,查看协调器是否闪烁。闪烁则证明协调器接收到数据,如图所示。3.最简单的Z-Stack图:灯闪烁任务实施一、修改代码,在节点设备发送数据“helloworld”,协调器接收数据并使LED闪烁,频率为2s一次。二、在节点设备创建新事件,并在新事件下每2秒发送一次数据至协调器。技能拓展3.最简单的Z-Stack4.无线智能窗帘控制系统本任务所需硬件:下载器、1块ZigBee开发板、光照传感器、5V电源适配器、USB下载线。环境准备任务实施任务实施
节点设备获取光照传感器接收光照数值实时发送数据至协调器;
协调器接收数据发送数据至PC上位机模拟开启窗帘;
当光照大于设定数值时关闭窗帘,小于时打开窗帘。任务要求编写代码步骤1:复制“上述任务代码”目录保存为“工程2”,并打开“工程2\Projects\zstack\Samples\SampleApp\CC2530DB\SampleApp.eww”工程文件,如图所示。包含mycoordinator、myenddevice文件内容。4.无线智能窗帘控制系统图:文件目录任务实施步骤2:双击打开“mycoordinator.c”文件添加串口初始化函数,串口发送字符、字符串函数代码,代码如右所示。4.无线智能窗帘控制系统voidUartInit(void){P0SEL|=0x0c;//设置外设PERCFG=0x00;//设置I/O位置U0CSR|=0x80;//设置UART模式U0BAUD=59;//设置波特率为19200U0GCR=9;//设置波特率为19200EA=1;//开启总中断}voidsend(unsigned
chars){U0DBUF=s;//发送a
while(!UTX0IF);UTX0IF=0;}voidsendstr(unsigned
char*s,unsigned
charlen){
intcount=0;
while(len--){send(*(s+count));count++;}}任务实施代码小贴士:根据上位软件协议波特率为19200,查看项目四表得出U0BAUD=59、U0GCR=94.无线智能窗帘控制系统步骤3:双击打开“mycoordinator.h”头文件添加串口初始化函数,串口发送字符、字符串函数代码声明,代码如下所示。extern
voidUartInit(void);extern
voidsend(unsigned
chars);extern
voidsendstr(unsigned
char*s,unsigned
charlen);任务实施步骤4:在mycoordinator.c,初始化函数App_Init()添加调用UartInit()串口初始化函数,代码如下所示。4.无线智能窗帘控制系统voidApp_Init(uint8task_id){app_taskid=task_id;AppDesc.endPoint=20;//端点号AppDesc.task_id=&app_taskid;//任务IDAppDesc.simpleDesc=(SimpleDescriptionFormat_t*)&App_SimDesc;AppDesc.latencyReq=noLatencyReqs;//延时策略afRegister(&AppDesc);//注册组网UartInit();//调用串口初始化}任务实施步骤5:在mycoordinator.c,事件消息处理函数App_Msg()添加接收到数据到发送串口代码,代码如下所示。4.无线智能窗帘控制系统voidApp_Msg(afIncomingMSGPacket_t*m){
unsigned
chartmp[3];
switch(m->clusterId){
case
0x0001://接收到包tmp[0]=0xff;tmp[1]=m->cmd.Data[0];tmp[2]=m->cmd.Data[1];sendstr(tmp,3);
break;}}任务实施4.无线智能窗帘控制系统代码小贴士:说明:tmp[0]=0xff;tmp[1]=m->cmd.Data[0];tmp[2]=m->cmd.Data[1];代码:在发送缓存发送头0xff,m->cmd.Data[0]数据高8位,m->cmd.Data[1]数据低8位。任务实施4.无线智能窗帘控制系统步骤6:切换至EndDeviceEB模式下,开始编写EndDevice代码如图所示。图:EndDeviceEB任务实施步骤7:在myenddevice.c文件中编写Adc初始化函数、Adc获取数据函数,代码如下所示。4.无线智能窗帘控制系统voidAdcInit(){APCFG|=0x01;//设置P0_0为ADC使用P0SEL|=0x01;//设置P0_0为外设口}unsigned
intAdcGet(){
unsigned
inttmp=0;
//参考电压AVDD5引脚、12位精度ADC、P0_0通道
//启动转换ADCCON3=(0x80|0x30|0x00);ADCIF=0;//清除标志
while(!ADCIF);//等待完成tmp=ADCL;//提取低位tmp|=(unsigned
int)(ADCH<<8);//提取高位tmp=tmp>>3;//转换为12位
returntmp;}任务实施步骤8:在mycoordinator.h头文件中编写Adc初始化函数、Adc获取数据函数,代码如下所示。4.无线智能窗帘控制系统extern
voidAdcInit(void);extern
unsigned
intAdcGet(void);步骤9:在myenddevice.c文件中App_Init()函数下调用Adc初始化函数,代码如下所示。voidApp_Init(uint8task_id){app_taskid=task_id;AppDesc.endPoint=20;//端点号AppDesc.task_id=&app_taskid;//任务IDAppDesc.simpleDesc=(SimpleDescriptionFormat_t*)&App_SimDesc;AppDesc.latencyReq=noLatencyReqs;//延时策略afRegister(&AppDesc);//注册组网AdcInit();//adc初始化}任务实施步骤10:在myenddevice.c文件中App_Event()函数下加入一个OSAL时间事件每秒发生一次,代码如下所示。4.无线智能窗帘控制系统uint16App_Event(uint8task_id,uint16events){afIncomingMSGPacket_t*msg;
//系统事件定义
if(events&SYS_EVENT_MSG){msg=(afIncomingMSGPacket_t*)osal_msg_receive(app_taskid);//接收数据
while(msg){
switch(msg->hdr.event){
caseZDO_STATE_CHANGE://组网发送改变
if(msg->hdr.status==DEV_ZB
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2024年一年级品生下册《给爸妈一个惊喜》教学实录 辽师大版
- 单位疫情防控课件
- 2025企业标准租赁合同样本
- 第3课 防范病毒保安全(教案)2023-2024学年五年级上册信息技术闽教版
- 2024年秋九年级化学上册 第六单元 碳和碳的氧化物 课题3 二氧化碳和一氧化碳备课资料教学实录 (新版)新人教版
- 2025农产品批发市场交易合同
- 2025青岛租房合同范本(合同示范文本)
- 2025简化版店面租赁合同范本
- 2025聘请电影编剧合同样本
- Unit 1 Hello(教学设计)-2024-2025学年译林版(三起)英语三年级上册
- 正反平衡供电煤耗计算方法介绍
- 330KV代席线29301不停电跨越铁路施工方案1解析
- 2001沪S313 SG系列消火栓箱
- 中国工艺美术史资料(田自秉)课件
- 施工现场防汛安全检查表
- 定子中心偏差及圆的调整
- 毕业设计 论文 基于plc的全自动洗衣机控制系统设计论文
- 员工通用请假条Excel模板
- 骨质疏松症ppt课件
- 陶瓷过滤机使用说明书(新)
- CPK 能力分析模板
评论
0/150
提交评论