看起来像LabVIEW工程软件的自由程序已经出现了。这是用户界面背后的东西。
Leland Teschler,执行主编
自1986年以来,从事测试仪器的工程师已经能够使用一种叫做由National Instruments Inc开发的LabView.LabVIEW以其图形用户界面而闻名,它允许用户通过在块之间布线而不是编写计算机代码来编写仪器功能。用LabVIEW编写的程序可能相当复杂。例如,它们可以包括闭环反馈和控制设备(如摄像机和电压表)的功能节点。
能够在不撰写传统的基于文本的程序的情况下构建相对复杂的测试程序的概念是诱人的。但是,已经开发出了LabVIEW的开源等价物。这可能是因为国家文书获得了LabVIEW的许多概念。
尽管如此,一个名为Myopenlab的开源程序具有LabVIEW的一些外观和感觉。myopenlab.似乎是德国的程序员的一个家庭项目,他们在2006年首次发布它。它现在由哥伦比亚的程序员维护。这是在帖子的一位大学教授的追随者致敬教程视频和一些使用该项目的短期在线课程.(另一个名为Pylab-works的开源程序也有类似的外观和感觉,但显然已经被放弃了。)
写入在Arduino上执行的简单Myopenlab电路。显而易见的,图形元素与LabVIEW程序中的那些相似。与LabVIEW一样,用户使用鼠标在元件之间运行电线。电线显示为连续或点缀以表示不同的性质。
特别是在开发可以在树莓派和Arduino板上运行的控制程序方面,MyOpenLab得到了广泛的应用。(还有一个LabVIEW编译器可以在树莓派上运行程序。LabVIEW不能在Arduino上运行,但它可以在PC上运行,并告诉Arduino执行某些操作。)
LabVIEW和MyOpenLab之间的相似之处在网上论坛上引发了关于这两个程序究竟有何不同的问题。MyOpenLab的吸引力很容易理解。一个LabVIEW的基本许可证的起价是每年400美元,以后还会再涨。有一个叫做LabVIEW Home Bundle的业余爱好者版本,一次性收费50美元。但它被清楚地标注为“非商业、非工业和非学术目的”。
尽管MyOpenLab的行为可能有点像LabVIEW,但它是基于Java的,并且有一个完全不同的内部结构。有必要研究一下这两个程序的内部架构,看看它们是如何比较的。
LabVIEW和MyOpenLab的区别
LabVIEW是使用称为数据流程编程的概念构建。数据流程编程的正式解释是其应用程序由许多通过一系列连接交换数据的过程。一旦其所有输入都有效,操作就会运行。此外,可以重新连接处理以在不在内部进行任何变化的情况下形成不同的应用。
更简单的解释是回忆最广泛使用的基于流程的编程应用程序的工作:电子表格。每个电子表格单元格都是一个过程。细胞之间的连接采用其内方程和小区参考的形式。为了以不同的方式重新连接小区,用户用不同的小区参考写不同的等式。
LabVIEW可以以类似的方式可视化。它使用矩形来表示进程而不是电子表格单元格。过程之间的连接采用电线的形式。(另一个广泛使用的类比是将LabVIEW视为像流程图一样的工作,再次使用形成连接的电线。)
LabVIEW编程模型的术语比电子表格要复杂得多。电子表格程序有单独的工作表,而LabVIEW中大致类似的结构是虚拟仪器(VI)。每个VI包括一个框图、一个前面板和一个连接器面板。调用或使用另一个VI的VI是通过连接器面板实现的。前面板是使用所谓的控制来构建的,这些控制向VI提供信息,指示器根据给VI的输入和内部流程显示结果。
框图包含对控制进行操作并向指标提供数据的结构和功能。控制、指标、结构和功能统称为节点。节点之间用电线连接。因此,在电子表格中,可以定义一个单元格来显示另外两个单元格的添加;在LabVIEW中,两个控件和一个指示器可以连接到一个加法函数,因此指示器显示两个控件的和。
与LabVIEW的电子表格类比在虚拟仪器中断,因为VI不仅可以作为程序运行,但它也可以将其作为节点丢弃到另一VI的框图上。这种方法的一个优点是在嵌入更大的结构之前可以以模块化方式测试每个VI。
通过拖动和删除VIS构建计划的简单性具有福利。但是,当要实现的功能很复杂时,LabVIEW程序的构建可能需要大量了解LabVIEW语法和内存管理拓扑。
vis层次结构完成后,生成的LabVIEW代码将被编译为可执行的机器代码。
在MyOpenLab中创建的前面板和工作表中相应的连接。工作表的元素是从位于屏幕左上方的库区域中选择的。
MyOpenLab的架构不是围绕流程编程;这就是所谓的事件驱动。在事件驱动的程序中,事件决定程序的流程。典型的事件包括鼠标点击、按键和来自其他程序的消息。也许出于明显的原因,图形用户界面通常是围绕事件驱动的体系结构构建的。
实现响应事件的程序的典型方法是构建一个主循环,以类似于工业可编程控制器的方式侦听事件。当程序感知到一个事件时,它运行一个事件处理程序例程。在事件驱动的gui程序中,事件处理程序通常查找鼠标点击和击键。在MyOpenLab的情况下,我们可能会猜测事件处理程序寻找块之间的连接、块函数的输入等等。
尽管MyOpenLab是围绕事件驱动的架构构建的,但LabVIEW也可以实现事件驱动的操作。它通过一个“事件”结构来实现。在这里,结构术语指的是控制代码如何以及何时运行的图形实体。从这个意义上说,LabVIEW可以看作是数据流程序和事件驱动程序的混合体。
读者可能会注意到,事件驱动程序中的循环和事件处理程序听起来有点像基于流的程序中查找输入更改的例程所扮演的角色。基于流的程序中的类似函数称为调度器。调度程序决定是否对块之间的连接列表进行操作。基于事件的程序和数据流程序之间的一个重要区别是,数据流程序中的调度器不执行任何循环。它只在有数据要处理和有地方放输出时运行。一般来说,这种结构使基于流的程序比基于事件的程序消耗更少的运行时间。
明确地说,这个讨论中的“循环”发生在软件内部。LabVIEW和MyOpenLab都可以用来创建多个信息循环、堆叠序列等等。但是这些循环是由程序用户构造的。
MyOpenLab是用Java编写的。Java是一种编译语言。Java应用程序通常被编译成字节码,然后通过另一个称为Java运行时环境的程序运行。它和另一个称为Java虚拟机的组件通常作为Java开发工具包的一部分。需要注意的是,所有这些Java组件都是免费的,就像MyOpenLab本身一样。
简单与崇高
LabVIEW和Myopenlab之间比较的一个原因是两个程序在其用户界面中具有类似的功能。在Myopenlab中,绘图区域称为电路面板。该程序还有一个前面板。LabVIEW有虚拟仪器,Myopenlab具有可视模型。在Myopenlab中,用户按下按钮图标以获取按钮图标,例如启动和停止模拟,逐步通过序列,显示数据表,调整模拟时间等。要在组件块之间进行连接,用户用单击左按钮标记输出,然后标记所选组件块的相应条目。
由于Myopenlab在Java中,因此可以修改组件的Java代码。从其文档中尚不清楚myopenlab是否可以接受或使用以除了Java以外的语言编写的例程。相比之下,LabVIEW可以从多种语言以及DLL调用和执行代码。
在主应用程序外写入的运行代码的手段说明了LabVIEW和Myopenlab之间的差异。LabVIEW是一个更完整和成熟的程序。一个指示:手动详细说明如何在LabVIEW中使用外部代码运行302页。Myopenlab的文档主要由10个用户指南组成,每个指南每增加60页,并用西班牙语编写。(谷歌翻译似乎做了一个体面的工作,使这些成为可理解的英语。)
也就是说,如果手头的任务很复杂,LabVIEW程序可以变得非常复杂。而创建复杂的LabVIEW程序似乎需要程序员的专业知识,就像其他任何高级语言一样。
例如,考虑关于LabVIEW维基百科谈话页面在那里,维基人讨论对手头文章的编辑。LabVIEW的讨论页面有很长的一段关于对LabVIEW的批评,以及具体的批评是否应该包括在LabVIEW维基百科的文章中。许多批评以“你不能在LabVIEW中做X”的形式出现,这些批评都是由具有丰富程序历史的实践者编写的。通常情况下,其他实践者都指出LabVIEW确实可以做x。但是如何做的解释要么隐藏在相当广泛的LabVIEW文档中,要么是用不太明确的术语来描述的。
当然,MyOpenLab并没有包含任何高级编程功能,而一些在LabVIEW对话页面上抱怨的维基人似乎没有意识到这些功能。因此,这两个程序适合的位置之间的最清晰的描述是应用程序的难度。LabVIEW将继续用于处理复杂的检测和控制任务。MyOpenLab可能是一个更简单的用途的候选者。DW
参考
我们感谢彼得堡的富国Brafggman,Certified LabView Autporation的数据科学自动化的专家和创始人/首席执行官,为他的建议和理智检查在写作这件作品中。www.dsautomation.com., 724-942-6330。
你也可以喜欢:
了下:技术+产品,数据采集+ DAQ模块,运动控制•电机控制,机电一体化,模拟,测试+测量•测试设备








