理论教育 物联网网关节点软件设计实践

物联网网关节点软件设计实践

时间:2023-10-27 理论教育 版权反馈
【摘要】:网关节点的硬件平台是S3C2440,它是属于嵌入式系统,嵌入式系统被定义为以应用为中心、以计算机技术为基础、软件硬件可裁剪、适应应用系统对功能、可靠性、成本、体积、功耗严格要求的专用计算机系统。它所具有的多线程、多任务、完全抢占式的特点是专为各种有很严格资源限制的硬件系统所设计的。正因为以上原因,本监控系统采用WinCE5.0版作为网关节点的软件设计平台。

物联网网关节点软件设计实践

网关节点的硬件平台是S3C2440,它是属于嵌入式系统,嵌入式系统被定义为以应用为中心、以计算机技术为基础、软件硬件可裁剪、适应应用系统对功能、可靠性、成本、体积、功耗严格要求的专用计算机系统。

嵌入式操作系统是支持嵌入式系统应用的操作系统软件,它是嵌入式系统极为重要的组成部分,通常包括与硬件相关的底层驱动软件、系统内核、设备驱动接口通信协议、图形界面、标准化浏览器等。与通用操作系统相比,嵌入式操作系统在系统实时高效性、硬件的依赖性、软件固态化以及应用的专用性等方面具有较为突出的特点。嵌入式操作系统的出现,大大提高了嵌入式系统开发效率,在嵌入式操作系统上开发嵌入式系统将减少系统开发的工作量,增强嵌入式应用软件的可移植性,使嵌入式系统的开发方法更具科学性。近年来,随着电子技术的不断进步,嵌入式系统开发已成为热点

Windows CE(简称WinCE)是Microsoft公司专门针对嵌入式产品领域开发的嵌入式操作系统,该系统是一种紧凑、高效、可伸缩的32位操作系统,主要面向各种嵌入式系统和产品。它所具有的多线程、多任务、完全抢占式的特点是专为各种有很严格资源限制的硬件系统所设计的。它的模块化设计使嵌入式系统和应用程序开发者能够方便地加以定制以适应一系列产品,例如,消费类电子设备、专用工业控制器和嵌入式通信设备等的需要。

WinCE最大的好处在于界面的通用性,用户容易接受;同时,可以将Windows通用操作系统下的应用程序移植到嵌入式应用系统中。

正因为以上原因,本监控系统采用WinCE5.0版作为网关节点的软件设计平台。

1.WinCE的移植过程介绍

对WinCE操作系统进行移植,先进行WinCE Bootloater的开发,然后进行操作系统的特性配置和移植,再进行硬件平台上驱动程序的开发,最后对应用程序进行移植和开发。

1)Bootloater的开发。Bootloater的结构可以分为BLCommon、OEM代码、Eboot、存储管理、EDBG驱动程序五大部分。这五部分中,除了OEM代码需要自己编写外,其他部分的代码都是由WinCE本身提供的。

2)内核的配置和移植。WinCE内核的配置和移植是在PlatformBuider的帮助下,根据系统的具体应用目标来进行各种功能裁剪,然后由Sysgen编译生成所需要的操作系统镜像NK.bin。当PlatformBuider成功编译生成WinCE内核后,通过PlatformBuider自带的TFPT网络传输工具或其他TFPT网络传输工具将内核下载至硬件平台中。

3)驱动程序开发。WinCE提供了特定的驱动程序框架,以驱动内容或者外围的硬件设备,驱动程序位于操作系统与硬件的中间,是BSP(板级支持包)的一部分,将操作系统与设备链接起来,操作系统就能识别设备,并为应用程序提供相应的服务。在本系统中主要对LCD触摸屏、键盘、SD卡、存储器等的设备驱动开发。

4)应用程序的开发和移植。完成以上内容后,可以针对硬件平台和具体系统要求进行应用程序的开发。

2.与调度中心的通信模式设计

与调度中心采用GPRS的通信方式,如图6-20所示。而GPRS选择GR64模块,它有两种开发方式:①内部脚本方式,即直接利用模块开放的CPU和系统资源,将类C语言脚本下载到模块的NVM(Nonvolatile Memory,非易失性存储器)中,在模块的CPU中运行。内部脚本解释器从NVM中读入脚本,逐行解释执行,模块通过UART3与数据终端接口;②外部控制器方式,控制程序在外部微控制器中运行,微处理器向GR64的UART1发送AT命令控制其工作。本系统采用第一种方式。它利用集成开发环境M2mpower IDE脚本可通过计算机串口从模块UART1下载到内部脚本空间,并设置为上电自动运行。上电开机、模块注册网络后开始运行脚本:DTU先从数据NVM中读出运行参数,初始化后按预设运行。其中包括:网络连接参数,如GPRS接入点APN(GA:cmnet)、用户名(GU:wap)、密码(GP:wap)、主站IP及端口号(NS:061.183.125.114:10001);系统参数,如通信协议(CP:TCP/UDP/SMS)、TCP通信方式下工作模式(MD:RT实时在线/SA短信激活/DA振铃激活)。程序流程如图6-21、图6-22和图6-23所示。内部脚本方式下程序实现要点如下:

978-7-111-44976-8-Chapter06-26.jpg

图6-20 网关节点的程序流程图

978-7-111-44976-8-Chapter06-27.jpg

图6-21 进程优先级次序

978-7-111-44976-8-Chapter06-28.jpg

图6-22 进程相互作用关系

1)内部脚本不支持中断,须通过内部gtf()函数查询系统标志位方式,检测触发类事件的发生,或者通过gtb()函数查询系统状态字节的值确定各项系统状态。例如,收到新短信时标志位SMS_RCV将被置位。其中,intSMS_RCV=29。

978-7-111-44976-8-Chapter06-29.jpg

978-7-111-44976-8-Chapter06-30.jpg

同样,接收到IP数据时标志位IP DTRCV将被置位。其中,IPDT RCV=13。

通过查询来电状态字节,即if(gtb(CAL_STA)==RING)判断是否有来电拨入。其中,CAL_STA=12,RING=1。

2)是否接收到串口数据,通过判断内部函数utrl()返回的串口接收缓冲内数据的长度是否大于0确定。例如:

978-7-111-44976-8-Chapter06-31.jpg

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

978-7-111-44976-8-Chapter06-32.jpg

图6-23 程序流程图

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

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

a.调用atcrt()创建内部AT命令通道。

b.调用atsnd()发送命令“AT+CGDCONT=1,"IP","cmnet"<CR>”设置APN(由从记录中读出的全局变量GA决定,此处默认为cmnet)。(www.daowen.com)

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

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

②进入IP连接进程。

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

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

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

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

978-7-111-44976-8-Chapter06-33.jpg

实际运用中需注意的问题及解决办法如下:

1)若GPRS模块在线、长时间无数据传输时,可能被GPRS网络踢掉,大多GPRS模块都不能在短时间内检测到。同样,GR64也会发生实际连接已断,但TCP状态字节仍为已连接的情况。虽然只要终端上发一包数据,GR64内部将马上更改TCP连接状态字节为断开(此时脚本即可控制模块重连接),但此包数据不能被发送至主站,需重新发送。为避免此类情况发生,也可适当发送上行心跳帧,以保持连接。

2)当GR64长时间不能建立连接时(例如主站侦听不开),调用ipc(ScNm)关闭IP可能发生不响应的情况,脚本中设定连续5次关闭IP失败,模块将调用rst()自动软件重启。

3)内部脚本方式下,GR64工作时不安装天线,将导致脚本运行缓慢,但只要安装天线,即使信号强度较弱也不会影响脚本运行速度。

3.与调度中心的数据通信协议设计

为了完成数据通信,需要应用各种通信协议。由于选用的GPRS模块封装了TCP/IP协议,支持TCP和UDP协议,监控中心和终端之间数据的传输完全透明,应用中屏蔽了中间传输层的具体实现细节,故而不必关心GPRS网络协议、TCP/IP协议等,数据通信协议设计的重点则在应用层协议上。

在本项目的实际应用中,根据通信中各种数据的数量、类型、格式,同时考虑到结合终端数据采集和数据处理的方便性,目前应用层协议采用了如下的自定义通信协议。

(1)数据帧类型

数据帧包括两种类型:下行帧和上行帧。由监控中心数据服务器发送至监控终端的数据包称为下行帧,反之,由监控终端发送的数据包则为上行帧。两种帧格式不同。

(2)数据帧格式

每一包数据帧由四部分组成:报文头、数据域、校验域及报文尾,如图6-24所示。

978-7-111-44976-8-Chapter06-34.jpg

图6-24 数据帧格式

1)报文头共占9字节,由帧头、终端地址和数据类型标志字组成,如图6-25所示。其中帧头固定为“%1cpw”;终端地址占2字节,用十六进制表示。其中第一个字节表示站址,故目前系统最多可以配备127个站;第二个字节表示每个站的终端。数据类型标志占2字节,目前共有17种数据帧类型标志。

978-7-111-44976-8-Chapter06-35.jpg

图6-25 报文头格式

2)数据域中包含传输数据,所占字节大小与报文头中指定的数据类型有关,上行和下行数据格式不相同。具体内容如图6-26所示。

3)校验域占2字节,本通信协议采用累加和校验方式。校验数据不含帧头(%1cpw)和报文尾(#)。

4)报文尾占1字节,即“#”,表示数据包的结束。

978-7-111-44976-8-Chapter06-36.jpg

图6-26 上/下行数据帧数据类型

4.数据传输控制

数据的传输采取主从与主动相结合的方式。正常情况下由数据服务器主动发送数据请求、控制指令及参数设置指令,监控终端在收到数据请求或是控制指令后,或是向数据服务器发送相关上行帧,或是执行相关操作并发送相关数据。同时在数据帧发送时,本系统采用应答方式,即数据服务器在收到数据后都应该发送相应的答复包表明数据接收正常,以此作为传输正确与错误的确认。另一方面,当监控终端检测到现场状态的改变时,将主动向数据服务器发送上行帧。

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

我要反馈