学海荡舟手机网

主页 > 实用文摘 > 教育文摘_09 > > 详细内容

基于RTLinux的实时控制系统_传感与控制论文

摘要:从技术背景、系统结构、硬件和软件设计等方面论述了基于rtlinux的闸门实时控制系统的组成、原理以及实现方法,并着重分析了软件实现的关键问题。

    关键词:rtlinux 实时控制 tcp/ip mysql数据库

在水电站闸门控制系统中,设备位置分散、控制分散,基于常规继电器的控制系统不能满足电厂无人值班控制系统和全厂综合自动化的要求,必须将智能控制和工业网络相结合,实现实时控制的同时又能对设备进行智能管理和维护。目前比较常用的控制系统大多由plc构成,成本较高,缺乏客户定制的灵活性。本文从系统功能实现和经济指标两个方面考虑,半基于rtlinux的控制平台、工业以太网和数据库技术引入闸门控制系统。

1 rtllinux、工业以太网和数据库

rtlinux是由新墨西大学的victor yodaiken等人开发的,现在已有商业化的版本推出。在rtlinux面世之前,linux在实时性方面作过一些尝试。在posix1.b中,规定了实时进程的一些标准,但由于linux内核的不可抢先性,真正的实时进程无法在标准的linux环境下实现。rtlinux采用简单而有效的方法解决了此问题而不用重写linux内核代码。rtlinux实现了一个高效的可抢先的实时调度核心,全面接管中断,并把linux作为此实时核心的一个优先级最低的进程运行。当有实时任务需要处理时,rtlinux运行实时任务;无实时任务时,rtlinux运行linux的非实时进程。图1是rtlinux的结构图。

为保证实时进程与非实时linux进程部顺序进行数据交换,rtlinux引入了rt-fifo队列。rt-fifo被linux视为字符设备,最多可达150个,分别命名为/der/rtf0、/dev/rtf1……/dev/rtf63。最大的rt-fifo数量在系统内核编译时设定。图2说明了rt-fifo的工作原理。

rtlinux程序运行于两个空间:用户空间内核态。rtlinux提供了应用程序接口,借助这些api函数将实时处理部分编写成内核模块,并装载到rtlinux内核中,运行于rtlinux的内核态。非实时部分的应用程序则在linux下的用户空间中执行,这样可以发挥linux对网络和数据库的强大支持功能。

tcp/ip协议和以太网在internet上的成功应用吸引着越来越多控制程师。尽管以太网的时间不确定性给以太网应用于工业控制现场的实时性带来了很多争论,但是实际应用中,经网络传输的数据绝大多数用于系统管理和维护等方面,用于实时控制的数据传输很少,这也是基于管理集中、控制分散的系统设计策略考虑的。在较高的以太网传输速度下,现场智能处理单元的处理速度才是传输延迟的主要原因。本系统现场控制单元采用高速处理器,并采用rtlinux作为现场控制单元的控制平台,直接用以太网传输数据,系统的网络层次减少,信号的传输实时性也得到提高。

目前,有许多数据库开发商提供了linux平台上的数据库软件,例如oracle、sybase、informix和mysql等都推出了linux版本。基于rtlinux的控制系统在实时控制领域有巨大的潜力。

2 系统组成

本系统分为现场和集中级。现场控制级由分散在现场的4个现场控制单元控制,分别完成闸门位置、油缸油压和油路状态等的采集,现场操作按钮的监视以及闸门提升和下降的控制等。集中级由集中监控站、维护站组成,分别执行监视、智能维护及诊断等功能。打印机用于数据的硬备份、报表的输出。系统结构如图3所示。

2.1 系统硬件构成

在工业控制系统中通常采用plc作为现场的控制核心。plc的不足一方面在于其较高的价格,另一方面在于其难以实现非顺序控制算法,以及缺乏对tcp/ip灵活的支持。本系统采用嵌入式pc作为控制单元的核心,开发人员可自行开发外围接口板,根据系统需要灵活组态,既经济又能使用高级语言开发控制程序。

现场控制闸门的lcu采用相同的硬件配置。cpu板采用研华公司的pcm-5864,cpu的intel公司的pentium mmx 166mhz,内存为64mb,以太网接口为10mhz的rtl-8139a。cpu板通过pc104总线与采样模块和输出模块相连。此外该板上配有显示、键盘和鼠标等标准接口,便于在线修改和检查程序。硬盘选用容量为4.3gb的笔记本硬盘。16通道的a/d采样模块pcm-3718h完成模拟量的采集,分辨率为12位;16通道的数字i/o模块pcm-3730用于开关量的采集、控制闸门的启动和停止。为便于现场巡检,lcu配有显示中文的lcd模块mgls-240128,内置t6963c控制器。系统采用了16端口的hub。

为保证集中站可靠地工作,集中监控站、集中维护站采用工业pc,配有intel公司的p处理器,256mb内存和40gb的大硬盘,tcp/ip通信由3com公司的10/100mbpspci网卡3c905c来完成。

2.2 系统软件构成

系统的软件也分为两部分。集中监控站采用windows2000操作系统,并安装有mysql-3.23.49 for windows服务器软件和监控软件;维护也采用windows2000操作系统。此外装有mysql的客户端软件包和维护及诊断软件。监控软件和维护及诊断软件均用visual c++开发。

lcu的软件包括实时linux操作系统、数据库客户端软件和控制程序。在lcu中,操作系统redhat6.2经升级和安装rtlinux后被改造成实时linux。升级后的核为linux-2.2.18,rtlinux的版本号为rtlinux2.2 for linux-2.2.18。数据库的客户端程序包为mysql-3.23.49rpm。控制程序包括实时控制程序和非实时程序两部分。

3 系统设计的关键问题

现场单元中与实现控制部分和非实时控制部分程序相对应的文件为gatectl_module.c和gatectl_app.c。二者由gcc编译后生成目标文件gatectl_module.o和gatectl_app.o。前者为内核模块,嵌入到rtlinux核中,用于实时采集和实时控制输出,运行于内核态。后者为linux应用环境,运行于用户空间,完成数据的预处理、访问数据库和人机接口等工作。

3.1 内核模块

内核模块程序按多线程模式编写,rtlinux提供了与多线程编程相应的api函数。

rtlinux2.2内核中,完成实时任务的模块主要包括以下两个功能函数:

int init_module();

void cleanup_module()。

前者在模块第一次装入核中时被调用,完成实时任务的参数(优先级别、中断周期等)的设置,进行任务的启动和终止等操作。后者在模块卸载时被调用,一般在调试或系统退出时使用。模块中可启动多个任务,本系统在实时部分只设计一个实时任务即task1。

    启动实时任务前必须进行初始化。init_module()中的初始化工作包括以下三部分:

·为保证内核态的实时进程与用户空间的非实时进程间交换。须创建3个rtl-fifo,具体为:rtf1用于实时进程与非实时进程间的数据交换,数据包括采集到的模拟量和数字量;rtf3用于非实时进程向实时进程传递控制命令字,以启动和终止实时任务;rtf2用于保存经ttf3传递的实时任务的控制命令字。创建工作由rtlinux提供的api函数rtf_create(n,buf)来完成。

·创建实时任务task1对应的线程,并设定其调度优先级,由api函数pthread_create来完成。

·当非实时进程通过rtf3进行控制命令传递时,实时进程应及时响应。因此必须在实时程序中建立跟踪rtf3变化的子程序,调用rtf_create_handler(3,&data_handler)来完成此功能。

内核态的主体程序有两种实现方式:中断处理和周期实时线程方式。本系统采用周期性实时线,即周期性地执行数据采集、输出控制结果以及与处于用户空间中的非实时进程交换数据。具体过程见图4。

在编写实时程序时,应特别注意的是:实时任务运行在内核水平,是为了提供对计算机硬件的直接访问能力,为避免不确定的延迟,rtlinux给代码和数据分配固定的内存空间。实时任务不能使用linux的系统调用及linux中的程序与数据结构,否则难以保证数据的一致性。此外应控制实时程序的执行时间,编写程序时应注意包含与api函数对应的头文件。

内核程序中与rt-fifo相关的函数有:

rtf_create():创建rt-fifo。

rtf_get():从rt-fifo读数据。

rtf_put():向rt-fifo写数据。

rtf_create_handler():建立响应rt-fifo变化的子程序。

内核程序中与实时任务线程相关的函数有:

pthread_create():创建实时任务对应的线程。

pthread_wait_np():将当前线程挂起,直至下一个周期线程。

pthread_makeperiodic_np():设置线程的属性并启动线程。

pthread_suspend_np():将本线程无限期挂起,即终止任务。

在调试阶段,需要将有bug的模块卸载。该项工作由cleanup_module()来完成。在卸载模块时将rtf1、rf2和rtf3撤销,并撤销实时任务task1。

3.2 应用程序

linux下应用程序gatect1_app工作流程见图4,其程序用linux下的c语言开发。集中监控站和维护站的程序在windows下用visual c++开发。其中有几点要说明:

·rt-fifo被linux视为字符设备,因此可以通过调用open("/dev/rtf1",o_rdonly)来获得rtf1的指针,rtf2的rtf3类似。获得指针后通过read和write函数实现对rt_fifo的读写操作。

·程序中调用select函数检查rt_fifo是否忙,以避免读rt_fifo时出现阻塞现象。

·lcd显示模块mgls-240128内置智能控制器,只需将待显示的数据送控制器的显示缓冲区就能实现显示功能,数据显示不会占用系统过多的时间。

    ·系统数据传输和维护通过网络数据库来实现。数据库采用客户端/服务器模块,将lcu、集中维护站设置为客户端,将集中监控站设置为服务器。本系统采用基于tcp/ip协议的mysql数据库为实现数据管理。mysql是一个多用户、多线程的sql数据库服务器,由客户端/服务器结构来实现。它由一个服务器守护程序mysqld和不同的客户程序及库组成,使用tcp/ip把多个客户(lcu等)连接到一个服务器(集中监控站)上。在运行前应将主机名、ip地址等设备就绪,在lcu的应用程序gatectl_app中应包含mysql.h头文件,其中有mysql的api函数的具体实现。在用户空间,c语言程序通过这些api函数访问远程的数据库服务器。

·数据的预处理:为防止被干扰的数据上传到服务器,应用程序对数据进行滤波,再对数据进行分类。经过预处理后的数据才可以送数据缓冲区,通过api函数向数据库服务器上传。

4 应用效果

目前该系统正在试验室运行。从连续运转的情况看,控制实时性和可靠性均达到了设计要求,网络和数据库均运行正常,可见本设计思路是可行的。下一步将设放到工业现场进一步验证。rtlinux实现实时控制功能并与linux有机结合,这一设计思路既满足了实时控制系统对响应的快速性、时间的精确性和控制的可预测性的要求,又充分发挥了linux对网络和数据库的支持功能。将rtlinux引入控制领域,拓宽了linux的应用范围,必须加速工业控制的化。