Digi的XBee模块在市面上同类产品中,除了稳定性和可靠性最受推崇外,在距离测试中一般都比竞争对手的产品略胜一筹。户外测试需要注意避免模块自身以外的因素造成的测试结果不理想。

2.4G的模块有ZigBee, Wifi, 802.15.4, Digimesh,通信距离除了和协议有关以外,也同硬件平台有关。同样的PRO版本的XBee 2.4GHz模块,我们可以认为在通信距离上 S2C=S1B>S1>S6。

从用户实测数据来看,XBee 2.4G频段的模块采用2.1dBi的小天线,在国内到处是CMCC,ChinaNet的wifi覆盖下,马路实测的结果基本上也能达到标称值的1/3距离。以XBee PRO S2C为例,在马路上竖起约一人高的杆子,在无障碍视距下条件下测得的通信距离约700m~1km。在增加高度或是提高天线增益情况下,通信可以达到2公里以上。

即便是使用S2C板载天线的型号,XBee模块在实测中仍表现不俗。板载天线的增益是0dBi,国内有用户在马路上视距无遮挡的条件下,使用普通型板载PCB天线的型号,仍测得300米左右的通信距离。通常我们建议使用外置天线的型号,以便能灵活适应不同项目和不同部署场景要求。

900MHz的模块,因为国内存在较多的基站频段干扰,因此不同时间和不同地点,通信距离差异很大。总的来说,900MHz的产品比较适合野外使用,或是高空使用。在那些没有GSM基站信号的地方能表现出非常好的长距离特性,在一些基站附近测得的数据,低功率的900MHz短距模块有时还不如2.4G模块。这并不是模块本身的问题,而是接近基站的900MHz谐波噪声很大,虽然信号在灵敏度范围内,但干扰的背景噪声能量比它还要高。对距离有要求时,900MHz频段应尽量选择1W发射功率的SX模块。

900MHz产品的国内实测距离在不同环境下差异很大。不同时间和不同地方会有不同的结果,以套件内2.1dB的天线户外实测: 900HP约在200m~1公里的范围,在环境较好的地方可以达3km。 Xtend/XTC/SX大多测得600m~3公里范围,环境较好的地方可达10公里。

900MHz产品要得到较远的通信距离,最好是把天线放在足够高的地方,不可放置在地面。配置上,把空中波特率RF Rate设置低一些,另外,天线的朝向有时也有较大的影响,把天线水平放置或是30~45度倾角有时会取得更好的效果。远距离测试时,请尽量进行使用单向测试而不要进行回环等测试。

如果用户在实际测试中发现通信距离远低于上述结果,需要仔细检查一下测试过程,是否使用了不合格的配件(馈线过长或是插损过高的配件),是否对模块做了不恰当的配置或是使用了不合理的数据模型。

1、使用正确的模块并且正确配置

通常尽可能使用PRO型号的XBee模块,以便实现更远的通信距离。通常不建议使用广播模式来进行距离测试,所以你需要把模块配置成对发模式。进行测试的两个模块,为了方便观察,请先使用透传模式,并在实验室内配置好,使其能正确相互通信。ZigBee模块,在测试现场还需重新配置一下,一般需要进行一下退网 (ATNR0),以便协调器能重扫描一下周围环境,在比较干净的信道上重新建立网络。同时另一个测试模块也需在同一个地方进行退网重新加入到协调器新建的网络中,然后再拉开距离测试。Digimesh和点对多点模块,在指定信道时,最好做一次能量扫描,挑选干扰较少的信道进行通信。

虽然可以用回环模式进行距离测试,但为了排除不合理的数据模型,两端各用一台笔记本电脑进行单向通信。

2、使用合适的天线和测试工具

对于使用外置天线的型号,天线成为影响测试距离的关键因素。在使用样品做距离测试时,最好选择原厂天线或是像L-com之类的对应频率的品牌天线,并使用原厂的开发底板,以免一开始用了劣质的天线影响判断。另外最好不要用多模天线。品牌天线通常比较贵,量产时一般会选择国产天线,但它可以作为对比样本和对国产天线优化的参考。同理,应该避免使用劣质的馈线或是连接器,低劣的连接线缆也会造成较大的增益损失甚至是频率失配。在实际使用过程中,往往是先使用合适的天线和馈线做测试,再根据项目需求寻找合格的天线供应商。

好的天线厂家一般会提供性能较佳的天线方向图。通常天线水平方向图都能做到比较高的增益,而接近垂直方向的增益是最弱的。而设备零散部署时,方向是有不同角度的。因此在垂直方向图中,高增益的部分能尽可能覆盖越接近90度的位置,天线也就越好,表明天线对方向性更不敏感。

下图是一个3dBi天线的水平和垂直的方向图,仅供参考。

有时候厂家提供某个样品的测试数据,并不代表量产时出货的天线的真实数据,为了保证天线供货产品的一致性,选择比较大牌的厂家很重要。

在进行测试时,同样不能忽略测试设备,用笔记本电脑进行测试,对短距无线模块没什么问题,但要注意选择比较新的电脑,一些接近淘汰的笔记本不仅USB供电不足,高速的串行通讯波形出现较大失真时,也会导至通信不上。如果采用外置电源,应选择用于设备供电的动力锂电池而不是给普通手机用的充电宝。注意测试前充满电,一些锂电在使用一段时间后内阻增大,虽然电平并还保持较高,但已经不适合用作测试电源,应尽量避免这种呢况发生。

在实际使用中,还应避免天线随意悬挂导至模块脱落或是馈线接头断开,如果在路边测试没有支持物,一个较好的办法是采用如下图所示的方式用扎线带和PVC管把模块和底板等固定起来。测试时,应尽量使两个模块天线位于空旷可视距离处,避免天线过于靠近金属物体,或是被植被覆盖。金属物件会吸收和反射无线信号,植被能吸收无线电信号从而造成大量的信号衰减,从而影响测试距离。

3、正确使用测试的数据模型

无线通信模块特别是ZigBee或Digimesh的带宽有限,因此测试需选用合理的数据模式,避免短时间突发数据引起带宽超限,造成缓冲区溢出而丢失数据,形成误判。通常在刚开始测试时,选择比较简单数据模式,比如ZigBee协议,一般先采用约每秒发32个字节这样的频率进行稳定性测试。在合适的距离上观察到稳定通信后,再进一步提高发送频率。XBee模块的发送缓冲区有2.1K,因此2K以内的数据可以任意向模块送,但如果是长时间连续发送,不开启流控容易造成缓冲区溢出,即缓冲区满时,数据并没有送入发送缓冲区就直接丢弃。因此,进行高频大数据量通信时,需要开启流控。在实际应用中,ZigBee模块以低于120ms的频率向串口不断塞数据时,过一段时间就容易发生丢包和缓冲区溢出。对于带宽高很多的802.15.4模块,一般数据包长时间连续发送,间隔也不不能小于20ms。

4、其它注意事项

对于测试,尽量用不同模块在不同的时间和地点多测几组数据,避免因为特定的环境或是特定定的模块产生不具代表性的样本数据。

XBee模块户外通信距离测试的更多相关文章

  1. 三言两语聊Python模块–文档测试模块doctest

    doctest是属于测试模块里的一种,对注释文档里的示例进行检测. 给出一个例子: splitter.pydef split(line, types=None, delimiter=None): &q ...

  2. 利用python中的gensim模块训练和测试word2vec

    word2vec的基础知识介绍参考上一篇博客和列举的参考资料. 首先利用安装gensim模块,相关依赖如下,注意版本要一致: Python >= 2.7 (tested with version ...

  3. 人脸识别引擎SeetaFaceEngine中Identification模块使用的测试代码

    人脸识别引擎SeetaFaceEngine中Identification模块用于比较两幅人脸图像的相似度,以下是测试代码: int test_recognize() { const std::stri ...

  4. 人脸识别引擎SeetaFaceEngine中Alignment模块使用的测试代码

    人脸识别引擎SeetaFaceEngine中Alignment模块用于检测人脸关键点,包括5个点,两个眼的中心.鼻尖.两个嘴角,以下是测试代码: int test_alignment() { std: ...

  5. 人脸识别引擎SeetaFaceEngine中Detection模块使用的测试代码

    人脸识别引擎SeetaFaceEngine中Detection模块用于人脸检测,以下是测试代码: int test_detection() { std::vector<std::string&g ...

  6. 高性能Web服务器Nginx的配置与部署研究(7)核心模块之主模块的非测试常用指令

    1. error_log 含义:指定存储错误日志的文件 语法:error_log <file> [debug|info|notice|warn|error|crit] 缺省:${prefi ...

  7. 利尔达仿真器加有人CC3200模块USR-C322上电测试

    1. 使用利尔达的CC3200底板仿真器对有人CC3200模块USR-C322进行烧写,测试. 2. 连接的接口,需要连接6根线,如下,供电测试,第一波测试,输入+++回复a,然后在输入a,返回+OK ...

  8. python学习之正则表达式,StringIO模块,异常处理,搭建测试环境

    python正则表达式 引入一个强大的匹配功能来匹配字符串 import re 正则表达式的表示类型raw string类型(原生字符串类型) r'sa\\/sad/asd'用r转为raw strin ...

  9. nginx配置之状态模块和压力测试功能

    状态模块功能 nginx.conf中的http{}中的server{}中: location /status { #开启nginx状态功能 stub_status on; } 直接在网页中请求stat ...

随机推荐

  1. Linux连接虚拟机及操作指令

    Linux的安装(虚拟机环境)与基础配置   一.背景 本文介绍如何安装虚拟机VMware以及如果在虚拟机上安装Linux系统以及Linux安装完毕之后的基础配置 需要准备的东西有VMware以及Li ...

  2. Docker 容器操作命令

    容器是镜像的一个运行实例,镜像是静态的只读文件,而容器带有运行时需要的可写文件层.如果认为虚拟机是模拟运行的一整套操作系统(包括内核.应用运行态环境和其他系统环境)和跑在上面的应用,那么Docker容 ...

  3. NSIS 查找目录下的所有文件夹

    在制作安装包的时候,需要查看下某一目录下的所有文件夹的名称.经过查资料发现需要用到NSIS 的一个插件Locate.下载该插件后,会在NSIS的安装目录 ...Program Files\NSIS\P ...

  4. node note

    1.关于next() next()函数接受一个Error对象,在判断错误时,返回这个next()函数,并传入自定义的Error对象可以被向下捕捉,你也可以自定义统一捕捉错误Error的中间件,在app ...

  5. zabbix通过agent添加监控项的步骤

    1.确定要监控的对象的指标 2.在agent端上,把如何具体获取指标写成shell脚本,并放在一个和其它agent端统一的位置上 3.在agent端上,自定义监控项key值,配置zabbix_agen ...

  6. Java 字符串拼接四种方式的性能比较分析

    一.简单介绍 编写代码过程中,使用"+"和"contact"比较普遍,但是它们都不能满足大数据量的处理,一般情况下有一下四种方法处理字符串拼接,如下: 1. 加 ...

  7. ActiveMq Windows 配置优化

    最近ActiveMQ 5.15.3 会报 OutofMemory的错误 在 wrapper.conf中 #wrapper.java.additional.8=-Dorg.apache.activemq ...

  8. logback kafkaAppender输出日志到kafka

    官网地址https://github.com/danielwegener/logback-kafka-appender 本文以spring boot项目为基础,更多的信息,请参考官网 https:// ...

  9. easyui的datagrid某个字段return一个a链接

    实现方法用 formatter formatter: function(value, row, index) { return '<a href="javascript:void(0) ...

  10. html页面通过http访问mysql数据库中的内容,实现用户登录的功能

    需求: 通过html编写用户登录页面,页面内容包括用户名.密码和登录按钮,点击登录后访问login.php文件,使用按钮默认的submit提交用户名和密码,在login.php中访问mysql数据库, ...