理论教育 基于GR64的物联网网关实践

基于GR64的物联网网关实践

时间:2023-10-27 理论教育 版权反馈
【摘要】:图5-35 GR64模块的正反面及天线图5-36 GR64的无线数传原理图2.数据远传功能实现及程序流程该应用中GR64工作于内部脚本方式,利用集成开发环境M2mpowerIDE脚本可通过计算机串口从模块UART1下载到内部脚本空间,并设置为上电自动运行。该命令用于查看GR64所获得的IP地址,如果命令执行成功则返回IP地址。

基于GR64的物联网网关实践

1.GR64的硬件电路

GR64是索尼-爱立信公司的产品,其模块的正反面及天线如图5-35所示。模块工作电压为3.2~4.5V,可由降压芯片MIC29302bu将5V降至典型工作电压3.6V提供,5个发光二极管分别指示模块GSM网络注册状态,与GPRS网络交互,以及通信串口数据收发状态;由于模块引脚数字电平为2.75V,RS232电平转换芯片最好使用MAX3232等;ON/OFF脚和VREF脚分别提供给终端,用于控制模块硬件开关机和检测模块开关机状态;USB口为调试信息和打印信息输出口。GR64的无线数传原理图如图5-36所示。

978-7-111-44976-8-Chapter05-46.jpg

图5-35 GR64模块的正反面及天线

978-7-111-44976-8-Chapter05-47.jpg

图5-36 GR64的无线数传原理图

2.数据远传功能实现及程序流程

该应用中GR64工作于内部脚本方式,利用集成开发环境M2mpowerIDE脚本可通过计算机串口从模块UART1下载到内部脚本空间,并设置为上电自动运行。上电开机、模块注册网络后开始运行脚本:DTU先从数据NVM中读出运行参数,初始化后按预设运行。其中包括:网络连接参数,如GPRS接入点APN(GA:cmnet)、用户名(GU:wap)、密码(GP:wap)、主站IP及端口号(NS:061.183.125.114:10001);系统参数,如通信协议(CP:TCP/UDP/SMS)、TP通信方式下工作模式(MD:RT实时在线/SA短信激活/DA振铃激活)、连续登录失败停止登录次数(CT:10次)、激活模式下无数据传输自动断网时间间隔(IT:30min),以及短信控制密码(SP:whzydz)等。所有参数均向数据通信串口(UART3)发送“+++”后,按上面的格式本地修改(可以一次更改多项,各参数间用分号隔开);改后向DTU发送LS,将得到所有参数的当前值。也可在运行过程中通过短信远程更改各参数,但须在短信的开头加上预先设定好的短信控制密码(PWD:whzydzCT:15;……);另外还可通过通信串口及短信方式控制模块上下线(SM:ONLINE/OFFLINE)及软件重启动(RESET),掉电重上电后将按最近一次更改的参数运行。程序流程如图5-37、图5-38和图5-39所示。内部脚本方式下程序实现要点如下:

978-7-111-44976-8-Chapter05-48.jpg

图5-37 进程优先级次序

978-7-111-44976-8-Chapter05-49.jpg

图5-38 进程相互作用关系

1)内部脚本不支持中断,须通过内部gtf()函数查询系统标志位方式检测触发类事件的发生,或者通过gtb()函数查询系统状态字节的值确定各项系统状态。例如,收到新短信时标志位SMSRCV将被置位,其中,imSMSRCV=29。同样,接收到IP数据时标志位IPDTRCV将被置位,其中,IPDTRCV=13。通过查询来电状态字节,即if(gtb(CALSTA)==RING)判断是否有来电拨入,其中,CALSTA=12,RING=1。

2)是否接收到串口数据,通过判断内部函数utrl()返回的串口接收缓冲内数据的长度是否大于0确定。此函数的值只能确定串口是否接收到数据,因此在进入串口处理进程后,须先通过查询定时器超时时间内utrl()返回值的变化来检查数据链路,待一包数据接收完毕后再作处理。

3)内部脚本方式下,TCP连接需要完成以下步骤。

待注册GPRS网络(开机后模块自动完成)后,进入GPRS初始化进程。

调用atcrt()创建内部AT命令通道;

调用afsnd()发送命令“AT+CGDCONT=1”,“IP”,“cmnet”设置APN(由从记录中读出的全局变量GA决定,此处默认为cmnet);

调用atsnd()发送AT命令“AT∗ENAD=1”,“GPRS1”,“wap”,“wap”设置接入用户名和密码(由GU、GP决定,此处默认为、wap和wap);

调用atdst()关闭AT命令通道,然后由字符串变量NS(“061.183.125.114:10010”)计算出32位IP(0x3db77d72)和Port(10010),为IP连接作准备。下面进入IP连接进程。

先激活PDP,pdpa(1,1);然后选择IP连接类型(CM=l,为TCP;CM=0,为UDP),ipo(CM,&ScNm)。UDP方式下此时已可透明传输UDP数据,不需要以下步骤:

978-7-111-44976-8-Chapter05-50.jpg

图5-39 程序流程图

执行TCP连接:tcpc(ScNm,Port,IP)。连接成功后,即可透明传输TCP数据。同时不停地查询TCP连接状态字节和IP异常标志位时,当检测到TCP连接状态不是已连接或IP异常标志位置位时,Log()进程将调用ipc(ScNm)关闭IP,然后跳转到ipo()重连接。如此往复循环,就可以在检测到连接丢失(如主站软件关闭或断开侦听后重新打开)或数据传输过程中发生异步时序错误时自动重新接入。

4)利用功能库中的数据库函数存储非易失性参数。

由于数据库函数对公用的NVM数据空间进行操作,即使下载新脚本,原脚本建立的数据库及数据库中的内容仍然存在,因此若用到数据库脚本就必须包含删除数据库的部分。此应用设计为当串口收到“DEL”字符串时,脚本将自动删除当前已建立的所有数据库。具体如下:

978-7-111-44976-8-Chapter05-51.jpg

978-7-111-44976-8-Chapter05-52.jpg

3.GPRS连接后台监控中心

GPRS连接的流程如图5-40所示,LPC1227通过URAT1向GR64写入AT命令,使其连接远端的监控中心,GR64内嵌有一个TCP/IP的协议栈,用其建立一个TCP或UDP连接。以下给出GR64执行AT命令的示例:

1)AT+CGDCONT=1;“IP”;“CMNET”。该命令建立PDP上下文,其中1表示所建立的PDP上下文的编号,“IP”说用所用的协议,“CMNET”是中国移动的APN。

2)AT∗E21PA=1;1。该命令激活IP会话,第一个“1”表示激活IP,第二个“1”是上面所建立的PDP上下文的编号。(www.daowen.com)

3)AI∗E2IPI=0。该命令用于查看GR64所获得的IP地址,如果命令执行成功则返回IP地址。

978-7-111-44976-8-Chapter05-53.jpg

图5-40 GPRS连接建立过程

4)AT∗E2IP0=1;"202.114.85.22";37215。该命令用于发起一个TCP连接,若第一个参数是“0”则表示发起UDP连接,后两个参数分别是要连接的IP地址和端口号。

当发起一个TCP或UDP连接后GR64就进入了数据模式,此时GR64将接收到的任何数据都原封不动地发送出去,并且处于数据模式时GR64不识别任何AT命令。若需要执行AT命令则应将DTR信号线置低电平,使GR64进入在线命令模式。

相关代码如下:

978-7-111-44976-8-Chapter05-54.jpg

978-7-111-44976-8-Chapter05-55.jpg

978-7-111-44976-8-Chapter05-56.jpg

4.软件设计

网关的软件系统主要由ZigBee协调器程序和嵌入式处理器程序构成。

(1)ZigBee协调器程序

ZigBee标准定义ZigBee网络中存在3种类型的设备:协调器、路由器、终端设备。其中协调器负责建立ZigBee网络,因此网关中的ZigBee模块需要在程序中配置为协调器类型。协调器程序采用最新的TI公司推出的ZigBee协议栈2007版,该协议栈可很好地支持网络的自组织和自愈合。相对于以前使用较多的ZigBee协议栈2006版,2007版协议栈在2006版协议栈基础上主要增加了支持多密钥高安全性、大型网络和分割传输等特性。协调器程序在已有协议栈基础上,主要还需增加如下部分:

1)ZigBee协议栈2007版中包含了CC2591控制程序,为了使用CC2591,在协调器程序中需要开启“halboard_cfg.h”文件中的HAL_PA_LNA编译选项。

2)增加串口处理任务,实现与网关处理器的串口通信。

3)按照自定义的数据传输帧格式解析、处理接收到的数据,按照自定义的数据传输帧格式构造待发送的数据。

4)定期向全网广播包含RTC(实时时钟)信息的数据包。定期广播该数据包对于全网节点来说有两种作用:一是该数据包可实现全网节点RTC同步;二是网络中的其他节点可通过定期检查有无收到该数据包判断协调器有无出现异常。此设计很适合包含路由器、需要RTC同步的大型网络。

5)增加CC2530芯片的看门狗初始化以及定期喂狗程序。

(2)嵌入式处理器程序

嵌入式处理器程序的MCU程序处理流程如图5-41所示。

978-7-111-44976-8-Chapter05-57.jpg

图5-41 MCU程序处理流程图

为了实现网关的低成本、高实时性设计,本网关不采用任何嵌入式操作系统。整个软件系统采用前后台的编程思想,后台ISR(中断服务程序)和前台主程序循环之间的数据交换可以通过事件标志和数据缓存区来实现。由于GR64模块内置了TCP/IP协议,因此网关MCU向该模块直接发送AT指令即可与目标上位机建立TCP/IP连接,实现数据的远程无线传输;通过发送AT指令还可收发短信、挂断语音通话。为了增强网关的灵活性以及降低运行成本,网关采用GPRS方式与上位机进行通信,同时保留处理短信功能,实现短信对网关的配置与操控。比如遇到目标上位机IP地址变动的情况时,可通过给网关发送短信,配置网关最新目标IP地址,然后再与目标主机建立GPRS连接。对于该部分程序,需要注意以下几点:

1)LPC1227具备在应用中编程的功能,对于需要掉电保存的信息可无需外扩Flash芯片而直接通过执行程序将特定信息保存到LPC1227芯片中。

2)ZigBee协调器中RAM空间很有限,而且自身的Flash擦除次数也有限(CC2530支持约2万次的擦写,而LPC1227可支持约10万次的擦写)。考虑到保存ZigBee网络中大量节点的16位网络地址需要很大的空间,而协调器中RAM空间明显不够用,如果保存到协调器的Flash中又会影响CC2530芯片的使用寿命,因此采用LPC1227中的RAM空间来保存节点的网络地址。毕竟LPC1227芯片8KB的RAM空间足以保存一个大型网络中节点的网络地址。同时,LPC1227具备的在应用编程(IAP)功能可将节点网络地址信息保存在自身Flash中。

3)本设计中自定义的ZigBee数据传输帧的节点ID号采用1字节进行保存。因此,一个网关所建立的ZigBee网络容量最大可为255个节点(除去协调器节点)。为了实现简单的ZigBee节点网络地址和节点号之间的地址映射,采用如下代码实现(前提是节点编号从0到255):

978-7-111-44976-8-Chapter05-58.jpg

网关技术指标见表5-8。

本设计中网关没有采用任何嵌入式操作系统,相比当前采用的嵌入式操作系统网关,它具有更小的软件负荷和更低的软硬件成本。网关中的ZigBee模块加入了2.4GHz功率放大芯片CC2591,使得ZigBee节点间的无线通信距离更大,更适用于远距离无线通信场合。网关MCU采用较新的基于Cortex-M0内核的ARM芯片LPC1227,运行速度高达45MHz,具备在应用编程(IAP)功能,方便对关键数据的掉电保存。两路串口与ZigBee模块和GPRS模块连接方便,具有较高的性价比。系统软件的编写采用前后台的设计思想,使得网关具有很好的实时性和可靠性,满足工业级要求。因此本节设计的网关在低成本、远距离ZigBee通信领域具有较高的推广价值。

表5-8 网关技术指标

978-7-111-44976-8-Chapter05-59.jpg

免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

我要反馈