基于 RTX和 Lab VIEW的实时测控系统
- 格式:doc
- 大小:188.50 KB
- 文档页数:6
基于RTX和Lab VIEW的实时测控系统
0 引言
Windows操作系统以其友好的用户界面,强大的功能, 便捷的操作以及广泛的应用前景受到普遍的欢迎。
然而Windows由于其线程优先级太少,隐含的不确定的线程调度机制以及优先级倒置等原因, 限制了它在实时测控方面的应用。
针对Windows的不足,为了增强Windows的实时性,美国Ardence公司研发了RTX(Real Time eXtention for Windows),其在Windows平台上提供了一个实时子系统RTSS。
RTX实现了确定性的实时线程调度、实时环境和与原始Windo ws环境之间的进程间通讯机制以及其他只在特定的实时操作系统中才有的对Windo ws系统的扩展特性。
LabVIEW ( Laboratory Virtual Instrument Engieering Workbench)是一种高效图形化应用开发环境, 凭借其简单易用的图形化开发方式和灵活强大的编程语言的优势正被应用到全世界各个领域中。
越来越多测控系统选择LabVIEW 做为开发平台。
将RTX和LabVIEW结合起来开多任务实时系统, 弥补LabVIEW在实时性方面的不足, 从而可将RTX+LabVIEW 应用到多任务实时测控系统中。
1 RTX简介
RTX为Windows系统添加了一个实时子系统RTSS(如图1), 它支持自己的执行环境和API , RTX使用Windows系统的调度策略, 对自己的实时线程进行严格调度管理; 同时, RTX线程(包括中断服务、延迟调用)总是优先于Windows线程取得调度权。
通过扩展的HAL, RTX有着自己的中断管理机制,而且能够直接访问IPO硬件端口。
所有这些机制都保证RTX线程始终占据优先权, 不会被Windows线程阻塞, 而且可以通过端口的控制实现设备驱动程序的功能, 直接对目标设备进行控制。
RTX在自身环境下对所有线程执行抢占的实时调度,支持着128个优先级,严格控制各个优先级线程间的切换。
旗下的所有线程都运行在非分页内存池内,确保对事件的敏捷响应。
在通信和同步机制方面, RTX通过共享内存与Win32进行数据交换, 通过事件,临界区等机制进行同步控制。
这样既可利用原有系统的资源, 又可以在实时环境下进行高精度的实时控制。
RTX提供与W i n32环境兼容的实时编程接口, 支持Win32的API , 实现了一套实时函数的扩展, 提供给开发者广阔的应用空间。
2 LabVIEW简介
LabV IEW是美国NI公司开发的虚拟仪器开发平台, 也是一种功能强大的编程语言。
该开发环境具有一系列优点,从流程式的编程、不需预先编译就存在语法检查、调试过程使用的数据探针, 到其丰富的函数功能、数值分析、信号处理和设备驱动等功能, 都令人称道。
LabV IEW具有强大的外部接口能力,可以实现LabVIEW
与外部的应用软件、C语言、W indows API、Matlab等编程语言之间的通信。
在LabVIEW 中可以用的外部接口包括: DDECI N、DLL等。
合理的使用这些接口, 充分利用其他软件的功能, 弥补LabVIEW自身的不足。
CI N (Code Interface no de)技术是LabVIEW中调用C 源代码的通用方法。
LabVIEW 通过与C语言接口, 可大大提高其整体功能。
3 系统的构成
3 . 1 系统的硬件
以RAC K - 360工业PC机为硬件平台, 系统的硬件部分包括三块模板(模拟量输入/输出模板、开关量输入/输出模板和定时器/计数器模板)和实验箱。
实验箱中模拟的控制
对象包括8个开关量、16个模拟量、一个步进电动机控制子系统、一个直流电动机控制子系统以及作为输出显示的16个LED和一个LCD。
3 . 2 系统的任务构成
我们利用实验室现有的硬件设备, 完成一套多任务实时测控系统, 用来模拟一个小型电站中各种监测量的采集、处理和控制。
系统中包括以下一些任务:
1)周期任务每100ms对十六个模拟量采集一次; 每4m对八个开关量采集一次;每250ms对直流电机的转速采集一次; 每500ms对温度采集一次。
因为后两个系统的惯性比较大, 所以对实时性的要求不是太高;
2)控制任务根据对直流电机和温度测控系统的采样, 来对系统进行调节以保持其转速和温度在一个适当的范围内;
3)动态显示任务对整个系统的各种数据实现动态的显示, 便于管理者掌握系统的状态。
动态显示对系统资源的消耗较大。
4 系统的软件
系统软件由两部分组成, 一是运行在RTSS下的实时任务, 二是运行在Win32下的非实时任务。
实时任务由RTS控制, 完成信号的数据采集,步进电机和直流电机的控制。
非实时任务运行于W i n32下, 完成数据的显示和整点制表任务。
这里我们采用LabVIEW 作为非实时任务的开发平台。
实时任务和非实时任务的通信是通过共享内存来实现的。
在这里要用LabV I EW 的CI N接点, 通过调用外部代码来实现LabV I EW 对共享内存的读写。
根据系统中任务对实时性的要求,对以上任务做如下划分:
1)实时任务部分。
实时任务运行于RTSS下, 包括对开关量和模拟量的采集和处理、测量直流电动机的转速并做出调整、对温度测控子系统的温度值采样并据此控制步进电动机正转或反转等周期性任务。
这些任务是要求严格保证实时的, 故此放在实时程序中完成。
在RTSS环境下, 通过它提供的API直接对端口读写来控制硬件, 每一个任对应一个优先级。
RTSS根据每个任务的优先级实时调度它们。
2)用户程序部分。
各个采集量在屏幕上的显示、直流电动机速度显示、步进电动机运行显示以及北京时间在屏幕上的显示等任务。
这些任务属于软实时性的, 所以划分在用户程序部
分。
用户界面是用LabVIEW编程实现的。
用户使用图形方式来监视与实时部分的交互。
4 . 1 实时任务和用户程序及其通信
运行于RTSS下的实时任务和运行于Win32下的用户程序通过共享内存实现通信, 并且通过事件,临界区等机制进行同步控制。
在主程序中, 首先创建共享内存区,以及用于同步控制的事件( Event)。
每个实时任务对应一个事件,每个事件设置为自动重置。
图2( a)为主程序流程图。
实时任务完成预定的任务后将检测事件状态是否就绪,如果就绪那么就把数据写入共享内存中,程序退出前要将事件置为激发态。
图2( b)为实时任务流程图。
用户程序部分是在LabV IEW环境下通过编写标准的VI程序实现的。
在此调用CI N接点,来调用外部代码来实现对共享内存的读写。
为了更好的满足实时性的要求,将运行于Windows下的用户程序的优先级设为AboveNormal 。
图2(c)为CI N所调用的外部代码流程图。
4 . 2 CI N节点的调用
CI N节点是位于LabV IE W框图程序窗口中的一个功能节点。
用户可以将需要的外部
代码编译成LabV IE W 识别的格式后与此节点相连,当此节点执行时, LabVIEW将自动调用与此节点相关的外部代码, 并向CIN传递特定的数据结构。
首先创建一个空CI N节点,然后创建相应的输入输出端口, 创建. c文件。
接着编辑. c 文件, 在其中要调用相关的API ,来实现对共享内存的读写, 同时也应该注意数据结构的变换, 将得到的数据变换成LabVIEW 能识别的结构。
下一步创建. lsb文件, 该文件是LabVIEW 能
够调用的文件,在创建过程中首先利用V i sual C++集成环境创建DLL文件,然后利用CINTools工具将编译好的DLL文件转换成. l sb文件。
最后将得到的. lsb文件加载到CI N 节点中。
这样, LabVIEW就可以实现对共享内存的读写。
4 . 3 用户界面的制作
LabVIEW提供了许多漂亮的控件, 用户可以直接调用,然后根据自己的需要就可以做出十分合适的界面。
采用LabVIEW不仅可以节省开发时间, 而且能做出十分友好的用户界面。
5 结语
利用RTX提供的工具可以测得RTSS和W i n32下的线程转换延迟时间, 定时器响应延迟时间以及特定的API运行时间。
表1为运行于RTSS下的线程切换时间和定时器响应延迟时间。
由表中数据可以看出运行于RTSS下的任务能很好的满足实时性的要求。
Window作为通用操作系统在实时性方面存在不足, 利用RTX增强了系统的实时性, 并把该系统用于控制一个多任务实时测控系统。
该系统的实时部分运行于RTSS子系统下, 而用户程序作为非实时部分运行于Win32系统下。
用户程序采用LabVIEW 编写,通过共享内存实现了用户程序和实时部分的通信。
该多任务实时测控系统, 在实时部分节省了对硬件的投资,并且达到了理想的运行效果。
采用LabVIEW 做为用户程序的开发工具,一方面节省了开发时间,并能做出漂亮友好的人机界面,同时LabVIEW有着强大的网络功能以及便
捷的数据处理功能, 大大节省了后续程序开发时间。