实验一 基于Z-Stack的磁检测传感器实验_第1页
实验一 基于Z-Stack的磁检测传感器实验_第2页
实验一 基于Z-Stack的磁检测传感器实验_第3页
实验一 基于Z-Stack的磁检测传感器实验_第4页
实验一 基于Z-Stack的磁检测传感器实验_第5页
已阅读5页,还剩4页未读 继续免费阅读

下载本文档

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

文档简介

实验一基于Z-Stack的磁检测传感器实验一、实验目的学习磁检测传感器的使用方法二、实验设备硬件:CC2530射频板,磁检测传感器,串口线,电源,电脑等。软件:IAR,STC_ISP_V479或者串口调试助手,CRC_16。三、实验原理及步骤注意:1.读者可以直接将配套关盘\源代码\无线通讯实验\Zigbee无线通讯实验\CC2530控制传感器实验\CC2530控制传感器实验\实验一基于Z-Stack的磁检测传感器实验\GenericApp磁检测传感器整个文件夹一起拷贝到Zstack协议栈安装之后的Projects目录的zstack下创建的FRO目录(笔者在安装时选择的是默认安装,所以将FRO整个目录拷贝到C:\TexasInstruments\ZStack-CC2530-2.5.0\Projects\zstack\FRO)下。在编译源码时一定要注意工程的环境变量设置,如果有环境变量问题可以打开相应工程然后逐次对比。建议初学者在原工程上修改,不要轻易改动环境变量。3.由于工程在编译时会根据工程设置的环境变量去调用ZStack的文件,所以想要不去修改那些麻烦的环境变量能够编译通过,请按照注意1中笔者的路径下打开相应工程文件,切记!!!如果直接打开配套关盘\源代码无线通讯实验\Zigbee无线通讯实验\CC2530控制传感器实验\CC2530控制传感器实验\下的任何工程而不去修改正确的环境变量,直接编译就会出现很多文件找不到。源码路径:配套光盘\源代码\无线通讯实验\Zigbee无线通讯实验\CC2530控制传感器实验\CC2530控制传感器实验\实验一基于Z-Stack的磁检测传感器实验\GenericApp磁检测传感器\CC2530DB\hex文件路径:配套光盘\源代码\无线通讯实验\Zigbee无线通讯实验\CC2530控制传感器实验\CC2530控制传感器实验\可执行程序\磁检测传感器\3.1磁检测传感器介绍检测传感器使用的是干簧管。干簧管(ReedSwitch)也称舌簧管或磁簧开关,是一种磁敏的特殊开关。它通常有两个软磁性材料做成的、无磁时断开的金属簧片触点,有的还有第三个作为常闭触点的簧片。这些簧片触点被封装在充有惰性气体(如氮、氦等)或真空的玻璃管里,玻璃管内平行封装的簧片端部重叠,并留有一定间隙或相互接触以构成开关的常开或常闭触点。干簧管比一般机械开关结构简单、体积小、速度高、工作寿命长;而与电子开关相比,它又有抗负载冲击能力强等特点,工作可靠性很高。干簧管可以作为传感器用,用于计数,限位等等。例如,有一种自行车公里计,就是在轮胎上粘上磁铁,在一旁固定上干簧管构成的。把干簧管装在门上,可作为开门时的报警用,也可作为开关使用。干簧管的外形如图3.1所示。图3.1干簧管磁控传感器3.1.2磁检测传感器的电路图磁检测传感器的电路图,如图3.2所示。图3.2磁控传感器电路原理图由图3.2可以看出磁控的检测管脚与CC2530的P0.7连接。当没有磁性物质靠近磁检测传感器时,磁检测传感器开路,Q1不导通。当有磁性物质靠近磁检测传感器的时候,磁检测传感器导通,则在Q1的基极得到使得Q1导通的电压,即Q1导通,电源从R6--D3--Q1--地形成电流回路,此时P0.7为低电平。3.2程序代码分析本实验主要是传感器方面的实验,对应Zigbee组网通信方面的解析请参考组网实验,所以ZStack具体的通信在这里不会作过多的解析。3.2.1ZStack组网通信说明基本流程:本实验的协调器与终端节点采用固定的PANID=0x2FFFF(同一个地方多人实验最好自己独立一个PANID,另外PANID设定与其他已启动的PANID相同的话,那么你的PANID会自动加1),广播模式。首先是上位机发Modbus指令(指令格式后面有介绍)给协调器,协调器把从上位机接收到的数据通过无线发送出去,终端节点接收到数据以后判定是不是自己对应的地址及传感器,如果是那么作出反应,读取传感器数据并发送给协调器,协调器接收到传感器数据以后就转发给上位机。3.2.2协调器基本工作代码分析Revice_From_PC(unsignedcharport,unsignedcharevent)函数负责接收上位机的串口数据,并把数据通过无线发送出去。GenericApp_SendTheMessage(UINT8*PC_CMD,UINT8Rx_Count)函数负责把PC_CMD里面的Rx_Count个数据通过无线发送出去。GenericApp_MessageMSGCB(afIncomingMSGPacket_t*pkt)函数负责处理无线接收到的数据,并转发给串口。GenericApp_ProcessEvent(bytetask_id,UINT16events)函数负责事件处理函数,其中caseAF_INCOMING_MSG_CMD是无线接收响应。GenericApp_Init(bytetask_id)函数负责硬件初始化3.2.3终端节点基本工作代码分析GenericApp_Init(bytetask_id)函数负责硬件初始化。GenericApp_ProcessEvent(bytetask_id,UINT16events)函数负责事件处理函数,其中caseAF_INCOMING_MSG_CMD是无线接收响应。GenericApp_MessageMSGCB(afIncomingMSGPacket_t*pkt)函数负责处理无线接收到的数据,并调用传感器读取数据函数。GenericApp_SendTheMessage(UINT8*PC_CMD,UINT8Rx_Count)函数负责把PC_CMD里面的Rx_Count个数据通过无线发送出去。Read_Sense(void)函数负责传感器数据的读取并发数据发送出去cal_crc(UINT8*snd,UINT8num)函数是CRC-16校验码生成函数。3.2.4Modbus指令介绍Modbus协议是1979年由Modicon发明,应用于电子控制器上的一种通用语言,它已经成为一通用工业标准,目前由IDA组织管理,它定义了一个控制器能认识使用的消息结构,而不管它们是经过何种网络进行通信的。它描述了一控制器请求访问其它设备的过程,如何回应来自其它设备的请求,以及怎样侦测错误并记录。它制定了消息域格局和内容的公共格式ModBus协议采用查询--响应的工作模式查询消息中的功能代码告之被选中的从设备要执行何种功能,数据段必须包含要告之从设备的信息:从何寄存器开始读及要读或者写的寄存器数量。错误检测域为从设备提供了一种验证消息内容是否正确的方法。如果从设备有响应,那么从设备响应的消息中有查询的功能代码,并把收集的信息一道发送给查询端,如果从设备发现有错误的帧,那么功能代码将以错误功能代码来响应。ModBus协议的两种传输方式ASCII模式下的帧格式如下:表8开始地址功能码数据LRC结束1字节2字节2字节0~~2*252字节2字节2字节CR,LF在消息中的每个8Bit字节都作为一个ASCII码(两个十六进制字符)发送。这种方式的主要优点是字符发送的时间间隔可达到1秒而不产生错误。由于ASCII模式基本很少使用,在此不再多介绍。RTU模式下的帧格式如下:表9地址功能码数据CRC校验8位8位N*8位16位当控制器设为在Modbus网络上以RTU(远程终端单元)模式通信,在消息中的每个8Bit字节包含两个4Bit的十六进制字符。这种方式的主要优点是:在同样的波特率下,可比ASCII方式传送更多的数据。CRC--16校验(循环冗长检测)的介绍CRC校验码生成你可以参考软件“CRC_16”,软件地址:配套光盘\应用程序\串口调试及CRC软件在RTU模式下,采用CRC16,它包含2个字节,为一个16位的二进制数。CRC产生过程中,每个8位字符都单独和寄存器内容相异或(XOR),结果向最低有效位方向移动,最高有效位以0填充。LSB被提取出来检测,如果LSB为1,寄存器单独和预置的值或一下,如果LSB为0,则不进行。整个过程要重复8次。在最后一位(第8位)完成后,下一个8位字节又单独和寄存器的当前值相或。最终寄存器中的值,是消息中所有的字节都执行之后的CRC值。CRC添加到消息中时,低字节先加入,然后高字节。简单的CRC功能函数如下,其是固定的一种格式,在此不再多解释UINT16cal_crc(UINT8*snd,UINT8num){UINT8i,j;UINT16c,crc=0xFFFF;for(i=0;i<num;i++){c=snd[i]&0x00FF;crc^=c;for(j=0;j<8;j++){if(crc&0x0001){crc>>=1;crc^=0xA001;}elsecrc>>=1;}}return(crc);}ModBus协议的功能码技术手册地址:配套光盘\附件\ModBus协议下面只列出常用的0~~21功能码表10功能码名称用途描述01读取线圈状态取得一组逻辑线圈的当前状态,判断是ON还是OFF02读取输入状态取得一组开关输入的当前状态,判断ON还是OFF03读取保持寄存器在一个或多个保持寄存器中取得当前的二进制值04读取输入寄存器在一个或多个输入寄存器中取得当前的二进制值05强置单线圈强置一个逻辑线圈的通断状态06预置单寄存器把具体二进制装入一个保持寄存器07读取异常状态取得8个内部线圈的通断状态,这8个线圈的地址由控制器决定,用户逻辑可以将这些线圈定义。08回送诊断校验把诊断校验报文送从机09编程(适用485)使主机模拟编程器作用,修改PC逻辑10控询(适用485)可使得主机与一台正在执行长程序任务的从机通信,查询该从机是否完成操作任务。11读取事件个数使主机发出单询问,判断操作是否成功12读取通信事件记录使得主机检索每台从机的ModBus事务处理记录,如果某一个事务处理完成,记录会出相关错误13编程(484等)使得主机模拟编程器功能修改PC从机逻辑14探询(484等)使得主机与正在执行任务的从机通信,定期控询从机是否已完成其程序操作,仅在有13这个功能码的报文发送后,本功能码才发送15强置多线圈强置一串连续逻辑线圈的通断16预置多寄存器把具体的二进制值装入一串连续的保持寄存器17报告从机标识使得主机判断编址从机的类型及该从机的运行指示灯的状态18(884和MICRO84)使得主机模拟编程功能,修改PC状态逻辑19重置通信链路发生非可修改错误后,从机复位于已知状态,可重置顺序字节20读取通用参数显示扩展存储器文件的数据信息21写入通用参数把通用参数写入扩展存储文件或者修改它功能码举例,以03为例子发送:地址+0x03+StartAddr_Hi+StartAddr_Lo+Count_Hi+Count_Lo+CRC返回:地址+0x03+Count+Reg_Hi+Reg_Lo+CRC地址:从机地址,可以理解为终端节点的固有地址。StartAddr_Hi:开始地址的高字节StartAddr_Lo:开始地址的低字节Count_Hi:寄存器数量的高字节Count_Lo:寄存器数量的低字节CRC:两字节的CRC校验码Reg_Hi:寄存器数据的高字节Reg_Lo:寄存器数据的低字节Count:返回的有效数据字节个数,就是发送指令里寄存器个数的2倍。例如:要读取地址为01,功能码为03,开始地址为0000,读取2个寄存器(即0002)的ModBus--RTU格式的命令发送010300000002c40b接收01030400010003EBF2那么接收到的寄存器数据有两个分别是0001、0003,所以有效数据字节个数为04。3.2.5磁检测传感器采集代码分析voidRead_Sense(void){UINT8i;UINT16temp;if(buffer[0]==0x01)//判定第0个字节是不是本终端节点地址01{if(buffer[1]==0x03)//判定第1个字节是不是Modbus读取指令03{ Crc_buf[0]=((cal_crc(buffer,6)>>8)&0xff);//取得CRC值的高8位 Crc_buf[1]=(cal_crc(buffer,6)&0xff);//取得CRC值的低8位 if((buffer[6]==Crc_buf[1])&&(buffer[7]==Crc_buf[0])){//判定CRC校验码是否相同//磁控传感器if(buffer[3]==0x28){if(P0_7==1)//判定P0.7是否为高电平,如果是则磁检传感器未导通,反之导通。{buffer[4]=0x00;HalLedSet(HAL_LED_1,HAL_LED_MODE_ON);}else{buffer[4]=0x01;HalLedSet(HAL_LED_1,HAL_LED_MODE_OFF);}buffer[2]=(buffer[4]*256+buffer[5])*2;buffer[3]=0;//buffer[4]=temp&0x00FF;buffer[6]=((cal_crc(buffer,5)>>8)&0xff);//取得CRC值的高8位 buffer[5]=(cal_crc(buffer,5)&0xff);//取得CRC值的低8位GenericApp_SendTheMessage(buffer,7);

温馨提示

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

评论

0/150

提交评论