引言
在可执行代码中实现一个算法的最有效方式是什么?当新的项目增加了工程设计的复杂度,而这一复杂度与最终实现所需的工程工作量之间的鸿沟扩大时,该问题变得与工程人员更为相关。加州大学伯克利分校利用“计算模型(MoC)”概念解答了这一问题。我们将探究NILabVIEW平台所提供的一些不同MoC,以及开发人员如何在不同的执行目标平台(包括台式机PC、实时系统、嵌入式微处理器和现场可编程门阵列(FPGA)上使用这些模型。
数据流
LabVIEW或许因数据流MoC最为著称。对于数据流,一项操作要求开发人员在其执行前在所有的输入中插入数据。必须满足这一条件以执行代码。
图1。数据流执行——在乘法操作前实现加法操作。
数据流编程本质上是直观的,因为它与人类的思维相仿。其他的优势还包括能够方便地实现和并行化代码。该数据流MoC是该LabVIEW平台的基础,它不需要使用任何额外的模块或工具集。
数学文本公式
在设计阶段,描述一项算法的最佳工具经常是高层次的数学函数。该数学模型的优势在于非常易于人们解读,以及利用定义的复杂函数通过脚本来解释执行的顺序。
图2。采用数学文本公式实现巴特沃思滤波器
开发人员可以通过新推出的LabVIEW 2009数学脚本RT模块(该模块同时与Windows和实时目标平台相兼容),在LabVIEW平台内实现数学文本公式。
ODE建模
开发人员在需要表达一组耦合的微分方程与代数方程时,常常使用常微分方程(ODE)建模,也称为连续时间建模。为实现该MoC,开发人员采用ODE解析算子数值求解微分方程。现今,LabVIEW 2009控制设计与仿真模块通过一种成为控制与仿真循环的结构增加了ODE技术。
图3。通过ODE构建组块表示的弹簧-质量阻尼系统
状态图
状态图将算法表示为一系列的状态,这使其在表示具有有限个不同工作状态的软件系统(如一个通信协议或控制系统)时尤为有用。状态间的通信通过状态转移实现。这些状态转移具有控制每个状态间执行的约束条件。
图4。LabVIEW状态图开发环境
状态与状态转移为开发人员实现了抽象的底层细节,从而为他们提供了一个用于创建自述文件与可扩展设计的系统层次视角。利用该LabVIEW状态图模块,开发人员可以构建基于UML规范的状态图,以运行于台式机、FPGA和嵌入式目标平台之上。
中断驱动式编程
在中断驱动式系统中,通过软件设计,使得当接受到一个注册事件(如一个定时器)时,激发一个响应以响应该事件。任意一个中断式系统都具有两个要素:中断与中断处理程序。一个中断是一种由硬件生成的信号,它表明一事件已发生并应当中止当前正在执行的程序。中断处理程序(也称为中断服务程序)是指通过向处理器注册以便在某个中断发生时被执行的一部分代码。一旦该处理器察觉一个中断,它挂起当前正在执行的进程,执行上下文切换以保存该系统的状态,并执行中断处理程序。一旦该中断处理程序的代码执行完成,该处理器将控制权交还先前在运行的程序。
在中断驱动式编程模式下,开发人员可以实现利用最少的处理器开销快速响应同步事件或异步事件的高效率代码。
利用LabVIEW,开发人员可以编程实现基于其系统内所发生事件的响应和定时循环的执行。LabVIEW FPGA中断可以通过响应该中断的LabVIEW实时模块进行触发。
在LabVIEW中创建中断的另一个方法便是通过面向ARM微控制器的NI LabVIEW嵌入式模块使用中断管理器。开发人员可以利用VI和定时循环,响应定时器和数字输入等中断。
图5。利用面向ARM微控制器的LabVIEW嵌入式模块进行中断管理
C代码
C语言是一种程序式编程语言,这意味着一项程序必须采取一组步骤序列才可以到达一个期望状态。编程人员必须定义一定数量的步骤以达成一个设定目标。C语言还添加了调用子程序或函数的功能,这支持代码复用、模块性和可维护性。
C代码可以多种方式供使用,纯文本或编译后的二进制文件。LabVIEW提供了多种将C代码包含在LabVIEW应用中的方式:
调用库节点——节点可与一个C函数库相连接,呈现其C接口以供与LabVIEW协同使用
与LabVIEW FPGA的C接口——开发人员可以利用C在台式机、PXI和NI CompactRIO系统上实现与LabVIEW FPGA的通信
联机C节点——在ARM和Blackfin处理器等LabVIEW微处理器目标平台上,C代码可以直接集成入LabVIEW,以便开发人员可以采用已有的以C语言编写的IP。
图6。通过联机C节点将C代码集成入LabVIEW
案例研究——带刷直流电机控制
MoC并不是互斥的,所以开发人员可以将其组合以有效描述一个问题或实现一个解决方案。例如,考虑下面的带刷直流电机控制应用,其中,一个PWM信号控制该电机的旋转速率。
图7展示了该系统的最终实现。C代码与ODE建模的组合描述了该直流电机的动态特性,而数据流则表示了驱动该PWM电压信号对该电机进行控制的逻辑。然后,它们被利用ODE再次组合,以验证控制性能并进行必要的调节。
图7。组合多个MoC以表示带刷直流电机控制