工控网首页
>

应用设计

>

基于RTLinux系统低杂波数据采集与控制系统

基于RTLinux系统低杂波数据采集与控制系统

2003/11/25 17:04:00
1.引言   能源危机是困扰人类发展的重要问题之一。在发展未来能源的核聚变技术中,低杂波系统是核聚变实验装置(超导托卡马克)中驱动等离子体的主要“动力”之一。目前HT-7U装置上使用的微波速调管为THD2103C型汤姆生管,输出微波频率为3.7GHz,最大输出功率为750千瓦,输出时间长达1000秒。由于这种型号的速调管输出功率大,因此打火保护的反应时间要求小于10微秒。为此在设计其监控系统时,把系统的实时性放在首位,采用了目前比较流行的实时操作系统RTLinux作为下位机操作系统平台。   RTLinux是由新墨西大学的Victor Yodaiken等人开发的,目前RTLinux/Pro3.2版本增加了网络的支持。RTLinux采用的是嵌入式的、高效的可抢先的实时调度核心,全面接管中断,并把Linux作为此实时核心的一个优先级最低的进程运行。当有实时任务需要处理时,RTLinux运行实时任务;无实时任务时,RTLinux运行Linux的非<实时进程。用户的任务分为实时任务和非实时任务。实时任务是一种可由多个线程构成的内核任务,工作在操作系统核心态的实时区,由于实时任务能利用的系统资源有限,且要求工作速度快,往往进行一些简单的实时处理;而位于非实时区的用户进程可利用常规Linux操作系统提供的大量资源,如:进行TCP/IP网络通信、用户交互、设备初始化、开发需要中文支持的图形界面程序等。因此在构建大型实时应程序时,就需要在实时区与非实时区的任务之间进行协调工作。RTLinux采用了RT—FIFO进行数据交换。 2.采集与控制系统结构 2.1 系统硬件组成   由于HT-7U低杂波系统现场环境比较恶劣,再加上采集的数据量很大,并且要将信号数据存入数据库以便后期的实验结果的处理。低杂波数据采集与控制系统采用了分布式控制系统结构。整个系统的硬件分为上位机与下位机两个部分。   上位机采用普通PC机,操作系统采用的是Windows2000系统。CPU为PentiumⅣ1.4GHz, 由10/100MbpsPCI网卡RTL-8139(A)接入以太网。下位机为CompactPCI平台,型号为cPCI-3700A ,操作系统采用RedHat7.3内嵌RTLinux/Pro3.2实时内核。采集卡采用PXI-2010、四路、2MS/s、14bit同步数据采集卡,带2路1MS/s D/A输出。D/O卡采用CPCI7230型,5000V光电隔离,16DI/16DO。上下位机之间的通信采用快速以太网。 2.2 系统软件组成   低杂波数据采集与控制系统的软件部分也由两个部分组成。一个为运行于上位机的图形界面用户交互程序。另一个为运行于下位机的实时数据采集、传输与控制程序。   图形界面用户交互程序采用Visual C++开发。主要负责接收HT-7U总控台发送来的控制参数,如:加波脉宽、触发时刻、功率大小、天线位置等参数,给下机发送控制参数,接收下位机传输来的信号数据,并将数据实时显示和存入MDSplus数据库。实时数据采集、传输与控制程序在Linux环境下用C语言开发,根据其实时性的要求分为两个部分,一个是运行于Linux的非实时进程,一个是运行于RTLinux的内核态的实时进程。非实时进程主要负责接受上位机传下来的控制参数并初始化I/O设备,实时进程主要负责采集传输数据,采集的同时根据控制参数进行信号诊断或控制输出。 2.3 系统运行原理   图1—1是整个系统的运行原理图,左边为上位机部分,右边为下位机部分。上下位机之间以及和HT-7U之间的通信依靠快速以太网。
3.系统实现技术 3.1 系统流程图   系统的流程图如图1—2。从HT-7U总控台传输来的或本地设定的控制参数首先经参数判断程序进行合理性判断,如果合理通过以态网传送给下位机非实时程序进行设备的初始化。当HT-7U总控台的触发信号到达后,启动实时任务进行实时数据采集。为了保证不丢失任何一个数据的情况下实现长时间连续高速采集,实时任务采用了双缓冲技术。即数据实时采集线程与数据实时传输线程之间的公用缓冲区由两个大小相同、且连续的子缓冲区组成,用于暂存A/D转换的数据。每次定时中断到达时,中断程序从A/D卡上读一个数据放入缓冲区,并将缓冲区指针加1,当两个子缓冲区全部填满后,将缓冲区指针归0,后读入的数据冲掉原来的数据。在启动数据实时采集线程的同时启动一个数据实时传输线程。数据实时传输线程在后台与数据实时采集线程并行工作,用它监视双缓冲指针。当发现双缓冲指针从子缓冲区1进入子缓冲区2时,说明数据实时采集线程已将子缓冲区1填满,这时,数据实时传输线程将子缓冲区1中的数据实时传输给上位机。同理,当发现双缓冲指针从子缓冲区2回到子缓冲区1时,对子缓冲区2中的数据进行实时传输。   只要缓冲区足够大,即使在采集频率非常高的情况下,实时采集线程填满一个子缓冲区的时间也会比较长,而实时传输线程进行一次实时传输时间相对比较短。因此,采集线程和传输线程可以并行地访问缓冲区而不会发生交叠,即采集线程访问的子缓冲区与传输线程访问的子缓冲区总是不同的。这样,就可以在不丢失任何一个数据的情况下实现长时间连续高速采集。   采集线程在将A/D卡上的数据写入缓冲区的同时,利用控制控制算法进行判断,当信号值超过设定值时,将控制信号送到D/O卡实施控制。在低杂波系统中要进行实时采集与控制的信号是高反射 (反射功率)、灯丝电压(流)、磁场电流、阴极电压(流)、钛泵电压(流)、管体真空度、波导气压、管体打火、波导内打火等。当信号超过设定值时就要立即切断高压电源和微波本振源。   当信号数据传输到上位机后,上位机在接受的同时启动数据显示线程与数据存储线程,将信号数据显示在屏幕上和存入MDSplus数据库。
3.2 实时采集与控制程序的实现   整个采集与控制系统分为两个部分,一个是运行在RTLinux下的实时采集与控制程序lhcdget_model.c, 另一个运行在标准的Linux下设备初始化程序lhcdset.c。大部分的工作是在Linux下完成的,这包括(设备的初始化, 动态资源的分配和释放等)。由于RTLinux的任务只能在RTLinux内核态运行,所以把实时采集与控制程序写成模块形式。RTLinux支持多线程模式,因此在编写采集与控制程序采用了多线程模式。总共有两个线程,一个是采集控制线程,一个是实时传输线程。模块中可启动多个任务,每一个实时任务与一个struct RT_TASK相关联。本系统在实时部分只有一个实时任务。   在RTLinux中,每一个实时模块要包括以下两个功能函数: Int init_module(); Void cleanup_module()。   这两个函数相当于面向对象技术中的构造函数和析构函数,分别完成实时任务的参数(优先级别、中断周期等)的设置,进行任务的启动和终止等功能和卸载模块的功能。   启动实时任务前必须进行初始化。init_module()中的初始化工作包括以下三部分: 1.创建三个RT—FIFO,rtf1和rtf2用于采集线程向传输线程发送数据的缓冲。rtf3用于控制参数设定程序向采集与控制程序传送控制参数。创建RT-FIFO相关的函数是rtf_create(),读写RT—FIFO的函数分别为rtf_get()和rtf_put(); 2.创建实时任务对应的两个线程。实时任务的主程序的启动由外部中断触发。中断源为HT-7U总控台传送下来的触发信号。创建实时任务对应的线程的功能函数是pthread_create();撤销实时任务对于线程的函数是:pthread_delete_np (c_thread); 3.创建跟踪rtf3变化的子程序,并设定其调度优先级,由API函数pthread_create来完成;   在调试阶段,需要将有bug的模块卸载。该项工作由cleanup_module()来完成。在卸载模块时将rtf1、rf2和rtf3撤销,并撤销实时任务。 4.小结 基于RTLinux系统的数据采集与控制系统充分利用了硬件中断的实时性,而充分发挥了Linux操作系统的高性能、高可靠性。使得数据实时采集与实时传输能得以兼顾。控制实时性和可靠性完全可以达到了低杂波系统的设计要求。并且Linux的灵活的配置能力使得开发的成本得以大大的降低。
投诉建议

提交

查看更多评论
其他资讯

查看更多

PLC一体机之EK温度修正使用技巧

S7-300CPU存储器介绍及存储卡使用

0.05级超高精度互感器

DC-DC转换器(电源模块)应用指南——外接滤波电容选配

施罗德最小流量阀的应用范围及优点