首 页 用户登录 | ![]() |
|||
|
|||
按字母检索 | A | B | C | D | E | F | G | H | I | J | K | L | M | N | O | P | Q | R | S | T | U | V | W | X | Y | Z |
按声母检索 | A | B | C | D | E | F | G | H | J | K | L | M | N | O | P | Q | R | S | T | W | X | Y | Z | 数字 | 符号 |
|
![]() |
您的位置: 5VAR论文频道 → 论文中心 → 理工论文 → 电子通信 |
|
|||||
基于RTLinux的实时控制系统 | |||||
收集整理:佚名 来源:本站整理 时间:2009-01-10 22:23:41 点击数:[] ![]() |
|||||
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。 ·为保证内核态的实时进程与用户空间的非实时进程间交换信息。须创建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内置智能控制器,只需将待显示的数据送控制器的显示缓冲区就能实现显示功能,数据显示不会占用系统过多的时间。 ·数据的预处理:为防止被干扰的数据上传到服务器,应用程序对数据进行滤波,再对数据进行分类。经过预处理后的数据才可以送数据缓冲区,通过API函数向数据库服务器上传。 4 应用效果 目前该系统正在试验室运行。从连续运转的情况看,控制实时性和可靠性均达到了设计要求,网络和数据库均运行正常,可见本设计思路是可行的。下一步将设放到工业现场进一步验证。RTLinux实现实时控制功能并与Linux有机结合,这一设计思路既满足了实时控制系统对响应的快速性、时间的精确性和控制的可预测性的要求,又充分发挥了Linux对网络和数据库的支持功能。将RTLinux引入控制领域,拓宽了Linux的应用范围,必须加速工业控制的信息化。 |
提供人:佚名 | |
【返回上一页】【打 印】【关闭窗口】 |
![]() |
5VAR论文频道 |
![]() |
5VAR论文频道 |
![]() |
关于本站 -
网站帮助 -
广告合作 -
下载声明 -
网站地图
Copyright © 2006-2033 5Var.Com. All Rights Reserved . |