What specific features of LabVIEW are frustrating to you?
请原谅我:这不是语言辩论,也不是火焰。这是一个真正的征求意见的请求。
有时,我必须帮助教育一个传统的文本编码员如何在LabVIEW(LV)中思考。在这个过程中,我经常听到左心室如何吸吮。除了"语言x比它好得多"之外,这种洞察很少会伴随理性的观察。.虽然这句话让他们满意,但它并不能帮助我理解是什么让他们沮丧。
所以,对于那些有LabVIEW和文本语言经验的人来说,关于LV有哪些具体的事情会让你发疯?
------总结-------
谢谢你的回答!一些问题在下面的评论中得到了回答,一些问题存在于其他网站上,有些只是LV的真正问题。本着最初问题的精神,我不会在这里尝试回答所有这些问题:查看lava或ni的网站,你会惊喜地发现有多少事情可以克服。
- 无意并发
- 无法访问传统文本操作工具
- 仅二进制源代码控制
- 分支合并困难
- 打开的窗口太多
- 文本具有更清晰/更具表现力的语法
- 干净的编码需要大量的时间和操作
- 大型、难以访问的API/调色板系统
- 鼠标需要
- 文件名间距:内存中没有同名的重复文件
- lv对象仅按值本机生成
- 要求dev环境查看代码
- 缺少缩放
- 慢速启动
- 记忆猪
- "巨人"代码很难使用
- 用户界面锁定很容易实现
- 触摸板和左心室混合不好
- 字符串操作图形膨胀
- 有限的用户界面自定义
- "隐藏"原语(是的,这些存在)
- 缺乏官方的元编程能力(不过不会持续太久)
- 缺少Unicode支持
LabVIEW使实现并发/并行编程变得更容易,真的。但是,它并不能使调试、测试或思考并发性/并行性变得更加容易。您仍然可以在LabVIEW中编写bugy、并发代码,并且(与任何语言、平台或工具集一样),没有使并发"只起作用"的银弹或魔法棒。
如果有什么不同的话,您必须更加小心并发性,因为如果您不明确地考虑(并声明)它,LabVIEW可能会使您不希望发生的事情并发。
其他蜜蜂:不是文字。以有意义的方式表示数据流意味着图形语言,这意味着您不能使用我们几十年来使用的工具来处理文本,从sed到emacs。它还意味着源代码控制应用程序必须将代码视为不透明的二进制文件,而不是…源代码。这反过来又使疼痛中的运动产生分支和合并。
我从很多方面欣赏LabVIEW,尤其是它能够轻松驱动硬件(当然,当它是国家仪器的硬件时),以及并发编程功能。但它在代码导航中对文本库编程语言很差劲:
- 当你浏览代码时,你最终会得到大量打开的窗口,因为你一次又一次地打开Subvis。
- 由于单词比图标更具表现力,与文本语言相比,在一个屏幕上看到的指令更少,尤其是在表达语法(如python)中。
- 正如我们在其他语言中所知道的那样,没有异常处理;错误以结构表示,从一个vi传输到另一个vi,对于每个vi,必须添加一个
if error return; else do stuff 代码。 - 在调试过程中,如果出现错误,就无法停止。
LabVIEW非常适合控制硬件。我已经编写了一些LabVIEW应用程序,用于收集数据(各种传感器的模拟电压)和控制硬件(主要是压电电机)。LabVIEW使并行执行多个任务变得相当容易。
现在回答你的问题。我觉得LabVIEW有什么令人沮丧的地方?
组织框图所花费的时间
- 移动电线
- 组织节点
也许,因为我是自学成才的,所以我花了太多的时间试图清理电线,并试图跟踪它们,试图破译它们所携带的数据及其流向。
我应该只需要在参数中输入我需要的函数/方法的名称,然后开始而不是……
"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!."
但是,也许有一种更有效的方法来使用LabVIEW,我只是不知道!
时代不同了1.labview的物体是不同步的参考。 2。没有其他viewer存在(尤其是一个免费的)viewing块diagrams。 3。需要打开的大数的Windows到视图的项目。会喜欢它去的MDI,所以数of Windows得到降低。 P / < >
我最沮丧的是它把我的手从键盘上拿了下来。我是一个触摸式打字员,能很快地用文本语言进行编码。LabVIEW强制您使用鼠标从菜单中选择VIS和程序节点,并将这些节点连接在一起。如果你是一名电气工程师,习惯于在图形环境中设计电路,那么这真的很快也很方便,但是如果你习惯于输入代码,那就太痛苦了。
披露:自从我上次使用LabVIEW以来已经有两年了,所以接下来的两个问题现在可以解决了。
下一个烦恼是源代码管理。使用源代码管理存储库最常做的事情之一是将当前版本与以前的版本进行比较,以查找更改。使用像LabVIEW这样的图形语言不能做到这一点。cvs和svn等流行的修订控制系统在后台使用基于文本的diff工具。我希望国家仪器公司已经为你们所有仍在使用LabVIEW的人提出了他们自己的版本控制解决方案。
我最后的烦恼是缺乏真正的面向对象的语言特性。LabVIEW6i,我使用的最后一个版本,充其量是基于对象的。没有人能准确地宣称它是面向对象的。我无法使用继承创建一个真正的类层次结构,多态性只保留了几个内置类型。我知道6I是两个版本,所以我真的希望这是修复的。
缺乏对unicode支援在GUI P / < >
它使我们的发展为日本公司的困难的。 P / < >
更新:有一些支持在8.6很明显。看到名单的提示和使用工具为unicode在labview。 P / < >
- dozens of Windows开放的明确 的痛苦。
- IP的,是人与edited by 在更大的显示器有对到resized。
- 另外locks起来temporarily当其他加工 的东西(也许我还知道了" multithreading潜在的labview 然而,)
- 编辑在笔记本电脑与trackpad 甚至现在,(不忘记的小 显示器的问题)。
- manipulation需要复杂的字符串 万亩的空间(有功能的 结为equations,为什么不在regex 为节点的字符串manipulation吗?)
- 我有时发现primitive VI的。 其他人的代码,我不能找到 任何地方在menus。
- PS只能在customized到一点。
我想给我,我想我也labview remarkably和强大的designed好。很rarely do I Run中的东西,使我希望我让一个不同的语言。 P / < >
无法放大和缩小方框图。是的,设计应该保持在一个单一的屏幕上或者只在一个方向上滚动,但是我已经从第三方供应商那里得到了代码,他们必须使用50英寸的监视器来开发——代码在每个方向上都会一直持续下去!
(2009年1月23日):使用View(视图)->Navigation Window(导航窗口)查看整个图表的鸟瞰图(前面板和图表面板)。当LabVIEW决定将一个根据框图创建的新控件放在前面的随机位置时,这可能很有用。
缺乏的差异和merge(除了为"professional"许可) P / < >
我们使用svn和tortoisesvn工作。我frustrated,我不能做的差异看到什么已经改变了的文件。做"diffs"的一部分,当svn workflow每日使用,所以它的frustrating到看到的文件没有改变,但没有理念是否它是平凡的东西或substantial。做diffs也enables的systematic评论之变化。 P / < >
我听到"professional"腹部的一些行之差异的工具。我会有麻烦convincing管理,我们需要professional为"差异"的特征,虽然。我还没有读到能被T conclusively,它实际上integrates smoothly与tortoisesvn。 P / < >
使用源代码控制也被视为一个行业最好的比赛,所以它会大为Ni到全支援它,不只是在"professional许可",一个是看到到inhibiting adoption的最好的比赛。 P / < >
就我个人而言,我认为LabVIEW是一个很好的程序,可以完成它的设计任务。除了继承糟糕的代码,这是任何语言中的一个问题,通过良好的实践,它是非常有效和快速的组合各种过程控制,自动化,测试和测量系统。和文本编码一样,LabVIEW的良好实践也存在——如果您有一个混乱的、混乱的vi,那么它实际上是编码器的错误,而不是语言。文本编码语言也会变得非常混乱——程序员的责任是不要创建不必要的混乱或模糊的代码。好的。
如果您开始编写代码时考虑到了将来的扩展,那么创建VIS一点也不困难,它可以随着程序的需要而增长,而不会变得很麻烦。与坏文本代码一样,如果你用一个短期的视图把它砍掉,它很快就会变得一团糟,只会让它自己变得无法维护。然而,这确实意味着你必须花时间学习LabVIEW,就像你必须花时间学习任何语言或IDE一样。好的。
很有可能,如果LabVIEW让您的工作感到沮丧,那么您可能应该使用其他东西来创建您的程序,或者至少对程序的这些组件使用其他东西。好的。
例如,如果您需要进行大量的字符串处理,这比使用LabVIEW的字符串函数更方便,但是您确实希望或需要使用LabVIEW作为应用程序的主要部分,那么您可以选择很多方法。您可以很容易地用C或您最喜欢的语言编写DLL代码,然后通过LabVIEW的DLL接口访问这些函数。这适用于任何类型的高级或抽象函数,这些函数很难用基本的labview工具实现。好的。
这有两大优点——首先,您可以将文本编码集中到简单地编写函数或过程中。围绕函数构建应用程序的任务变得不存在。通过将其与LabVIEW混合,您可以获得LabVIEW快速而强大的UI构建器和仪器连接的第二个优势。好的。
在源代码控制方面,您能做的最大的事情是灵活调整LabVIEW的模块化固有能力。虽然您没有文本工具来帮助您,例如在尝试整理未知继承的代码时,它确实有其他非常强大的功能,抽象地说,可以做许多相同的事情。它可能是现有最容易重构的语言,这意味着,一般来说,重构继承的代码可以在您学习它所做的工作的同时进行。好的。
例如,如果您转到数据源并断开连接,您会立即看到它连接到的所有内容。错误列表将为您提供一个完整的列表,其中列出了由于依赖于该数据源而中断的所有内容,您可以立即创建捆绑包和集群来清理LabVIEW意大利面。它甚至突出显示了后面板上断开的数据连接,这样您就可以跟踪所有数据的去向。如果很明显Subvis中的内容会使主进程杂乱无章,那么您可以快速地将其封装在Subvis中。当您了解代码的功能时,它就变得整洁、干净,并且可以突然进行重新维护。好的。
但最大的例外是如果程序使用了大量不必要的全局变量。令人惊讶的是,全局性也使LabVIEW中的事情变得复杂。在这种情况下,除了诅咒那个把你弄得一团糟的蠢货,别无它法。不过,这不是世界末日。好的。
简而言之,我想说的是LabVIEW是一种非常不同的语言。如果这看起来令人沮丧,并不是因为这些工具不存在,无法完成您在文本编码中习惯的工作,而是因为它们通常以完全不同的方式实现。例如,grepping代码本身并不是一个终点,而是终点的一种手段——其目的是发现整个程序中的链接和引用。虽然您不能grep labview代码,但您可以发现链接和引用——这是以完全不同的方式完成的。学习曲线的东西。好的。好啊。
我写了一个程序(在C++中)从计算机控制RS232设备,但被要求提供LabVIEW的驱动程序或VI或任何东西。我满怀信心地下载了LabVIEW,认为我可以在短时间内将某些东西弹出。(我是一个从常春藤学校毕业的Copp SCI,已经用C++编程了15年,学习并使用了C、方案、C语言、Java等等。
我还为LabView下载了一个示例应用程序和文档。
我对结果感到震惊。LabVIEW非常庞大、缓慢且不直观。它没有遵循任何一个范例,我习惯了与MFC或Visio或RationalRose或VB等。试图找到正确的文档也是一个困难的经验。外面有那么多东西,你需要了解LabVIEW,才能知道从哪里开始。
这是一个非常大的项目。没有人教你如何使用它是非常困难的。我自学了很多东西,但到目前为止,拉布维尤一直在回避我。(当然,我在这件事上的时间没有我应该花的那么多,但到目前为止这是一次令人沮丧的经历)
总而言之,这是巨大的、缓慢的、非直觉的。医生们势不可挡。
(总有一天我还是抱着很高的希望完成这个项目)
在洞的特征:没有metaprogramming设施要讲的,iirc。它的伟大,为大厦的事情,只要你是什么建筑也在同一水平的abstraction,LV designers以为你会想。 P / < >
在过去的20年里,我已经搬到(一般)到更高和更高的levels of abstraction。关于为一年,LV是整洁的,因为它是更高的slightly比什么我用。然后我blew它过去的,和LV看起来更多的antiquated每一年。 P / < >
一个item以上所有的人: P / < >
缺乏的工具做身体driven发展 P / < >
如果我也许glib一瞬间…,这是一个漂亮的大交易,现在的日子,因为我不t goto的浴室里有没有writing的身体。 P / < >
编辑::我把它都回来,看看http:/ / / / forums.jkisoft.com指标。php吗?showtopic = 973。太远了它的伟大工程。 P / < >
关于LabVIEW"图形差异"的说明:
LabVIEW不能在内存中同时拥有多个同名的vi副本。
在版本8.5之前,这意味着如果我想将我的vi.vi版本2与版本1进行比较,我必须(手动)创建一个具有不同名称的副本,打开它,然后告诉LabVIEW将其与原始版本进行比较。
我的理解是,他们在8.5中实现了这个过程的自动化,为您提供了一个3路的合并工具。
型
LabVIEW可用于编写大型、复杂的软件项目。毫无疑问,使用LabVIEW要比使用基于语法的语言有趣得多。我已经用LabVIEW编制了数学密集动态模拟程序。LabVIEW的新版本包括许多令人兴奋的功能,特别是用于多处理器的功能。我非常喜欢LabVIEW。但我不推荐给任何人。
不幸的是,除了简单的采集和显示之外,它绝对是一场噩梦。有朝一日,它可能会得到充分的发展,被认为是一种可行的替代基于文本的语言。然而,NI的开发人员一直选择忽略困扰LabVIEW的三个基本问题。
1)系统不稳定,存在漏洞。有成千上万的bug已经发布到LabVIEW支持论坛,但尚未修复。其中一些非常严重,例如内存泄漏,或者基本函数中的数学错误。
2)文件残缺不全。通常情况下,当您在本地帮助文件中查找关于labview函数的帮助时,您会发现一个单独的句子,它只会重述您要查找的项目的名称。例如,用户在"纹理过滤模式"设置中查找帮助文件,而在帮助文件中写入的唯一内容是"纹理过滤模式-选择用于纹理过滤的模式"。哎呀,谢谢。把事情弄清楚,不是吗?这个问题比这要严重得多;通常,当你要求国家仪器公司的技术代表提供有关LabVIEW功能或数学函数的具体行为的关键细节时,他们根本不知道自己的库中的函数是如何工作的。这听起来有点夸张,但相信我,事实并非如此。
3)虽然不可能保持图形代码的整洁和良好的文档化,但LabVIEW的设计使这些任务既困难又低效。为了防止代码变得混乱、混乱,您必须经常(每隔几次操作)使用诸如集群、子vis和大型类型定义控件之类的结构(可以在大型项目中扩展到多个屏幕)。这些结构消耗内存并破坏性能,迫使LabVIEW在内存中复制多个数据并执行免费操作——所有这些都是为了防止图形图看起来像彩虹色的意大利面,而看不到任何评论或文本。在LabVIEW中编程就像在和魔鬼玩pictionary。想象一下,你的大型软件项目被写成一个墙大小的流程图,上面一点字也没有。现在假设所有的线相互交叉一千次,这样追踪数据流就完全不可能了。您刚刚设想了在LabVIEW中编程的最自然和最有效的方法。
LabVIEW很酷。LabVIEW的每一个新版本都在不断改进。如果国家仪器继续改进它,它将是伟大的一天作为一种通用编程语言。现在,对于大型或逻辑复杂的项目来说,作为软件开发平台是一个非常糟糕的选择。
Azim
您会对8.6版感到满意,它有两个功能可以攻击您的挫折感:
- 自动清理图
清理杂乱代码的工具。
但是,需要注意的是,这个工具不应该用于干净的代码(lava和ni论坛)。 - 快速下降< BR/>通过使用键盘快捷键选择节点和可见光的工具,YouTube上的一段视频显示了快速的下拉操作。1:07之后,您会看到自动清理工具。
提姆,你说的是什么意思
Labview is HUGE, SLOW and non-intuitive
如果您有示例和改进,请告知。
如果您在构建驱动程序时遇到问题,请查看附带的驱动程序(例如万用表)。试着找一个有司机的类似仪器,并根据需要进行调整,我确信倪愿意帮助你或其他人。带着你的问题去熔岩或镍论坛。
LabVIEW使用的不同范例(数据流)可能是并行编程的解决方案(至少这是NI告诉我们的),Visio不是一种编程语言,很抱歉打断了新闻。使用初学者书籍(每个人都使用LabVIEW)是一个很好的开始。
吨
型
我对LabVIEW不熟悉。类似于photoshop的(空格键按住,左键单击并拖动)鼠标平移功能将非常直观。
型
很难进行分支和合并:diff在隔离变更方面做得不好,在一个案例结构中,一个小的变更可能会给您带来许多"差异"。据我所知,合并必须手动完成。
构建简单逻辑需要花费大量的时间:我发现简单逻辑可能需要大量的布线和绘图,一旦你想更改它,你就必须重新绘制所有的东西。
型
在LabVIEW中,如果没有先打开,我找不到vi的呼叫者。