第一章
CompactRIO软件架构
几乎所有的CompactRIO系统都至少有三个顶层VIs在三个不同的目标上异步执行:FPGA、实时操作系统(RTOS)和主机PC。如果开始软件开发时没有某种架构或流程图可供参考,那么可能会发现跟踪所有软件组件和通信路径是具有挑战性的。拥有一个在高层次上描述所有系统部分的图有助于指导开发和与相关人员沟通设计。本节描述了几种常见的CompactRIO体系结构,可以将它们用作许多应用程序的起点。还可以使用它们作为创建自己的体系结构的指南。以下章节中的示例体系结构是使用一个名为yEd Graph Editor的基于矢量的绘图程序创建的,这是一个可以从yworks.com下载的免费设计工具。
CompactRIO参考架构
CompactRIO系统架构应该提供系统的基本概述。基本内容包括过程和数据通信路径。如前所述,进程是一个独立的、异步执行的代码段——基本上是一个循环。本文中引用的体系结构包括由黄色框表示的进程,由蓝色框表示的进程执行的硬件目标,以及由黑色箭头表示的数据通信路径。当使用扫描模式或混合模式对CompactRIO设备进行编程时,使用可选的RIO扫描接口进程。RIO描接口包含在LabVIEW实时引擎中,因此可以在LabVIEW实时开发环境中访问I/O通道作为变量。
图1.1 CompactRIO架构的基本组件
流程
确定应用程序流程的第一步是创建应用程序需要完成的任务列表。常见的任务包括PID控制、数据记录、与人机界面的通信、与I/O的通信以及安全逻辑或故障处理。下一步是决定如何将任务划分为流程。具有大量进程的应用程序需要在进程间数据通信上花费更多时间。同时,将任务分解为单独的进程会使程序更具可伸缩性。例如,在项目的第一阶段,可能有一个实时应用程序,该应用程序通过网络与用LabVIEW构建的用户界面(UI)通信,但稍后该应用程序需要与Web浏览器通信。如果将网络通信任务与应用程序中的其他任务分开,则可以重新设计网络通信过程,而不会影响控制过程。更多关于在LabVIEW实时中设计过程的信息可以在第3章:设计一个LabVIEW实时应用程序中找到。
数据通信
一旦绘制了流程图,下一步就是确定数据通信路径。数据通信是设计嵌入式系统时需要考虑的重要因素之一。LabVIEW、LabVIEW Real-Time和LabVIEW FPGA包括许多不同的机制,用于在单个目标上的进程之间传输数据,以及跨目标通信的进程。
图1.2 数据通信是设计嵌入式系统时最重要的因素之一。
选择数据通信机制取决于几个因素,其中最主要的因素是数据通信模型。大多数CompactRIO应用程序可以包含以下列出的至少两种或更多的数据通信模型:
■消息/命令
■当前值(标签)
■流
每个模型都有不同的数据传输需求。这些模型既适用于进程间通信,也适用于目标间通信。后面的章节在推荐LabVIEW机制用于Windows目标、实时目标或FPGA目标上的进程之间的数据传输时,除了CompactRIO设备和主机PC之间的通信外,还会参考这些数据通信类型。
消息/命令
基于命令或消息的通信发生的频率相对较低,并且由某些特定事件触发。一个例子是用户在人机界面上按下一个按钮来停止传送带。在基于消息的通信中,确保及时或低延迟地传递消息是很重要的。在前面的例子中,当操作员按下停止按钮时,操作员期望立即得到响应(人类对“立即”的感知是在十分之一秒的数量级上)。通常需要将进程与传入消息或命令同步,以节省处理器资源。这涉及到阻塞,直到接收到消息或发生超时。
当前值(标签)
标签用于在进程之间或从控制器到HMI之间定期通信的当前值。标签通常用于表示过程变量,例如控制系统的设定值或当前温度数据。标签通常被绑定到高通道数系统(如机器控制器)中的I/O通道。对于当前值数据或标签,不需要保证每次数据传输,因为控制器或HMI总是对最新值感兴趣,而不是历史值。由于标记通常与高通道数相关联,因此通常希望具有可用于动态查找标记和管理不同组的特性。
流
流通信是缓存的,涉及每个数据点的高吞吐量传输,吞吐量比延迟更重要。通常,一个进程将数据写入另一个进程,后者读取、显示或处理该数据。一个例子是车载数据记录器,它将数据从FPGA发送到RTOS进行数据记录。流通常需要多层缓存,在此期间,每端(发送方和接收方)都有自己唯一大小的缓存区。当有一个想要一次读取大块数据的处理器循环和一个想要以较短的间隔写入较小数据块的DAQ循环时,这是理想的。表1.1总结了不同类型的数据通信模型及其特点。在选择数据通信模型时,请记住这些特性。
表1.1。数据通信模型综述
典型的CompactRIO架构
图1.3显示了一个通用的体系结构,可以将其用作大多数控制和监视应用程序的起点。主机VI提供了一个基于事件的用户界面,因此操作员可以与嵌入式系统进行交互。RTOS执行高级控制,FPGA执行低级控制。
有两条网络通信路径:一条用于从用户界面向CompactRIO硬件发送命令,另一条用于从CompactRIO硬件向用户界面发送标签(当前值数据)以进行显示。要构建灵活的应用程序,可以采用这种系统结构,使其具有单个命令解析器任务,开发人员可以使用该任务根据需要解释和重新分发命令。这确保了正在进行的关键任务不会因命令的到来而受到干扰,并使修改代码以处理其他命令变得容易。
图1.3 通用软件体系结构RTOS_Main上的控制和监控应用。
在RTOS_Main.vi中,将通信任务和控制任务设计为两个独立的循环。这通常是一种很好的做法,因为如果任务在单个循环中执行,网络通信可能会影响控制算法的确定性。此外,模块化使模拟系统的各个部分变得更加容易。例如,可以很容易地将实际控制回路替换为模拟控制回路,以测试网络通信。
通用变体架构
控制和监视体系结构对于大多数应用程序来说都是一个很好的起点,但是如果想要设计嵌入式数据记录器、嵌入式监视系统或监控和数据采集(SCADA)系统,则可以在下面的部分中利用专用的应用程序的体系结构。
无头数据记录仪
无头CompactRIO系统不需要在远程机器上运行用户界面。在无头数据记录器的情况下,远程计算机可能用于检索包含来自FTP服务器的记录数据的文件。在该体系结构中,FPGA执行底层控制,同时高速获取NI C系列I/O模块的数据。这些数据从FPGA流到RTOS,在那里它可以被记录到板载内存。FPGA通信进程与日志引擎进程分开,以最大限度地提高读取数据的速率
图1.4 无头数据记录器架构
嵌入式监控
嵌入式监控应用,通常需要数据以高速率从C系列I/O模块以流式传输到主机用户界面,在那里数据显示给操作员。用户界面还允许操作员配置硬件,这需要一种将命令从主机发送到RTOS的机制
图1.5 嵌入式监控架构
监控和数据采集(SCADA)架构
在典型的SCADA应用程序中,CompactRIO设备将I/O通道作为标签与监控器通信。一些控制可以在FPGA或RTOS上实现。通常可以使用RIO Scan Interface来处理这些类型的应用程序的I/O,因为它们不需要高速的DAQ速率或定制的硬件。使用LabVIEW数据记录和监控(DSC)模块,可以扩展SCADA系统的软件功能,包括将数据记录到历史数据库,设置警报和管理事件的能力。LabVIEW DSC还支持常用的工业协议,包括用于过程控制的OLE (OPC),因此LabVIEW可以与第三方可编程逻辑控制器(PLC)通信。
图1.6 SCADA架构
示例-涡轮测试系统:本节提供LabVIEW示例代码。
涡轮机测试系统的一个示例演示了图1.3中的控制和监控架构如何应用于实际应用。涡轮机是一种旋转发动机,通过使带叶片的转子旋转,将风、水或蒸汽动力的动能转化为机械能。叶片转动连接到发电机的轴,如图1.7所示。发电机转动时发电。
图1.7 一种常见的涡轮机是风力涡轮机。
本例中使用的涡轮测试系统软件要求如下:
■使用模拟PWM信号控制涡轮转速
■使用转速表监测涡轮机的每分钟转数(rpm)
■触发可用于分析的有限采集
■计算并显示加速度计数据的频率
■在测试过程中监测温度,防止涡轮机过热
■显示温度,转速表速度(rpm),加速度计数据,加速度计数据的频率到UI
为了创建涡轮测试系统的体系结构,从图1.8所示的控制和监控体系结构开始
图1.8 用于控制和监视应用的通用软件体系结构
该应用程序以混合模式实现,同时使用RIO扫描接口和LabVIEW FPGA模块。
■涡轮转速控制-该回路产生PWM信号,根据从LabVIEW Real-Time VI通信的占空比(%)和周期(mS)控制涡轮转速。
■加速度计和转速计采集-该回路接收启动触发器并从转速计和加速度计获取数据,直到达到指定的样本数量。它还使用DMA先进先出(FIFO)内存缓冲区将传感器数据流式传输到LabVIEW实时VI。RIO扫描接口用于温度监测,频率为10hz
LabVIEWReal-Time VI有四个并行运行的任务。数据采集和分析任务使用定时循环,其他三个任务使用While循环。在LabVIEW Real-Time中,定时循环用于实现高优先级任务,While循环用于实现正常优先级任务。有关何时使用定时循环与While循环的更多信息,请参见第3章:设计LabVIEW实时应用程序。
■数据采集和分析(高优先级)-该回路与LabVIEW FPGA VI中的加速度计和转速计采集回路通信。它发送一个触发器开始有限采集,从DMA FIFO检索加速度计数据,并将收集和分析的数据发送到用户界面进行显示。它还检索转速表数据,并将其转换为每分钟转数。
■涡轮PWM特性-该回路监测温度,如果温度高于最大限制,则关闭涡轮机。
■Message Handler——此循环接收UI命令并将其分发到适当的实时或FPGA进程。
■命令解析器——此循环使用网络流通过以太网接收来自用户界面的命令。命令被放置到队列中,并发送到Message Handler循环进行分发。用户界面VI在Windows机器上运行,允许用户查看数据并与CompactRIO系统进行交互。
■UI事件处理——这个进程用事件结构处理用户事件,比如“停止”和“触发获取”。
■命令发送——这个进程使用网络流将从UI事件处理程序接收到的任何命令发送到CompactRIO控制器。
■UI更新-此过程接收最新的温度值,加速度计值,加速度计值频率,和转速表速度,并显示到用户界面。
图1.9 涡轮测试应用程序的CompactRIO架构
要查看实际的涡轮机测试应用程序,请从第1节下载涡轮机测试示例。第三章:LabVIEW实时应用程序的设计详细介绍了应用程序中的实时VI。
除了涡轮机测试示例之外,LabVIEW 2012及以后版本还包括几个类似于本文中讨论的架构,可以将其用作应用程序的起点。这些架构被称为CompactRIO样例项目,它们列在下面。
■ LabVIEW FPGA Control Sample Project
■ LabVIEW Real-Time Control Sample Project
■ LabVIEW FPGA Waveform Acquisition andData Logging Sample Project
■ LabVIEW Real-Time Sequencer SampleProject (LabVIEW 2013 and later)
■ LabVIEW Supervisory Control and DataAcquisition Sample Project (LabVIEW 2013 and later)。
有关使用这些示例项目的更多信息,请参见第13章:使用LabVIEW For CompactRIO示例项目