请忍受我:这不是语言辩论或火焰。这是对意见的真实要求。
偶尔,我必须帮助教育传统的文本编码器如何在LabVIEW(LV)中思考。通常在这个过程中,我会听到LV糟透了。除了“语言X好得多!”之外,这种见解很少伴随着理性的观察。虽然这句话令他们满意,但它并没有帮助我理解令他们感到沮丧的事情。
那么,对于那些拥有LabVIEW 和文本语言经验的人来说,关于LV的具体事情会让你疯狂吗?
------摘要-------
感谢所有答案!下面的评论中回答了一些问题,其中一些问题存在于其他网站上,有些只是LV的真正问题。根据原始问题的精神,我不打算在这里回答所有这些:检查LAVA或NI的网站,你会惊喜地发现其中有多少事情可以克服。
答案 0 :(得分:12)
LabVIEW使实现并发/并行编程变得更加容易,真实。然而,不会使调试,测试或思考关于并发/并行性更容易。您仍然可以在LabVIEW中编写错误的并发代码,并且(与任何语言,平台或工具集一样)没有银弹或魔术棒使并发“正常工作”。
如果有的话,你必须更加小心并发,因为如果你没有明确地考虑(并声明)它,那么LabVIEW可能会让你并不想要的东西。
其他牛肉:这不是文字。以有意义的方式表示数据流意味着图形语言,这意味着您无法使用我们几十年来操作文本的工具,从sed到emacs的所有内容。这也意味着源代码控制应用程序必须将您的代码视为不透明的二进制文件,而不是...源代码。反过来,这使分支和合并运动变得痛苦。
答案 1 :(得分:12)
我很欣赏LabView,特别是能够轻松驱动硬件(当然,当它是National Instruments的硬件时),以及并发编程功能。但是在代码导航中反对基于文本的编程语言:
if error return; else do stuff
代码。 答案 2 :(得分:8)
Labview非常适合控制硬件。我已经编写了几个Labview应用程序来收集数据(来自各种传感器的模拟电压)和控制硬件(主要是压电电机)。 Labview使得并行执行多个任务变得相当容易。
现在回答你的问题。我对Labview感到沮丧。
组织方框图花费的时间
也许,因为我自学成才,我花了太多时间试图清理电线并试图跟踪它们,试图破译它们所携带的数据及其发展方向。
我应该能够使用参数输入我需要的函数/方法的名称,而不是......
“嗯...我需要计算RMS vi 那现在会在哪里?现在我需要一个 和操作。好的,回到顶部 级别,逻辑功能,哪一个 其中就是AND哦,就是这样 一。放在图上将它连接起来 测试!那只花了15 分钟!“。
但是可能有一种更有效的方法来使用Labview,我只是不知道它!
答案 3 :(得分:7)
1.LabVIEW对象不通过引用传递。
2.没有其他观众存在(特别是免费观看者)用于查看方框图
3.需要打开大量的窗口来查看项目。希望它是MDI,以便减少窗口数量。
答案 4 :(得分:6)
我最沮丧的是它把我的手从键盘上移开了。我是一个触摸打字员,可以用文本语言快速编写代码。 LabVIEW强制您使用鼠标从菜单中选择VI和程序节点,并将节点连接在一起。虽然如果你是一名电气工程师,用于在图形环境中设计电路,这是非常快速和方便的,但如果你习惯于输入你的代码,这将是一件痛苦的事。
披露:自从我上次使用LabVIEW以来已经有两年了,所以接下来的两个可能现在已经解决了。
下一个烦恼是来源控制。您最常使用源代码控制存储库执行的操作之一是将当前版本与先前版本区分开来以查找更改。你不能用像LabVIEW这样的图形语言来做到这一点。流行的版本控制系统,如CVS和SVN,在幕后使用基于文本的差异工具。我希望NI为你们所有仍在使用LabVIEW的人提供自己的版本控制解决方案。
我遇到的最后一个烦恼是缺乏真正的面向对象语言功能。 LabVIEW 6i,我使用的最后一个版本,最好是基于对象的。没有人能真正准确地宣称它是面向对象的。我无法使用继承创建真正的类层次结构,并且仅为少数内置类型保留了多态性。我意识到6i是两个版本的,所以我真的希望这是固定的。
答案 5 :(得分:6)
GUI中缺少Unicode支持
这使我们日本公司的发展变得困难。
更新:显然在8.6中有一些支持。请参阅A List of Tips and Tools for using Unicode in LabVIEW。
答案 6 :(得分:5)
我想补充一点,我认为labview非常强大且设计精良。我很少遇到让我希望自己拥有不同语言的东西。
答案 7 :(得分:4)
缺乏差异和合并(“专业”许可除外)
我们在工作中使用SVN和TortoiseSVN。我很沮丧,我不能做差异,看看文件中发生了什么变化。在使用SVN时,执行“差异”是日常工作流程的一部分,因此看到文件发生了变化,但不知道它是微不足道的还是实质性的,这是令人沮丧的。做差异也可以对变化进行系统的审查。
我听说“专业”有某种差异工具。我难以说服管理层我们需要专业的“差异”功能。而且我无法确切地读到它实际上与TortoiseSVN顺利集成。
源控制的使用被认为是行业最佳实践之一,因此NI非常适合全面支持它,而不仅仅是“专业”许可,以免NI被视为阻止采用最佳实践
答案 8 :(得分: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代码,但你可以发现链接和引用 - 它只是以完全不同的方式完成。学习曲线的东西。
答案 9 :(得分:4)
无法放大和缩小程序框图。是的,设计应保存在一个屏幕上或仅向一个方向滚动,但我已经从第三方供应商处获得了必须使用50英寸显示器进行开发的代码 - 代码在各个方向上永远存在!
(2009年1月23日):使用查看 - >导航窗口查看整个图表的鸟瞰图(前面板和图表面板)。当LabVIEW决定将程序框图中创建的新控件放在前面的随机位置时,这可能很有用。
答案 10 :(得分:3)
我编写了一个程序(用C ++编写)来控制计算机上的rs232设备但被要求提供驱动程序或Vi或其他任何用于labview的程序。我完全放心地下载了labview,我可以在短时间内敲出一些东西。 (我是一名常春藤学校的学生,用C ++编程了15年,学过并使用过C,Scheme,C#,Java等等 - 这应该是一个明智的选择)
我还下载了labview的示例应用程序和文档。
我对结果感到震惊。 Labview是巨大的,缓慢的和非直观的。它不遵循我习惯使用MFC或Visio或Rational Rose或VB等的范例。试图找到正确的文档也是一种艰难的经历。那里有很多人需要了解Labview才知道从哪里开始。
这是一个巨大的计划,做了这么多。没有人向你展示如何使用它是非常困难的。我自学了很多东西,但到目前为止,labview一直没有找到我。 (因为我没有像我应该花费的时间那么多,但到目前为止这是令人沮丧的经历)
总结一下 - 它是巨大的,缓慢的和非直观的。这些文档势不可挡。
(我仍然希望有一天能完成这个项目)
答案 11 :(得分:3)
一个项目高于其他项目:
缺乏测试驱动开发的工具
如果我可能会有一段时间的滑稽,那么现在这已经很大了,因为我没有在没有参加考试的情况下去洗手间。
编辑::我全部收回,查看http://forums.jkisoft.com/index.php?showtopic=973。到目前为止它的效果很好!
答案 12 :(得分:3)
一个特色漏洞:IIRC没有任何元编程设施可言。只要您正在构建的任何内容与LV设计师认为您想要的抽象级别相同,它就非常适合构建。
在过去的20年里,我(通常)已经移动到更高和更高的抽象层次。大约一年,LV很整洁,因为它略高于我使用的。然后我吹过它,LV看起来每年都过时了。
答案 13 :(得分:2)
澄清LabVIEW的“图形差异”:
LabVIEW不能同时在内存中同时拥有VI的多个副本。
直到版本8.5,这意味着如果我想对版本1区分我的VI.vi版本2,我必须(手动)用不同的名称创建它的副本,打开它,然后告诉LabVIEW进行比较它与我的原创。
我的理解是他们在8.5中稍微自动化了这个过程,为你提供了一种三向合并工具。
答案 14 :(得分:2)
Labview可用于编写大型复杂的软件项目。毫无疑问,Labview比基于语法的语言更有趣。我使用labview编写了数学上密集的动态模拟。较新版本的Labview包含许多令人兴奋的功能,特别是对于使用多个处理器。我非常喜欢Labview。但我不建议任何人。
不幸的是,除了简单的采集和显示之外,它绝对是一场噩梦。有朝一日可能会被认为是基于文本的语言的可行替代方案。然而,NI的开发人员一直选择忽视困扰labview的三个基本问题。
1)它不稳定,充满了虫子。有几千个错误已发布到labview支持论坛,尚未修复。其中一些非常严重,例如内存泄漏或基本功能中的数学错误。
2)文档非常糟糕。通常情况下,当您在本地帮助文件中查找labview函数的帮助时,您会发现一个孤独的句子,它只是重述您试图找到某些细节的项目的名称。例如用户在纹理过滤器模式设置中查找帮助文件,并且帮助文件中唯一写入的内容是“纹理过滤模式 - 选择用于纹理过滤的模式”。哎呀,谢谢。那清除了事情,不是吗?问题比这更深刻;通常,当您要求国家仪器的技术代表提供关于labview功能或数学函数的特定行为的关键细节时,他们根本不知道他们自己的库中的功能如何工作。这听起来有点夸张,但相信我,不是。
3)虽然保持图形代码清洁并且记录良好并非不可能,但Labview旨在使这些任务既困难又低效。为了防止代码变得混乱,混乱,你必须经常(每几个操作)使用像cluster,sub-vis和巨型定义控件这样的结构(可以在大型项目中扩展多个屏幕)。这些结构通过迫使labview在内存中制作多个数据副本并执行无偿操作来消耗内存并破坏性能 - 所有这些都是为了使图形图看起来像彩虹色的意大利面条,在任何地方都没有任何评论或文字。在labview中编程就像在玩魔鬼一样。想象一下,你的巨型软件项目是一个墙壁大小的流程图,根本没有任何文字。现在想象所有的线都相互交叉了一千次,这样跟踪数据流是完全不可能的。您刚刚设想了在labview中编程的最自然,最有效的方法。
Labview很酷。每个新版本的Labview都会越来越好。如果NI不断改进它,那么作为通用编程语言有一天会很棒。目前,作为大型或逻辑复杂项目的软件开发平台,这是一个非常糟糕的选择。
答案 15 :(得分:2)
阿齐姆,
你会对版本8.6感到满意,它有两个功能可以攻击你的挫败感:
添
是什么意思?Labview是巨大的,缓慢的和非直观的
如果您有示例和改进,请告知 如果你有麻烦建立一个驱动程序,看看出货的驱动程序(例如万用表)。尝试找一个带驱动程序的类似仪器并根据需要进行调整,我知道NI肯定会帮助你或其他人。请将您的问题提交至LAVA或NI forums LabVIEW使用的不同范式(数据流)可能是并行编程的解决方案(至少NI告诉我们),Visio不是编程语言,不好意思打破这个消息。使用初学者手册(适用于所有人的LabVIEW)是一个非常好的开始。
吨
答案 16 :(得分:2)
我是LabVIEW的新手。类似Photoshop(空格键保持,左键单击和拖动)鼠标平移功能非常直观。
答案 17 :(得分:1)
难以分支和合并:差异并不能很好地隔离变化,案例结构中一个案例的小变化可能会给你带来许多“差异”。据我所知,合并必须手动完成。
构建简单逻辑的时间很长:我发现简单的逻辑可能需要大量的布线和绘图,一旦你想要改变它,就必须重新绘制所有内容。
答案 18 :(得分:0)
在Labview中,如果没有先打开VI,我找不到VI的来电者。