代码中常见的错误.doc

代码中常见的错误.doc

ID:61507795

大小:73.50 KB

页数:5页

时间:2021-02-08

代码中常见的错误.doc_第1页
代码中常见的错误.doc_第2页
代码中常见的错误.doc_第3页
代码中常见的错误.doc_第4页
代码中常见的错误.doc_第5页
资源描述:

《代码中常见的错误.doc》由会员上传分享,免费在线阅读,更多相关内容在应用文档-天天文库

1、LabVIEW代码中常见的错误发现了程序的问题再回头去调试,在查找程序错误时就不可避免地要花大量时间。要调高开发效率,最好是在编写代码时就避免一些常见的低级错误,这样可以节约大量的调试时间。有些编程错误差不多是每个LabVIEW程序员都曾遇到过的。在编写相关代码的时候,对这些问题多留心一下,就可以大大减少调试时间。1.数值溢出图1:数值溢出错误图1中的VI只做了一个简单乘法300*300,不加思索就应该知道答案是90000,但程序中乘法节点给出的结果却是24464。乘法节点是不会错的,错误是由于程序中使用

2、的数据类型是I16。I16能表示的最大数目只有32767,所以在乘法计算中出现了溢出。避免此类错误的方法是,在程序中使用短数据类型时,一定要确认程序中的数据绝不会超出该类型可以表示的范围。2.For循环的隧道循环相关的介绍可以参考《循环结构》。数据传入传出循环结构可以通过移位寄存器(ShiftRegister)和隧道(Tunnel)两种方式。隧道又有两种类型:带索引的和不带索引的。移位寄存器一般用在需要局部变量的情况下,循环运行一次的输出数据要作为下次运行的输入数据使用;循环外的数组数据通过带索引的隧道在

3、循环体内就可以直接得到数组元素;除此之外,简单地在循环内外传递数据,使用一般的隧道就可以了。值得一提的是,如果一个数据传入循环体,又传出来,那么就应该使用移位寄存器或带索引的隧道来传递这个数据,尽量不要使用不带索引的隧道。因为For循环在运行时,循环次数有可能为0。在循环次数为0时,大多数情况,用户还是希望传出循环的数据就是传入值,但使用不带索引隧道时,输入值有时会被丢失的。如果使用移位寄存器,即使循环次数为0,也不会丢失传入的数据。因为移位寄存器在循环上的两个接线柱指向的实际是同一块内存,而输入输出两个

4、隧道指向的是不同的内存,数据不一定相同。图2:For循环上的隧道图2中的程序,vireference传入,再传出循环均使用了隧道。如果循环次数为0(Controls数组为空),vireference再传出循环时,信息就丢失了。这不但有可能造成后续程序的错误,而且由于vireference的信息丢失,再无法关闭打开的vi,造成了程序泄漏。Error数据线(黄绿色的粗线)在传入传出数组时,一定要使用移位寄存器。原因还不仅是为了防止在循环次数为0时,错误信息丢失。通常一个节点的ErrorOut有错误输出,意味着

5、后续的程序都不应该执行。在错误的情况下继续执行程序代码,风险非常大,可能会引起程序,甚至系统崩溃。只有使用移位寄存器,某次循环产生的错误才会被传递到后续的循环中,从而及时阻止后续循环中的代码被运行。3.循环次数与其它语言相比,LabVIEW的For循环有一大特点,在某些情况下它并不要求一定要输入循环次数,而可以根据输入数组的大小自动决定循环次数。通过带索引的隧道,可以把数组分解成元素传递到循环体内,此时不需另行设置循环次数N,循环的次数就是数组的长度。每次循环,带索引的隧道便给出一个元素。循环体上可以有两

6、个或更多的输入数组使用带索引的隧道,此种情况下容易引起错误。这时,循环的次数等于几个数组中长度最短的那个数组的长度。如果另外又设置了循环次数N,那么循环次数就是N与输入数组长度这两者的最小值。调试时,如果发现一个本该运行多次的循环没有运行,那么很可能就是因为它的一个输入数组是空的。While循环同样也可以使用带索引的隧道,但是我不建议大家这么用——如果需要用到带索引的隧道,还是使用For循环更为适宜。因为while循环的循环次数不由数组个数决定,而是由停止条件决定的。如使用了带索引的隧道,你还需要考虑当数

7、组大于、小于循环次数时,程序应该如何处理,所以还是在循环体内作索引比较方便。如果希望循环次数与数组大小保持一致,那自然是用For循环的程序更加清晰易懂了。4.移位寄存器的初始化图3:没有初始化的移位寄存器看图3中这个程序,因为它在while循环上使用了带索引的隧道,所以可读性不那么好。arrayout的运行结果是什么,还要考虑一阵子才能给出答案。实际上这个程序,即使输入不变,每运行一次,arrayout的结果都是不一样的,它的长度一直在增加。这个问题就出在没有给程序中的移位寄存器一个初始值。没有初始化的移

8、位寄存器,总是保存上次运行结束时的数据。这个特点在某些情况下可以被程序员利用,比如用它当作全局变量,随时把数据存入或取出(一个例子是《如何使用VI的重入属性》中的图4)。但多数情况下移位寄存器还是被用作为循环内部的局部变量的,这时就一定要对它初始化,以防止潜在的错误。5.Cluster图4:Cluster传递数据出错图4的程序中有个奇怪的错误,明明应该是weight加1怎么运行完后的结果变成了high加1了呢?直接揭开谜底吧,

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。