导航
TestStand(2020 32)sp1 https://download.ni.com/support/nipkg/products/ni-t/ni-teststand-2020-x86/20.0/offline/ni-teststand-2020-x86_20.0.1_offline.iso TestStand(2020 64)sp1 https://download.ni.com/support/nipkg/products/ni-t/ni-teststand-2020/20.0/offline/ni-teststand-2020_20.0.1_offline.iso VeriStand ****https://download.ni.com/support/nipkg/products/ni-v/ni-veristand-2020/20.6/offline/ni-veristand-2020_20.6.0.49344-0+f192_offline.iso****
### ** wiki百科 https://labviewwiki.org/wiki/List_of_LabVIEW_blogs** 面向对象设计模式技术手册和练习 https://forums.ni.com/t5/LabVIEW-Development-Best/Object-Oriented-Design-Patterns-Technical-Manual-and-Exercises/ta-p/3507995?profile.language=zh-CN LabVIEW面向对象编程:设计背后的决策 https://www.ni.com/zh-cn/support/documentation/supplemental/06/labview-object-oriented-programming--the-decisions-behind-the-de.html 将通用 面向对象 OO设计 模式 应用 到 LabVIEW https://forums.ni.com/t5/Example-Code/Applying-Common-Object-Oriented-OO-Design-Patterns-to-LabVIEW/ta-p/3510571?profile.language=zh-CN 浏览卓越中心 https://education.ni.com/center-of-excellence/resources NI -RT https://gitmind.cn/app/doc/6fb2032714 LabVIEW与多线程.ppt https://max.book118.com/html/2017/0711/121752711.shtm 台湾 网友个人博客 https://a01832851.pixnet.net/ rio https://learn-cf.ni.com/teach/riodevguide/index.html NI-手册. 很全的可以看看 http://download.ni.com/support/manuals/
UI工具 1.3.0当前版本:版本作者:弗朗索瓦Normandin虚拟仪器版本:> = 8.6许可证类型:BSD 分布在LabVIEW工具网络上。 在线支持线程:http://lavag.org/topic/11045-cr-ui-tools   描述:这个包包含用于设计用户界面的工具。 第一个调色板帮助使用前面板的透明度创建特殊效果。使用它们可以使用强度的线性或指数变化快速创建淡入或淡出。 第二个调色板包含VIs,用于计算gobject的位置,用于许多目的,如对齐、捕捉、鼠标跟随等。 第三个选项板包含VIs,用于基于类实例创建对话框。提供了用于重载的一键基类和两键类。 第四个调色板包括一些VIs以编程方式在前面板上移动对象,使用基本的减速算法来提供平滑运动的印象。 打包的VIs都使用后缀“__lava_lib_ui_tools”进行命名,这应该不会与您自己的代码冲突。包括:-前面板透明度(淡入淡出)-工具(对齐,对齐)对话框(基于面向对象,可扩展)  -用于对象移动的引擎(Beta安装说明:这个包是在LabVIEW工具网络上发布的,可以直接安装在从8.6到现在的任何LabVIEW版本的addon文件夹中。插件自动安装在插件子菜单的LAVA调色板下。 代码示例指数 图1.0在VI上实现淡入效果的良好代码示例 5 图1.1代码不能按照预期运行的例子。 6 图1.2当前VI的渐变效果示例代码。 6 图1.3a将GObject对准前面板 9 图1.3b-c在FP上对齐GObject居中(b)和非居中(c) 9 图1.4在窗格中移动GObject 10 图1.5从VI参考中提取矩形簇 10 图1.6移动两个gobject,使其垂直对齐。 11 图1.7区域制图示例 12 图1.8突出显示前面板上某个区域的示例代码 13 图2.1带有OK按钮的对话框示例代码 18 图2.2带有黑色背景的OK按钮的对话框的示例代码。 19 图2.3连接子类时的动态调度 21 到“呼叫对话框”节点。 21 图2.4重用基类初始化节点 21 图2.5正确的动态分派实例的运行时选择 22 节点的。 22 图2.6通用对话框调用者的示例代码。 23 图2.7错误信息对话框代码示例 25 图3.1在前面板上移动对象的示例代码。 27 图3.2将最近的GObject移动到所选坐标的示例代码 28   如何使用UI工具。 UI工具面板安装在“Addon > LAVA”面板下。   四个面板组成了UI Tools插件。     褪色的面板:   *设置Transparency.vi 淡入.vi(多态) 淡出.vi(多态) (多态).vi消退   *为清晰起见,本文档中的VI名称中删除了命名空间" __lava_lib_ui_tools "后缀。           使用“设置透明度。直接设置前面板的透明度。这个函数只是替换在Front Panel引用中使用的Invoke节点。如果您将这个VI放在框图上而没有连接前面板引用,则父VI的前面板将通过调用链被调用。透明输入可以是U8(0-100%)、字符串或变体,因此可以使用数字或字符串,如果使用文本参数(如JKI状态机),这可能很有用。           使用“渐隐(多态)”。或“淡出(多态)”。Vi”分别变为0%或100%透明度。如果你想设置淡出效果停止到任何其他透明度级别,使用“淡出(多态)”。并指定目标透明度。这些VIs将适应I32输入,字符串输入或任何其他数字(变体输入)。   图1.0在VI上实现淡入效果的良好代码示例       重要注意:如果没有连接VI Reference输入,则每个原语将获得对调用VI的引用。在退出节点时,如果没有传递有效的引用,VI引用将自动关闭。因此,如果用户希望按顺序连接节点,则必须连接一个有效的引用。请参见图1.1来演示此行为。             图1.1代码不能按照预期运行的例子。 (不连接VI参考输入终端的效果) 图1.2当前VI的渐变效果示例代码。 (每个节点将打开对调用的VI的引用,然后关闭它)           注意,如果在执行代码时前面板没有关闭,图1.2所示的代码将使前面板闪烁。这段代码假设VI在前面板关闭的情况下运行。       使用Fade关键字搜索LabVIEW示例,快速找到这个调色板的示例VI。   对齐工具:         对齐到左上的 对齐到顶部 对齐到右上的 提前到左 对齐到中心 提前到右 容易点 对齐到左下侧 提前到下 对齐到右下角   分配矩形垂直 分配矩形水平 计算GObject矩形 计算中心 窗口边界为矩形 点在矩形里吗? 将矩形 除在广场 计算交点 计算区域 矩形的大小       “对齐到…“VIs是计算矩形相对于固定矩形的位置以提供定位的工具。对于这个调色板子集,有两种类型的VIs:角和基点。   四个表示角的VIs(左上、右上、左下、右下)返回矩形与固定矩形的坐标。它们只需要两个矩形作为输入,并返回另一个矩形作为输出。         这个子面板的其他VIs代表了基点和中心(上、左、下、右、中、点)。这些VIs给用户一个选择,让矩形居中或不在目标边界的中间。它们还添加了计算结果位置的左上角点的功能,这是一个有用的快捷方式。               图1.3a到1.3c提供了一个使用snap to API计算GObject目标位置的示例。用于提取对象矩形的节点(在框图上)将在后面解释。当使用居中或非居中抓拍时,用户将注意到物体最终位置的不同。       图1.3a将GObject对准前面板 (要移动的GObject的初始位置&框图)           图1.3b-c在FP上对齐GObject居中(b)和非居中(c) (运行VI的结果)               b)c)     有用的提示:使用对齐到点VI使GObject对齐到坐标,无论是通过鼠标点击还是一些预定义的坐标。         “Calculate GObject Rectangle”是一个VI,它接受任何GObject引用并返回与其位置和高度相关联的矩形。输出矩形将包含标签或标题。这个实用程序主要用于用正确格式化的矩形集群快速地为snap VIs提供素材。这包括装饰和容器,如集群、选项卡或子面板。   重要注意:尽管GObject定义包括“窗格”,但不建议使用带有此原语的窗格引用。用户会发现,即使使用窗格,代码也能很好地工作,这不是问题,但是窗格维度会随着gobject的移动而改变。结果是,如果由于移动GObject而改变窗格的维度,那么多次运行相同的代码将需要产生相同的结果。为了说服自己,多次运行图1.4中的代码,您将看到集群移出视图,窗格向右下角扩展……还请注意,对于任何自动调整大小的容器(如在选项卡或集群中移动对象),同样的行为可能会出现问题。   图1.4在窗格中移动GObject (多次运行以查看为什么结果会因初始条件而不同)       “窗口边界到矩形”本质上与“计算GObject矩形”相同的功能,除了它是用于VI refnums。这个VI将接受“面板边界”或“Windows边界”。请注意,使用面板边界更好,因为它排除了滚动条、菜单条、标题等。   图1.5从VI参考中提取矩形簇           “垂直/水平分布矩形”是一个实用程序,它将计算最适合包含两个给定矩形的矩形,将第一个矩形作为左上角位置的固定点参考。       得到的矩形可以用来计算两个物体的最佳位置,如图1.6所示。在这里,第一个对象(Digital类)被按到顶部,第二个对象(String类)被按到底部。如果使用水平对齐节点,则使用“向左或向右对齐”节点。   图1.6移动两个gobject,使其垂直对齐。           “计算中心”用于计算给定矩形的中心。与“计算GObject矩形”或“窗口边界到矩形”实用程序一起使用,它允许快速获得这些对象的中心。与“Snap to point”节点一起使用,你就有了一个适用于任何应用程序的多功能工具。                   “是矩形中的点”提供坐标或点的有效性检查。   图1.7区域制图示例 (类似于区域HTML标记)           有用的提示:“矩形中的是点”可以与“分割矩形”或“分割正方形”一起使用,以检测鼠标是否已进入某个预定义区域。这些原语可用于验证对象被拖放的位置。他们还可以检查鼠标光标是否在容器边界的一定距离内,例如动态工具栏或图标调色板……       “分矩形。是一个计算矩形边缘区域的工具。这对于计算物体或鼠标是否在某个角落或边缘中心附近的特定区域内是很有用的。例如,它提供了判断对象是否应该贴合到边缘/角落的逻辑。“带”是边带的宽度。它应该小于宽度或高度的一半,以正确执行。         图1.8突出显示前面板上某个区域的示例代码       (安装了一个装饰以突出检测到的区域)         “分在广场。是一个将一个大矩形分割成多个正方形区域的工具。它提供了确定对象边界的逻辑,如果一个人希望制作调色板或类似的东西。           有用的提示:如果你想要定义行动区域,那么将区域划分为多个方格是很有用的。例如,可以用对象(图标、控件)制作面板或工具栏,这些对象将在一个已定义的矩形内接合。将它从一个正方形拖到另一个正方形,以避免任何物体在不应该的地方折断。           “计算交集”是一个简单的实用程序,计算两个矩形之间的交集。您可以找到任何对象重叠或测试一个对象是否“可捕捉”到某个区域。       “计算面积”是一个简单的工具,可以得到像素平方(高x宽)的面积。 这可以用来确定两个矩形的相对权重,例如,如果检测到多个重叠区域。             “计算矩形大小”由一个实用程序提取矩形的尺寸。用于调整对象的大小以适应矩形。示例范围从装饰到子面板。           如果矩形没有尺寸(0px * 0px),那么“点?输出将为True。 如果矩形的宽度或高度为0像素,那么“Line?输出将为True。   实用提示:“台词?”和“点?,与“计算交集”VI一起使用,如果研究的矩形相邻但不重叠,则此节点的结果可以是一条线或一个点……           Legacy VIs(与以前的版本向后兼容)被保存在子文件夹中,但不再显示在面板中。它们由“集中的快照”组成,现在是“snap”VIs(包装函数)上的一个选项。   使用Snap关键字搜索LabVIEW示例,快速找到该调色板的示例VI。 对话框面板: 这个面板目前由4个类组成,One-button对话框类是其他类的基类。计划对这组类进行扩展。它是一系列类,将LabVIEW UI扩展为一组jQuery类(对于那些熟悉网页javascript环境的人来说)。         对于不熟悉labview中面向对象编程的用户,重要提示: 不要害怕!这个API非常容易使用,您不需要知道任何关于LVOOP的细节就可以使用它。有经验的用户将享受继承和利用更多特性的好处,但放心,您仍然可以使用这组VIs,就像您使用通常的LabVIEW原语一样。   下面几页将带你了解如何使用它们。   基类(One-button对话框)显示在第一行,带有绿色标题。       “Init Dialog”是配置新对话框的第一步。它是一个LVOOP构造函数,是本系列对话框对象中所有其他类的基础。我们将使用另一个节点来实际显示消息。这只是一个初始化节点。   您不需要连接“对话框”终端。这个终端是为继承而提供的,仅用于动态调度(参见图2.4)。 使用希望显示给用户的消息初始化消息字符串。 填写对话框标题以在标题栏中显示。如果您不连接此终端或提供一个空字符串,如果您不允许用户关闭对话框,标题栏将被隐藏。 超时以毫秒为单位,默认设置为-1(不超时)。 如果您允许用户关闭对话框,即使标题是空的,标题栏也会显示出来。此外,为了防止对话框无法关闭的配置,当超时无限制(-1)时,“Allow to close”设置为True。也就是说,您不能被一个永远不能关闭的模态对话框所困住。但是要注意,设置一个超时时间很长可能会导致虚拟死锁的情况。   有用提示:您可以创建一个预先配置好的对话框数组,然后使用Index array原语使用“调用对话框”VI调用其中的任何一个对话框。       “调用对话框”是这组类执行的核心。   执行该节点时,会弹出上述对话框。“选择”输出终端返回按下按钮的布尔文本。如果对话框超时或面板被用户关闭,选择将返回一个空字符串。   图2.1带有OK按钮的对话框示例代码                   “调用对话框(具有变黑效果)”是一个包装函数,它将在显示对话框之前创建屏幕变黑。当对话框关闭时,屏幕恢复正常。你可以通过编程将所需的透明度从0调整到100%,其中100%是完全透明的背景(因此,与使用“调用对话框”节点相同),而0%是完全不透明的背景。   图2.2带有黑色背景的OK按钮的对话框的示例代码。               提供了一个带有访问器VIs的子面板,用于在完成对象初始化后设置或获取参数。您可以更改消息或标题,而无需重新初始化类的新实例。这些访问器对于子类也很有用。           基类被明显的双按钮对话框扩展,在对话框面板的第二行显示,带有黄色的标题。   这就是面向对象编程的全部优点发挥作用的地方。用户会注意到在这个面板上没有显示其他类的“调用对话框”节点。这是因为你不需要它们。由于所有其他类继承了父类(一键对话框)的基本功能,我们将使用它的“调用对话框”节点与继承自它的任何其他类。参见图2.3。     图2.3连接子类时的动态调度 到“呼叫对话框”节点。                     当您将“Call Dialog Box”节点放在前面板上时,它将显示为基类(One-button Dialog)节点。如果您从一个子类类型(例如Two-Button Dialog)连接另一个实例,那么节点将动态地适应正确的实例。这看起来像一个简单的多态性,但如果类实例类型在运行时未知,那么这种情况也会在运行时发生。图2.4显示了Two-Button Dialog初始化节点的内部。 图2.4重用基类初始化节点         在双按钮对话框初始化节点中,我们使用“Dialog in”终端通知父类的初始化节点,连线上的对象类型为“Two-Button Dialog”。     图2.5正确的动态分派实例的运行时选择 节点的。           如果index设置为“0”,将调用一个按钮对话框。这是可能的,因为子实例可以在父类连接数据类型上“移动”。这是动态调度和继承的主要优点。   有用的提示:将“调用对话框”替换为“调用对话框(带黑色效果)”VI,你将把基类的功能包装到所有其他子类中……     图2.6通用对话框调用者的示例代码。 (多酷啊,哈?)         你会注意到“调用对话框(带有黑色效果)”VI在双按钮对话框类中没有覆盖。因此,基类节点将始终是被调用的节点,但Two-Button Dialog的代码将被正确执行,并具有变黑效果。不需要对它进行多次编码,它位于父类的基本功能中,因此它现在是我们将在其上构建的所有派生类的基本功能。   “消息框”类。 这个类层次结构的第三个成员是没有按钮的“消息框”。它继承了一键对话框的所有功能。 旁注:有人可能会问,为什么这不是基类……这个人是完全正确的!原因很简单,因为编写的第一个类是一个一键对话框。为了向后兼容,作者选择将其保留为基类。这是一个小小的不便,因为所有未来的类都可以简单地继承Message类,包括另一种类型的“一键对话框”。       这个类的主要功能是为图像提供一个容器。在没有任何图像的情况下,将显示一条简单的文本消息。       “Pictures”是一个节点,它将从与类一起打包的PNG图像列表中获取文件路径。如果用户使用此节点构建可执行文件,他应该确保将图片列表添加到一个名为“pictures”的目录中,该目录相对于可执行文件的基本目录。   初始化节点的文件路径也可以与任何PNG类型的图片的绝对路径相连接。(未来版本将增加JPG和BMP)             “Error Message”是本系列的第四个成员。它为向用户显示错误消息提供了一个简单的界面。它具有一个“Show Details”布尔终端,用于显示或隐藏调用链的细节。用户可以在主对话框中进行切换。所需要做的就是连接上面的“Error”终端,并像调用其他类一样调用对话框。         图2.7错误信息对话框代码示例           即将到来的扩展类包括一个图像库。请继续关注。   使用Dialog关键字搜索LabVIEW示例,快速找到该调色板的示例VI。 引擎(β):   在前面板上移动对象快速移动对象查找所有入站对象找到最近的GObject       “MoveObjectonFP。vi”是一个实用程序,它将一个对象(GObject refnum)转换为一组前面板坐标,以指定的速度(慢,快,瞬时)使用一个基本算法,给出一个减速的效果。     图3.1在前面板上移动对象的示例代码。 (将速度设置为Normal会在不到一秒的时间内将物体移动到新的位置)       “MoveObjectFast。Vi”是相同的实用程序,但是进行了包装以简化连接器窗格。简单地给出一组前面板坐标和一个参考,最常见的是在“用户事件”案例中使用鼠标事件,如图3.1所示。         “FindAllInboundGObjects。vi”是一个实用程序,它将返回包含所提供坐标的gobject。例如,如果您监视MouseDown事件,则可以返回包含鼠标单击时坐标的对象列表(如果对象重叠,则可以返回多个对象)。   “FindClosestGObject。是一个实用程序,用于查找最接近指定坐标的对象。如果附近有很多对象,并且单击超出了之前的实用程序范围,那么知道哪个对象最近是很有用的。   图3.2将最近的GObject移动到所选坐标的示例代码           使用移动或工具栏关键字搜索LabVIEW示例,以便快速找到该面板的示例VI。
Insane Object or fpsane.cpp Error - National Instruments (ni.com)Finding insane objectsThere is a way to locate insane objects from the error log in the respective VI directly using the UIDs in the error message. Close LabVIEW Add the key "LVdebugKeys=True" in the LabVIEW.ini file located in the LabVIEW installation directory (C:\Program Files (x86)\National Instruments\LabVIEW 20xx) Open the corrupt VI Press Ctrl+Shift+D+H to open the heap peek window (see picture below) Select the VI with the corrupt object and FPHP or BDHP accordingly in the lop left window (Temperature Limit.vi in the example) Click UO to change the view from memory address to UID in the top right window Select the object with the UID from the error message in the top right window Click F, now the according object will be highlighted in the Front Panel/Block Diagram
Simplifying-your-Hardware-Abstraction-Layer-with-LVOOP-and-DQMH-Part-I(三多).pdf 用LVOOP和DQMH简化硬件抽象层-第一部分 介绍 如果您曾经想为测量仪器创建硬件抽象层,但不确定从哪里开始或如何开始,请举手。有了所有可用的文档(白皮书、博客和ppt演示文稿),您将了解诸如OOP、动态分派和硬件抽象等术语。对一些人来说,把所有这些放在一起可能是一项艰巨的任务。好的,有一个好消息:用LVOOP和DQMH简化硬件抽象层可以解决这个艰巨的任务。通过易于使用的简化过程和工具,您可以创建解耦的可重用硬件抽象层(HAL)组件。下载zip文件并安装最新版本的DQMH,在这篇博文中,我们将介绍如何使用DMM类创建HAL。当我们完成时,你将确切地知道如何创建一个可重用的DQMH DMM HAL,它提供了一个API,在LabVIEW和TestStand都工作得很好。准备好了吗?让我们开始吧。 工厂设计模式 我们将为这个组件使用的设计模式是工厂设计模式。这是一个完美的适合我们需要完成我们的目标。这个模式创建了一个允许使用相同接口的子类的父类。这将允许我们的DQMH具有插件组件的能力以及在运行时动态加载它们的能力。 目录结构 要创建支持代码重用和源代码控制的开发,必须创建组织类的文件结构。类的源代码存储在Dev文件夹中。源代码被编译成打包的库并存储在Dev Components文件夹中。 在Dev文件夹中,创建两个文件夹:DMM类和HAL实用程序类 要组织类,请为父类和子类创建文件夹。父类在第00级的文件夹中被开发,而子类在其余的级别中被开发 创建HAL实用程序类 创建一个项目保存在HAL Utility Classes文件夹中,名称为:HAL Utility Classes_Level00。在项目中,创建名为HAL Utility的虚拟文件夹 在HAL Utility文件夹中,创建一个名为HAL Utility的库 在HAL Utility类中,创建名称为Protected的虚拟文件夹,右键单击该文件夹,将访问范围更改为Protected 右键单击受保护的文件夹并创建一个新的VI 将VI保存在文件名NameAndVersionNumberHelper下 前面板增加如下控制按钮和指示灯: VIin(通用VI引用) Is First?(Boolean)· Error in(错误集群)· Name and Version Number (string)· Error Out(错误集群) 使用下图将控件和指示器连接到连接器面板 使用下面的图表连接VI的框图 右键单击受保护的文件夹,从“动态调用模板”中创建一个新的VI。将VI保存到文件名“NameAndVersionNumber”下 将NameAndVersionNumber显示字符串控件添加到前面板 使用下图将显示字符串控件连接到面板 设置类属性 现在HAL Utility类已经完成了,在使它成为一个打包库之前还需要一些步骤,右键单击HAL Utility类并选择菜单项列表底部的“属性”选项 当类属性窗口出现时,找到并突出显示NameAndVersionNumber VI并启用这两个覆盖选项。将这些选项设置为true将强制覆盖这个VI并调用父方法。所有这些对于提供包含用于创建类的打包库的名称和版本号的列表都很重要。 制作打包库 要完成该类并使其成为可重用组件,创建打包库,右键单击Build Specification >> New >> packed library 信息设置 使用以下信息完成信息部分:构建规范名称:HAL Utility Packed Library目标文件名:HAL Utility.lvlibp 目标目录:C:\Dev Components 源文件设置 使用以下信息完成源文件部分:在项目文件窗格中,选择DMM.lvlibp 单击箭头将该文件添加为顶级库 目标设置 在“目标路径”字段中,输入以下路径位置:C:\Dev Components 高级设置 按照以下步骤完成高级部分: 找到高级表单上突出显示的部分并启用突出显示的选项。在开发阶段启用调试非常有用。一旦验证了类,在构建最终库之前禁用此选项。 附加排除设置 按照以下说明完成附加排除条款部分: 找到“附加排除”表单上突出显示的部分,并启用这两个选项。选择此选项将构建库并将库保存到目标路径,而不包括支持打包的库。目录结构的当前安排将导致构建失败,因为试图覆盖当前正在使用的文件。 完成这些部分后,可以通过单击Build按钮创建打包的库。 创建硬件类(DMM) 以下部分概述的过程描述了一种方法,用于创建与执行相同功能但来自不同制造商的硬件设备通信的类。为了实现这一点,将使用工厂模式设计来实现DMM抽象类。 创建类文件结构 在开发类之前创建一个可重用的文件结构是很重要的。最佳实践是为抽象父类创建一个文件夹,为每个子类创建一个文件夹。在下图中,Level00表示测量仪器(抽象类),Level01表示测量仪器制造商,Level02表示测量仪器型号。 继承HAL实用程序类 DMM抽象类从HAL Utility类继承了NameAndVersion方法。要实例化该方法,将HAL Utility包库添加到DMM Classes_Level00.lvproj。 要设置DMM抽象类从HAL Utility类继承,右键单击>> Properties 在“类属性”窗口的类别部分中,选择“继承”选项。   单击“更改继承…”以打开更改继承窗口。 在“项目中的所有类”窗格中,选择HAL Utility类。 选择HAL Utility类后,单击“从选定继承”按钮并关闭类属性窗口。 实例化HAL实用程序名称和版本号。vi方法 要实例化NameAndVersionNumber方法,右键单击DMM .lvclass图标>> New >> VI for Override…   当New Override窗口出现时,选择NameAndVersionNumver。vi选项,然后单击OK按钮。 打开NameAndVersionNumber。vi并使用下面的图表连接vi。 使HAL实用程序打包库成为一个依赖项 在完成NameAndVersionNumber之后。vi,删除HAL工具。来自项目的Lvlibp。要实现这一点,右键单击HAL实用程序。lvlibp,并选择“从项目中删除”菜单项。 一旦打包的库从项目中删除,该库就被移动到项目的依赖项部分。 创建抽象类:创建一个不臭的HAL的起源。 在深入设计设备类的任何元素之前,需要确定所需的测量功能。为此,确定测量仪器的硬件功能,并为每个相关功能创建一个列表。一旦确定了这一点,就将这些功能作为方法添加到类中。 定义的接口 一旦实现,很明显,每个设备的仪表驱动程序的接口和功能并不完全相同。这是因为制造商创建了仪器驱动来满足他们设备的特定需求。为了克服这种困境,确定设备的哪些基本功能是主要用途所必需的。在这种特殊情况下,该设备是DMM,其主要功能如下: 测量直流电压·测量交流电压·测量直流电流·测量交流电流·测量电阻(2线)·测量电阻(4线) 一旦确定了这一点,创建一个枚举的TypeDef,列出这些函数。 决定功能 尽管大多数台式DMM都能实现许多其他测量功能,但这些主要功能减少了设计范围,并为接口标准化提供了途径。一旦建立了这些函数,创建一个列出这些函数的TypeDef控件(图36)。对抽象类所需的其余方法继续这个过程。在下面的插图中,突出显示了这个DMM接口类中使用的控件和方法。 创建抽象方法 在创建TypeDef接口之后,使用这些接口创建抽象方法。要创建抽象方法,右键单击DMM。lvclass图标,并从动态调度模板中选择New >> VI。 将下列控件添加到前面板,并使用下图将这些控件连接到连接器面板。 如图39所示连接控件。 制作打包库 要完成该类并使其成为可重用组件,创建打包库,右键单击Build Specification >> New >> packed library 信息设置 在“信息”部分填写以下信息: 构建规范名称:DMM打包库 目标文件名:DMM.lvlibp 目标目录:C:\Dev Components 附加排除设置 按照以下说明完成附加排除条款部分: 找到“附加排除”表单上突出显示的部分,并启用这两个选项。选择此选项将构建库并将库保存到目标路径,而不包括支持打包的库。目录结构的当前安排将导致构建失败,因为试图覆盖当前正在使用的文件。 源文件设置 使用以下信息完成源文件部分:在项目文件窗格中,选择DMM.lvlibp 目标设置 在“目标路径”字段中,输入以下路径位置:C:\Dev Components 高级设置 按照以下步骤完成高级部分: 找到高级表单上突出显示的部分并启用突出显示的选项。在开发阶段启用调试非常有用。一旦验证了类,在构建最终库之前禁用此选项。 附加排除设置 按照以下说明完成附加排除条款部分: 找到“附加排除”表单上突出显示的部分,并启用这两个选项。选择此选项将构建库并将库保存到目标路径,而不包括支持打包的库。目录结构的当前安排将导致构建失败,因为试图覆盖当前正在使用的文件。 完成这些部分后,可以通过单击Build按钮创建打包的库。 创建DMM制造商类(Level01) 下面的类图说明了Level01的子类如何从父类继承。如前一节所详细描述的,Level01包含制造商仪器类。大多数抽象方法是在这些类中实现的。 在查看类图之后,注意DMM类继承自HAL_Utility类。这个类是一个实用程序类,它提供了供所有硬件类使用的方法。这个实用程序类的目的是为所有子类提供一种机制,以返回包含所有沿袭类名称和编译版本的列表。 从DMM类继承 本演示文稿中包含一个包,其中包含该项目的所有源代码。由于包含了源代码,本节将侧重于不兼容地实现和管理HAL接口。 niDMM和Agilent类继承了DMM类HAL Utility类。为了实例化这些类中的方法,DMM和HAL Utility包库被添加到DMM Classes_Level01.lvproj中。完成后,niDMM和Agilent类被配置为继承DMM类。 要实例化DMM类中的抽象方法,右键单击类图标>> New >> VI for Override… 当出现“新建覆盖”窗口时,为“新建覆盖”窗口中出现的列表选择可用的方法。 对其余的类方法重复这个过程 如何让你的HAL不发臭。 管理HAL接口不兼容 在创建抽象方法之前,定义接口是为了防止由于制造商驱动程序差异而造成的接口不兼容。本节详细介绍用于应对DMM类这个挑战的解决方案。 虽然NI-DMM和Agilent设备的仪器驱动程序具有配置测量功能,但这两种功能的接口略有不同。下面的插图突出了这些差异。 解决方法: niDMM = 3½、4½、5½、6½和7½ 安捷伦= 4½,5½,和6½ 汽车功能范围: niDMM =否·Agilent =是 为了解决这些差异,当违规发生时,这些方法会抛出一个错误。因此,当用户在使用niDMM ConfigureMeasurement方法时试图启用Auto Range选项时,会抛出一个指示该选项不可用的错误。 在本例中,当用户在使用Agilent ConfigureMeasurement方法时试图选择设备范围之外的分辨率选项时,会抛出一个指示范围违规的错误。 在某些情况下,一个制造商的设备可能提供其他制造商不提供的功能。在这种情况下,建议在父类中实现错误违背。通过在父类方法中实现错误冲突,需要实例化和重写 不提供该特性的子类中的方法是不需要的;当在这些子类中调用该方法时,它默认为父类方法,该方法将抛出错误。 管理设备初始化不兼容性 在某些情况下,当制造商为同一类型但不同型号的特定系列的仪器提供驱动程序时,当调用Initialize函数时,它只对一个型号有效;这是由于调用仪器查询函数来识别仪器。在大多数情况下,绕过此调用的选项作为函数参数包含。 为了减轻这个问题(如果出现),将一个受保护的方法添加到实现Initialize函数的仪器制造商级别(Level01)中。 该方法可以由设备级的Initialize方法调用 结论 正如在介绍中所讨论的,有许多方法可以实现用于开发应用程序的HAL。由于体系结构的复杂性,我个人尝试使用其他文章中详细介绍的体系结构来实现HAL的经验遭到了反对(主要来自我自己)。这就是引导我开发更简单的HAL体系结构的原因。本文中描述的队列消息处理程序设计用于队列消息处理程序体系结构,特别是Delacor队列消息处理程序(DQMH)。本系列的第二部分将演示如何使用DQMH实现一个简化的HAL。  
相关规范     http://www.picmg.orgPICMG 规格http://www.ieee.orgIEEE 规格http://www.iec.orgIEC 规格http://www.pcisig.orgPCI 规格http://www.ivifoundation.orgIVI 和 VISA 规格
链接:QSI_Shared_Code •吉特拉布 (gitlab.com)
LabVIEWVI分析工具工具包允许您以交互式和编程方式测试VI,以找到需要改进的区 域。该工具包包含可解决各种性能和样式问题的测试。 该工具包将测试分为以下主要类别:Block Diagram —检查方框图的性能和样式问题,如接线、回路和结构的使用情况、强制点以及方框图上不必要的元素。 Complexity Metrics —检查VI的复杂性,例如嵌套、代码重用和模块化。文档——为开发人员和用户检查VI中的文档,如VI和控制描述以及方框图注释,并检查VI、前面板和方框图上的拼写。前面板——检查前面板设计和用户界面问题,如控制使用、字体选择和标签。常规—检查不适合其他类别的性能和样式问题,如文件属性、图标和连接器窗格,以及VI属性。 VI度量——检查方框图和前面板度量,例如连接器窗格输入和输出、控制器和指示器以及节点的数量。 实时模块-检查实时应用程序的最佳编程实践。这些测试仅在您安装和激活LabVIEW实时模块时才可用。 用户指定—使用您设计和自定义的测试来检查各个方面。本用户指南一步一步地介绍了创建、配置和运行一个简单的VI分析器任务以及使用VI 分析器来解释结果的过程。该用户指南还向您展示了如何导出测试结果、保存任务配置设置,以便您能够快速运行和重新运行任务,并创建以编程方式分析VI的工具。 本用户指南一步一步地介绍了创建、配置和运行一个简单的VI分析器任务以及使用VI 分析器来解释结果的过程。该用户指南还向您展示了如何导出测试结果、保存任务配 置设置,以便您能够快速运行和重新运行任务,并创建以编程方式分析VI的工具。 所包含的内容 关于VI分析仪工具包...............................................................................................................2 使用VI分析仪...........................................................................................................................3 创建和配置VI分析器任务。..........................................................................................3 查看VI分析仪的结果。................................................................................................. 5 正在导出VI分析仪的结果............................................................................................. 7 正在加载VI分析仪配置文件.........................................................................................8 在VI分析器任务中进行自定义测试..............................................................................8 忽略测试失败。............................................................................................................. 10 使用VI分析仪的VI...................................................................................................................11 自动化VI分析仪的任务...........................................................................................................12 从这里可以去哪里...................................................................................................................13 关于VI分析仪工具包 您可以使用VI分析器工具包来创建和配置VI分析器任务,它为VI分析器提供设置,以运 行评估VI的样式和效率的测试。 NI建议您遵循测试推广的风格指导方针,以达到最大的性能和可靠性。但是,您可以自 定义测试标准来分析VIs是否符合特定于您的需要的标准。 VI分析工具工具包对标准VI、多态VI、ExpressVI(源VI和配置对话框VI)的单独组件、 VI模板、全局变量和自定义控件运行测试。您可以对特定文件夹、LLB、项目或单个项 目中的所有vi运行测试 您不能直接在LabVIEW项目文件或项目库上运行测试,但您可以在作为项目库的一 部分或项目文件中的任何VI上运行测试。 您执行测试的VI不必保存在最新版本的LabVIEV中。您可以对您可以在最新版本的 LabVIEW中打开的任何VIs执行测试。 您可以指定要在特定vi上运行的测试。并不是所有的VI分析仪测试都与VI分析仪任务中 包含的每个VI相关。例如,您可能不会在用户看不到前面板的子vi上运行与字体相关的 前面板测试。 您可以将为VI分析器任务配置的设置保存在一个配置文件中,您可以将其应用于后续 的VI分析器任务。该配置文件作为一个模板,以定期测试vi,以满足特定的标准。 VI分析工具工具包提供了创建、配置和运行VI分析工具任务的两个选项。您可以通过选 择工具六分析工具分析工具分析来交互式选择所需的特定分析设置。您还可以使用工具 包安装在功能调色板上的VI分析器VI,它允许您编写程序,以编程方式执行VI分析器任 务。 在VI分析器运行一个任务后,您可以使用VI分析器结果窗口来突出显示在特定VI中导 致测试失败的对象。您可以将结果导出到ASCIIorhtml格式的报告中,该报告包含有关 分析的所有相关信息,包括失败的测试和分析过程中发生的错误。 使用VI分析仪 VI分析器是一组用于创建和配置VI分析器任务的对话框。 创建和配置VI分析器任务 使用VI分析器完成以下步骤以检查VI。   从“工具”菜单中,选择“VI分析仪分析VI”。   在“选择任务”对话框中,选择启动新的VI分析器任务,然后单击“下一步”。   在“选择VI”对话框中,单击“添加顶级项目”。导航到并选择 实验室查看\例子\VI分析仪Toolkit\llbtoanalyze.llb. 提示若要从文件对话框中选择LLB,请双击LLB文件名以打开它。在“LLB文 件”对话框中,双击旁边有单点的VI文件夹图标。 选择LLB后,它将出现在“要分析的项目”层次结构中。   展开“要分析”层次结构中的文件夹以显示所有vi的列表,如下对话框所示。 请注意“包括/排除项目”按钮,您可以使用该按钮来选择或删除您要在或从VI 分析器任务中删除的确切VI。在“要分析”层次结构中选择VI,使按钮活动。 请参见中的自定义测试 VI分析器任务部分,了解有关在VI分析器任务中包括和排除VI的更多信息。 单击“下一步”。此时将出现“选择测试”对话框。 “选择测试”对话框允许您选择要运行的测试。VI分析仪按类别对测试进行分组。 对于某些测试,您可以配置设置,以定义通过或失败测试的特定条件。您可以扩展 测试层次结构中的项目,以查看所有可用的VI分析器测试,如下对话框所示。 提示:默认情况下,VI分析器会选择测试层次结构中要在VI分析器任务中运 行的所有测试。您可以在“测试”层次结构中右键单击,并选择“取消选择 所有测试”或“选择所有测试以取消选择或选择所有测试”。 对于此练习,不要更改测试层次结构中的测试选择。   单击“下一步”。此时将出现“从VI中排除测试”对话框。“从VI中排除测试” 对话框允许您排除针对特定VI的特定测试。有关包括和排除VI分析器任务中的测 试的更多信息,请参阅VI分析器任务中的自定义测试部分。   单击“保存”。在文件对话框中,选择要保存配置文件的位置。将该文件 命名为test1.viancfg. 保存配置文件后,您可以将其加载到VI分析器中,以便稍后执行相同的VI分析器任 务。有关使用配置文件的更多信息,请参阅加载VI分析器配置文件部分。   单击“分析”。“分析VI”对话框显示了VI分析器任务的进度。 查看VI分析仪的结果 分析完成后出现的VI分析器结果窗口将在三个选项卡页面中显示结果。该窗口允许您查 看和组织来自VI分析器任务的结果。 完成以下步骤以查看VI分析仪的结果。   在“测试结果”页面上,单击按测试排序,按测试查看结果。“结果列表”层次 结构首先显示高级测试,最后显示低排名测试。VI分析仪结果窗口包含一个测试 排名图标的图例,如下图所示。 高级测试涉及对VI性能有显著影响或可能导致VI执行中出现意外错误的问题。低 等级的测试涉及轻微的风格或不显著影响VI性能的外观问题。旁边没有排名图标 的测试属于中间排名区域。每个测试匹配项的默认排名 关于风格和性能问题的NI建议。   展开“重复控制标签”项,以查看测试失败的VI列表。 提示:默认情况下,“测试结果”页面只列出失败的测试。从“仅显示失 败”复选框中删除该复选标记,以查看“VI分析器”任务中所有测试的详细 信息。   展开Gen集禁用状态。vi项,以查看VI的测试失败发生的列表。 提示:您可以看到子项中每个类别中失败的测试次数 没有扩展失败的VI或失败的测试节点。   点击VI名称下面的项目。项目的信息提示和说明文本框说明了VI测试失败的原 因,如下的示例所示 VI失败了测试,因为前面板上的多个控件有相同的标签。   双击该项目。Gen集禁用状态VI的前面板打开,VI分析仪突出显示其中一个包含重 复标签的控件。您可以纠正标签,以便VI在下次运行VI分析器任务时通过测试。 . 关闭世代设置的禁用状态VI。   单击VI分析器结果窗口的“测试错误”选项卡。如果在分析过程中发生错误,则 “测试错误”页面将显示未加载的vi和测试、未运行的测试以及发生错误的测试 的列表。 对于此练习,“测试错误”选项卡没有列出任何测试,因为没有发生任何错误。   单击VI分析器结果窗口的“汇总”选项卡摘要页显示来自分析的几种汇总结果, 例如运行的测试次数、通过/失败的次数以及完成VI分析器任务所花费的时间。. 正在导出VI分析仪的结果 在“VI分析器结果”窗口中,完成以下步骤,以您可以在其他应用程序中打开和操作的 格式创建结果文件。   单击“导出”。此时将出现“导出VI分析器结果”对话框。   在“导出文件路径”控件中输入结果文件的路径和文件名。默认值是由当前日期 和时间组成的文件名。   从“导出类型”列表中,选择所需的文件格式。您可以将结果导出为制表卡分隔 的ASCII文件,这对于电子表格应用程序很有用,也可以作为HTML文件,这对于在 Web浏览器中查看很有用。   从“按顺序排序”列表中,选择是否希望按VI名称或测试名称在文件中排序的结 果。   在“导出选项”部分中,在要包含在导出文件中的结果旁边的复选框中放置复选 标记。   单击“导出”以生成该文件。   在“VI分析器结果”窗口中,单击“已完成”以关闭该窗口。   单击“是”,将结果保存在一个VI分析器结果文件(。rsl)中,您可以在稍后的 “VI分析器结果”窗口中查看。此时将出现一个“文件”对话框。为结果文件选 择所需的路径和文件名。 注意:您还可以单击“VI分析器结果”窗口中的“保存”,以创建结果文件。要 在“VI分析器结果”窗口中查看以前保存的结果文件, . . 选择工具VI分析器显示结果窗口如果VI分析器结果窗口已经打开,请单 击加载您只能查看VI分析器结果窗口中的VI分析器结果文件。   单击“否”以关闭VI分析仪 正在加载VI分析仪配置文件 您可以创建和编辑包含您为VI分析器任务选择的设置的VI分析器配置文件。 完成以下步骤,将配置文件加载到VI分析器中。   打开VI分析仪。在“选择任务”对话框中,选择“加载以前保存的分析配置文 件”选项,然后单击“下一步”。   从文件对话框中,选择您以前创建的test1.viancfg文件。   在“选择VI”对话框中,请注意,“要分析的项目”层次结构中的VI和文件夹 的设置是您以前选择的设置。   在“要分析的项目”层次结构中选择容器VI,然后单击“包括/排除项目”按钮。 VI旁边的X表示VI分析器任务不包括VI。   单击“下一步”。此时将出现“选择测试”对话框。在下一节中,您将使用“选 择测试”对话框在VI分析工具任务中自定义测试。 提示VI分析工具工具包包括几个在创建配置文件时可以作为模型的示例配置 文件。 示 例 文 件 位 于 标 签 视 图 \ V I 分 析 工 具 工 具 包 目 录 中 。 在VI分析器任务中进行自定义测试 VI分析仪中包含的许多测试允许您设置通过或失败通过测试的某些标准。 提示:您可以按需要的方式设置测试条件,然后在选择VI对话框中不指定VI即 可保存配置文件。您可以使用此配置文件在不同的vi组上运行同一组测试。 完成以下步骤,以配置VI分析器任务的测试条件。 在“选择测试”对话框中,展开测试中的框图类别 层次的层次结构。展开“性能类别以显示该类别的特定测试。   单击“循环中的数组和字符串”测试。测试的配置选项显示在右侧的选定测试的 配置框架中,如下对话框所示。   从“循环”控件中选择“同时循环”。该测试现在只搜索包含“当循环”的 实例。   从测试排名控件中选择“高”。该测试现在收到一个高排名,并将出现在六个 分析器结果窗口的测试结果层次结构的顶部。   单击“下一步”。此时将出现“从VI中排除测试”对话框。 “从VI中排除测试”对话框允许您跳过针对特定VI的特定测试。在某些情况下,对 于某种类型的VI,可能不需要进行测试。   选择“生成对齐水平VI”,并从“常规图标”和“连接器”窗格类别中的“图标 大小和边框”测试旁边的复选框中删除该复选标记。选择Gen对齐垂直VI,并删除 相同的测试。 提示:如果要排除多个VI的相同测试,请按<Ctrl>键,然后单击VI名称,一 次选择多个VI。 Gen对齐水平VI和Gen对齐垂直VI是用户看不到的内部子VI,因此图标规范并不重 要。因此,无需在VIs上运行图标大小和边框测试。   单击“保存”。将该文件另存为test2.viancfg.   单击“分析”,使用新设置运行分析。   在VI分析仪结果窗口中,查看分析结果。 忽略测试失败 默认情况下,VI分析器返回您在VI分析器任务中指定的VI和测试的失败。但是,您可能 希望忽略您认为可接受的失败。当您忽略特定对象或VI的一个或多个测试时,VI分析器 将不会为该对象或特定测试的VI返回失败。 注意:您不能忽略前面板对象或没有方块图的VI的故障,如控制VI和全局VI。 完成以下步骤以忽略框图中VI和对象的特定测试。   导航到并选择实验室视图\示例\VI分析仪工具包\llbtoanalyze.llb.   打开数组写入列表框VI,然后切换到方框图。   在方框图上的任何位置创建一个免费标签,并输入#via_ignore连接器窗格模式。 VI分析器忽略您在免费标签中指定的VI的分析器测试名称,其中还包含 #via_ignore书签。 提示:您可以在自由标签中指定多个测试名称,以忽略多个测试。   在方框图上创建另一个免费标签,并输入#via_ignore控制终端接线。将此自 由标签附加到“结束行”指示灯上。控制终端接线测试将不会返回端行指示 灯的故障。 下面的方框图显示了#via_ignore书签,它将忽略数组写入列表框VI中的失败。   将数组写入列表框VI。   在VI分析器中,加载以前创建的test1.viancfg文件并分析VI分析器任务。   在VI分析仪结果窗口中,查看分析结果。 使用VI分析仪的VI 当您安装LabVIEWVI分析器工具包时,位于VI分析器调色板上的VI分析器调色板包含可 用于通过编程创建或运行VI分析器任务的VI。当您需要经常或定期检查程序时,程序选 项提供了灵活性。VI分析仪VI名称以VIAn开头,以作为VI分析仪工具包的一部分。有关 特定VI分析仪VI的更多信息,请参阅LabVIEW帮助。 使用NI示例查找器来打开简单的VI分析VI。选择“帮助查找示例”,并选择“目录结 构”视图。打开VI分析器工具包文件夹,以找到简单的VI分析VI。这个示例VI运行一个 VI分析器任务,并生成一个基于html的报告。当您使用VI分析器VI创建VI时,您可以使 用简单的VI分析VI作为模型。 打开该方框图。请注意,示例VI包括子VI,如可视化简单分析VI和可视化简单报告VI, 如下方框图所示 运行简单的VI分析VI。示例VI运行后,前面板指示灯显示通过和失败的百分比和总分析 时间。打开一个Web浏览器以显示基于html的报告。将该报告与您在“导出VI分析器结 果”部分中创建的报告进行比较。 自动化VI分析仪的任务 您可以使用VI分析器VI来创建一个动态创建和修改VI分析器任务的程序。 使用NI示例查找器来打开高级VI分析VI。选择“帮助查找示例”,并选择“目录结构” 视图。打开VI分析仪工具包文件夹,以找到高级VI分析VI。此示例VI允许您从VI分析器 任务中排除特定的VI和特定的测试。当您为详细的VI分析器任务创建VI时,您可以使用 高级VI分析VI作为模型。 打开该方框图。示例VI中的SubVI包括许多VI分析器变量,您可以用于执行VI分析器任 务,生成HTML报告,并提供在VI分析器任务中运行的分析和测试的列表。 以下框图显示了高级六分析VI框图上的一些六分析仪VI。框图非常宽,包括下图中不可 见的Vi和对象。通过修改测试设置VI从分析中排除了某些测试。VIA修改测试配置值VI 取消选择VI文档测试中的控制描述选项。您可以使用前面板控件来更改这些VIs设置的 条件。 从这里可以去哪里 LabVIEW帮助包括使用VI分析仪工具包的程序,以及VI参考帮助和关于VI样式指南的信 息。通过选择“帮助LabVIEW帮助”来访问LabVIEW帮助  
cmd 解除权限 End Windows Process.zip
 CRC-8-CCITT, CRC-8-Maxim 1-Wire (DOW), CRC-16-CCITT (0xFFFF), CRC-16-CCITT (0x1D0F), CRC-16-CCITT xModem, and CRC-32 IEEE 802.3. 下载地址:Inline CRC.zip