微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > 基于嵌入式操作系统的控制系统平台设计

基于嵌入式操作系统的控制系统平台设计

时间:11-15 来源:互联网 点击:

1 引言

近年来,嵌入式系统在工业控制领域的应用越来越广泛。随着嵌入式控制系统的发展,嵌入式控制系统将在一定程度上取代现有的工业PC控制系统,在微型TDCS(集散控制系统)、现场总线系统、PLC控制系统、智能化仪表等领域得到广泛的应用。由于其相对于大型的TDCS系统来说具有较强的成本优势和灵活性,其应用领域正在进一步扩大。本文建立了一套完整的嵌入式控制系统软件平台,该平台建构于嵌入式硬件系统之上,包括嵌入式实时操作系统、软PLC系统、嵌入式组态软件等。

平台包括运行环境和开发环境两部分。使用开发环境,用户可以方便组态和二次开发,而将开发重点集中到具体的控制系统应用上,而诸如系统的软件架构设计、实时性保证、通用的控制系统软件如网络通信、控制算法等复杂而繁琐的软件工作,则交由平台完成。

2.3平台的总体框架

嵌入式控制系统平台是以嵌入式实时操作系统为核心,包括硬件平台、硬件驱动、图形库运行环境、实时数据库管理与通信、人机界面、软PLC、网络通信、用户应用程序等。

嵌入式控制系统平台总体框架如图1所示。

图1嵌入式控制系统软件平台总体框架

由图1可知,嵌入式控制系统软件平台主要包括以下部分:

(1) 嵌入式硬件平台 (2) 嵌入式实时操作系统 (3) 硬件驱动程序 (4) 图形库与运行环境 (5) 实时数据库管理与通信 (6) 人机界面 (7) 软PLC (8) 网络通信 (9) 用户应用程序

3嵌入式控制系统软件平台主要模块的实现

嵌入式控制系统软件平台是个非常复杂的系统,从总体框架图可以看出平台包括实时操作系统、实时数据库管理与通信、图形库与运行环境、人机界面等许多模块,本章着重介绍嵌入式实时操作系统、实时数据库管理与通信等模块的实现。

3.1嵌入式Linux实时操作系统

Linux是一种能运行于多种平台、功能强大、源代码公开、免费的操作系统,基于Linux开发一个开放的、标准的、高效廉价的实时操作系统是完全可行的。本文介绍的嵌入式控制系统软件平台就采用嵌入式Linux实时操作系统,使用双内核RTAI解决方案。RTAI的实现方案类似于RT-Linux,是双内核系统,即利用Linux内核,同时增加一个实时内核,两个内核共同工作。RTAI利用Linux提供的内核模块机制完成实时任务,提供实时服务。模块是内核的一部分,但是没有被编译到内核里去。模块被编译成一组目标文件,根据需要,这些文件能够被插入到正在运行的内核中,也可以从正在运行的内核中移去。RTAI实现的主要模块有RTAI核心模块、RTAI调度器模块、RTAI先进先出模块、RTAI共享内存模块和LXRT模块等。

3.1.3基于RTAI的Linux实时操作系统的实现

我们实现基于RTAI的Linux实时操作系统的过程是:在标准Linux的基础上,打上RTAI的实时补丁包,根据特定硬件条件和运行环境的要求进行适当的配置,再对内核进行裁剪后编译成一个支持实时性的内核。

3.1.4基于RTAI-Linux的应用程序开发

在编写基于RTAI-Linux的应用程序时,根据实时系统的具体要求,将应用程序分为实时任务和非实时任务。实时任务是实时模块,作为Linux核心可加载模块运行在核心态。一般地,定义init_module()函数,它在执行insmod命令装载模块时被调用,在该函数中一般是作一些初试化工作,并且启动实时任务。同样的,还需要定义cleanup_module()函数,它在执行rmmod卸载模块时被调用,在该函数中一般是做一些资源释放工作。实时任务的设计应该尽可能简单,仅包含那些有强实时要求的处理模块,如实时数据采集、外部设备控制等。

非实时任务是普通的Linux进程,它在用户态运行,运行那些对实时要求不高的任务,如数据处理、图形显示等。

实时任务(RTAI核心态)并不能直接调用系统调用,它必须通过特定的方法和非实时任务(Linux进程)进行通信。它们可以通过共享内存和FIFO等方法通信。

基于RTAI应用程序的结构图如图2所示。

图2 RTAI应用程序结构图

3.2实时数据库管理与通信

本系统的实时数据库管理着全局I/O数据。通过硬件驱动程序,将数据采集,并放入到实时数据库中,同时,上层软件从实时数据库中获得数据。

3.2.1数据结构设计

实时数据库与其他一般数据库一样,包含一组对象及其结构,由于目前对实时数据库还没有提出统一的数据模型,所以不同厂家开发的数据库的数据结构都有很大差别。本系统的实时数据库,一个基本的数据对象为“数据”,一个数据包含若干信息,如数据名称、数据类型、数据位置、数据长度等。

考虑到数据的存取效率,程序运行一开始,我们将在内存区开辟一段缓冲区,缓冲区中只存放数据,如果缓冲区大小不够,即缓冲区的数据较多,可以自动扩展缓冲区大校实时数据存放在缓冲区时,我们

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top