xbeePROS1发送的数据在802.15.4网络中有多大时延?
完整的计算过程请参考Digi官方网站的文章:Sending data through an 802.15.4 network latency timing. Digi的S1模块可以跑802.15.4固件,发送数据通过802.15.4的时延是空中传输时间加上CSMA-CA耗时和重传的时间之和,详述如下。最新的XBee S2C 802.15.4计算方法类似,只有少许差别,其它以802.15.4为基础的协议也可参考下面的一些内容,根据不同网络层协议中或参数中定义的包头包尾,有效载荷,最大字节数和mac层应用层的重发次数等另作计算,以方便对极端场景做程序上的优化设计。
快速参考(以下数据在接下来的计算中会用到)
单帧最大有效载荷数据:XBee 8021.5.4 max payload = 100 bytes
空中波特率: RF baud rate (802.15.4, 2.4GHz) = 250 Kbps
单字节250kbps传输耗时:Byte time @ 250 Kbps = 32 us
64-bit寻址发送空中耗时: T_air(B) = 0.8 + 0.032B ms
16-bit寻址发送空中耗时: T_air(B) = 0.416 + 0.032B ms
16-bit寻址发送最佳场景时耗时(广播及单播):16-bit best case (broadcast and unicast): T_total(B) = 0.544 + 0.032B ms
64-bit寻址单播发送最佳场景时耗时:64-bit unicast best case: T_total(B) = 0.928 + 0.032B ms
64-bit寻址广播最坏场景耗时: 64-bit Broadcast worst case: T_total(B) = 9.376 + 0.032B ms
16-bit寻址单播最坏场景总耗时:64-bit unicast worst case: T_total(B) = 40.096 + 0.128B ms
64-bit寻址单播最坏场景总耗时:64-bit unicast worst case: left for the reader to calculate
空中时间: 802.15.4物理层允许最大127字节包,去除包头包尾S1的有效载荷最大为100字节,S2系列的ZigBee包头会更大,每个帧最大有效载荷请以手册中为准。
802.15.4物理层定义RF的波特率为250Kbps,每位4us或是说每字节32us 所以T_air(B)=0.8 + 0.032B ms, 这里B是字节数 这个公式仅考虑空中时延,实际场景还要加上CSMA-CA和重传 载波监测多址接入碰撞规避机制是在发射前检测信道是否干净(CCA),如果信道评估没过,会延迟一段随机时间,再次尝试CCA。 CCA的算法在IEEE802.15.4的172页中有详述。这里有个简易的框架参考:
- 延迟一段随机时间, 随机延迟:(0 : 2^BE - 1) * 0.320 ms BE从RN开始,每次加1,最大值5次,直到步聚发送后清0。(RN在模块中可设置,默认为0,公式0:N中冒号表示在0和N之间的数值中随机选择)
- CCA (0.128ms)
- 如果CCA通过,发送出去,如果信道被占用,重复1~3步骤,最多重试4次。
- 如果是广播模式(没有应答/重传)就完成了。如果是单播:
- 等待目标节点的ACK (0.864ms)
- 如果ACK收到,就完成了,如果没收到1~4,最多重试3次
总计发送时间 T_total(B) 最好的情况,分16位寻址和64位寻址:
16-bit: T_total(B) = 0.544 + 0.032B ms 64-bit: T_total(B) = 0.928 + 0.032B ms
最差的情况:
16-bit:T_total(B) = 40.096 + 0.128B ms
也就是以常见的16位寻址的方式发送数据,在802.15.4协议下发送100字节,在最好的情况下,约耗时3.7ms,最差的情况为52.8ms。
xbeePROS1发送的数据在802.15.4网络中有多大时延?的更多相关文章
- 跨进程发送消息数据(发送WM_COPYDATA消息,够简单的)
1 //1.发送窗体 2 procedure TForm2.Button1Click(Sender: TObject); 3 var 4 h: HWND; 5 Size: Integer; 6 Cop ...
- 蓝牙(Bluetooth) IEEE 802.15.1 协议学习
catalogue . 蓝牙概念 . 配对和连接 . 机密安全性 . 蓝牙协议分类 . 蓝牙协议栈 1. 蓝牙概念 蓝牙(Bluetooth)是一种无线技术标准,可实现固定设备.移动设备和楼宇个人域网 ...
- IEEE 802.15.4协议学习之MAC层
MAC负责建立于网络的同步,支持关联和取消关联.MAC层的安全以及控制物理信道访问机制.信道访问机制主要有以下几种: 1. 有序的物理无线信道访问机制 2. 协调器启动和维 ...
- IEEE 802.15.4协议学习之物理层
在详细讲述IEEE 802.15.4协议之前,谈谈自己这两个星期看协议过程中的一点心得,或者是收获吧. 看协议文档,一定要看有书签的,边看边在旁边做些备注,以便于后期整理.对于协议层次相关的,最好在纸 ...
- 【转】iOS开发网络篇—发送json数据给服务器以及多值参数
原文: http://www.cnblogs.com/wendingding/p/3950132.html 一.发送JSON数据给服务器 发送JSON数据给服务器的步骤: (1)一定要使用POST请求 ...
- Python3学习之路~8.2 socket简单实例 实现ssh 发送大量数据
实例1: 利用socket模拟客户端和服务器端各自收发一次数据: #Author:Zheng Na # 客户端 import socket # 声明socket类型,同时生成socket连接对象 cl ...
- IEEE 802.15介绍
1. 无线通信 无线通信主要是利用无线电(Radio)射频(RF)技术的通信方式,无线网络是采用无线通信技术实现的网络无线网络可为两种: 近距离无线网络和远距离无线网络 近距离无线网络主要可分为如下两 ...
- 类型:Ajax;问题:ajax调用ashx参数获取不到;结果:ashx文件获取$.ajax()方法发送的数据
ashx文件获取$.ajax()方法发送的数据 今天在使用Jquery的ajax方法发送请求时,发现在后台中使用ashx文件无法接收到ajax方法中传递的参数,上网查了一下原因后发现了问题所在,原来是 ...
- A7139 无线通信驱动(STM32) 添加FIFO扩展模式,能够发送超大数据包
A7139 拥有电磁波唤醒以及10mW的发射功率,很easy实现长距离通信,眼下測试有障碍物能够轻松达到300m以上. 通过几天的调试,眼下能够发送随意大小的数据包,大小为1-16KB.所有使用中断收 ...
随机推荐
- studio--常见设置
13.Butterknife插件:zelezny 12.android studio怎么设置打开项目时打开项目列表? 11.stuido 代码背景颜色设置为护眼模式 ======== 13.But ...
- 第25课 可变参数模板(6)_function_traits和ScopeGuard的实现
1. function_traits (1)function_traits的作用:获取函数的实际类型.返回值类型.参数个数和具体类型等.它能获取所有函数语义类型信息.可以获取普通函数.函数指针.std ...
- mysql数据库优化(三)--分区
mysql的分区,分表 分区:把一个数据表的文件和索引分散存储在不同的物理文件中. 特点:业务层透明,无需任何修改,即使从新分表,也是在mysql层进行更改(业务层代码不动) 分表:把原来的表根据条件 ...
- 将json转换为数据结构体
主要用到的依赖:(划重点:这个依赖需要加jdk版本号,不加的话用不了,且目前最高是jdk15) (ps: 用于json与其他类型格式转换,JSONObject, JSONArray等来自这个包) &l ...
- dubbo实现原理介绍
一.什么是dubbo Dubbo是Alibaba开源的分布式服务框架,它最大的特点是按照分层的方式来架构,使用这种方式可以使各个层之间解耦合(或者最大限度地松耦合).从服务模型的角度来看, ...
- WPF程序 双击exe自动申请“以管理员方式运行”权限
实现方式: 在 xxx.exe 目录下包含其对应的清单文件(xxx.exe.manifest, 由 VS 编译时自动生成): 用记事本打开 manifest 文件,将文件中的项:<request ...
- 多个css样式合并到一个“目录”css文件中
执行访问jsp后发现没有效果 同样的代码,在html中效果对比如下: 具体原因:不清楚,暂时记着~~~在jsp中不支持@import这种css样式的引用
- LeetCode OJ 102. Binary Tree Level Order Traversal
题目 Given a binary tree, return the level order traversal of its nodes' values. (ie, from left to rig ...
- python--第十天总结(线程、进程和协程)
Python线程 Threading用于提供线程相关的操作,线程是应用程序中工作的最小单元. #!/usr/bin/env python # -*- coding:utf-8 -*- import t ...
- python--第十天总结(Select/Poll/Epoll使用 )
首先列一下,sellect.poll.epoll三者的区别 select select最早于1983年出现在4.2BSD中,它通过一个select()系统调用来监视多个文件描述符的数组,当select ...