摘要
通过本文中的建议,您可以建立开发和应用程序管理指南,确保您可以扩展大型应用程序开发。探讨如何适当考虑磁盘上文件的组织,并建立排序文件的标准。使用LabVIEW Project Explorer进行应用程序的系统级视图,轻松访问和浏览文件,并充分利用检测交叉链接的工具。
1.定义和识别应用程序文件
建立存储和管理文件的指导原则需要预见到应用程序的结构,功能的划分方式以及超出源代码的文件类型,这些都将非常重要。花时间做出关于如何在代码中分配功能以及在文件存储位置与开发人员合作的决策以及他们需要正常运行的其他文件或资源。
2.组织磁盘上的文件
磁盘上的文件组织不应该做事后诸葛亮。对大型应用程序的规划不力导致在开发过程中移动和重命名文件的时间更多。在处理大量文件时,请记住,这些操作可能对LabVIEW中链接的完整性构成相当大的风险,因此可能对应用程序的行为造成很大的风险。尽早建立这些做法可以减轻以后移动大量文件的风险,可以帮助确保开发人员可以轻松查找文件并确定保存新文件的位置。许多软件开发人员已经有了实践和系统来确定应该存储文件的位置。以下是被证明可以适用于大型应用程序的常规实践。将文件存储在单个根目录中可确保您可以轻松访问所需的所有内容,并执行标准命名约定可帮助用户知道在何处查找文件以及放置新文件的位置。硬盘上的文件夹通常用于对文件进行分组或分类,从而将子VI与调用者分开。相反,平铺的目录结构使得难以查找文件或找到顶级VI,即使对于少量的VI也不建议。通常用于分组这些文件的标准是应用程序中的文件功能,类型和层次结构。事实上,磁盘上的组织应该是应用程序中文件和代码关系的物理表现。图1演示了一些概念,例如组织根目录中的所有文件,将顶层VI与依赖关系分开,以及将文件“将”文件“分段到文件夹中的各种标准。
![]() |
图1 – 在不使用LabVIEW项目浏览器的情况下组织在磁盘上的示例应用程序。 |
建议
- 将所有文件存储在单个根目录中
- 将您的应用程序划分为可管理大小的逻辑片段
- 使用逻辑和描述性命名约定
- 将顶级VI与其他源代码分开
- 从包含应用程序主要组件的高级框图开始(例如,框图可能包括用于配置,采集,分析,数据显示,数据记录和错误处理的单独框架)
- 根据预定标准进行组或“桶”文件
动态依赖关系和共享代码的特殊考虑
动态加载的文件构成额外的挑战,经常值得特别注意。由于这些文件没有被应用程序中的任何调用者静态链接,所以当移动位置或以任何方式更改文件路径时,它们可能会放错或忘记。
为了最大限度地减少确保将所有动态访问的文件保存在正确位置的困难,您可以将它们分组在单独的文件夹中,并使用相对路径引用它们。如果需要移动或分发应用程序,可以通过包含文件夹确保您需要的文件。
当大型应用程序共享代码时,请注意存储这些文件的位置,并且更改可能会无意中影响其他调用者。当利用已经完成的工作来加快开发速度时,类似的应用程序可能需要相同的功能,或不同的代码分支可能引用同一组常见的VI。参考相同的代码通常要求这些文件位于至少一个应用程序的根目录之外。但是,如果您计划对这些常见的VI进行更改,请将本地副本进行测试和以后再进行集成。
您还可以使用源代码控制提供程序跟踪多个版本的软件,并比较在多次迭代之间进行的更改。源代码控制软件如SVN的使用方法见本站相关文档。
建议
- 将动态加载的依赖关系保留在公用文件夹中
- 使用相对路径引用动态依赖关系
- 最小化应用程序共享的代码更改
- 专注于管理和集成更改到共享代码的时间
- 使用源代码控制
3. LabVIEW项目浏览器
LabVIEW中引入了Project Explorer,为开发人员提供了应用程序所需文件的系统级视图。LabVIEW项目资源管理器的目标是帮助开发人员轻松地从开发环境中查找和整理文件,并提供附加功能,以应对管理和开发大型LabVIEW应用程序的挑战。自LabVIEW项目资源管理器初始发布以来,由于客户反馈,National Instruments已经纳入了多项新功能。要了解有关Project Explorer窗口的最新版本的更多信息,请参阅LabVIEW帮助中的LabVIEW中的“ 管理项目”主题。
图2 – 该项目演示了如何在LabVIEW项目资源管理器中组织如图1所示的相同应用程序。
使用LabVIEW项目将LabVIEW文件和其他文件组合在一起,创建构建规范,并将文件部署或下载到目标。保存LabVIEW项目时,LabVIEW会创建一个.lvproj文件,其中包括对磁盘上的文件,变量,超链接,配置信息,构建信息,部署信息等的引用。
LabVIEW Project Explorer不会将文件复制或复制到磁盘上的新位置。它提供了一种在磁盘上显示文件的新方法,并提供了磁盘上文件位置的快捷方式。使用LabVIEW项目资源管理器可以:
- 轻松访问和导航文件,而不用离开LabVIEW
- 定制和过滤文件的组织方式
- 在磁盘上移动或重命名文件时保留链接
- 防止,检测和解决不正确的链接
- 管理特定硬件目标的代码
- 管理构建配置
- 与源代码控制软件集成
在Project Explorer中管理文件
LabVIEW项目中有两页用于查看文件:“项(items)”页面和“文件”页面。
图3 – 文件页面显示项目中位于磁盘上的所有项目的过滤视图,并允许用户执行文件操作,如复制和重命名
默认视图是“项目”页面,其中提供了添加到LabVIEW项目中的项目的树视图,并按硬件目标对其进行分组。您可以在此视图中创建文件夹,以自定义文件的组织方式或与磁盘上的特定位置同步。这是你可能会花大部分时间的地方。您不能从“项目”页面从磁盘中删除文件 – 这是为了保护用户不小心删除代码。您可以从“文件”页面中删除项目,只需右键单击它们并选择“从磁盘删除”即可。“文件”页面显示磁盘上具有相应文件的物理位置。使用此视图执行您在系统文件浏览器中通常执行的文件操作,如移动,复制或删除。由于LabVIEW了解更改,因此可以在进行更改时更新呼叫者并保留链接。您可以在LabVIEW Project Explorer中自定义文件的层次结构,而不影响磁盘上文件的布局; 但是,建议LabVIEW项目中的组织尽可能地反映您在磁盘上设置的层次结构。
在LabVIEW项目中使用文件夹
您可以使用两种类型的文件夹来组织LabVIEW项目的内容:虚拟文件夹和自动文件夹。使用虚拟文件夹,您可以自定义项目项目的组织,而不对磁盘进行任何修改。
图4 – 在LabVIEW Project Explorer中组织文件时,用户可以从自动填充或虚拟文件夹中进行选择
虚拟文件夹是您想要更改LabVIEW中文件组织的场景的理想选择,而不对磁盘上的存储位置进行任何修改。如果您将磁盘上的文件夹作为虚拟文件夹添加到LabVIEW项目资源管理器中,则在添加文件夹时由快照视图表示。如果以后进行任何更改,包括添加新文件,则这些更改不会显示在LabVIEW项目中。但是,您可以通过将新文件拖动到LabVIEW项目中或临时将虚拟文件夹转换为自动填充文件夹来手动进行更改。使用虚拟文件夹,您可以在LabVIEW项目资源管理器中对来自磁盘上两个或多个单独位置的文件进行分组。它们也可用于过滤LabVIEW项目资源管理器中显示的信息,以帮助您确定文件是否与您不需要的其他项目分组。NI在LabVIEW中引入了自动文件夹,以自动反映磁盘上文件夹的内容。自动文件夹与物理文件夹同步,这意味着它们始终显示对LabVIEW开发环境之外的此位置的任何更改或修改。尽可能使用自动文件夹来保留LabVIEW项目资源管理器中的磁盘层次结构。管理Project Libraries或LabVIEW Class或尝试解析大量的交叉链接时,不建议使用自动填充文件夹。
建议
使用自动和虚拟文件夹,在LabVIEW项目资源管理器中实现应用程序文件的组织和结构。自动文件夹是保存和维护磁盘结构的理想选择,但有些情况下您无法使用它们或需要自定义。在这些情况下,使用虚拟文件夹可以自定义LabVIEW项目资源管理器中的文件组织。
依赖
当您打开调用VI时,LabVIEW会自动将所有静态链接的子VI加载到内存中。如果调用VI加载到LabVIEW项目资源管理器中,LabVIEW项目资源管理器的依赖关系部分将自动填充这些相同的子VI,如果LabVIEW项目尚未添加到LabVIEW项目中。LabVIEW的用户依赖关系与vi.lib的内容分开,以便更容易地识别应用程序开发人员编写的文件。将文件添加到LabVIEW项目中,向LabVIEW指示哪些文件和资源旨在用于应用程序。检查依赖关系部分,以确保已将您需要的所有内容添加到LabVIEW项目中 – 如果尚未完成,则本节将列出剩余的文件。这是确保您正在使用您想要的子VI副本的重要做法。您的LabVIEW项目中的VI可能会错误地链接到错误的子VI,在这种情况下,将要用于LabVIEW项目的子VI的副本添加到LabVIEW中,一个或多个调用者可能会错误地链接到具有相同的子VI的不同子VI名称。这种情况通常被称为交叉链接。
交叉链接
LabVIEW使用相对路径从存储在调用者中的位置打开子VI。如果LabVIEW在预期的位置找不到子VI,则会按名称搜索子VI。LabVIEW将通过该名称找到的第一个子VI加载到内存中,并向用户通知修改的链接。由于具有不同功能的多个VI可能共享一个通用名称(如initialize.vi),或者两个版本的同一个VI可能存在于不同的位置,LabVIEW可能链接到不正确的文件。
图5 – 交叉链接的高级说明
防止交叉联系
通常会通过移动或复制大量文件来再现新的磁盘位置中的代码层次结构,通常会发生交叉链接。如果相对路径发生变化,链接可能会被破坏,并且您的应用程序可能会不知不觉地与不正确的依赖关系链接。LabVIEW不能将两个不同的VI加载到具有相同名称的内存中。因此,打开引用具有相同名称的单独子VI的两个应用程序意味着使用不正确的依赖关系执行。
建议
您可以采取几种措施来防止交叉联系:
- 避免同时在同一机器上工作在多个应用程序上,具有通用依赖关系
- 使用源代码控制应用程序来精确指定文件应位于哪里,并保留正确链接的呼叫者
- 避免移动或复制应用程序的部分
- 将所有文件添加到LabVIEW项目中,以指出您打算使用哪些资源
- 避免使用常用名称,如initialize.vi
- 使用Project Libraries命名空间来标识通用名称
识别冲突
确保正确连接是所有编程语言的共同挑战。仔细的做法可以减少交叉链接的发生并提供正确链接文件的备份,但是在开发大型应用程序中仍然是一个很大的问题。LabVIEW项目管理功能旨在帮助开发人员检测和解决交叉链接。
图6 – LabVIEW能够自动向用户发出冲突警告
也许与交叉相关的最有益的功能是LabVIEW项目确定VI是否调用与添加到LabVIEW项目的文件名称相同的子VI。LabVIEW会通过文件图标上的黄色警告指示器通知您,此时有几种方法可以查找有关文件的更多信息,以确定哪个文件是正确的版本:
- 右键单击LabVIEW项目资源管理器中的.lvproj文件,然后选择“查找没有调用者的项(Find items with no callser)”。如果除顶级VI之外还有任何未链接的VI,则列在此处。
- 右键单击VI,然后选择查找>>调用者以识别哪个VI正在调用它,或者如果没有任何呼叫者。
- 在菜单工具栏中,选择“ 项目”>>“显示项目路径”,在“项目”页面中查看磁盘上所有文件的位置。
- 单击“解决冲突..”工具栏图标以查看有关所有交叉VI的详细信息。
一旦确定了交叉链接并确定了如何修复链接,您可以手动进行更正,也可以使用LabVIEW Project Explorer工具来完成此过程。
解决冲突
在LabVIEW检测到冲突后,有多种解决冲突的方法。遵循以下建议有助于确保在进行所需更改时能够保留到子VI的链接。
建议
- 如果自动填充文件夹中存在冲突,则需要通过重命名“文件”页面中的项目来停止自动填充或解决冲突。
- 如果一个或多个调用者已经错误地链接到LabVIEW Project Explorer之外的子VI,那么需要将这些VI重新链接到LabVIEW项目中相应的子VI。右键单击LabVIEW项目资源管理器窗口中的冲突VI,然后从快捷菜单中选择“替换”,以在磁盘上选择正确的子VI。对任何剩余的冲突重复此过程。
- 如果呼叫者引用了同名的多个项目,但磁盘上只有一个项目,则可以右键单击冲突的项目,然后从快捷菜单中选择“替换项目找到项目”。
- 如果将多个具有相同名称的项目添加到LabVIEW项目中,并且要在应用程序中使用这两个项目,请重命名它们,或者将它们添加到单独的项目库中以限定其名称。
您可以使用“解决冲突”对话框自动执行这些建议。选择项目»从LabVIEW项目浏览器窗口解决冲突以显示“解决冲突”对话框。您还可以单击“解决冲突”工具栏按钮或右键单击LabVIEW项目资源管理器窗口中的冲突项,然后从快捷菜单中选择“解决冲突”以显示此对话框。
图7 – 解决冲突对话框提示用户选择正确的子VI
此对话框包括以下组件:
- 冲突 – 通过限定名称显示项目冲突。
- 比较 – 比较两个冲突的VI。
- 使用所选项目 – 选择要使用的项目时,解决冲突。如果冲突列表仅涉及顶级项目,则LabVIEW将删除冲突列表中的所有项目,除了您选择的项目。在“解决项目冲突”对话框中,LabVIEW无法修改自动填充的文件夹。您可以通过右键单击该文件夹并从快捷菜单中选择“停止自动填充”来手动解析这些项目或禁用自动填充文件夹。
使用此对话框通过将冲突的项目从正确的路径重定向到调用相关项目来解决冲突。