创建功能原型7步骤

概览

为什么要创建功能原型?据《嵌入式软件开发问题与挑战》(2003年7月)中所述,近50%的设计推迟了产品的上市时间或者根本无法进入市场,而近30%的设计在发布后并未获得成功。显然,产品设计流程困难重重。

本文探讨了实现成功的功能原型所应遵循的7个步骤。

内容

什么功能原型?

功能原型是产品的交互式可测试模型,能够像硬件或软件成品一样进行操作或仿真操作。设计师和工程师可在生产开始前通过测试功能原型识别问题,以避免在制造过程中或产品发布后修复问题,从而节省时间和成本。

图纸设计过渡软件设计

图纸设计重要性

在对新设备有了令人兴奋的创新想法后,您可能会想完全跳过图纸设计,直接开始构建物理原型。从长远来看,抑制住这种冲动能为您节省时间,避免浪费精力。您在图纸设计上投入了时间,以后会获得丰厚回报,并且有助于规避设计过程中的许多常见陷阱。图纸设计并不意味着要用笔在纸上绘出原型的详细设计。它是指在进行软件编码或硬件设计之前制定一个计划。 图纸设计具有一些优势,包括:将想法从头脑中转移到纸上,避免亡羊补牢,以及尽早获得客户反馈。

明确要求

如何将一个出色的想法和一张草图变成详细的图纸设计?第一步是通过列出用户要求清单来明确目标。这些要求应尽可能具体。在这个早期阶段,研究至关重要,可确保您能满足所列出的要求。您的设计是否可行?它是否能够实际满足您的要求?务必区分对设计的需求和期望。作为一名创新者,您可能想在原型中添加一些先进但并非完全必要的功能。了解自己的目标并坚持。

根据要求抽象组件

借助抽象,您可以描述一个应用程序,而不需要定义如何编写该应用程序。抽象可以高度概括出应用程序。抽象的2个主要类型为过程抽象和数据抽象。过程抽象将程序所完成的任务与程序的实现方式区分开来。数据抽象将要存储的数据与存储数据的物理手段区分开来。摘选出系统要求文档中的关键动、名词有助于实现抽象。从这些动词和名词中,您可以确定程序需要完成的任务,以及将用于组成用户界面的对象。这些动词和名词还可以帮助您确定完成原型所需的硬件组件。

流程图

在根据设备要求收集到一套抽象组件后,就可以使用流程图将抽象组件转为软件设计。流程图通过将应用程序划分为更易于管理的部分,有助于更好地理解应用程序流程。LabVIEW是一个图形化的编程开发环境,经过精心设计,可提高工程师和科学家的工作效率,是将图纸设计快速转换为代码的理想工具。由于LabVIEW的程序框图与流程图类似,从流程图到软件代码的转换过程可迅速实现。

图1: 在这张关于血压监测仪的流程图、状态图和状态机的图片中,请注意状态图中定义的5个状态在状态机中得到了实现。

状态图

状态图是一种特别的流程图类型,用于指示程序状态及状态间的转换。每个状态都满足某种条件,执行某项操作或等待某个事件。状态之间的转换是使程序进入下一个状态的条件、操作或事件。状态图对原型验证很有用,因为几乎所有的嵌入式系统都使用状态架构。也就是说,它们的设计理念是原型始终处于一个特定的状态,即便空闲,也是一种状态。

在LabVIEW中,状态机由条件结构、While循环和移位寄存器组成。初始条件在循环外指定。状态图中的每个状态都对应于条件结构中的一个条件分支。每个条件分支都包含实现一个状态的代码和定义过渡到其他条件分支的逻辑。借助这种架构,能够通过向状态机添加更多条件分支和逻辑来扩展应用程序。

用户界面进行原型验证

通常情况下,对用户界面(UI)进行原型验证的理想时机是将图纸设计向软件过渡的时候。对UI进行原型验证可以帮助您在过渡过程中思考设计架构和应用要求。有时更重要的是,它为潜在的客户和投资者提供了设备功能的实际演示。原型越复杂,UI原型在为设计提供支持和收集反馈方面就越有价值。总之,它构建了一个大框架,原型设计师在设计功能和向原型添加功能时可以围绕这个框架进行。这些UI原型验证具有许多优势,可以节省成本,减少开发时间,并最终开发出更好的产品。

图2: 基于LabVIEW设计的UI(从UI兴趣小组获得代码。)

LabVIEW具备内置的前面板,使其成为快速开发高度自定义UI的理想工具。LabVIEW有助于在紧张的设计和原型验证周期中轻松地添加功能,从而在迭代设计的过程中更大限度地减少返工。借助LabVIEW,您可以对UI快速进行原型验证,在原型验证过程中对其进行修改,甚至将其部署到成品中。

创建模型

使用LabVIEW,您可以在编写一行代码,甚至最终确定应用程序架构之前,创建所有需要的输入和输出并设计一个前面板。这种UI模型有助于确定哪些输入和输出是真正需要的,可以用它来完善要求文档。

图3: 基于LabVIEW创建的UI模型

添加功能

UI原型验证的下一步是为模型添加功能,使用户能够与前面板交互,单击菜单,调整控件,并根据样本数据集或随机数生成查看结果。这种方法的优势在于,在对UI进行原型验证的同时,也定义了软件的设计结构。如果这两方面都能出色完成,就可以在此结构的基础上构建原型验证流程的其他步骤。

创建虚拟原型

虚拟原型验证是将机械建模和仿真与控制设计相结合的一种创新方法,可提高嵌入式控制系统和设备的设计与原型验证效率。通过虚拟原型验证,您可以将软件设计和控制算法与三维CAD机械模型联系起来,甚至在构建首个物理原型前,就可以测试系统的机制。

图4: 虚拟原型验证方法

虚拟原型验证必要性

虚拟原型验证通过提高对客户需求的理解,加快设计速度和简化调试,降低了机器设计的相关风险。如果没有虚拟原型验证,您必须先构建整个物理原型,然后才能获得客户对产品运行的切实反馈。而通过使用虚拟原型验证,您可以向客户展示机器机制的数字表示,在实际制造机器前更快地获得反馈。这可以确保客户参与到设计流程中来,提高客户参与度,避免长时间等待,到原型验证流程后期才收到客户反馈。

此外,您可以通过创建虚拟原型来缩短产品上市时间。这种类型的原型可以帮助您概念化和迭代虚拟设计,这样当您开始构建物理原型时,一次即可正确完成。由于能够将控制软件与三维CAD模型相连接,您可以发现并解决在构建物理原型之前通常不会发现的问题。您可以编写运动控制代码(如二维和三维运动控制配置文件),并在三维模型中查看代码结果。如果组件太大,可能会造成冲突,或者如果您想了解等高线移动和线性移动之间的区别,可以通过虚拟原型验证修复问题或查看区别。与传统的设计方法相比,虚拟原型验证可以帮助您在设计流程初期做出关键的设计决策。

NI助力进行虚拟原型验证优势

您可使用LabVIEW仿真任何机械系统。您可借助LabVIEW Control Design and Simulation模块分析开环模型行为、设计闭环控制器、仿真在线和离线系统并进行物理实现。

图5:LabVIEW Control Design and Simulation工具


您可以使用传递函数、状态空间或零点-极点-增益表示法根据第一原理创建模型。此外,您还可以使用时间和频率分析工具(如时间步长响应或波特图),交互式地分析这些模型的开环和闭环行为。对于多输入多输出(MIMO)和单输入单输出(SISO)系统,使用内置工具,并利用仿真功能来验证线性和非线性系统的动态。您还可以使用内置工具将在The MathWorks, Inc.Simulink®软件中开发的模型转换到LabVIEW中操作。

原型添加I/O

向原型添加I/O是创建真正的功能系统的关键。通过增加传感器输入和控制输出,您可以证明设计的有效性,并且可以在现实世界中实现。绘制图纸设计,在软件中实现该设计,甚至在虚拟环境中仿真该设计,在很大程度上仍然是概念性操作。为了向持怀疑态度的投资者证明设计的价值,您需要一个实际存在且可与现实世界交互的功能性设计。原型验证操作的数据还可以帮助您与客户和设计团队的其他成员一起,根据实际的性能情况来完善功能要求。

从零开始,将传感器集成到系统中并从中获取有意义的数据虽然需要的知识水平不高,但却是一种常常无法预料的时间和资源支出。传统传感器集成的自定义性意味着每次设计变更都要进行成本高昂的返工。而设计变更往往很常见,尤其是在涉及到传感器的问题时,因为理解产品规范以确保其符合原型的需求本身就非常具有挑战性。

向原型添加I/O可能是一项艰巨的任务。这往往是原型验证流程中的症结所在,因为很难预测构造一个自定义I/O解决方案所需的时间和资源总成本。

克服I/O原型验证中的传统难题需要转变方法范式,对于需要高效地进行设备原型验证但可能没有专门资源来克服低级传感器接口问题的领域专家来说,尤为如此。

NI工具通过在集成硬件和直观的图形化软件、可重配置的I/O设备以及成功所需的必要IP和支持系统方面提供这种范式转变,可帮助您克服这些阻碍。

 

图6: 通过结合CompactRIO和具有内置信号调理功能的模块化热插拔C系列I/O模块,您可以快速向原型添加I/O。

若成功地将传感器输入和控制输出集成到功能原型中,便在部署和大规模生产的道路上迈出了一大步。这一步可以证明,您已经克服了产品设计流程中的一些巨大挑战。

设计算法

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

出于多种原因,在功能原型中实现算法可能十分困难:

编程限制 - 通常情况下,因I/O功能(如FPGA)而选择的控制系统或处理器会遇到开发人员的编程限制问题。为不同平台进行编程通常都需要一定的编程知识,而具备这些知识的系统级设计师很少。

基本算法实现 - 实现基本功能的低级算法需要一定时间。 在原型验证中,速度至关重要。由于缺乏现有代码,若设计师从头开始实现知名算法时陷入困境,他们往往会负担不起。

为多个平台重建算法 - 随着功能原型的演变,经常需要重新审视算法,以便将其移植到不同类型的系统中。代码几乎无法在不同的运行时环境之间均可正常运作,这使得将应用程序从原型验证扩展至部署变得困难。

测试和验证 - 通常不到后期无法确定一个系统是否能满足功能要求,而重头再来的成本又太高。例如,处理器可能无法以足够快的速度执行所需数量的并行任务。它可能无法达到足够的周期时间。它也可能无法实时处理处理器密集型分析。

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

多种计算模型

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

数据流 - 数据流是与LabVIEW软件关联性最强的MoC。使用数据流时,在执行运算之前,需要开发人员在所有的输入中插入数据。数据流是一种直观的编码结构,可轻松实现并行流程等应用。

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

图7: 使用LabVIEW MathScript RT模块复用文本代码

C代码-有时,所用的算法最初是用C或C++创建的。借助图形化系统设计,之前的工作就不会付诸东流。您可以使用内嵌C节点或调用库函数节点,在LabVIEW中直接调用以前的代码。使用内嵌C节点来处理预存C代码或实现一个小型的数字或数组算法,使用调用库函数节点来访问DLL或共享库中的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使获取实际数据变得如此简单,工程师们发现用实际数据测试算法非常有价值,这是一种反复调整算法的方法。通过这种交互式的测试方法,您可以试验不同的函数,看看它们是否能提供所需的预期结果。例如,当用滤波器处理信号时,您可以从各种各样的解决方案中进行选择,采集所需要的实际信号,并在图表或文件中查看结果。如果结果不适用于该应用,可以选择另一个滤波器。通常情况下,采集实际信号来应用于算法,然后花时间在软件上进行仿真,是比较容易的。

图8: NI为LabVIEW随附了数百种内置算法,可以在原型中使用。

装配仪器测试原型

采用原型的一个目的是向潜在客户、投资者和同事快速展示想法和设计。而进行原型验证另一个同样重要的原因是要测试和验证基本软件和硬件设计的性能。通常,只有将功能原型的电气、软件和机械组件结合起来时,问题才会显露出来。 

通过在原型验证阶段进行彻底的测试,您可以及早发现问题,避免其成为巨大的沉没成本,且无法修复。原型测试为性能要求提供了具体的证据支持,并提高了成品的可靠性,使您能够安心无忧地进行部署。

软件定义的仪器本质上具有一定灵活性,并且易于实现自动化。正因如此,现今的产品设计团队可以通过减少手动测试所耗费的时间,以及尽量减少实验室中所需仪表的数量,来简化他们的开发流程。

借助LabVIEW图形化软件平台,您可以设置简单的程序来测试主要算法的质量和可靠性。在进行原型验证时,要注意以下2个主要方面的测试:

边界测试 - 确保软件设计在整个数据点的范围内,在I/O通道提供高质量的数据。这有助于在整个产品开发周期内保证原型满足质量规范要求。

压力测试 - 确保在长时间暴露和所有I/O通道同时处于极限的情况下,依然满足质量规范的要求。该算法需要足够强大,才能应对正在处理数据重载的情况。

在没有硬件的情况下,通过使用仿真VI使软件算法处于极限状态,从而进行测试。您可以在LabVIEW中通过使用各种信号生成VI或开发一个可准确描述实际I/O的VI来实现该操作。

图9: I/O仿真方法

使用数据采集测量I/O

软件测试可能有局限性,因为它不能提供与使用真实硬件相同的外观和手感。借助LabVIEW,您可以使用COTS硬件来执行实际的I/O测试。

您可以使用数字万用表数据采集设备来调试物理硬件I/O。LabVIEW与NI-DAQmx驱动程序相结合,提供了一个易于使用的高级接口,可以通过DAQmx Express VI执行复杂的数据采集任务。

图10: 使用NI DAQ硬件进行测试

设计原型部署考虑在内

从一个想法到图纸设计再到功能原型,最后到可发布的产品,整个设计流程中可能挑战重重,因此您需要寻找方法来简化这些阶段之间的过渡。理想的情况是设计出一个可以实际部署的原型,这意味着您可以大批量地对其进行生产和分布,但这在实践中并不常见。不过若在设计和原型验证时考虑到部署问题,就可以确保设计的关键部分能够满足部署的需求。找到合适的工具和平台十分关键,它们不仅能提供高效原型验证所需的灵活性和功能,而且还足够强大且可自定义,可满足市场需求。

图11: 拥有一个接近于成品的原型是理想情况。

LabVIEW可重配置I/O (RIO)架构是NI图形化系统设计平台不可或缺的一部分。作为一种设计、原型验证和部署监测与控制系统的现代化方法,图形化系统设计将开放的LabVIEW图形化编程环境与COTS硬件相结合,极大地简化了开发,从而提高了设计的质量,并且能够纳入自定义设计。

LabVIEW RIO架构基于4个组件:处理器、可重配置FPGA、模块化I/O硬件和图形化设计软件。这些组件相结合,使您能够快速创建具有高性能I/O的定制硬件电路,并在系统定时控制方面实现卓越的灵活性。许多NI产品都采用了这种架构。

图12: NI推出具有LabVIEW RIO架构的产品,以提供更高的灵活性、可靠性和性能。

单板RIO控制器是高度可定制的单印刷电路板,可提供很大的灵活性。I/O接线端、电源和外壳自备。单板RIO支持用户将其无缝集成到成品中。如果您需要更多的灵活性或更紧凑的尺寸,NI模块上系统(SOM)可针对您的设计提供这些产品。

图13: 单板RIO和SOM控制器使您的设计更加灵活。

如果您需要产品更加坚固耐用,CompactRIO硬件是理想之选。这种工业级硬件能够承受非常粗暴的使用方式。如果您需要一个能够承受高冲击和振动的设备,而又不想花费时间和金钱来自行开发控制器,在这些严苛的条件下运行,可以考虑使用CompactRIO。除了坚固耐用之外,CompactRIO平台也不需要像单板RIO设备那样进行定制。如果您不想自行处理电源转换、外壳或I/O接线端事宜,CompactRIO也是一个不错的解决方案。

图14: CompactRIO控制器非常坚固耐用。

对于实验室环境中等更精确的测量,或者在受限于基于PC的平台时,R系列多功能RIO设备是一种有效的选择。这些设备有PCI、PCI Express、USB、PXI和PXI Express等规格,与单板RIO和CompactRIO相比,可提供卓越的I/O信号调理和精度。R系列设备具有LabVIEW RIO架构的功能,有助于扩展功能,优于传统数据采集解决方案。

图15: R系列数据采集将LabVIEW FPGA添加到标准PC规格中。

如果需要速度高达3 GS/s的模拟超高性能I/O或1 Gb/s的数字超高性能I/O,那么FlexRIO便是理想之选。无论您是想更大限度地降低测试成本,还是想加快下一个嵌入式系统的开发速度,FlexRIO都能在LabVIEW RIO架构中提供速度出众的I/O和出色的FPGA,帮助您应对一些非常复杂的原型验证或部署挑战。

图16: FlexRIO控制器和模块可提供出色的FPGA和I/O性能。

LabVIEW RIO架构不仅提供了众多的规格选择,而且还共享公共平台。这意味着您可以对LabVIEW RIO架构支持的所有产品使用相同的代码和流程,并在必要时进行切换。事实上,在单板RIO、CompactRIO、R系列或FlexRIO之间切换时,大部分代码都可以复用。即使您不完全了解成品的所有要求,在选择原型验证平台时出现的错误也不会造成需要完全重写所有的代码。因此,原型验证流程可以更快开始,从而缩短开发时间。您也可以用CompactRIO开始原型验证,然后转移到单板RIO进行部署,而这一操作所需的机械返工很少,软件几乎没有变化。同样,这种操作之所以可行是出于共享平台的缘故。

结语

原型验证是嵌入式设计流程中的关键一环。若能够向投资者、客户和管理层展示切实可行的想法,是使别人考虑将这一想法纳入预算的好方法。事实证明,NI的图形化系统设计工具有助于在不需要庞大设计团队的情况下就能迅速获得正常运作的功能原型。利用这些步骤来创建高质量的功能原型,可以帮助您迅速开始构建下一个应用程序。

 

相关链接

 

Simulink®是The MathWorks, Inc.的注册商标。