摘 要:提出了一个基于ARM架构处理器和μC/OS-II操作系统的远程数据采集监控系统的系统组成与结构,介绍了其μC/OS-II操作系统的移值方法,并对数据采集/控制器的软件系统进行了分析与设计。
关键词:嵌入式系统;远程监控;系统结构
嵌入式系统是计算机系统应用的重要发展方向之一。随着计算机技术的飞速发展,嵌入式系统的设计开发与应用已步入一个全面发展的阶段。由于嵌入式系统具有体积小、性能强、功耗低、可靠性高以及面向行业应用的特点,目前已经广泛地应用于军事国防、消费电子、网络通信、工业控制等领域。特别在数据采集与自动化控制领域,嵌入式系统更是显现了其得天独厚的优势与魅力。
进行嵌入式系统应用开发,开发平台的选择非常重要。目前,基于ARM架构的硬件平台较为流行,产品资源非常丰富。而μC/OS-II是近年来发展迅速的开放源码实时操作系统,具有良好的可移植性,因此,基于ARM架构的处理器和μC/OS-II操作系统是进行嵌入式应用系统开发的理想平台。
1 系统组成结构
1.1 系统功能与组成
利用上述平台本文设计实现了一个远程数据采集控制系统,测量远程设备的环境温度变化情况和电池电量,并能启动温度控制器工作,在电池电量不足时,向数据采集控制中心发送报警信息。系统实现的主要功能有:
(1)定时检测、采集远程设备环境温度及供电电池电压,并将数据发送到监控中心;
(2)在环境温度超出预定范围时,启动温控器工作,以保持设备环境温度;
(3)在电池电量不足时,向监控中心发送报警信息;
(4)可本地设置、修改系统工作参数,也可由监控中心通过短信远程控制、设定系统工作参数;
(5)监控中心将数据信息保存于数据库中,并能对采集的数据进行统计分析,按预设参数决定是否需对远程设备进行人工维护;
(6)数据采集/控制器工作异常时,能向监控中心发送报警信息,请求进行人工维护;
(7)能将采集的温度数据信息本地存储,系统通信失败时,可通过USB设备进行转储。
系统组成关系如图1所示。其中数据库采用SQL Server 2000,用于存储采集到的数据信息和远程设备工作、维护情况信息;数据采集控制中心采用工控机服务器、Windows Server2003,运行数据采集控制软件系统,通过串口与GSM模块相连,采用短信通信方式完成对远程设备的信息采集与管理控制;GSM模块采用Siemens的TC35,通过短信实现远程信息的交互,可使系统建设与维护投资小,工作可靠;数据采集/控制器用以实现数据采集以及相应设备的控制。
监控器核心板集成了2 MB SRAM和4 MB Flash存储器和4×4键盘,还集成了所需的外设接口模块,包括液晶显示接口、USB接口模块、A/D转换模块、2个RS232接口以及 DC/DC转换等模块。外接设备有GSM模块、128×64液晶屏,U盘、电池电源、温度传感控制器等,其中液晶屏和U盘为选配设备,为降低系统成本与功耗,只在需要时配接相应设备。
2 数据采集/控制器软件系统设计
在目前嵌入式实时操作系统中,μC/OS-II源码公开、结构简单、移植性好,采用C语言和汇编语言实现,其中绝大部分使用C语言,结构非常简单;能很容易被移植到各种微处理器上,移植过程中,用户只需做少量工作;支持实时多任务,可裁剪、可固化,是一款优秀的嵌入式操作系统,以其为平台,用户可以快速地开发出自己的应用系统。
2.1 μC/OS-II的移植
以μC/OS-II为软件平台开发应用系统,首先,要进行ARM硬件平台下的操作系统移植,对μC/OS-II与处理器有关的代码进行修改,主要工作有:
(1)在系统文件OS_CPU.H中要定义10个不依赖于编译的数据类型,以免与处理器类型产生关联,从而影响移植;定义OS_STK_GROWTH常量为1,指明堆栈的生长方向为自上而下;定义两个宏OS_ENTER_CRITICAL()、OS_EXIT_CRITICAL(),以禁止和允许中断,系统代码访问临界区前要先禁止中断,访问完毕后重新允许中断;定义宏OS_TASK_SW(),在任务级代码中调用,使系统从低优先级任务切换到高优先级任务。
(2)在OS_CPU_C.C文件中编写6个C函数 OSTaskStkInit()、OSTaskCreateHook()、OSTaskDelHook()、OSTaskSwHook()、OSTaskStatHook()、OSTimeTickHook()。OSTaskStkInit()用来初始化任务的堆栈结构,OSTaskCreateHook()允许用户及使用特定移植实例的用户扩展μC/OS-II的功能,OSTaskDelHook()用于任务删除时的系统调用,OSTaskSwHook()是发生任务切换时的调用函数。这些函数中只有OSTaskStkInit()是必需和函数,其余函数必须声明,但不一定需要包含代码。
(3)在OS_CPU_A.ASM文件中编写4个汇编函数:OSStartHighRdy()使就绪状态的最高优先级任务开始运行,OSCtxSw()用于任务级的任务切换,OSIntCtxSw()用于中断级的任务切换,OSTickISR为内核处理时钟节拍的中断处理函数。应注意运行OSStart()后,在系统启动的第一个任务中初始化节拍中断。
(4)主函数程序结构:在主程序中应包含头文件config.h,其中对最大任务数、信号量和邮箱等内核参数进行定制和配置,分配各任务的堆栈空间,主函数main()要先后调用OSInit(),变量初始化,创建各任务,调用OSStart(),进入实时多任务运行状态。主程序结构如下:
#include “config.h”
OS_STK TaskStk[TASK_STK_SIZE];
OS_STK Task_Stk1[TASK_STK_SIZE];
… … … /*为各任务分配堆栈空间*/
main(void)
{
OSInit();
OSTaskCreate(Task1,(void*)0,&Task_Stk1[TASK_STK_SIZE-1],0);
… … … /*创建各任务*/
OSStart();
return 0;
}
2.2 系统任务划分与功能设计
数据采集/控制器的软件系统共划分为6个主要任务,按优先级顺序分别为控制任务、键盘任务、温度监测任务、串口通信任务、电量监测任务、显示任务。
(1)控制任务:启动系统各任务后,根据收到的键盘或短信命令,修改系统工作参数,控制系统工作状态,温度超过设定值时,控制温度控制器工作。
(2)键盘任务:通过键盘可以输入控制命令、设置系统工作参数。键盘任务循环读取键盘,将按键信息发送到控制任务,任务处理过程中应考虑到按键的抖动等特殊情况的处理。
(3)温度监测任务:监测环境温度,按设置参数定时读取经过A/D转换的温度值,进行本地存储,并向串口通信任务发送环境温度信息,由串口通信任务通过GSM模块向数据采集控制中心发送温度数据短信,供采集控制中心储存、统计和分析。该任务还要进行喂狗操作,将看门狗复位,然后进入循环等待下一次定时数据采集。
(4)串口通信任务:将采集的温度、电量等信息缓存至规定(可设置)的条数时,通过串口发送给GSM模块;对收到的报警信息则不进行缓存,直接通过串口发送给GSM模块。每次发送数据完成后,读取GSM模块的未接收短信,若为命令短信,则发送给控制任务进行相应控制。
(5)电量监测任务:检测电池电量,当电池电量低于设定值时,向串口通信任务发送低电信息,由串口通信任务通过GSM模块向数据采集控制中心发送低电报警短信,请求人工维护。
(6)显示任务:显示任务用于显示系统的工作状态,包括温度、电量、报警信息以及键盘输入信息的回显,考虑系统的低功耗要求,在远程无人值守环境下,可关闭系统的显示,或取消液晶显示配置,降低硬件成本。
本文以ARM系统的控制器系统和μC/OS-II为软、硬件平台,实现了一个远程数据采集/控制系统,达到了低成本、低功耗、建设实施简便、快捷的要求,应用效果令人满意。本系统的解决方案对于相似应用环境的远程数据采集与控制具有一定的借鉴意义。
参考文献
[1] 邵贝贝译.μC/OS-II源码公开的实时嵌入式操作系统[M].北京:中国电力出版社,2001.
[2] 周立功.ARM微控制器基础与实战[M].北京:北京航空航天大学出版社,2003.