LabVIEW程序风格协定II
扫描二维码
随时随地手机看文章
Block diagram是其他人看懂VI如何工作的主要途径,因此它常常需要我们遵循一些简单的步骤来使Block diagram组织性更强,更易阅读。
VI的Block diagram的样式是非常重要的就如前面板的样式一样。用户可能看不到Block diagram,但是其他的开发人员可能看到。一个计划好的,格调一致的Block diagram是很容易理解以及便于修改的。
连线技术
你可以使用在工具条上的下拉菜单来排列分配目标对象在Block diagram中的对称位置。当对象被整齐的排列分配好后,你可以使用直线来连接这些对象。使用直线连接可使得Block diagram更易阅读。
下面一些好的提示,告诉你如何使得Block diagram更加整洁:
1)避免把线置于Block diagram中如子VI或结构对象之下,因为LabVIEW可能隐藏一些结果线的片断。你所画的线务必要让你清楚的看到它是否正确的连接到终端上。
2)尽可能少加弯曲,缩短线长。避免把线拉的太长,这样不容易阅读。
3)删掉无关紧要的线。
4)在你使用连线来传递数据的时候避免使用局部变量。每个读取数据的局部变量都会建立一个数据的拷贝。
5)在数据没有被用于结构之中,不要把线连通结构。
6)使平行的线间空隙均匀。
内存和速度优化
优化LabVIEW VI的使用和运行时间,你有很多需要做。当程序有大量的数组或者严格时间限制的时候,优化显得尤为重要。
虽然优化是一个非常棘手的题目,以下可以作为程序的一些基本的优化操作:
1)如果在While loop中速度不是很重要的,添加一个等待功能块,可以避免拖慢其他任务。一般来说,LabVIEW会以最快的循环速度来运行While loop中的代码,这样会很耗费系统资源,从而使得其他一些代码得不到最有效的执行。这样会看上去电脑运行的非常慢,及时它仅仅实在运行几个简单的循环。
用Wait(ms)功能块来加入稍许的延迟可以帮助电脑正常运行循环以外的其他任务,而不影响循环的正常工作。一般设置一个50到100ms的延迟完全足够了,但是程序中的其他一些因素可能影响到延迟。延迟不合任何数据发生关系,如图6所示。
图11 While Loop 50毫秒延迟
如要完全避免这一问题,使用事件结构。事件结构不会消耗处理器资源,它会等待用户界面事件发生后才进行相应的动作。
2)如果可能,尽量避免在循环中使用建立数组功能块来建立数组,因为功能块会不停的调用LabVIEW的内存管理器。建立数组一个更有效的方法是使用自动索引或者数组大小预定义并使用数组元素替换功能块来添加数据到其中。在字符串处理时同样会有这样的问题存在,因为在内存中LabVIEW是把字符串按照字符数组来处理的。
3)尽可能珍惜使用全局和局部变量。你可以使用全局和局部变量来有效的书写VI。然而,如果你滥用全局或局部变量,特别是数据类型,会增加VI的内存使用量并影响性能的表现。
除此之外,你同一个程序中同时读写全局变量的时候可能碰到紊乱的情况。这些紊乱的情况在调试的时候很难被发现,因为同一个全局变量在不同的VI中没有数据关联。
考虑使用功能全局变量来替代全局变量。功能性全局变量不会建额外的数据拷贝,并且允许如初始化,读写和置空等操作。
4)选择合适的数据类型数组来操作数据,对于控制程序在内存中使用量控制来说是很重要的。例如,如果你有100000个扩展精度的浮点数组,但是实际上只需要以单精度浮点值来进行存储,这样会出现内存不够使用的情况。使用单精度浮点值数组进行储存,可以有效的减少内存的使用量。下表可以看出不同数据类型占用内存的情况。
5)避免强迫数值类型转换的情况出现,可以有效的降低内存的使用量和速度。强迫类型转换出现会使得LabVIEW在转换过程中再复制一份数据。特别是在你的数组特别大的时候,其效果更为明显。
6)前面板指示器数据的频繁更新会影响到VI的性能,特别是如果你在用图形或者图表显示数据的时候尤为明显。为了优化这些VI,在前面板上只显示必要的信息,并且只有在更新数据和指示器中数据不同时候才进行数据的刷新。
大小和位置
Block diagram窗口的大小会影响你LabVIEW代码的可读性。不要让Block diagram窗口的大于你的屏幕尺寸。在确保LabVIEW代码能显示完的情况下,尽量缩小Block diagram窗口的尺寸。如果代码大于窗口大小的话,会很难于阅读,因为这不得不使使用者来回拉动滚动条。如果代码实在太多了,而一个屏幕不能显示完的话,建议只在一个方向上进行滚动(推荐滚动方向为左右方向,因为LabVIEW为数据流格式传输数据,推荐的格式也是从左到右,所以我们也建议程序代码太大的情况下,左右移动为好,见下条规则)。
从左到右布局
LabVIEW使用从左到右的布局,所以Block diagram也需要遵循这一规则。因为程序中的元素不能决定执行的顺序,所以要避免从右到左的连接。只有连线和结构可以决定执行的顺序。
Block Diagram注释
对程序进行修改和维护的开发者需要一个对block diagram好的文档说明。没有这个,修改代码是一件十分耗时和容易造成新的错误根源。以下是一些对Block diagram注释的建议。
1)使用注释来帮助解释Block diagram代码的作用是什么。LabVIEW代码虽然是图形化的,但是它没有自注释功能。在功能面板上的自由标签可做block diagram注释之用,加上一定的背景颜色,可达到注释的效果。
2)不要在功能块和子VI调用上显示标签,因为他们可能会很大,而且显得十分笨拙。开发者可通过Context Help窗口看到功能块或者子VI的名字。
3)在连线上使用自由标签来确定他们作用。贴上标签的连线对于来自shift register和跨越了整个block diagram的长线线条来说十分有用。
4)在结构上使用标签来确定结构的主要功能。
5)使用标签来显示常量的特性和功能。
6)在调用库功能节点时候使用标签可以明确功能节点的作用和调用者路径。
7)用注释来解释Block diagram中运算法则的功能。如果使用某本书或者参考资料的运算法则,可用注释来提供这些参考的信息。
调用库功能节点和代码接口节点
包括调用库功能节点和代码接口节点(CINs)的VI是根据平台而定的。使用调用库功能节点来调用共享库的VI由平台而定,如果你在不同的平台下调用,可能你的到的结果是完全不同。如果你把包含调用库功能节点的VI移植到其他平台上,你必须更新节点调用共享库所用到的目录路径。
如果你写的VI含有CINs,对于不同的平台你需要不同的VI版本,因为不同的平台编译的CINs可能不同。当你移植包含CINs的VI到其他平台时,你必须重新在信的平台上重新编译代码,并重新把它加载到CIN中去。
如果VI包括调用库功能节点或者CIN,你又想在不同的平台上使用该VI,一定要考虑提供不同版本的VI来适应不同平台的调用需要。
类型定义
当你在超过一个地方使用同样的唯一的控件或者当你有非常的数据结构需要在几个VI间传递的时候,请使用类型定义。使用类型定义控件,LabVIEW会在各个VI间自动把改变传递到控件或者数据结构中。
顺序结构
少使用顺序结构,因为他们会隐藏代码。尽量靠数据流来控制运行的顺序,而不是用顺序结构。当你在顺序结构中用到顺序局部变量时,你会破坏从左到右的数据流规范。为了帮助控制数据流,你可以使用错误簇。
如果你必须使用顺序结构,尽量使用Flat顺序结构,它不会隐藏任何代码。如果你在VI中使用Stacked顺序结构,一定要把最重要的一帧显示出来。
IX.图标和连接板风格
在为VI建立图标和连接块时使用好的风格技术对那些VI的使用者来说是非常有益的。
图标
图标是VI在面板和Block diagram中VI的代表。当子VI拥有设计好的图标,开发者可以很好的理解子VI的意思,而不需要过多的文档描述。
在建立图标时,使用一下建议:
1)为每个VI分别建立一个有意义的图标。LabVIEW库中有许多设计好的图标,通过图标可以很容易理解程序的功能用途;在可用的地方使用他们作为原型。如果你没有图片,文字也是可以用来表达的。如果你局部化应用程序,同样务必局部化图标中的文字。
提示 在文字图标中8p的小字体看上去是最舒服的。
2)建立图标的时候不要使用口语化的文字。口语化的文字是很难翻译的。翻译不好可能导致用户对图标错误的理解。例如,一个数据采集的VI使用一副树枝图片或者伐木工人的图片,则不好表示其意思。
3)为关联的VI建立统一的样式。这能帮助使用者直观上上层VI和被调用子VI之间的关系。
4)如果需要打印用,则需要使用黑白图标。不是每个用户都有彩色打印机。
5)建立图标使用尺寸为32×32象素。小于该尺寸的图标在选择和连接的时候看上去会很难使用。看上去也很不舒服。
6)确保子VI图标在Block diagram上是可见的。右键点击子VI,选择可是项目》终端。确保终端选项没有被选中。子VI图标比Block diagram上的连接块更有用。
图标形象例子