功能原型系列:算法工程

概览

功能原型系列是引导您完成原型验证过程的文章合集。继续了解关键概念、原型设计的优势、产品选择,以及其他技术资源。

内容

算法工程

算法工程是为应用算法设计而创造的术语。它是指将纸笔算法转变为功能强大、经过良好测试且易于使用的算法实现的过程。在原型中实现算法以提供所需的功能可能是整个产品开发生命周期中最具挑战性的环节,但也有可能最具价值。通过应用真实的I/O,您可以见证自己设计的算法逐步成真。 

本文研究了开发者在设计算法时可能遇到的难点,以及使用图形化系统设计克服这些挑战的优势。

算法工程挑战 

出于多种原因,在功能原型中实现算法一直是个难点:

限制。

通常情况下,为了I/O功能需求而选择的系统或处理器(例如,现场可编程门阵列(FPGA))会给开发人员带来编程难题。在不同的平台上编程需要足够多的编程经验,而擅长多种平台编程的系统设计师少之又少。

基本算法实现。

实现基本功能的低级算法需要耗费时间在原型验证中,速度至关重要。如果设计人员没有现成的代码可用,要从头开始实现每一个最基本的算法,就会陷入困境。

重做多个平台算法。

随着功能原型的发展,很多时候必须重做算法,才能将它们移植到不同类型的系统中。代码几乎无法在不同的运行时环境之间都能正常运作,这使得将应用程序从原型验证扩展至部署变得困难。

测试验证。

直到最后阶段才能确认系统是否符合功能需求,且重新开始代价高昂。例如,处理器无法执行足够多的并行任务。处理器无法达到足够的周期时间。处理器无法实时处理需要大量算力的分析。

算法工程使用图形系统设计优势

图形化系统设计解决了功能原型工程算法中涉及的许多潜在困境问题。图形化系统设计是一种解决设计挑战的方法,融合了直观的图形化编程和灵活的商用现成(COTS)硬件。借助这种方法,您可以在设计的各个阶段使用同一个环境。下面,我们更深入地了解一下图形化系统设计是如何具体解决上述挑战的。

多种计算模型

图形化系统设计的优点之一是,无论程序员使用什么计算模型(MoC)来实现,都能够创建自己的算法。随着算法代码的复杂程度不断提高,程序员不得不使用不同的计算模型来扩展他们的编码能力。以下是可用于图形化系统设计的部分计算模型:

数据流

数据流通常是指NI LabVIEW软件使用的计算模型。使用数据流时,执行运算之前需要开发人员在所有的输入端先输入数据。数据流是一种直观的代码,可轻松实现并行进程等应用。

文本数学

文本数学是另一种可以轻松创建复杂函数的工具。文本数学将复杂的算法用具有一定可读性的方式实现,这些算法采用脚本说明的形式,更易于编写。公式节点和MATLAB脚本节点属于文本数学。通过LabVIEW,无论是开发算法、探究信号处理概念还是分析结果,您都可以选择更有效的算法来开发语法。

C代码

某些情况下算法最初是用C或C++创建的。借助图形化系统设计,之前的工作就不会付诸东流。您可以使用内嵌C节点或调用库函数节点,在LabVIEW中直接调用以前的代码。使用内嵌C节点来处理预存C代码或实现一个小型数字或数组算法,使用调用库函数节点来访问DLL或共享库中的C代码。

详细了解结合使用LabVIEW与Python、MathWorks® MATLAB®软件和C/C++

开放软件架构

多年来,LabVIEW平台在众多的设计领域中得到了广泛的应用,产生了将数据与不同的设计和仿真工具相结合的需求。LabVIEW通过众多的集成工具、库和文件格式完成了这种相互兼容,同时还提供了与大量其他软件工具和测量资源的标准集成,所含如下:

  • DLL,共享库
  • ActiveX、COM、.NET (Microsoft)
  • DDE、TCP/IP、UDP、以太网、蓝牙
  • CAN、DeviceNet、Modbus、OPC
  • USB、IEEE 1394、RS232/485、GPIB
  • 数据库(ADO、SQL等)

使用这些工具,可以实现几乎所有类型的测量和控制设备的数据集成。通过将LabVIEW与硬件通信的通用标准相结合,开发人员可以确保未来多年的兼容性和可扩展性。

LabVIEW方法

LabVIEW中的数百种函数涵盖了数学、信号处理、概率和控制方面的众多传统算法,是所有自定义算法的基本构成要素。这些函数减轻了编写低级代码的负担,使工程师有时间专注于解决方案本身而不是实现过程。

由于使用LabVIEW使获取真实世界的数据变得如此简单,用户发现用实际数据测试算法非常有价值,这是一种反复调整算法的方法。通过这种交互式的测试方法,您可以试验不同的函数,看看它们是否能提供所需的预期结果。例如,当用滤波器处理信号时,您可以从各种各样的解决方案中进行选择,采集所需要的实际信号,并在图表或文件中查看结果。如果结果不适用于该应用,可以选择另一个滤波器。通常情况下,采集实际信号来应用于算法,然后花时间在软件上进行仿真,是相对简单的任务。

 

商用现成硬件

商用现成硬件不仅提供了一种经济有效的方法来快速开始原型验证,而且通过图形化系统设计,可帮助您在具有集成I/O的多种终端上实现原生算法。使用NI CompactRIOPXI平台上的实时处理器,将I/O与确定性控制相集成,提高可靠性。这在硬件在环应用等情况下至关重要,因为您需要将硬件和软件紧密集成,从而动态仿真控制算法试图控制的环境。

除了使用FPGA实时处理器之外,您还可以将LabVIEW集成到应用程序中,将代码从一种类型的COTS硬件传输到另一种类型的COTS硬件。例如,您可以传输在桌面上分析实际I/O信号的代码,将其用于PXI模块或其他嵌入式处理器,无需进行大量重写。事实上,首先在台式机上设计和验证原型,然后将其传输至32位处理器以部署到嵌入式系统中,可大大节省开发时间,并避免因设计约束而导致的高成本返工。

仿真控制设计工具

由于LabVIEW是一个开放平台,您可将测量数据与仿真结果进行对比。您甚至可以互换仿真数据和物理数据进行行为建模。此外,您还可以使用仿真激励来推进物理测试,以提供稳健的测试环境。

通过LabVIEW仿真,验证和预测性能是否符合设计标准。您可以将设计导入独立的仿真工具,以便进行早期设计评估。下一步涉及自动化布局或模型形成,以及自动化构建过程的工具。保存系统状态信息和输出信号(如适用)有助于调试应用程序并保证程序的性能。

使用LabVIEW控制设计与仿真模块中的控制程序框图,设计线性、非线性、离散或连续控制系统。借助这种抽象的编程风格,您可以使用传递函数模块、积分器、微分器和反馈循环等传统控制概念进行编程。使用该高级程序框图,您可以从概念层面开发解决方案,借鉴您之前对系统的经验和知识。

图1.控制设计和仿真的PID控制

 下一步

设计实现原型功能的算法是一个具有挑战性的过程。图形化系统设计是一种利用直观图形软件和硬件之间紧密集成的方法,可帮助您克服与算法工程相关的挑战,从而以较低的成本快速启动和运行原型。

如需详细了解从纸面设计转换为软件设计的详细信息,请参阅下方的相关资源。