17

请耐心等待:这不是语言辩论或火焰。这是一个真正的征求意见。

有时,我必须帮助教育传统的文本编码人员如何在 LabVIEW (LV) 中进行思考。在这个过程中,我经常会听到关于 LV 的糟糕之处。除了“语言 X 好得多!”之外,这种洞察力很少伴随理性观察。虽然这句话让他们满意,但它并不能帮助我理解是什么让他们感到沮丧。

那么,对于那些有 LabVIEW文本语言经验的人来说,关于 LV的哪些具体内容让您抓狂?

------ 总结------

感谢所有的答案!有些问题在下面的评论中得到了回答,有些在其他网站上存在,有些只是 LV 的真正问题。本着最初问题的精神,我不打算在这里回答所有这些问题:查看LAVANI的网站,你会惊喜地发现其中有多少是可以克服的。

  • 无意并发
  • 无法使用传统的文本操作工具
  • 仅二进制源代码控制
  • 难以分支和合并
  • 打开的窗户太多
  • 文本具有更清晰/更清晰/更具表现力的语法
  • 干净的编码需要大量的时间和操作
  • 大型、难以访问的 API/调色板系统
  • 需要鼠标
  • 文件命名空间:内存中没有同名的重复文件
  • LV 对象本身只是按值的
  • 需要开发环境才能查看代码
  • 缺乏变焦
  • 启动缓慢
  • 记忆猪
  • “巨型”代码难以使用
  • UI锁定很容易做到
  • 触控板和 LV 不能很好地混合
  • 字符串操作在图形上很臃肿
  • 有限的 UI 定制
  • “隐藏”原语(是的,这些存在)
  • 缺乏官方元编程能力(不过不会太久)
  • 缺乏 unicode 支持
4

19 回答 19

12

LabVIEW 使实现并发/并行编程更容易、更真实。然而,它并没有使调试、测试或考虑并发/并行性变得更容易。您仍然可以在 LabVIEW 中编写错误的并发代码,并且(与任何语言、平台或工具集一样)没有灵丹妙药或魔杖可以让并发“正常工作”。

如果有的话,您必须更加小心并发性,因为如果您不明确考虑(并声明)它,LabVIEW 可能会使事情发生您不希望的并发。

其他牛肉:这不是文字。以一种有意义的方式表示数据流意味着一种图形语言,这意味着您不能使用我们几十年来拥有的工具来操作文本,从 sed 到 emacs。这也意味着源代码控制应用程序必须将您的代码视为不透明的二进制文件,而不是...源代码。反过来,这使得分支和合并成为一种痛苦的练习。

于 2009-01-07T15:31:13.897 回答
12

我在很多方面都欣赏 LabView,尤其是轻松驱动硬件的能力(当然,当它是 National Instruments 的硬件时),以及并发编程功能。但是在代码导航中对基于文本的编程语言很糟糕:

  • 当你浏览代码时,你最终会打开大量的窗口,因为你一次又一次地打开 subVis
  • 因为文字比图标更具表现力,与文本语言相比,你在一个屏幕上看到的指令更少,尤其是在表现力语法中,如 python
  • 没有我们在其他语言中所知道的异常处理;错误以结构表示,从一个 VI 传输到另一个 VI,您必须为每个 VI 添加一个if error return; else do stuff代码。
  • 当出现错误时,调试期间无法停止
于 2009-01-11T19:11:34.660 回答
8

Labview is great for controlling hardware. I have written several Labview apps for collecting data (analog voltage from various sensors) and control hardware (mostly piezoelectric motors). Labview makes it fairly easy to perform several tasks in parallel.

Now to answer your question. What do I find frustrating about Labview.

  1. Time spent organizing block diagram

    • moving wires around
    • organizing nodes

    Perhaps, since I am self taught I spend too much time trying to clean up wires and trying to follow them in an attempt to deciphers what data they are carrying and where it is going.

  2. Point and clicking through the toolbox thing looking for the node/function that I want to place in the block diagram or front panel.

I should just be able to type the name of the function/method I need with the parameters and get going instead of...

"hmmm... I need the calculate RMS vi now where would that be? now I need an AND operation. OK back up to top level, to logical functions, which one of these is AND oh right it's that one. Drop on diagram wire it up and test! Well that only took 15 minutes!."

But there probably is a more efficient way to work with Labview, I just don't know it!

于 2008-12-16T20:53:43.837 回答
7

1.LabVIEW objects are not passed by reference.
2.No other viewer exist(especially free one) for viewing the block diagrams.
3. Need to open up a large number of windows to view a project. Would like it to be MDI so that number of windows gets reduced.

于 2009-02-11T10:03:10.723 回答
6

The thing I was most frustrated with was that it took my hands off the keyboard. I'm a touch typist, and can code fairly quickly in a text language. LabVIEW forces you to use the mouse to select VIs and program nodes from its menus, and to wire the nodes together. While this is really fast and convenient if you're an electrical engineer, used to designing circuits in a graphical environment, it's a pain if you're used to typing in your code.


Disclosure: It's been about two years now since I last used LabVIEW, so these next two may be fixed by now.

The next annoyance was source control. One of the things you do most often with your source control repository is diff your current version with a previous version to find the changes. You can't do that with a graphical language like LabVIEW. Popular revision control systems like CVS and SVN use text-based diff tools behind the scenes. I hope National Instruments has come up with their own revision control solution for all of you guys who are still using LabVIEW.

The last annoyance I had was a lack of real object-oriented language features. LabVIEW 6i, the last version I used, was object-based at best. No one could really make an accurate claim that it was object-oriented. I couldn't create a real class hierarchy using inheritance, and polymorphism was reserved for only a few built-in types. I realize that 6i was two versions ago, so I really hope that this is fixed.

于 2008-12-16T21:12:34.393 回答
6

GUI 中缺乏 Unicode 支持

这使我们日本公司的发展变得困难。

更新:显然在 8.6 中有一些支持。请参见在 LabVIEW 中使用 Unicode 的技巧和工具列表

于 2009-12-08T04:41:37.150 回答
5
  • 几十扇打开的窗户是一种绝对的痛苦。
  • 由具有更大显示器的人编辑的 vi 必须调整大小。
  • UI 在处理其他东西时会暂时锁定(也许我还没有弄清楚 labview 的多线程潜力)
  • 在带有触控板的笔记本电脑上编辑是可怕的,(不要忘记小显示器问题)。
  • 复杂的字符串操作需要数英亩的空间(方程有一个函数节点,为什么不是字符串操作的正则表达式节点?)
  • 我有时会在其他人的代码中找到我在菜单中任何地方都找不到的原始 vi。
  • UI 只能定制到一个点。

我想补充一点,我认为labview 非常强大且设计精良。我很少遇到让我希望我有不同的语言的东西。

于 2009-05-20T22:19:36.230 回答
4

缺乏差异和合并(“专业”许可除外)

我们在工作中使用 SVN 和 TortoiseSVN。我很沮丧,我无法通过差异来查看文件中发生了什么变化。在使用 SVN 时,做“差异”是日常工作流程的一部分,所以看到文件发生了变化是令人沮丧的,但不知道它是微不足道的还是重要的。做差异也可以系统地审查变化。

我听说“专业”有某种差异工具。不过,我很难说服管理层我们需要专业人士来实现“差异”功能。而且我无法确定地阅读它实际上与 TortoiseSVN 顺利集成。

使用源代码控制被认为是行业最佳实践之一,因此 NI 完全支持它会很好,而不仅仅是在“专业”许可证中,以免 NI 被视为阻碍采用最佳实践。

于 2009-01-23T00:24:47.087 回答
4

无法放大和缩小框图。是的,设计应该保持在一个屏幕上或只向一个方向滚动,但我从第三方供应商那里获得了代码,他们必须使用 50 英寸显示器进行开发——代码在各个方向上永远存在!

(2009 年 1 月 23 日):使用View->Navigation Window查看整个图表(前面板和图表面板)的鸟瞰图。当 LabVIEW 决定将根据程序框图创建的新控件放置在前面的随机位置时,这可能很有用。

于 2009-01-06T17:34:14.883 回答
4

就个人而言,我认为 LabView 是一个出色的程序,它的设计目的是。除了继承糟糕的代码(这在任何语言中都是一个问题)之外,通过良好的实践,它可以非常有效且快速地将各种过程控制、自动化、测试和测量系统组合在一起。与文本编码一样,LabView 也存在良好的实践——如果你有一个乱七八糟的 VI,那么这真的是编码器的错,而不是语言的错。文本编码的语言也会变得非常混乱 - 程序员有责任不创建不必要的混乱或混淆代码。

如果您开始编写代码时考虑到未来的扩展,那么创建可以随程序需求增长而不会变得麻烦的 VI 一点也不难。就像糟糕的文本代码很快就会变得一团糟,如果你用短期的眼光来破解它,只会让它自己长大并变得无法维护。但是,这确实意味着您必须花时间学习 LabView,就像您必须花时间学习任何语言或 IDE 一样。

如果 LabView 让您的工作受挫,您可能应该使用其他东西来创建程序,或者至少为程序的这些组件使用其他东西。

例如,如果你需要做大量的字符串处理——比使用 LabView 的字符串函数更方便破解——但你真的想要或需要使用 LabView 来处理你的应用程序,那么有很多选项可供你选择. 您可以轻松地用 C 或任何您喜欢的语言编写 DLL,然后通过 LabView 的 DLL 接口访问这些函数。这适用于使用基本 LabView 工具难以实现的任何类型的高级或抽象功能。

这有两大优势 - 首先,您可以将文本编码集中在简单地编写函数或过程上。围绕您的函数构建应用程序的任务变得不存在。通过将它与 LabView 混合,您可以获得 LabView 快速而强大的 UI 构建器和仪器连接的第二个优势。

在源代码控制方面,您可以做的最大的事情就是发挥 LabView 固有的模块化能力。虽然您没有文本工具来帮助您,例如在尝试整理未知的继承代码时,但它确实具有其他非常强大的功能,这些功能以抽象的方式可以做许多相同的事情。它可能是现存的最容易重构的语言,这意味着,一般来说,重构继承的代码可以在您学习它的作用时完成。

例如,如果您转到数据源并断开线路,您会立即看到它连接到的所有内容。错误列表将为您提供因依赖该数据源而损坏的所有内容的完整列表,您可以立即创建包和集群以清理 LabView 意大利面条。它甚至会在后面板上突出显示损坏的数据连接,以便您跟踪所有内容的去向。如果很明显它们在主进程中乱扔垃圾等,您可以快速将它们封装在子 VI 中。当您弄清楚代码的作用时,它已经干净整洁并且突然可以重新维护。

最大的例外是程序使用了很多不必要的全局变量。惊喜 - 全局变量也使 LabView 中的事情变得复杂。在那种情况下,除了诅咒让你一团糟的笨蛋,别无他法。尽管如此,这还不是世界末日。

我想,简而言之,我想说的是 LabView 是一种非常不同的语言。如果这看起来令人沮丧,那并不是因为没有工具来完成您在文本编码中习惯的事情,而仅仅是因为它们通常以完全不同的方式实现。例如,Grepping 代码本身并不是目的,而只是达到目的的一种手段——目的是发现整个程序的链接和引用。虽然您无法 grep LabView 代码,但您可以发现链接和参考资料——只是以完全不同的方式完成。学习曲线的东西。

于 2010-05-12T16:20:39.917 回答
3

我写了一个程序(用 C++)从计算机控制一个 rs232 设备,但被要求为 labview 提供驱动程序或 Vi 或任何东西。我满怀信心地下载了labview,相信我可以在短时间内完成一些事情。(我是常春藤学校的计算机科学专业毕业生,使用 C++ 编程 15 年,学习和使用过 C、Scheme、C#、Java 等 - 这应该是显而易见的)

我还下载了 labview 的示例应用程序和文档。

我被结果吓坏了。Labview 是巨大的、缓慢的和不直观的。它不遵循我在 MFC 或 Visio 或 Rational Rose 或 VB 等方面习惯的范式。试图找到正确的文档也是一个艰难的经历。那里有太多东西需要了解 Labview 才能知道从哪里开始。

这是一个可以做很多事情的大型程序。没有人教你如何使用它是非常困难的。我自学了很多东西,但到目前为止,labview 让我望而却步。(当然我没有花尽可能多的时间在这上面,但到目前为止这是一次令人沮丧的经历)

总而言之——它巨大、缓慢且不直观。文档是压倒性的。

(我仍然希望有一天能完成这个项目)

于 2008-12-16T20:36:46.820 回答
3

一项高于一切:

缺乏进行测试驱动开发的工具

如果我能说一说,现在这已经是一件大事了,因为我不写测试就不会去洗手间。

编辑:: 我把它全部收回,看看http://forums.jkisoft.com/index.php?showtopic=973。到目前为止效果很好!

于 2009-01-13T03:22:11.380 回答
3

一个功能漏洞:IIRC 没有元编程工具可言。它非常适合构建东西,只要您构建的任何东西都处于 LV 设计师认为您想要的抽象级别。

在过去的 20 年里,我已经(通常)移动到越来越高的抽象级别。大约有一年的时间,LV 很整洁,因为它比我使用的略高。然后我就吹过去了,LV看起来一年比一年老。

于 2009-05-20T22:43:23.217 回答
2

关于LabVIEW的“图形差异”的说明:

LabVIEW 不能同时在内存中拥有同名 VI 的多个副本。

在 8.5 版之前,这意味着如果我想区分我的 VI.vi 版本 2 和版本 1,我必须(手动)创建一个不同名称的副本,打开它,然后告诉 LabVIEW 将它与我的比较原来的。

我的理解是,他们在 8.5 中自动化了这个过程,为您提供了一个 3 路合并工具。

于 2009-01-07T21:44:08.467 回答
2

阿齐姆,

您会对 8.6 版感到满意,它有两个可以解决您的挫败感的功能:

  • 自动清理图表
    清理杂乱代码的工具。
    但是请注意,此工具不应用于干净的代码(LAVANI 论坛)。
  • Quick Drop
    使用键盘快捷键选择节点和 VI 的工具,Youtube 上的视频显示了快速拖放操作。1:07 之后,您会看到自动清理工具。

蒂姆,你的意思是什么

Labview 巨大、缓慢且不直观

如果您有示例和改进,请告知。
如果您在构建驱动程序时遇到问题,请查看随附的驱动程序(例如万用表)。尝试找到带有驱动程序的类似仪器并根据需要对其进行调整,我确信 NI 愿意帮助您或其他人愿意。将您的问题带到LAVANI 论坛
LabVIEW 使用的不同范式(数据流)可能是并行编程的解决方案(至少 NI 是这样告诉我们的),Visio 不是编程语言,很抱歉爆料。使用初学者书籍(适用于所有人的 LabVIEW)是一个很好的开始。

于 2008-12-27T09:20:43.647 回答
2

Labview 可用于创作大型、复杂的软件项目。Labview 无疑比基于语法的语言更有趣。我使用labview编写了数学密集的动态模拟程序。较新版本的 Labview 包含许多令人兴奋的功能,尤其是在使用多个处理器方面。我非常喜欢 Labview。但我不推荐给任何人。

不幸的是,除了简单的采集和显示之外,这绝对是一场噩梦。有朝一日,它可能会得到充分发展,被视为基于文本的语言的可行替代方案。然而,NI 的开发人员一直选择忽略困扰 labview 的三个基本问题。

1)它不稳定并且充满了错误。有数以千计的 bug 已发布到 labview 支持论坛尚未修复。其中一些是相当严重的,例如内存泄漏,或基本函数中的数学错误。

2)文档很糟糕。通常情况下,当您在本地帮助文件中寻找有关 labview 功能的帮助时,您会发现一个孤立的句子,它只是重述了您试图查找某些细节的项目的名称。例如,用户查找有关纹理过滤器模式设置的帮助文件,帮助文件中唯一写的是“纹理过滤器模式 - 选择用于纹理过滤的模式”。哎,谢谢。这样就可以解决问题了,不是吗?问题远不止于此。很多时候,当您要求国家仪器的技术代表提供有关 labview 功能或数学函数特定行为的关键细节时,他们根本不知道他们自己的库中的函数是如何工作的。这听起来可能有些夸张,但相信我,事实并非如此。

3) 虽然保持图形代码干净和有据可查并非不可能,但 Labview 旨在使这些任务既困难又低效。为了防止您的代码变得混乱、混乱,您必须定期(每隔几个操作)使用集群、子可见和巨型类型定义控件(可以在大型项目中跨越多个屏幕)等结构。这些结构通过迫使labview在内存中制作多个数据副本并执行无偿操作来消耗内存并破坏性能——所有这些都是为了防止图形图看起来像彩虹色的意大利面条,在任何地方都看不到任何评论或文本。在labview 中编程就像和魔鬼玩图画一样。想象一下你的大型软件项目写成一个墙壁大小的流程图,上面根本没有任何文字。现在想象一下,所有的线相互交叉一千次,因此完全不可能追踪数据流。您刚刚设想了在labview 中最自然、最有效的编程方式。

Labview很酷。Labview 的每一个新版本都会变得更好。如果 National Instruments 不断改进它,有一天它会成为一种通用的编程语言。现在,作为大型或逻辑复杂项目的软件开发平台,这是一个非常糟糕的选择。

于 2009-12-29T00:56:16.783 回答
2

我是LabVIEW的新手。类似 Photoshop(空格键按住、左键单击和拖动)的鼠标平移功能将非常直观。

于 2011-08-10T08:03:48.387 回答
1

难以分支和合并:diff 在隔离变化方面做得不好,一个案例结构中一个案例的微小变化可能会给您带来许多“差异”。据我所知,合并必须手动完成。

构建简单逻辑耗时:我发现简单的逻辑可能需要大量的布线和绘图,一旦你想改变它,你必须重新绘制所有东西。

于 2012-05-02T06:16:58.527 回答
0

在 Labview 中,如果没有先打开 VI,我将找不到 VI 的调用者。

于 2012-03-22T09:18:55.353 回答