tinyOS消息格式.docx
- 文档编号:4060124
- 上传时间:2022-11-27
- 格式:DOCX
- 页数:21
- 大小:619.45KB
tinyOS消息格式.docx
《tinyOS消息格式.docx》由会员分享,可在线阅读,更多相关《tinyOS消息格式.docx(21页珍藏版)》请在冰豆网上搜索。
tinyOS消息格式
Mote节点之间传送消息的包格式
文档说明:
本文档主要介绍Mote节点之间传送消息的包格式,包括mote节点发往sink节点的数据包格式和sink节点发往mote节点的数据包格式。
修改:
2010-5-25,加入xmesh_header;2010-5-26:
加入XCommand组件的消息包格式;
2010-5-27,定义命令消息格式;2010-5-28,增加了命令消息的具体细节;
2010-6-8,加入发送命令帧结构,经多天分析实验得到,能够实现控制远端节点LED亮和灭,至此上下行基本消息包格式都以得到;
2010-6-10,加入AM_TYPE类型;
撰写人:
张伟军
日期:
2010-5-20;
TinyOS消息格式:
1.TinyOS的消息包头格式
在安装目录\Crossbow\cygwin\opt\MoteWorks\tos\types下的AM.h里面:
typedefstructTOS_Msg
{
/*Thefollowingfieldsaretransmitted/receivedontheradio.*/
uint16_taddr; //发送地址
uint8_ttype; //发送数据类型
uint8_tgroup; //组id
uint8_tlength; //消息长度
int8_tdata[TOSH_DATA_LENGTH];//数据长度
uint16_tcrc;//数据冗余校验位
/*Thefollowingfieldsarenotactuallytransmittedorreceived
*ontheradio!
Theyareusedforinternalaccountingonly.
*ThereasontheyareinthisstructureisthattheAMinterface
*requiresthemtobepartoftheTOS_Msgthatispassedto
*send/receiveoperations.
*/这部分是用于Mac层的,从Mac层传输下来的。
uint16_tstrength;
uint8_tack;
uint16_ttime;
uint8_tsendSecurityMode;
uint8_treceiveSecurityMode;
}TOS_Msg;
Theaddrfieldspecifiesthedestinationaddress(amoteIDorthebroadcastaddress).Thegroupfieldspecifiesachannelformotesonanetwork.IfamotereceivesapacketwithadifferentgroupID,thepacketisdropped.ThetypefieldspecifieswhichhandlertobecalledattheAMlevelwhenapacketisreceived.ThelengthfieldspecifiesthelengthofthedataportionoftheTOS_Msg.Packetshaveamaximumpayloadof29bytes.Thedataportionconsistsofanarrayof29bytes(asspecifiedbyTOSH_DATA_LENGTH).Theunsignedtwobytefieldcrcfollows.Whensending,thecrcisincrementallycalculatedaseachbyteofthepacketistransmitted.
So,themaximumlengthofatransmittedTOS_Msgis36bytes(addr(2bytes)+type(1bytes)+group(1bytes)+length(1bytes)+data(29bytes)+crc(2bytes)=36bytes).
虽然最大长度是36个字节,但是除去各种开销,有效字节只有29个。
以上是TinyOS的传输消息用的数据格式,图示如下:
addr
type
group
length
Date
crc
|2byte1byte1byte1byte|0-29byte|2byte|
|------------------TinyOSHeader------------------>|
2.传感器发往汇聚节点的消息格式
传感器采用的MDA300,对应的包结构图示如下:
该消息包含5bytes的TinOSHeader,和7bytes的XMeshHeader,用于多跳组网时使用;
4bytes的XSensorHeader,和若干字节的Payload,和2bytes的CRC。
以下列举常用AM_TYPE常量,详细常量见TinyOS常量定义.doc。
*AM_DEBUGPACKT:
Healthpacket
*AM_DATA2BASE:
Upstreamdatamessagetobase
*AM_DATA2NODE:
Downstreamdatatonode
*AM_DATAACK2BASE:
Upstreamdatatobaserequiringanack
*AM_DATAACCK2NODE:
Downstreamdatatonoderequiringanack
*AM_DOWNSTREAM_ACK:
Acknowledgemessagefrombasetotheoriginatingmote
*AM_UPSTREAM_ACK:
Acknowledgemessagefromnodetotheoriginatingbase
*AM_PATH_LIGHTDOWN:
Creatededicatedstreamtonodefordesignatedtime
*AM_PATH_LIGHT_UP:
Creatededicatedstreamfromnodefordesignatedtime
*AM_MULTIHOPMSG:
RouteUpdatemessage
*/
enum{
AM_HEALTH=3,//!
<0x03:
Healthpacket
AM_DEBUGPACKET=3,//!
<0x03:
Healthpacket
AM_DATA2BASE=11,//!
<0x0B:
Upstreamdatamessagetobase
AM_DATA2NODE=12,//!
<0x0C:
Downstreamdatatonode
AM_DATAACK2BASE=13,//!
<0x0D:
Upstreamguaranteeddeliverytobase
AM_DATAACK2NODE=14,//!
<0x0E:
Downstreamguaranteeddeliverytonode
AM_ANY2ANY=15,//!
<0x0F:
Anytoany
};
2.1其中XMeshHeader的具体格式如下:
typedefstructMultihopHeader{
uint16_tsourceaddr;//路由源地址;
uint16_toriginaddr;//数据包的原始地址;
int16_tseqno;//数据包的序列号;
uint8_tsocket;//数据包的socketid,即用于标识应用程序;
}__attribute__((packed))MultihopHeader;
2.2其中XSensorHeader的具体格式如下:
typedefstructXSensorHeader{
uint8_tboard_id;//SENSOR_BOARD_ID=0x81(mds300),0x84(mts300)
uint8_tpacket_id;//标识不同的数据包格式;
uint16_tparent;//节点的父节点;
}__attribute__((packed))XMeshHeader;
上面XSensorHeader中packet_id的值(可定义:
0到2555)代表不同的具体的Payload数据格式;
下图给出了已定义的传感板ID;
2.3MDA300Payload定义了6种数据格式,其中第6号数据包格式如下:
typedefstructPData6{
uint16_tvref;//电池电量;
uint16_thumid;//湿度;
uint16_thumtemp;//温度;
uint16_tadc0;
uint16_tadc1;
uint16_tadc2;
uint16_tdig0;
uint16_tdig1;
uint16_tdig2;
}__attribute__((packed))PData6;
*******************************************************************************
日期:
2010-5-20
TinyOS程序实例流程说明
3.具体实例说明
现以节点收发计数器中的数值为例,更为详细地说明网络协议是如何通过主动消息(AM:
activemessage)传递来实现的。
程序要求节点启动以后,开始让计数器计数,每秒向外广播自己的计数值,同时接收其他节点上计数器的值。
3.1 main组件
TinyOS应用程序从main组件开始,完成main组件的StdControl接口的3个命令init()、start()和stop()的具体实现。
这个接口中命令执行秩序可用init*(start|stop)*,应用程序执行前执行init()完成必要初始化工作,start是这个程序要完成的工作,stop是系统关闭前所要执行的动作。
这个接口是TinyOS应用程序标准接口,与硬件操作相关的其他组件必须用到这个接口,实现接口中的命令。
3.2 使用的接口
StdControl接口完成应用程序启动及相关硬件初始化:
interfaceStdControl{
commandresult_tinit();
commandresult_tstart();
commandresult_tstop();
}
Timer接口实现计数功能:
interfaceTimer {
commandresult_tstart(chartype,uint32_tinterval);
//设定触发类型和计数值
commandresult_tstop()
//中止计数器
eventresult_tfired();
//计数器定时触发事件
}
SendMsg接口发送消息:
interfaceSendMsg{
commandresult_tsend(uint16_taddress,uint8_tlength,TOS_MsgPtrmsg);
//发送消息
eventresult_tsendDone(TOS_MsgPtrmsg,result_tsuccess);
//消息发送完成以后事件
}
ReceiveMsg接口接收消息:
interfaceReceiveMsg{
eventTOS_MsgPtrreceive(TOS_MsgPtrm);
//接收到消息事件
}
3.3 使用的组件
组件Main,MyApps,TimerC,GenericCommasComm实现逻辑功能。
Main是系统必需的;MyApps提供接口的命令并实现对调用接口事件的响应;GenericComm完成消息的发送和对接收消息的通告;其configuration文件如下:
Main.StdControl->MyApps.StdControl;
Main.StdControl->TimerC.StdControl;
MyApps.Timer->TimerC.Timer[unique("Timer")];
MyApps.SubControl->Comm;
MyApps.Send->Comm.SendMsg;
MyApps.Receive->Comm.ReceiveMsg;
3.4 MyApps模块文件
MyApps模块接口如下:
moduleMyApps{
provides{
interfaceStdControl;
}
uses{
interfaceTimer;
interfaceSendMsgasSend[uint8_tid];//发送消息接口
interfaceReceiveMsgasReceive[uint8_tid];//接收消息
interfaceStdControlasSubControl;//子组件:
完成发送初始化
}
}
provides声明这个组件所实现接口中命令和通告相关事件的产生。
需要实现StdControl接口中命令init()、start()和stop()。
Uses声明这个组件调用接口中命令并对接口中事件进行响应。
所需要响应的事件为Timer接口的fired()事件、SendMsg接口的sendDone事件和ReceiveMsg接口的receive事件。
3.5 通信实现
MyApps发送和接收消息是通过组件GenericComm来实现的。
GenericComm通过调用其他组件实现从消息包到主动消息、字节级数据传数、位级数据传送到无线电收发模块的功能。
GenericComm提供了256个消息收发接口,也就是说系统可以使用256种消息,或者说256种状态进行转换。
由于系统是非阻塞模式,一旦消息到达组件MyApps中,receive事件就会立刻调用,因此在这个事件中实现不同消息的转换,从而实现通信双方的握手:
eventTOS_MsgPtrReceive.receive[uint8_tid](TOS_MsgPtrm){
switch(id){
case1:
//状态转换1
case2:
//状态转换2
}
returnm;
}
*******************************************************************************
日期:
2010-5-25
MDA300传感板的详细介绍
MDA300是一个环境监控板,它包含多个感测模式。
板上有14个12-bit模拟输入端口,6个数字输入\输出端口,2个继电器通道,1个2.5V、3.3V和5V的可选激励。
它同时板载湿度、土壤湿度、标准光线和风速等环境监测传感器。
数据包格式为:
由以上的消息格式可以看出,在payload中的信息都是从数据采集板上读取的数据,可知该消息是由MOTE节点发往SINK节点的,即该消息包是上行链路的消息包格式。
*******************************************************************************
日期:
2010-5-26上午
MDA300引脚的详解及选用
MDA300提供6个数字I/O口(D0—D5接口),14个模拟信号输入接口,2个继电器接口等引脚,具体引脚分布可参见下图。
本项目中要实现对MDA300的外扩设备进行控制,考虑到数字I/O引脚提供信号的输入或输出功能,可以通过对该采集板上的6个数字I/O引脚输出高低电平实现控制;如果6个口全都使用的话,可以产生2^6=64(2的6次方)种命令模式;对于家庭网关的前期开发而言,我们可以保留其中3个口,使用另外3个接口,根据排列组合可以产生8种控制命令。
我们定义D0、D1和D2接口为使用接口,D3、D4和D5为保留接口,供后期开发使用。
下图是MDA300采集板的引脚分布图,可供外扩接线时参考:
数字I/O接口的参数详解:
+VDDtoGND*..............................–0.3Vto+5.5V
DigitalLines:
Inputvoltagerange**..…….-0.5VtoVDD+0.5V
Continuousoutputlowcurrent…..……….50mA
Continuousoutputhighcurrent………..…–4mA
AnalogLines:
Inputvoltagerange.………-0.2VtoVCC+0.5V
CounterLine:
Inputvoltagerange………………….0Vto5.5V
Relays:
MaximumContactVoltage……………..….100V
MaximumContactCurrent…..…………..150mA
以上接口参数信息可为外扩电路参考接口电气特性。
*******************************************************************************
日期:
2010-5-26下午
控制命令消息格式的解析
1.概述:
在PC上运行moteview软件,在mib520网关(嵌入mote)上运行Xmeshbase程序,在mote节点(嵌入mda300)上运行xmda300程序,就可以通过moteview来控制mote节点上led灯或传感板的数据采集。
分析MOTEWORKS的代码可知,代码中的程序还不具有控制数字I/O口的功能,因此要实现对DI/O接口的控制应该是我们针对家庭网关项目要编写的程序。
由于moteworks的代码中已实现远程控制led等功能,说明代码中已定义好相应的命令控制消息,因此我们可以参考他们的控制消息格式,定义符合项目需求的命令消息格式。
分析代码可知,在mote节点上运行的程序中都是通过调用XCommand组件实现消息的传送,分析该组件,在XCommand组件中定义了多种命令消息类型,主要有:
*SummaryofXSensorcommands:
*reset,sleep,wakeup//
*set/get(rate)"heartbeat"//
*set/get(nodeid,group)//设置/获得节点ID,ID;
*set/get(radiofreq,band,power)//设置/获得频率、带宽、能量;
*actuate(device,state)//触发操作
*set/get(calibration)
*set/get(meshtype,maxresend)
2.命令消息详解:
在XCommand组件中定义了三种命令消息,分别为:
XCommandMsg,XMeshMsg和XCmdDataMsg。
其中XCommandMsg和XMeshMsg为downstream命令,XCmdDataMsg为upstream命令。
以下为XCommandMsg消息和XMeshMsg消息的具体结构:
typedefstructXCommandMsg{
uint16_tdest;//Desireddestination(0xFFFFforbroadcast?
)
XCommandOpinst;
}__attribute__((packed));
typedefstructXMeshMsg{
XCommandOpinst;
}__attribute__((packed))XMeshMsg;
下图为XMeshMsg的消息格式:
TinyOSHeader
XMeshHeader
cmd
cmdkey
param
crc
|-----payload(XcommandOp)----|
typedefstructXCommandOp{
uint16_tcmd;//XCommandOpcode
uint8_tcmdkey;
union{
uint32_tnewrate;//FORXCOMMAND_SET_RATE
uint16_tnodeid;//FORXCOMMAND_SET_NODEID
uint8_tgroup;//FORXCOMMAND_SET_GROUP
uint8_trf_power;//FORXCOMMAND_SET_RF_POWER
uint8_trf_channel;//FORXCOMMAND_SET_RF_CHANNEL
struct{
uint16_tdevice;//LEDS,sounder,relay,...
uint16_tstate;//off,on,toggle,...
}actuate;//*FORXCOMMAND_ACCTUATE*/
struct{
uint16_ttype;//FORCOMMANDTYPE
uint16_tvalue;//FORCUSTOMVALUE
}custom_data;//*FORCUSTOMACTION*/
struct{
uint8_tserialid[8];//64bitserialID
uint16_tnodeid;//nodeisisreferedasUID
}uidconfig;//*FORXEEUIDConfigPacket*/
}param;
}__attribute__((p
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- tinyOS 消息 格式