夜上海论坛本站小编为你精心准备了GPRS模块的应用技巧参考范文,愿这些范文能点燃您思维的火花,激发您的写作灵感。欢迎深入阅读并收藏。
夜上海论坛《电气时代》2014年第五期
夜上海论坛一、应用技术和特点
目前,微控制器与gprs模块夜上海论坛之间的互动操作大部分采用通用异步串行数据接口实现,微控制器通过串口发出AT指令,接收GPRS模块的指令应答和数据,实现对模块的控制和数据传输。与早期GSM模块不同,目前的GPRS模块在实现语音和短信通信的基础上,大部分都内嵌TCP/IP协议栈,可以直接实现与后台服务器之间的数据传输功能。以数据传输为例,说明GPRS模块以TCP/IP协议进行数据通信时,要经过3个操作过程。1)建立连接。一般来说都是客户端主动向服务器端的IP和端口发出连接请求,而服务器端侦听指定的端口,等待客户端的连接请求并且进行回应建立连接。2)数据收发。利用已经建立的链路进行数据收发。可以使用单帧数据包的传输,通常一帧可以包含1KB左右。也可以使用“透明传输”模式,将串口收到的所有字符和数据原封不动地按照TCP/IP协议打包发送到远方服务器。3)连接释放。当所有数据都收发完成,就需要切断与后台服务器的连接,释放通信信令和后台服务器的资源。但在某些场合,也可一直保持与后台的连接过程,即“永远在线”,但在没有数据传输的间隙内,需要通过“心跳”数据包来维持与后台的连接,否则在一定空闲后通信网络将自动回收空闲的资源。
二、软件应用方案
在使用GPRS模块进行设备开发过程中,逐渐发现以下的几个特点。1)使用串口与模块的通信过程中,存在长度不定的通信帧需要区分,如果不能可靠地分断各帧数据就不可能正常运行。2)由于涉及到外部网络的通信过程,微控制器与GPRS模块通信过程中存在应答延迟的情况,而且延迟的时间长短随机。如果缺乏合理的应对机制,则可能会影响到程序中其他进程的工作。下面就遇到的两个主要问题进行分析,并提出一种可能的解决方案进行讨论。
1.分割数据帧对于来自GPRS模块的数据帧长度不定的情况,一般有以下两种方式解决。1)对于串口具备硬件缓存或DMA以及空闲中断的微控制器,可以使用足够长度的缓存进行接收,并配合空闲标志进行判断,该方案可以最大程度地释放CPU的资源,对于CPU负荷较重的场合比较合适。但该方案对MCU的外设资源有一定的要求,使得该方案受到一定的限制,而且对延时判断时间的控制也缺乏灵活性。2)在硬件条件不成熟的情况下,借鉴Modbus协议的3.5字符时间作为帧分断的思路,以一定的延迟时间作为判断数据帧完成的标志。具体来说,在串口接收到第一个字节后,启动已经设定的定时器,并且在每次收到新的字节后都清空该定时器。帧数据接收完成后最后一次清除定时器,等待定时器溢出并产生中断,报告一帧数据接收完成。由于大部分的微控制器都具备串口和定时器等外设,该方案具有更大的普遍意义。另外,在开发调试过程中,同一条AT指令的应答返回数据,可能被分断为两个甚至三个段发送回来,中间的间隔可能比MCU串口的硬件产生的空闲中断判据要大,可能存在接收不完整的情况。由于可以灵活设置定时器的超时范围,对不同厂家的GPRS模块具备更好的适应能力。
2.GPRS模块的操作机制尝试了2种不同的处理架构,分别是有限状态机方式和优先级消息方式。两种方式各有千秋,分别适应与不同的应用模式,同时,作为一种设计思路,还可以应用于更多的场合。(1)有限状态机方式由于GPRS模块的操作是由一系列的请求和应答指令配合完成,部分操作流程中“指令-应答”之间的顺序存在严格要求。但在涉及与外部网络通信的情况下,应答的延迟情况难以判断。为了严格遵循流程操作,同时为了避免由于不定延迟导致系统过长等待而影响其他进程的执行,在GPRS模块的操作中引入“有限状态机”的方式,每一步操作成为一个状态,包含:当前状态,当前状态下收到的各类消息及转向的下一状态,和当前状态需要执行的动作。若干个操作形成的序列就转换为一系列顺序流转的状态,所有的状态集合成为“状态矩阵”,如下图1所示。程序进入状态机,如果收到新的消息,则与已经发出的指令的规定应答相比较,判断相同则可以按照“状态矩阵”规定的路线转移。直至正确收到本序列最后一条指令的应答,结束本流程操作返回空闲状态。以图2为例进行说明。对于比较简单的数据传输任务,本方案可以较好实现,尤其对于后续应答或操作不明确的场合比较适合。例如,在人机交互过程中,由于操作人员可能随意操作按键,对键盘的响应过程可能出现大量不可预计的操作,利用状态矩阵就可为每一个状态下每一个按键消息进行约束,可以从容地应对各种可能出现的情况。对GPRS模块的操作由于涉及到外部网络的互动过程,有时候也会存在一些“意料之外”的情况,采用该方案能较好地控制异常的流程。但对于需要双向数据通信的需求来说,存在一定的风险,即“流程交叉”的情况。举例来说,如果当前正在执行一次数据发送流程,其中进行到第2步,此时如果收到一条短信数据,则可能驱动状态机转入短信接收流程。如果之后收到数据发送流程第2步的应答,则状态机可能陷入混乱。虽然发生这种极端情况的概率非常小,但系统中始终暗藏这种的风险。如果要避免发生这样的混乱,就必须再进一步加入状态流程的挂起机制,必然会使得整个机制变得更加复杂。(2)优先级消息方式结合“指令-应答”结构体(RA)及表达序列流程的RA数组,数据的组成方式如图3所示。顶层的“操作流程”由一系列的RA组成,比如一次“透传流程”就包括:打开链接指令及应答,启动透传指令及应答,发起传输指令及应答,关闭透传指令及应答,关闭连接指令及应答等5个步骤。且每一个步骤又涉及:发出的指令和各种情况的应答。在程序方面,采用带有优先级的消息控制的方式,以一种简洁的方式高效实现四种不同操作:数据收/发与短信收/发。进入GPRS处理流程,首先判断是否收到新的消息,如果收到消息则按照一定顺序判断收到消息是否为收短信或收数据并按标记挂起,然后判断当前是否存在正在执行的流程,并将收到的应答与RA中的正确应答进行比较判断,并按序列推动状态在RA数组内部流转。如果没有收到任何消息,且不存在任何正在执行的流程,则按照:发数据,收短信,收数据和发短信的优先级顺序检查是否存在挂起的事件,并启动相应的流程。比如,如果存在正在执行的流程而没有收到应答,则转入对应的流程超时管理机制,对不同的流程分别进行超时控制,并在超时发生的时候产生标记,然后清空当前正在执行流程的指针,转入空闲等待状态。消息处理的过程如图4所示。
三、结束语
夜上海论坛通过采用以上机制,以一种简洁的方式实现了比较复杂的数据传输任务,较好地实现对GPRS模块控制。在实际测试过程中表现稳定,对网络和通信环境的适应能力较强。另外,类似的方案,也可以满足多种应用情况。
作者:陈杭张帆付克勤杨靖单位:重庆市黔江供电有限责任公司重庆市电力公司璧山供电局重庆樱花电气开关有限公司