精华内容
下载资源
问答
  • 大型的labview程序实例
    2021-01-17 18:40:48

    问题引出

    在使用LabVIEW软件编写大型测试程序时,很多时候需要将原始采样数据或者分析处理后的数据在硬盘上存储为文件,而存储的格式可以是直观的普通的文本文件,也可以是占用空间小的二进制文件,除了这些外,LabVIEW中还提供了一种更为简洁的文件格式的支持,即电子表格文件的支持,在LabVIEW中可以利用其提供的现成函数,方便的对数据进行电子表格文件的存储与读取操作。

    电子表格是格式化的文本文件,在电子表格中,一般用制表符隔开各列,用行结束符隔开各行,该文件可以使用微软的Excel软件打开,也可以当作普通文本使用文本编辑器进行打开。

    下面通过一个例子演示如何在LabVIEW中读写电子表格文件。

    示例说明

    该例功能是,在LabVIEW中产生两路仿真信号,分别为包含1000个采样点的正弦波信号和余弦波信号,将这两路信号在硬盘上存储为电子表格文件,随后读取该电子表格文件中的这两路信号数据,最后将这两路信号在波形图控件上进行显示,前面板如下图所示:

    9b1c1b2da25fe1a1e40504661491fe20.png

    在前面板上放置了两个控件,一个是文件路径输入控件,用于设置数据的保存/读取路径,一个是波形图显示控件,用于显示两路波形信号。

    程序框图实现

    程序框图设计如下图所示:

    f4cb3de3697541c141bccb1500d9f1cc.png

    为简单起见,在程序框图的For循环内部使用“正弦”、“余弦”函数分别产生包含1000个点的正、余弦波形的一维数组,在For循环外部将这两路一维数组信号组合成一个2行1000列的二维数组,使用“写入电子表格文件”将其存储到文件中,使用“读取电子表格文件”函数将其读出为二维数组,直接将其连接到波形图控件上进行显示即可。

    这儿用到了读写电子表格文件的两个关键函数,下面分别进行说明。

    1、“写入电子表格文件”函数,其参数意义说明如下图所示:

    8e2f9d1e94c210dab74d40c0c296fed4.png

    本例中,设置了参数“格式”为“%.3f”,意味着存储的每个数据小数点后保留3位数字。“转置?”参数为假,意味着按原始数组维数即2行1000列进行存储,每一行代表一路数据,若此参数设置为真,则是指对原数组进行转置,变为1000行2列,每一列代表一路数据。

    2、“读取电子表格文件”函数,其参数意义说明如下图所示:

    1f10424194d091e1c38298ff9115e1a0.png

    本例中,参数“格式”和“转置”需与写入时完全一致,才能正确读取出电子表格文件里面的内容,其它参数取默认值即可。

    运行上面程序,假定设置文件存储路径为“D:\a.xls”,则可以看到该文件中存储的两路正、余弦波形数据,如下图所示(仅显示了2行1000列的部分数据),共2行,分别代表了正弦波形数据和余弦波形数据,且每个值小数点后保留了3位小数。

    77df306d5cfb0e54a024ecc4ab530ca1.png

    同时,在前面板的波形图控件上也正确显示了这两条波形。

    总结

    本例演示了在LabVIEW中,如何将波形数据存储为电子表格文件,以及如何从电子表格文件中读取出进行波形显示的方法,从这儿也可看出,相对于其它如C语言编程语言,在LabVIEW中读写电子表格文件是非常简单方便的,这也充分体现了LabVIEW作为图形化的编程语言,其具有开发迅速、简洁方便的特点。

    本文由编码那些事原创,请关注+转发+收藏+点赞,带你一起长知识!

    更多相关内容
  • Labview编程架构

    2018-05-30 14:22:27
    该资源适合不懂Labview编程架构的开发人员使用,并且对于初学者来说是一个不错的参考资源
  • LabVIEW 8.20程序设计从入门到精通》全面介绍了Lab VIEW8.20专业开发版中的各种编程知识与技巧。...《LabVIEW 8.20程序设计从入门到精通》语言生动精炼、内容详尽,并且包含了大量实用的技巧实例
  • LabVIEW执行速度

    2022-08-22 20:34:39
    如启用了选项对话框程序框图页上的在循环中自动插入反馈节点,则将一个或一组子VI或函数的输出端与其自身的输入端连接时,将自动出现一个反馈节点。在默认状态下,输入控件和显示控件均为异步显示,即执行系统将数据...

    abVIEW执行速度

    尽管LabVIEW可编译VI并生成快速执行的代码,但对于一部分时间要求苛刻的VI来说,其性能仍有待提高。本部分将讨论影响VI执行速度的因素并提供了一些取得VI最佳性能的编程技巧。

    下列原因可能导致执行速度下降:

    输入/输出(文件、GPIB、数据采集、网络)

    屏幕显示(庞大的控件、重叠的控件、打开窗口过多)

    内存管理(数组和字符串的低效使用,数据结构低效)

    编译器优化(在编辑器响应事件和VI执行速度之间实现最佳平衡点)

    其他因素,如执行系统开销和子VI调用系统开销,但通常对执行速度影响极小。

    输入/输出

    输入/输出(I/O)的调用通常会导致大量的系统开销。输入/输出调用所占用的时间比运算更多。例如,一个简单的串口读取操作可能需要数微秒的系统开销。由于I/O调用需在操作系统的数个层次间传输信息,因此任何用到串口的应用程序都将发生该系统开销。

    解决过多系统开销的最佳途径是尽可能减少I/O调用。将VI结构化可提高VI的运行性能,从而在一次调用中即传输大量数据而不是通过多次调用传输少量数据。

    例如,在创建一个数据采集VI (NI-DAQmx)时,有两种数据读取方式可供选择。一种方式为使用单点数据传递函数,如AI Sample Channel VI,另一种方式为使用多点数据传递函数,如AI

    Acquire Waveform VI。如必须采集到100个点,可用AI Sample Channel VI和“等待”函数构建一个计时循环。也可用AI Acquire Waveform VI,使之与一个输入连接,表示需要采集100个点。

    AI Acquire Waveform VI通过硬件计时器来管理数据采集,从而使数据采样更为高速精确。此外,AI Acquire Waveform VI的系统开销与调用一次AI Sample

    Channel VI,的系统开销大体相等,但前者所传递的数据却多得多。

    屏幕显示

    在前面板上频繁更新控件是最为占用系统时间的操作之一。这一点在使用图形和图表等更为复杂的显示时尤为突出。尽管多数显示控件在收到与原有数据相同的新数据时并不重绘,但图表显示控件在收到数据后不论其新旧总会重绘。如重绘率过低,最好的解决方法是减少前面板对象的数量并尽可能简化前面板的显示。对于图形和图表,可关闭其自动调整标尺、调整刻度、平滑线绘图及网格等功能以加速屏幕显示。

    对于其他类型的I/O操作,显示控件均占用一部分固定的系统开销。图表等输入控件可将多个点一次传递到输入控件。每次传递到图表的数据越多,图表更新的次数便越少。如将图表数据以数组的形式显示,可一次显示多点而不再一次只显示一个点,从而大幅提高数据显示速率。

    如设计执行时其前面板为关闭状态的子VI,则无须考虑其显示的系统开销。如前面板关闭则控件不占用绘制系统开销,因此图表与数组的系统开销几乎相同。

    多线程系统中,可通过高级»同步显示的快捷菜单项来设置是否延迟输入控件和显示控件的更新。在默认状态下,输入控件和显示控件均为异步显示,即执行系统将数据传递到前面板输入控件和显示控件后,数据可立即执行。显示若干点后,用户界面系统会注意到输入控件和显示控件均需要更新,于是重新绘制以显示新数据。如执行系统试图快速地多次更新控件,用户可能无法看到介于中间的更新状态。

    多数应用程序中,异步显示可在不影响显示结果的前提下显著提高执行速度。例如,一个布尔值可在一秒内更新数百次,每次更新并非人眼所能察觉。异步显示令执行系统有更多时间执行VI,同时更新速率也通过用户界面线程而自动降低。

    要实现同步显示,可右键单击该输入控件或显示控件,从快捷菜单中选择高级»同步显示,勾选该菜单项的复选框。

    注:  同步显示仅在有必要显示每个数据值时启用。在多线程系统中使用同步显示将严重影响其性能。

    延迟前面板更新属性可延迟所有前面板更新的新请求。

    调整显示器设置和前面板控件也可提高VI的性能。可将显示器的色深度和分辨率调低,并启用硬件加速。关于硬件加速的详细信息,参见所使用操作系统的相关文档。使用来自经典选板而不是新式的控件也可提高VI性能。

    内存管理

    管理VI占用的内存时,请考虑下列建议以实现最高的效率。

    避免频繁改变数据占用的空间,LabVIEW就不必对数据进行多次备份。

    开发有效的数据结构与特定数据类型配合使用,避免冗余数据备份。

    在当前版本LabVIEW中保存VI时,不分离编译代码。

    编译器优化

    要改进大型VI的编辑器响应速度,LabVIEW编译器会限制提高VI执行速度的各项优化。开发大型VI结束后,可配置LabVIEW将执行速度的优先级置于编译器响应之前。也可配置LabVIEW在程序生成中使用完整的编译器优化策略。

    在应用程序内部传递数据

    在LabVIEW应用程序内传递数据有多种方式。下表为常见的数据传递方法,按其效率排序。

    连线-使用连线传递数据并使LabVIEW控制性能优化。在数据流语言中,数据只有一个写入器但有一个或多个读取器,因而传输速度最快。

    反馈节点-使用反馈节点可保存由上一个VI或循环执行而得的数据。如启用了选项对话框程序框图页上的在循环中自动插入反馈节点,则将一个或一组子VI或函数的输出端与其自身的输入端连接时,将自动出现一个反馈节点。LabVIEW默认为启用在循环中自动插入反馈节点。反馈节点将扣留VI或函数最近一次执行得到的数据,接着将数据传递到下一次执行,或者视初始化接线端是否被移动而设置一个新的初始值。循环中的移位寄存器与反馈节点保存数据的方式相同,但移位寄存器需要连线以连通整个循环。

    移位寄存器-移位寄存器适于需在循环中保存或反馈时使用。移位寄存器通过一个外部写入器及读取器和一个内部写入器及读取器进行数据传递。有限的数据访问令LabVIEW的效率最大化。反馈节点可取代移位寄存器达到相等功能,且无需使用连线连通整个循环。

    全局变量和函数全局变量-全局变量适于简单的数据和访问。大型及复杂的数据可用全局变量读取和传递。函数全局变量可控制LabVIEW返回数据的多寡。

    控件、控件引用和属性节点可作为变量使用

    尽管控件、控件引用和属性节点皆可用于VI间的数据传递,但由于其必须经由用户界面,因此并不适于作为变量使用。一般仅在进行用户界面操作或停止并行循环时才使用局部变量和“值”属性。

    用户界面操作通常速度较慢。LabVIEW将两个值通过连线在数纳秒内完成传递,同时用数百微秒到数百毫秒不等的时间绘制一个文本。例如,LabVIEW可把一个100k的数组通过连线在0纳秒到数微秒内将其传递。绘制该100k数组的图形需要数十毫秒。由于控件有其用户界面,故使用控件传递数据将产生重绘控件的副作用,令内存占用增加,VI性能降低。如控件被隐藏,LabVIEW的数据传递速度将提高,但由于控件可随时被显示,LabVIEW仍需更新控件。

    多线程对用户界面操作的影响

    完成用户界面操作一般占用内存更多,其原因在于LabVIEW需将执行线程切换到用户界面线程。例如,设置“值”属性时,LabVIEW将模拟一个改变控件值的用户,即停止执行线程并切换到用户界面线程后对值进行更改。然后,LabVIEW更新保存控件数据的操作缓冲区,如前面板窗口打开,则重新绘制控件。LabVIEW随后便把数据发送到执行线程。执行线程位于称作传输缓冲区的受保护内存区域内。最后LabVIEW将切换回执行线程。当执行线程再次从控件读取数据时,LabVIEW将从传输缓冲区寻找数据并接收保存程序框图数据的执行缓冲区的新值。

    将数据写入局部或全局变量时,LabVIEW并不立即切换到用户界面线程。而是把数值写入传输缓冲区。用户界面将在下一个指定的更新时间进行更新。变量更新可能在线程切换或用户界面更新前多次进行。原因在于变量仅可在执行线程中运算。

    函数全局变量不使用传输缓冲区,因此可能比一般的全局变量更高效。函数全局变量仅存在于执行线程中,除非需在打开的前面板上显示其数值,一般无需使用传输缓冲区。

    并行程序框图

    有多个程序框图并行运行时,执行系统将在各程序框图间定期切换。对于某些较为次要的循环,等待(ms)函数可使这些次要循环尽可能少地占用时间。

    例如,考虑以下程序框图。

    有两个并行的循环。循环一用于采集数据且需要尽可能频繁地执行。循环二用于监测用户的输入。由于程序编写的原因,这两个循环使用同等长度的时间。可令检测用户操作的循环在一秒内运行数次。

    事实上,令该循环以低于每半秒执行一次的频率执行同样可行。在用户界面循环中调用等待(ms)函数可将更多执行时间分配给另一个循环。

    并行For循环

    LabVIEW按照顺序执行For循环。如使用For循环处理大量计算,可并行运行For循环以提高执行速度。LabVIEW可通过并行循环利用多个处理器提高For循环的执行速度。但是,并行运行的循环必须独立于所有其它循环。通过查找可并行循环结果对话框确定可并行的For循环。右键单击For循环外框,在快捷菜单中选择配置循环并行,打开For循环并行迭代对话框,启用并行循环。

    启用并行循环执行后,总数接线端下方将出现一个并行接线端,如下图所示。可使用该接线端指定LabVIEW使用的循环实例数量,以及确定某次特定循环中运行的实例。

    启用For循环的并行执行之前,请先参考关于执行性能的意见和建议。

    建议在错误列表中显示警告,当并行执行循环导致VI中的问题时,LabVIEW会及时向用户发出警告。

    子VI系统开销

    调用子VI需占用一定数量的系统开销。与历时数毫秒至数十毫秒的I/O系统开销和显示系统开销相比,该系统开销极为短暂(数十微秒)。但是,该系统开销在某些情况下会有所增加。例如,在一个循环中调用子VI达10000次后,其系统开销将对执行速度带来显著影响。此时,可考虑将循环嵌入子VI。

    减少子VI系统开销的另一个方法是,将子VI转换为子程序。在VI属性对话框的类别下拉菜单中选择执行,然后从优先级下拉菜单中选择子程序。但是,有取必有舍。子程序不显示前面板的数据、调用计时或对话框函数,不允许调试和自动错误处理,无法与其他VI实现多任务执行。子程序通常最适于不要求用户交互且任务简短、执行频率高的VI。

    第三种减小子VI系统开销的方法是将子VI嵌入其调用方VI。嵌入子VI就是将子VI的编译代码嵌入调用方VI的编译代码。如要对子VI进行修改,LabVIEW将重新编译子VI的所有调用方VI,以应用改动。内嵌子VI从本质上减少了运行时调用子VI的需求。LabVIEW在调用方VI的编译代码内执行子VI的代码。

    内嵌子VI适用于较小的子VI、循环内部的子VI、未连接输出的子VI、仅调用一次的子VI,等等。如要内嵌子VI,勾选VI属性对话框执行页的在调用VI中内嵌子VI复选框。还必须选择对话框中的预分配的副本重入执行选项。LabVIEW自动为每个嵌入的子VI分配克隆实例。

    要嵌入的子VI不能有下列特征:

    包含递归算法

    使用自动错误处理

    程序框图包含属性节点和调用节点如启用子VI嵌入,上述节点会产生编辑时错误。

    允许调试。必须要将嵌入的子VI禁用调试。

    是下列VI的一种:

    LabVIEW类的动态分配成员VI

    终端为CGen或FPGA的VI

    控件VI,自定义的控件

    多态VI

    全局变量VI

    XControl VI

    XControl库的方法VI

    只能置于LabVIEW Control Design and Simulation模块模拟框图上的VI

    即使子VI没有上述特征,在下列调用情况下,LabVIEW不会内嵌子VI:

    动态调用子VI

    调用启用了数据库访问的子VI

    另外,内嵌子VI时,LabVIEW会忽略优先级和优先执行选项。

    关于内嵌子VI带来的性能改进,请参考examples\Performance\VI

    Properties目录下的VI Execution Properties VI。

    共享变量开销

    网络发布的共享变量会显著增加CPU和内存的开销。如应用程序中有大量网络发布的共享变量,考虑使用Simple Messaging Reference Library (STM)。

    如要从一台计算设备连续发送数据流至另一台计算设备,可使用网络流函数。

    循环中不必要的计算

    如计算在每次循环后的结果相同,应避免将其置于循环内。正确的做法是将计算移出循环,将计算结果输入循环。

    例如,考虑以下程序框图。

    循环中每次除法计算的结果相同,故可将其从循环中移出以提高执行性能。如下列程序框图所示。

    如全局变量的值不会被这个循环中另一个同时发生的程序框图或VI更改,那么每次在循环中运行时,该程序框图将会由于全局变量的读写而浪费时间。

    如不要求全局变量在这个循环中被另一个程序框图读写,可使用以下程序框图。

    注意,移位寄存器必须将新的值从子VI传递到下一轮循环。以下程序框图显示了一个常见于初学者的错误。由于未使用移位寄存器,该子VI的结果将永远无法作为新的输入值返还给子VI。

    上文中提到的例子和资料,均在word中的附件里,可点击下载。

        需要说明的是,上述的例程和文档,都是可以下载的,双击即可打开,其中压缩文件是可以采用粘贴复制的方式,拷贝到硬盘上。这不是图片,各位小伙伴看到后尝试一下,这个问题就不用加微信咨询了。有关LabVIEW编程、LabVIEW开发等相关项目问题,可联系我们。

    展开全文
  • LabVIEW开发实战:Labview简介

    万次阅读 2022-03-21 01:22:27
    1、什么是Labview ...LabVIEW (Laboratory Virtual Instrument Engineering Workbench)是一种用图标代替文本行创建应用程序的图形化编程语言。 传统文本编程语言根据语句和指令的先后顺序决定程序...

    1、什么是Labview

    2、数据流的概念

    3、选择LabVIEW的原因

    4、LabVIEW 学习捷径

    5、 LabVIEW的工作环境

    6、 LabVIEW自带编程示例

    7、起源与发展历程

    8、小结

    1、什么是Labview

            LabVIEW (Laboratory Virtual Instrument Engineering Workbench)是一种用图标代替文本行创建应用程序的图形化编程语言。


            传统文本编程语言根据语句和指令的先后顺序决定程序的执行顺序,而LabVIEW则采用数据流编程方式,程序框图中节点之间的数据流向决定了程序的执行顺序。在这方面,它不同于传统的编程语言,如VisualBasic、 C、C++或Java,这些语言使用文本方式编程。

            而LabVIEW不仅仅是一款编程语言,它还是为科学家和工程师等设计的一-种编程开发环境和运行系统,编程只是这些人员工作的一部分。它用图标表示函数,用连线表示数据流向。LabVIEW提供很多外观与传统仪器(如示波器、万用表)类似的控件,可用来方便地创建用户界面。


            用户界面在LabVIEW中被称为前面板。使用图标和连线,可以通过编程对前面板上的对象进行控制。这就是图形化源代码,又称G(Graphics) 代码。LabVIEW 的图形化源代码在某种程度.上类似于数据流流程图,因此又被称作程序框图代码。前面板上的每一个控件对应于程序框图中的-一个对象,当数据“流向”该控件时,控件就会根据自己的特性以一定的方式显示数据,例如开关、数字或图形。


            LabVIEW程序被称为VI ( Virtual Instrument), 即虚拟仪器,这是因为它的很多界面控件与操作都模拟了现实世界中的仪器,例如示波器与万用表等。LabVIEW的核心概念就是“软件即是仪器”,即虚拟仪器的概念。LabVIEW 还包含了大量的工具与函数用于数据采集、分析、显示与存储等。这些工具都是向导式的工具,用户只需要一步步按照提示就可以实现与仪器的连接和参数的设置。而程序员也不用去记忆这些大量的函数,因为这些函数都以图标与名称的形式存在于一个小小的函数面板上,当需要用到某个函数时把它从函数面板上拖放到程序框图中就可以了。这一切都是图形化带来的好处。


        由于LabVIEW可以用来创建通用的应用程序,因此被称为一种通用的编程语言。但是它在测试、测量和自动化等领域具有更大的优势,因为LabVIEW 提供了大量的工具与函数用于数据采集、分析、显示和存储。同时它还提供了大量常用于自动化测试测量领域的图形控件。这使得用户可以在数分钟内完成-套完整的从仪 器连接、数据采集到分析、显示和存储的自动化测试测量系统。因此它被广泛地应用于汽车、通信、航空、半导体、电子设计生产、过程控制和生物医学等各个领域,涵盖了从研发、测试、生产到服务的产品开发所有阶段。NI网站上的应用案例供读者参考: htp://www.ni.com/solutions/。


            LabVIEW不仅可以用来快速搭建小型自动化测试测量系统,还可以用来开发大型的分布式数据采集与控制系统。在美国Lawrence Livermore国家实验室,一个花费2000万美金的极为复杂的飞秒激光切割系统就是基于LabVIEW开发的。该系统中,4台WindowsNT工作站用网络连接起来,LabVIEW用来给激光提供测量、控制和自动定序,同时作为半熟练操作者的高层用户界面。几乎安装了所有类型的IO硬件: DAQ、GPIB、串行、远程控制SCXI、VME/VXI以及IMAQ成像。由于这个项目的极端重要性,因此本项目采取了正式的软件质量保证过程。软件开发总共用了4个年度,创建了约600个VI。

    2、数据流的概念


            LabVIEW编程开发环境与标准C或Java开发系统的一个重要区别是:标准语言编程系统采用基于文本的代码行编程;而LabVIEW则使用图形编程语言,通常被称为G语言,在称为框图的图形框架内编程。图形编程消除了文本编程中设计的许多语法细节,如(;)和( {})的放置经常会让人煞费
    苦心。在LabVIEW中就不用担心这样的问题,即使是某个地方出现了连接错误,LabVIEW也会明确地指出错误,而不是像文本编程语言那样模棱两可。图形编程语言中最需要关注的是应用程序中的数据流,因为其简单的语法使程序变得更加简洁易懂。
            LabVIEW使用科学家和工程师们熟悉的术语、图标和概念,依靠图形符号而不是文本语言来定义程序的功能。LabVIEW的运行基于数据流的原理,一个函数只有收到必要的数据后才可以运行。基于这些特点,对于没有编程经验的人来说也是可以学会LabVIEW的。

    3、选择LabVIEW的原因

            选择LabVIEW开发测试和测量应用程序的一大决定性因素是其开发速度。通常,使用LabVIEW开发应用系统的速度比使用其他编程语言快4~10倍。这一惊人速度背后的原因在于LabVIEW易用易学,因为LabVIEW是专为测量、数据分析并提交结果而设计的,且LabVIEW拥有如此功能众多的图形用户界面又易于编程,使得它对于仿真、结果显示、通用编程甚至讲授基本编程概念也同样是很理想的语言。它所提供的工具使创建测试和测量应用变得更为轻松。
            LabVIEW的具体优势主要体现在以下几个方面:
            (1)提供了丰富的图形控件,并采用图形化的编程方法,彻底把工程师们从复杂枯涩的文本编程工作中解放出来。
            (2)内建的编译器在用户编写程序的同时就在后台自动完成了编译。因此用户在编写程序的过程中如果有语法错误,它会被立即显示出来。
            (3)由于采用数据流模型,它实现了自动的多线程,从而能充分利用处理器尤其是多处理器的处理能力。
            (4)通过DLL、CIN节点、ActiveX、 .NET或MATLAB脚本节点等技术,可以轻松实现LabVIEW与其他编程语言混和编程。
            (5)通过应用程序生成器可以轻松地发布EXE、动态链接库或安装包。
            (6) LabVIEW 提供了大量的驱动与专用工具,几乎能与任何接口的硬件轻松连接。
            (7) LabVIEW 内建了600多个分析函数,用于数据分析和信号处理。
            (8) NI同时提供了丰富的附加模块,用于扩展LabVIEW在不同领域中的应用,例如实时模块、PDA模块、FPGA模块、
    数据记录与监控(DSC) 模块、机器视觉模块与触摸屏模块等。
            (9)LabVIEW 开发环境可以运行在Windows、Mac或Linux系统的计算机上,用LabVIEW编写的应用程序可以运行在
    上述系统上,还可以运行在Microsoft Pocket PC、Microsoft Windows CE、Palm OS以及多种嵌入式平台上,包括
    FPGA、DSP、ARM等微处理器上。
            (10)LabVIEW用户无法作为仪器的生产者,但是可以定义仪器的功能。使用计算机、插入式硬件和LabVIEW能共同组成
    一个可完全配置的虚拟仪器,以完成用户的任务。使用LabVIEW,用户可以根据需要创建所需的任何类型的虚拟仪器,而
    其成本仅仅是传统仪器的一部分。当需求变化时,还可以立即修改虚拟仪器。
            (11)LabVIEW拥有庞大的函数和子程序库,这些库可以帮助用户完成编程中的大部分任务,使得LabVIEW用户免于被传统
    编程语言中指针、内存分配以及其他莫名的编程问题所困扰。
            (12)LabVIEW也包含特定的应用程序库代码,如数据采集( DAQ).通用功能接口总线(GPIB)、串行接口仪器控制、数据分析
    、数据显示、数据存储、Internet 通信等。分析库包含了大量实用的函数,如信号产生、信号处理、滤波器、窗口、统计、
    回归、线性代数、矩阵运算等。

    4、LabVIEW 学习捷径

    在学习与使用LabVIEW的日子里,学习LabVIEW 的最佳捷径就是——大胆尝试。

            (1)LabVIEW 入门非常容易,但是要想编写出色的程序或者稍微大型的系统,则必须学会LabVIEW 的高级编程知识。

            (2)通过LabVIEW的联机帮助和范例查找器( Example Finder) 中的相关实例提升编程水平。

    5、 LabVIEW的工作环境

            一个 LabVIEW程序由一个或多个虚拟仪器组成,虚拟仪器在后面简称为VI。而之所以称做

    虚拟仪器,是因为它们的外观和操作通常是模拟了实际的物理仪器。然而,在这些面板之后,它们有着类似于流行的编程语言,如C和B语言中的主程序、函数、子程序等。

            一般每个VI都由3个主要部分组成:前面板、框图和图标。

    注:全局变量是一种特殊的VI,只有前面板,没有框图,对图标可以编辑,但是很少有人

    编辑。

                    前面板是VI的交互式用户界面,它模拟了物理仪器的前面板。前面板包含旋钮、按钮、.

    图形及其他控件(输人控件)和显示控件(输出控件),而且通过编程,可以使用鼠标和

    键盘作为输入设备。

            框图是VI的源代码,由LabVIEW的图形化编程即G语言构成。框图是实际可执行的程

    序。框图由低级VI、内置函数、常量和程序执行控制结构等构成,用连线将合适的对象

    连接起来定义它们之间的数据流。前面板上的对象对应于框图上的终端,这样数据就可

    以从用户传递到程序,再回传给用户。

    在编写LabVIEW应用程序时,往往需要在一个主程序中调用多个子程序,那么为了实现

    VI之间的调用,VI就必须有连接器图标。被另外一个VI所使用的VI称为子VI,也可

    以称为子程序。图标是VI的图形表示,会在另外的VI框图中作为一个对象使用,连接

    器用于从其他框图中连线数据到当前VI。连接器定义了VI的输人和输出,类似于子程

    序的参数。

    6、 LabVIEW自带编程示例

            与其他编程语言不同的是,LabVIEW 拥有庞大的自带编程示例,这有助于学习- .般的编程

    技术并了解完成通用硬件输入/输出和数据处理任务的应用程序。通过NI范例查找器可以找到相关的范例。

    有几个途径可以进入NI范例查找器,一为在启动页面的右下角单击“查找范例”;

            二为在启动LabVIEW编程界面后选择“帮助”菜单,从中选择“查找范例”菜单项。

    浏览方式可以设置为任务或者目录结构。按任务浏览时,目录结构即按照任务编辑,可以很

    明了地根据自己的项目任务来选择相近的实例。

    使用NI范例查找器,还可以根据关键字直接搜索相关的示例,如Serial、Excel等,NI范例查找器将直接定位到相关的示例。

    7、起源与发展历程


            早在20世纪80年代初引入个人计算机之前,几乎所有使用可编程仪器的实验室都通过专门的仪器控制器用于控制他们的测试系统。这些价格昂贵而且功能单一的控制器通过一个必 备的端口控制使用IEEE-488总线(即GPIB总线)的仪器。到了1983 年,随着个人计算机的出现, National Instruments公司成为个人计算机的GPIB硬件接口的主要供货商。然而当时用于控制仪器的软件表现却不太好,当时几乎100%的仪器控制程序都是用BASIC语言开发的。虽然BASIC有一定的优势,例如简单、可读性强的指令集以及可交互功能等,但是它存在-一个根本性的问题:像其他文本编程语言一样,如果要通过计算机控制仪器,无论是科学家、工程师还是技术人员都必须懂得编程。他们必须把他们的应用软件和仪器使用的知识转化为文本行,而这种过程多半是繁重而单调乏味的,尤其是对那些从来没有编程经验的人来说。

    National Instruments 公司有自己的编程团队,其任务是致力于开发用于控制仪器的BASIC程序。他们敏感地注意到了仪器编程工作压在工程师和科学家身上的负担,那就是开发出一种用于,开发仪器软件程序的新工具。但是这种工具将采用什么形式呢?两位NI公司的创始人Jim Truchard和Jeff Kodosky博士,连同Jack MacCrisken(后来成为一名顾问),开始着手开发这种软件工具。Truchard主要研究能够显著地改进科学工作者和工程师们进行测试开发方式的工具。他想到的软件产品模型是电子数据表格。电子数据表格解决了Truchard、 Kodosky 和MacCrisken都同样面临的问题,即如何使非编程的计算机用户能够使用计算机。只不过电子数据表格处理的是财务计划制定者的问题,而这个三人组想的是如何帮助工程师和科学工作者。这三个人的口号是:发明出一种软件工具,它对工程师和科学工作者的影响力要和电子数据表格对财务界的影响力一样大。不过对此他们当时并没有一个具体明确的概念。


            当1984年苹果公司推出了Macintosh 计算机之后,情况出现了重要的转机。他们看到了这台小机器上的图形化特性后,就知道“图形化”就是他们今后要走的道路。因为相对于输入- -串串的命令行进行操作,人们使用鼠标和图形化界面时所发挥的创造力和高效率是前所未有的。图形.化前面板是人与测量程序交互的最佳途径。前面板与实际仪器的面板十分相似,实际上,这些程序就是虚拟仪器。理论上这是一个很好的概念,但当他们去实际操作的时候,这个概念却带来了意想不到的难题。在最初的构想下,使用交互式面板作为用户界面来写测量程序,居然要比用传统的BASIC还要困难得多。


            所以,他们决定深入研究能否发明一种创新的方式,通过Macintosh的图形化界面来建立一个更简单易用的具有交互面板的程序。他们研究了相当数量的图解技术,但每次都还是回归到数据流结构,因为这是最常用、也是最有效的方式。一旦他们能找出如何将结构化编程的概念与数据流相结合,一切问题就将迎刃而解。虚拟仪器技术由结构化的数据流框图和交互式面板组成。将图标与面板相结合的方式使虚拟仪器在其他程序框图中也能被调用。这样就能按照各种不同的需求灵活
    地构建复杂的多层次系统。


        最后,他们必须要做的就是建立-一个软件环境,能使科学家和工程师们可以简单快速地构建起虛拟仪器程序。为了不被烦心的日常工作打扰,他们与一群年轻的毕业生一起选择了一处远离公司的办公室研究这个项目。怀着改变世界的使命感,这个小组设立了一个远大的目标。面对许多开发上的挑战,有时甚至怀疑能否开发出LabVIEW,以及是否能让人们愿意购买和使用。1985年6月他们开始编写程序代码,到10月完成了原型。1986年4月正式宣布了LabVIEW的诞生,同时NI的名字首次出现在杂志封面上。不过他们低估了后期调试所需耗费的大量时间,因此直到1986年10月LabVIEW 1.0才正式发布。

    自LabVIEW 1.0 发布的20年以来,LabVIEW 从来没有停止过创新的步伐。不断地改进、更新与扩展,使LabVIEW牢牢占据了自动化测试、测量领域的领先地位。LabVIEW 图形化开发方式已经彻底改变了测试、测量和控制应用系统的开发。如今仍然在不断地扩张它的应用领域。

    8、小结

            LabVIEW是功能强大而又灵活的仪器应用和分析软件系统,它使用图形化编程语言,有时

    也称为G语言,创建成为虚拟仪器或VI的程序。用户与程序通过前面板进行交互。每个前面板

    有一个与之对应的框图,也就是VI的源代码。LabVIEW有很多内置函数,便于进行编程。在框

    图中,将部件连接起来显示数据流向。

    使用NI范例查找器可以查找所学主题相关的示例,可以通过任务或目录结构来浏览示例。

    展开全文
  • LabVIEW 8.20程序设计从入门到精通

    热门讨论 2011-04-20 16:24:28
    LabVIEW 8.20程序设计从入门到精通》可作为高等院校虚拟仪器及相关课程的教材或教学参考书,也可供从事相关工作的工程师或科研人员学习或参考。 作者简介 陈锡辉,中国科学院高能物理研究所博士。目前从事北京正负...
  • ”我接触和使用LabVIEW比较早,2001年从LabVIEW 6i 版本开始上手摸着石头过河式开发,断断续续,分分合合与LabVIEW的开发缘分倒也一致都在!在2017年左右,正好有个客户项目需要使用TestStand来完成,这再正式开始...

    有小伙伴在后台让大叔推荐一下TestStand的学习资源,其实我接触TestStand也很晚,在这里只是分享一下我所掌握的一下资讯内容,内容有点长,分为上下两篇,大家可以共同提高!

    我接触和使用LabVIEW比较早,2001年从LabVIEW 6i 版本开始上手摸着石头过河式开发,断断续续,分分合合与LabVIEW的开发缘分倒也一致都在!

    图片

    在2017年左右,正好有个客户项目需要使用TestStand来完成,这再正式开始接触和使用TestSand,关于TestStand的分享将分为两篇文章进行,本篇是上篇,主要是宏观角度讲解一下我对TestStand的认知,也是我知乎的《LabVIEW面向对象编程_初窥门径》系列编程文章的第6篇内容。关于其它的系列文章可以到我的知乎专栏上去查看。

    在这里插入图片描述

    特别警示:文章非常的冗长和啰嗦,如果只对TestStand感兴趣可只看第3部分内容。

    01 关于框架的你要先了解的一些事

    “编程工作从大体上来分,你不是在开发自己的框架中,就是在别人的框架下进行着开发。”

    在测量测控以及计量检测长期开发过程中,随着开发被测类型种类的增多,开发范围的扩展,你就会发现:除了使用到的LabVIEW编程语言提供的编程结构,字符串,界面提示框等基础库函数外,在不同的业务类型的测试测控中都会有重复的代码段,并且重复的主要表现形式有两种,一种是低层的明显可以识别出的显式共用基础功能代码段,另外一种是隐式且较为抽象的高层算法策略,为了消除重复冗余,显式低层的共用基础功能代码段可以封装为功能函数子Vi,并且进一步按较大的功能模块分组形成打包库(lvlib)结构或者是基础功能类,也即基础性框架(Framework),而隐式高层算法策略要着眼于“关注点分离”的概念,按照分层、分块的思想切分成不同逻辑单元,应用不同的面向过程和面向对象编程范型形成可以复用的高层逻辑框架,不管是高层模块还是底层支持代码都提供了的贯穿于多种相似的应用程序的能力,即表现出一致性,这都是框架代码的体现形式。

    这一篇文章主要是讲述Framework框架的概念、层次划分、测量测控主流软件框架应用、调用框架的展示,以及如何开发自己的类库和我们自己以往的相关开发经验,由于内容较多故分解成为上下两个部分。

    首先,让我们先从框架(Framework)的基本概念、三层分类以及设计三特性开始学习,“Framework”在英文字典中的意思是骨架、框架,而在软件工程领域中,“Framework指的是一组同时具备一致性、可重用性、可扩展性三准则的类库。

    框架(Framework)提供了一种构建软件系统所必需的复用基本架构及功能,协助软件开发者快速开发应用程序,并且能够显著降低出错率,明显提升开发效率,能够提供显著的规模经济效益,自从有了框架,开发人员就无须从头开始编写应用程序。

    框架 (Framework)会提供大部分部件,这些部件经过开发人员的定制和拼装,快速实现设计;但是,框架(特别是领域专属框架)也相应的用规定套路固限住了开发人员的思维,强制大家遵循规定的规范来开发应用程序。

    图片

    一般按照从下到上的层次理论来划分框架(Framework),最下层为基石层是基础框架(Base Framework ),中间层是程序框架(Application Framework),高层是领域框架 (Domain Framework)。

    **基础框架(Base Framework )**是为了提供撰写程序软件所需要的基本功能,例如Win32 API 、.NET Framework的基础编程语言库(BCL)、或者LabVIEW中的基础函数库(目录、文件操作、字符串、基本函数等等),基础框架的最为显著的特点是简单性及全面性,简单是指结构简单,可能就只是一组功能函数或者是一些稍加包装的类,并且程序员要用这些基础功能模块组合成程序时相当的耗时费力;全面性是指功能覆盖的层面是相当的广泛的,从基础的文本处理到网络传输等等,程序员可以使用基础框架编写不同领域的应用程序,因此具备高度的灵活性和弹性,缺点是不够便捷及有效率,基础框架通常扮演者一个应用程序的基础角色。

    **程序框架(Application Framework)**基础框架(BF)提供了撰写应用程序的所需要的基础功能函数,但是效率不高,便捷性较差,而程序框架(AF)是构架在基础框架之上(BF),提供快速开发所需要的半成品功能,从而方便程序员提升开发效率,典型的程序框架(AF)就是顶顶有名的MFC框架,许多人都知道MFC框架将200多行的Windows桌面程序魔法般的缩减至只需20行,而.NET Framework Window Forms框架又将它进一步改良成只需要动动鼠标就可以完成的魔法。当然高效率带来的约束就是要按照程序框架(AF)的规范套路来编写程序,另外领域也就受到相应的限制,并且不能完全自由的组合基础框架(BF)完成横跨多领域的应用软件,在LabVIEW的编程语境中,比较典型的程序框架(AF)就是适用于多线程开发测控程序开发的操作者框架(Actor Framework),并且该框架应用了诸多LVOOP的编程技术。

    **领域框架(Domain Framework)**是为行业领域特殊定制的专属框架,限制条件更多,提供的功能模块相比与应用框架(AF)更加的具体实用,使得程序员开发软件速度无与伦比,另外不但速度提升了,需要开发代码也大幅减少,代码质量和稳定性也相应的有了一定的保证,在计量测试行业最典型的领域框架莫过于Fluke公司的Met/Cal软件平台了,在国外的校准软件市场上等同于事实上的工业标准,除了Fluke公司本身开发Met/Cal测试型号序列程序外,还有大量的第三方校准公司为其提供定制化的测试序列程序。当然,高效率的提升是牺牲软件的广泛性,提供特殊专属功能所带来的。并且开发一款一致性、可重用性和便于扩展的领域框架是一项耗时费力的编码工程,并且还要不断的重构提炼,设计抽象才能越来越精确,这往往是中小型项目难以维系开发出领域框架的重要原因。

    图片

    在了解了框架的三个层次分类后,让我们再进一步学习一下框架设计的三个设计准则:一致性、可重用性、可扩展性;一致性是指框架代码在被应用时不受外界协作通信代码的影响而始终如一的提供设计之初的功能,一致性体现在接口服务的一致性,用户界面的一致性,代码使用场景的一致性等等具体方面上;而可重用性则是程序代码从重复的片段到逐渐封装成功能函数,进而根据职责内聚封装为模组(类库)的程序进化的最大内驱力。

    从另外一个角度考虑也是代码经济学的最重要的体现,可重用性可以体现为代码重用,也可以提供为概念重用,在面向对象编程范型中,更加强调的是概念重用,是面向对象设计原则中依赖反转的核心思想;框架可扩展性是提供灵活、适用的代码结构所必需具备的能力,也是可重用性的重要技术保障手段,常常通过插件结构提供扩展能力。

    02 自己的“玩具”框架

    上面主要是概念性的框架分类介绍,下面结合我们自己的编程经历,讲讲对框架(Framework)开发认知过程:记得我们刚刚开始接触LabVIEW编程时,那时候的版本还是6i,毫无软件工程和程序框架(Program Framework)的任何的概念,只是心急火燎的想把手头的重复体力工作通过编程映射、转换为可以自动测试的应用程序,最开始从LabVIEW系统自带的硬件设备驱动和编程范例样程直接改造,以适应我们的测试具体要求.

    因为是自产自销的开发模式,所以那时候根本就不明白啥叫用户界面,如何发布应用程序,就在开发编辑环境下边修改边直接运行,所有的数据采集完成后就通过一个第三方基于(ActiveX)的Excel工具函数包写入到定制好的Excel被测设备标准模板当中去,Excel电子表格文件即是我们的运行时界面,即呈现数据采集过程,又是最终测试完成后数据保存的文档载体,程序主框图代码虽然也是按照被测项目的项目封装要求具体分解成独立子VI调用函数,但是调用过程却是直接写死在顺序帧结构节点中,有时候测试项目需要定制,就通过与项目一一对应布尔判断来选择,各个子程序Vi中到处都是Crtl+C/V的重复代码片段,杂乱无序的高底层逻辑代码混叠交织在一起,维护和修改代码痛苦不堪,虽然程序代码逻辑现在回想起来,简直是惨不忍睹,不堪入目,就更不要提什么封装性、复用性、一致性、可扩展性等等这些阳春白雪的软件工程名词了,但是由于是自己开发自己改,所以的的确确是能用,就像一辆二十年的老旧拖拉机也比人跑的快,因此也就实打实的提高了我们的工作效率。

    后来,我们使用LabVIEW 8.2版本提供的项目管理的能力结合自己慢慢认知到的初级的软件工程概念,使用NI公司提供的报告生成器(RGT)及数据库连接工具包(DCT)软件后,开始着手花费很大的精力、资源对原先的代码进行了全面的重构梳理,封装共用函数到功能模组中形成可重用的工具驱动包,按照关注点分离、功能分组的逻辑结构将共用的功能提取出来分层处理,引入人机操作使用界面和测试过程与证书报告分离的流程切分,特别是使用动态调用功能完成对测试项目的灵活调用,详细的框架情况请参考我知乎的介绍文章。

    在这里插入图片描述

    随着分解功能的越清晰,代码的复用性也就越来越来强,在不断的迭代开发过程中,编程人员的能力也就越来越高,组织结构也演变成核心与基础库代码编程人员和应用参数领域编程人员两组开发者团队共同协作,使用服务接口共同开发编程,从而上层调用逻辑层次代码逐渐演变成为具备我们自己行业(电学、无线电参数)领域特点的专属领域框架(Application Framework)。

    该框架(Application Framework)将诸如操作用户界面、被测件配置、标准设备配置、测试项目选择及项目动态调用、报告生成等共用逻辑功能提升到高层操作框架中以便达到复用,具体的被测项目待调用VI则可以动态进行扩展,初步形成了框架设计的基本准则:一致性、可重用性、可扩展性。

    首先一致性体现在所有的参数被测设备程序都使用相同的人机操作界面,完成配置、测试、报告生成的统一测控流程,错误处理及提示也都统一一致,降低了使用者测学习认知时间,提高了开发者的开发效率,只需要开发自己的底层调用测试序列就可与上层框架无缝整合成可实用的程序。由于开发过程是演化而成的,测试上层框架保持了最适应的可重用性,并通过动态调用的函数功能模板保证其可扩展性,具体的被测项目测试子VI只要符合公共函数接口模板即可完成可插拔式的插件结构(Plug-in)扩展。

    当然,使用框架开发效率的提升也必然带了相应的约束性,如必须遵循一套相对固定的开发、发布的流程,并且只能完成单一被测的测试,不能同时提供多台套的并行测试任务服务,框架没有提供的多文档格式的支持功能就无法输出文本格式到特定的文档载体。当然很多情况是由于开发框架的人员认知、需求范围、开发能力、时间精力等诸多条件受限制,导致的框架提供哪些功能,不提供哪些服务。

    在其后来在工作和学习过程中,接触到了测控行业的成熟商业级别的框架TestStand,对比分析了一下,发现我们不知不觉中使用LabVIEW实现了一个符合我们对自动校准测试程序认知的、最小化TestStand的功能子集,又重复地生产了一个“破车轮子”,但是由于我们的存量代码较多且工程师们已熟练掌握了现有的代码开发模式路程,因此目前并没有大规模的移植到TestSand平台上开发。下一步准备部分试验开发应用TestStand框架平台软件的开发我们的计量校准软件。当然研究成熟的商用调用框架非常有助于我们开发自己调用框架,或者完全放弃自己重复制造破车轮代码,直接基于成熟的商用调用框架进行开发。

    要想理解成熟的商用调用框架,我们首先先将视野从计量检定校准的自动化测试向上扩展至通用自动化测试系统的大概念上来讨论,这样才能更好的理解框架在其中起到的关键作用。因为从大的范畴上来讲,计量检定校准的自动化测试是属于自动测试的一种特殊类别而已,其特殊点就是其它自动化测试系统中标准的测量设备成为了计量检定/校准中的被测件(Device Under Test),并由此带来的测试指标性能要求更高和需要最高性能的计量标准设备支持。

    一般来说,自动化测试任务是由“自动化测试系统”来实施,自动化测试系统通过减少人工干预,显著提升了测试速度,并且测试结果的一致性得到良好的保障,伴随着现代工业的迅猛发展。工业制造业的产线和计量服务单位的自动化程度越来越高,工业机器臂更为广泛的替代人工操作,机器视觉和运动流程控制广泛的应用于各类类型测试当中去。

    一个完整的自动化测试系统由测试站、仪器设备、测控软件这三个部分总成。

    而往往测试软件是自动化测试系统中最灵活、最为核心的部分,在着手搭建自动化测试系统的过程中,需要确定测试站的详细配置、仪器设备的选型,UUT的测试规格书和需求文档则基本上定义了对仪器设备的性能要求,重点要考虑的问题就是软件的设计,而从设计功能上考虑,测控软件最少需要包含以下四个功能模组。

    **用户界面(User Interface):**一般来说测试应用程序需要给操作人员一个可视化的用户界面,它的作用是提示测试软件的操作人员通过鼠标点击或者键盘输入完成启动测试、完成必要的测试配置、查询测试进度、异常情况处理提示、测试完成后显示结果等测试任务。通常情况下测试软件的界面设计相比于专门的组态类型的数据采集类的界面更加通用和普通一些,从而可以增加测试软件的适用性。

    **测试序列程序(Sequence Sub Program):**针对某种特定类型被测件(DUT)的测试序列,测试序列中一般包含一系列的测试步骤,不同型号的测试序列(DUT)的测试序列的组成是不相同的,现在主流的测试管理调用框架平台都支持不同的语言编写的测试序列,即编程环境是异构组成的。一般测试序列程序的开发往往针对的是某个单独的被测件的功能或者是性能的开发,通常是一个独立的测试功能单元,从概念上讲,序列程序类似于编程环境开发的子程序(或者是LabVIEW的子Vi),例如前面的系列文章我们提到开发的直流电源为待测件的“输出电压负载效应”校准/检定项目,就是一个单独的测试序列,在测试中需要选取直流电压表、与之相匹配的直流负载,并且按照一定的设定策略(检定规程或者校准规范所要求的)进行被测件的性能测试。这些将会调动仪器驱动程序,测试结果判断,如果需要还有自研开发的封装函数,当然采用面向对象技术的开发范型会给我们带来更易于扩展与维护的解决方案,提供更好的模块化和组织化。

    **自动化测试调用程序(Test Exec Program):**测试管理调用程序目标是在自动化测试系统开发过程中提供一个通用性的行业平台化软件,所以必须适应和满足异常庞大而多样化的测试类型和用户需求,与待调用的测试序列程序的千人千面相反,自动化测试调用程序中则包含共用的逻辑实现代码,实现通用的功能,并且往往需要有足够广泛的适应性,来满足于不同类型的被测件DUT的测试需求,这也就要求综合管理测试软件的各个主要组成模块单元必须是灵活可配置,并且尽可能多的是可扩展的插件模式,使得用户交互界面、测试过程函数调用、并发执行、文件格式、结果的存储与呈现以及核心的测试配置等诸多方面达到灵活、扩展和定制的应用目标。高层模块测试调动程序实现的是底层测试序列步骤功能的通用功能要求。进一步具体而言:自动化测试调用程序主要完成以下功能要求:负责测试程序子序列的加载、测试过程数据在用户界面的更新、设定测试相关的配置、并发执行、生成测试结果报表以及存储数据到数据库系统,而上述的测试序列程序则形成具体的测试步骤,组合排列起来形成特定顺序完成一一被调用,并且在管理测试步骤时要求步骤顺序的调整简便快捷。在自动化测试调用程序提供的统一接口或者是代码适配器(Code Adapter)下,开发人员将核心资源(精力、时间)投入到差异的测试序列子程序开发当中去,针对特定的产品被测件,通过编写相应的测试序列完成所需要的功能、性能、指标测试,从而达到上层的自动化测试调用程序可以最大化达到复用效果,缩短整体开发系统的时间,更为快速便捷、有效的输出大批量可被调用的插件序列程序,形成规模效益。

    **数据管理系统(Data Storage):**数据管理系统用于实现数据的管理,其核心是存储数据的容器存储库,该存储库提供对外的接口完成数据的添加、删除、查询、更新和读取,随着越来越多的自动测试应用程序对数据的重视,数据管理系统单元变得越发的重要。

    实际上,仔细观察自动化测试调用程序(Test Exec Program)的功能:如完成调用底层测试序列程序,完成公共功能如界面显示、数据管理与保存等功能,其实,就是我们前面提到过的极其典型的测量测控的领域专业框架。因此,更加细致地学习与比较测量领域的框架软件先进理念和模式,特别是在成熟的商业平台调用程序软件上开发计量校准软件的典型应用也有助于提高自己的开发框架的能力。

    03 真正的主角TestStand

    有了清晰的整体测试系统软件概念后,特别是了解了调用管理程序(Test Exec Framework)就是框架(Framework)在测量测控领域的典型体现后,让我们看看成熟的商用测试系统软件是如何将这些概念更为具体的落地的,目前应用较为广泛的自动测试系统平台软件除了我们前面提到过的NI公司的TestStand外,还有就是Keysight公司TestExec SL(非常有意思的是TestStand平台本身的运行时执行文件的名称是TestExec.exe ,恰恰是Keysight公司的调用平台的名称),测试管理软件目前基本是这两家独大、赢者通吃的局面。应用行业涵盖了电子、汽车、医疗、半导体、通信、航空、工业机械、能源等,开发的应用模块和各种相关工具包有移动通信、音视频测试、机器视觉、开关管理、半导体测试、需求管理、分布式数据管理、用户界面开发、配置管理等等。

    该类软件才是行业中真正的巨无霸,也是借助平台软件系统发力引流促进自己硬件产品销售的大杀器,有了竞争就不免有排名,那么谁是行业的第一名呢?!由于尚未找到市场份额方面的具体数字,所以让我们先对比看看TestStand和TestExec SL的功能列表。

    图片

    从性能特点与功能对比表上来看,两者经过十几年的不断更新,都能够满足自动化产线所需要综合测试平台的测试序列管理通用要求,所以从功能列表中很难得出谁是王中王的地位,并且最为有意思的一点是:也都能通过微软公司的通用对象组件技术(COM/ActiveX)提供对竞争对象的主流图形化软件编程环境开发的测试序列支持,其中NI的TestStand支持竞争对手Keysight公司的类似的图形化编程软件VEE,同样的TestExec SL也支持了NI公司的当家花旦LabVIEW,两家公司很好的诠释了什么是竞合关系。

    虽然TestStand和TestExec SL不好直接对比得出谁强谁弱的结论,但是图形化编程环境VEE和LabVIEW还是是很容易对比得出结论的,从国内发表的论文、出版的图书和论坛讨论帖子的数量均是LabVIEW占有绝对的优势地位,在测控行业中国外也有类似的调查图表显示LabVIEW(47%)相比VEE(8%)遥遥领先。

    在这里插入图片描述

    LabVIEW广泛的测控工程师使用基础,使得不管是从个人能力提升开始使用TestStand的技能发展的角度来看,还大量是编写底层测控子序列Vi的就业适应性的角度来看,TestStand毫无疑问的是更好的选择。当然,企业开发考虑角度与个人技能与就业角度不尽相同,更多是是考虑到从事行业领域特色的本身、遗留代码库的情况、两家公司的技术背景特色等等,就我所有限接触的行业来看,电子通信等行业TestStand独占鳌头,TestExec SL在汽车电子(ECU)行业积累深厚。

    另外有趣的是,两家公司分别应用自己的调用平台开发了支持本公司硬件产品的专用计量校准测试软件,即NI公司的Calibration Executive系统软件和KeySight公司的N7800软件(具体的对比可以参看以前博客相关文章),完美的诠释了各自调用框架系统的的强项和能力,也是我们编写自己的上层共用参数调用框架时,可以模范与学习的范例。

    还有个题外话可以八卦一下,在NI公司出品的测量测控等领域软件使用者当中,有着一条秘密的鄙视链条,使用不同产品的人处在该链条的不同的位置,毫无疑问给不会开发程序的工程师们使用的花里胡哨的LabVIEW是最被鄙视的,处在鄙视链的最底层,更高一层的是使用.NET Framework Measurement Studio平台开发的工程师,最高等级的就是会使用LabWindows/CVI天龙人工程师们拥有最高的荣誉度。当然以上鄙视链条还有个特殊附件规则,一旦掌握了附加技能序列调用管理软件TestStand,就可以在鄙视链自动向上递进一级。

    由于自己对LabVIEW较为熟稔,理所当然的也是归属到不会编程的测控工程师群内,因此也就爱屋及乌的重点关注过母公司NI出品的TestStand,TestStand 1.0是美国NI公司于1998年发布的测控序列调用执行器,并逐渐成长为大型综合测试管理软件。其目标是“为自动化测试系统软件的开发者们提供一个高质量的开放式扩展架构和高性能组件的模块化体系”,目前最新版本的TestStand是2021 SP1版本。

    图片

    参考文献:

    《Framework的设计与应用—基于Windows Forms的应用开发实践》,黄忠成,电子工业出版社,2006年。

    《TestStand工业自动化测试管理》,胡典钢,电子工业出版社,2016年

    《Keysight TestExec SL 6.1 技术资料.pdf》,Keysight Corporation, 2014年


    LabVIEW易学难精,我是李时珍,也是一名LabVIEW编程开发的的持续学习者、兼搬砖爱好者,知乎上讲解LabVIEW内容最啰嗦的中年油腻大叔,没有之一!

    在这里插入图片描述

    大家共同成长与进步!

    如果,感觉对你有帮助的话请点赞,分享转发,没关注的加个关注!

    在学习的道路上你我不孤单。

    你的支持与关注是我持续输出最大的动力!

    展开全文
  • LabVIEW如何优化FPGA可用资源或提升速度 当编译FPGA代码时,由于过度映射 (overmap),未能满足时序要求或无法以所需的循环速率执行,导致编译失败。可以采取哪些步骤来优化FPGA代码并解决这些问题? 解决方案...
  • labview2020的图形编程工具 安装教程

    千次阅读 2021-03-09 13:59:48
    labview2020是一款功能强大的图形编程工具,专门为测试、测量和控制应用而设计,拥有着清晰的界面、多样化的功能,能够让用户能够快速的访问硬件和数据信息,从而有效的简化操作流程,可将文本流程这种不直观的展现...
  • 这就是LabVIEW开发环境提供的“Actor Framework Template(操作者框架模板)”的目的和意义,如下图所示,该快速应用模板的入口点如图中编号①②所示,生成后的项目如图中编号③所示,该应用程序运行界面如图中编号...
  • Labview自定义控件-布尔类控件

    千次阅读 2021-10-16 22:43:00
    LabVIEW中自定义控件(.ctl控件)的方法 ​​​​​【LabVIEW小技巧】LabVIEW自定义系统按钮时图片项设置说明_Enjoy Coding With LabVIEW-CSDN博客 LabVIEW自定义布尔控件合集(~1000种).rar_labview自定义控件...
  • LabVIEW与VC程序的动态数据交换.pdf LabVIEW和MATLAB在现代光测图像处理中的应用.pdf LabVIEW在自定义应用层CAN总线通讯中的应用.pdf LabVIEW测控系统的网络访问技术研究.pdf LZW压缩算法VC实现、改进及其应用...
  • LabVIEW调用MATLAB进行图像处理的实现第 期3年 月 宋凡峰等:LabVIEW 调用 MATLAB 进行图像处理的实现 192009 9 · ·LabVIEW 调用MATLAB 进行图像处理...
  • LabVIEW中的数据传递
  • LabVIEW与VC程序的动态数据交换.pdf LabVIEW和MATLAB在现代光测图像处理中的应用.pdf LabVIEW在自定义应用层CAN总线通讯中的应用.pdf LabVIEW测控系统的网络访问技术研究.pdf LZW压缩算法VC实现、改进及其应用...
  • LabVIEW--S1-前言和入门

    2020-08-28 15:44:27
    S1-前言和入门1 labview入门1.1 "Hello World" 程序1.1.1 VI前面板1.1.2 程序框图1.2 labview程序运行逻辑1.2.1 名词概念1.2.2 执行顺序1.3 如何学习LabVIEW1.3.1 labview的帮助文档1.3.2 labview的范例1.3.3 需求...
  • LabVIEW与VC程序的动态数据交换.pdf LabVIEW和MATLAB在现代光测图像处理中的应用.pdf LabVIEW在自定义应用层CAN总线通讯中的应用.pdf LabVIEW测控系统的网络访问技术研究.pdf LZW压缩算法VC实现、改进及其应用...
  • 最近想深入学习LabVIEW,对于控件的使用上遇到了选择上的问题,如何合理的使用控件引用、属性节点、局部变量全局变量等,结合帮助文档和网上资料,总结如下: 1、全局变量和局部变量 局部变量和全局变量是内存...
  • 第三篇 LabVIEW应用实战技术 ▶ 第17章 测试系统与虚拟仪器 ▶ 第18章 LabVIEW中的数据采集 ▶ 第19章 总线技术 ▶ 第20章 网络通信 第17章 测试系统与虚拟仪器 随着科学技术的快速发展,信息化的应用更加广泛,数据...
  • 一款不错的工具:aardio

    千次阅读 2022-04-23 00:28:01
    下面一起通过实例来简单了解aardio。 首先,从aardio官网下载得到aardio开发包: aardio的开发包非常小!里面的内容有: 其中,开发工具 aardio.exe 只有6MB!相对于其它如Qt Creator、VS等开发工具动不动就几个G,...
  • 前言有很多人对LabVIEW OOP存在比较极端的看法,大致分为两类:1. 绝对否定派认为LabVIEW OOP只不过是LabVIEW为了追求时髦,在面向过程的基础上用簇做了一些特性,实际上完全不必学习2. 绝对肯定派认为LabVIEW OOP...
  • labview调用DLL

    千次阅读 2020-05-26 09:20:12
    <link href="https://csdnimg.cn/public/favicon.ico" rel="SHORTCUT ICON">... <title>LabVIEW如何方便地调用DLL文件_c/c++_weixin_33991418的博客-CSDN博客</title> <meta name="description"...
  • LED超大屏幕控制方案 51单片机EPPROM读写 MFC图书馆管理系统 MFC实现的五子棋程序可人机对战 Symbian C++ 实例源码 VC60的连连看基本功能 VC60遍历文件夹_修改文件名
  • labview cvi 关于库文件

    千次阅读 2013-09-05 11:40:17
    4.1 静态库与动态库    4.1.1 简介  通过前几章的学习,大家已经掌握了...这种中型、大型的软件项目一般需要多人进行合作开发,此时就有必要将项目分为一个个小的功能模块,以方便其他程序员在应用程序中调用。
  • 若干源程序资料12.rar

    热门讨论 2012-06-11 22:11:26
    2012-06-11 21:06 3,769,694 基于LABVIEW编程环境的SQLSERVER ACCESS MYSQL 数据库的测试源代码.rar 2012-06-11 21:12 81,505 基于神经网络的文字识别系统.rar 2012-06-11 21:07 39,498 基因遗传算法.zip 2012-06-11...
  • NI.LabVIEW.v8.6.1

    2009-09-24 18:00:00
    Abb ProgramMaker v4.3-ISO 1CD(一个智能化的robot程序编辑制作软件) Abb QuickTeach v5.3-ISO 1CD(练习机器人控制技术的虚拟训练系统,可以作为应用新型号机器人之前的虚拟训练中心) ABB.Shoplooreditor.v2.5...

空空如也

空空如也

1 2 3 4 5
收藏数 89
精华内容 35
热门标签
关键字:

大型的labview程序实例