LabVIEW使用心得和常见错误及解决方法

#LabVIEW使用心得和常见错误及解决方法


[TOC]

##常见错误及解决方法

Q1:一开始拿到题目,一无所知,对于系统的每一个部分,我们都不了解,不知如何下手。

  • 这是我们组面对的最首要问题,往往这个问题是大多数人在学习一项新知识时必有的困惑,而解决问题的方法却是我们必要掌握的,要经历锻炼的。通常我会浏览官方论坛,查看NI工程师及其他人的技术文档,最后发现LabVIEW中有很多经典的范例,非常适合在有课题需要的时候学习掌握,最后在此基础上进行修改。一方面,范例中都一定是可以运行的正确的程序,还会在关键部分有注释;另一方面,官方往往提供的都是基础的范例,比较适合初学者掌握学习,进行深度挖掘和改造。在我做地图调用的时候,我在官方的网站上down到了一个外国人调用google地图的example,受益匪浅。做工程的人,很多时候并不需要从最原始的东西开始研究,要懂得站在巨人的肩膀上眺望地平面。

Q2:字符串转换数值时,无法转换浮点小数。

  • 需要用“分数/指数至字符串转换” 函数,该控件可从偏移量位置开始,使字符串中的下列字符:0-9、加号、减号、e、E、小数点(通常是句点)解析为工程、科学或分数格式的浮点数,通过数字返回。

Q3:串口传输数据并用波形图显示时,波形图无法实时显示连续的波形,每个数据都会掉到0再上升。

  • 需要用到反馈节点,连接“数组插入”的n维数组脚和输出数组脚。如下图所示。
    LabVIEW使用心得和常见错误及解决方法_第1张图片

Q4:我们在做大作业的时候,因为控件较多,功能较复杂,当一个vi文件中出现多个while循环时,会出现有的部分程序始终不运行的情况。

  • 只有当其中一个while循环中止后才会进入另一个while循环巡行。如果子vi中的循环不能退出,子vi节点就一直在运行。对于LabVIEW的数据流编程机制来讲,一个节点没有执行完,它的所有输出端口就不会有有效数据输出。解决方法:一是把子vi中的循环提出到主vi里来。二是使用全局变量,并在主vi中使用并行循环来控制子vi的结束。
  • Labview编程的主要特点是数据流形式,这便于VI大量的按照并行方式运行,优化了程序的计算性能。即使是这样,当出现循环结构时,也会出现部分程序不运行的情况。因为运行条件是输入是循环结构中的某部分局部变量。

Q5:当while循环函数内部含有for循环函数时,无法操作停止控件时while循环停止

  • 如果停止控件放在for循环函数外while函数内,当for循环没有结束时,点击停止是无法使事件停止运行的。因为此时for循环没有结束,即使改变了停止控件的当前状态,它仍然不起作用。只用将停止控件放入for循环中,从for循环引出来连接到停止while循环的循环条件,才能有效停止。

Q6:使用串口时发生如下错误Unable to open session to “ASRL1::INSTR”

  • 其他软件占用了串口,需要关闭其他应用程序。

Q7:每次使用时CPU占用过高,电脑卡着不能动。

  • 循环里没有加延时。

Q8:调试GPS部分,创建数组为输入控件时,需要将数组赋特定的初值,发现每次关闭再打开vi文件时,数组中的内容会清空。

  • 数组为输入控件时,每次打开vi文件都会初始化各个控件,在初始状态下,输入控件的值都会赋0,只有将要赋的定值设置为默认值,才会保留输入控件中想保留的数据,防止关闭软件造成的赋定值消失,不方便调试。

通过文件或注册表方式先把控件当前值存下来,再下次打开时再从文件或注册表把值读回来。使用VI Server技术在保存控件当前值为默认值,但这种方法只能处于编辑状态使用,在生成exe文件后不能使用。

Q9:当程序框图中程序很多,有的部分可以并行运行,有的部分可以顺序运行,如果将这些都放在一个while循环会出现无关的延迟。

  • 建议使用顺序结构,按顺序结构来规定某些程序的执行顺序,这样不存在竞争。而把初始部分程序放在while循环外,特别是当初始程序中要调用比较复杂的引用时,比如3D模型的调用和初始化。

##学习心得

隧道、移位寄存器、循环隧道、自动索引隧道的关系

  • 隧道——局部变量,隧道相当于每次进来循环体之后把循环体外的值赋予循环体内的局部变量,所以不管循环体内执行几次,其结果也等同于只执行了一次。
  • 移位寄存器——静态局部变量,每一次在循环体内执行,都会把右边移位寄存器出口的值用作左边入口的值,所以移位寄存器的值能一直保留。移位寄存器的特殊之处在于在循环结构两端的接线端是强制使用同一内存的。因此,上一次迭代执行产生的某一值,传给移位寄存器右侧的接线端,如果下一次迭代运行需要用到这个数据,从移位寄存器左侧的接线端引出就可以了。
  • 循环隧道——while默认下的隧道,数据传入传出的值不发生变化,是循环后的最后一直数
  • 自动索引隧道——for循环默认下的隧道,隧道在循环内一侧会自动取出数组的元素,依顺序每次循环取出一个元素。用索引隧道传出数据,可以自动把循环内的数据组织成数组,最后输出的是一个数组的形式。

有的控件的参数可以为多个,比如0、1、2,且代表不同的意思。如何使用常量定义,使得它们有名字。比如讲曲线拟合时,方法选择上。

LabVIEW使用心得和常见错误及解决方法_第2张图片

  • 鼠标移动到相应引脚,点击创建常量,即可使用该方法下所有的类型,更加方便快捷。
    这里写图片描述
  • 还可以通过制作自定义类型的方法。

在使用簇时,总是出现数据连接类型错误。

  • 这是因为簇中顺序可能与连接后端的顺序不一致,导致数据连接错误。
    为了避免簇中用可能出现的错误,以及让簇应用起来更方便,使用簇最好遵循以下原则:
  • 凡是用到簇的地方,就为它造一个类型自定义,在程序所有要用到这个簇的地方,都使用类型定义的实例。这样一是可以保证所有的簇都完全一致,避免图4 这种错误;二是一旦需要变动簇中的元素,只需在类型定义中更新就可以了,不必挨个 VI 修改。
  • 凡是在需要解绑或捆绑的地方统统使用按名字解绑和按名字捆绑来实现。使用带名字的解绑和捆绑,可以直观的显示出捆绑中元素的名字,这样不会因为顺序的不同而导致错误的连线。

你可能感兴趣的:(LabVIEW)