在NI TestStand中使用回调

1.什么是回调?
回调是TestStand在特定情况下调用的序列。您可以创建新的回调序列,也可以覆盖现有的回调以自定义测试站的操作。TestStand定义了三类回调:模型回调,引擎回调和前端回调。类别基于调用回调的实体以及定义回调的位置。通过模型回调,您可以为使用模型的每个Main序列自定义过程模型的行为。引擎回调由TestStand引擎定义,并在执行过程中的特定点调用。用户界面程序调用前端回调,以允许多个用户界面共享特定操作的相同行为
2.使用模型回调
使用模型回调为过程模型使用的每个客户端序列文件自定义过程模型的行为。通过在流程模型中定义一个或多个Model回调,您可以指定可在客户端序列文件中自定义的流程模型操作。当您在客户端序列文件中定义Model回调时,Model回调将覆盖流程模型中的序列,以便运行客户端文件定义的序列,而不是运行模型文件中的序列。
为什么要使用模型回调?
在大多数情况下,默认流程模型就足够了,但是您可能需要通过将某些行为替换为不同的行为来修改默认模型。例如,默认流程模型定义一个TestReport回调,该回调为每个UUT生成测试报告。通常,默认过程模型文件中的TestReport回调就足够了,因为TestReport回调可以处理许多类型的测试结果。但是,可以通过使用“序列文件回调”对话框在特定的客户端序列文件中定义其他TestReport回调,来覆盖默认的TestReport回调。
覆盖模型回调的其他常见用例包括:
 将报告选项更改为始终以特定格式或位置报告。
 更改数据库选项以指定TestStand如何将信息记录到数据库。
 更改模型选项以始终使用一定数量的测试插座。
 在测试一组UUT之前添加TestStand运行一次的初始化代码。
 在测试一组UUT之后添加TestStand运行一次的清理代码。
 使用条形码扫描仪识别UUT序列号。
 更改TestStand生成报告的方式。
修改流程模型与使用模型回调
在决定如何处理自定义行为时,通常必须选择直接修改流程模型还是使用模型回调。尽管这两种方法都是可行的,但请考虑以下情形,以帮助您确定使用哪种替代方法:
场景1
情况:您想要添加设计为在您运行的所有序列文件中通用的行为。
解决方案:将代码放入流程模型中。
理由:如果将代码放在回调中,则必须对运行的每个序列文件都这样做。开发人员可能会忘记这样做,否则可能导致错误的行为。如果必须修改代码,则必须在多个序列文件中搜索所有副本。
场景2
情况:您想要添加在您运行的所有序列文件中最常见的行为,但是某些序列文件需要不同的行为。
解决方案:将代码放入流程模型中。
理由:该场景与场景1相似,除了需要不同行为的序列文件可以使用回调来覆盖该行为。
场景3
情况:您希望在某个顺序的某个时刻发生许多不同的行为,但大多数情况下不会发生。
解决方案:选择一种(或不选择)默认行为。如果选择将其中一种行为设为默认行为,则将行为放入流程模型中。覆盖其他序列文件的回调。
理由:在因情况而异的情况下,模型必须执行某些操作,因为没有真正的默认行为。此行为可以是指定为默认行为的一个行为,也可以是任何行为,并且需要序列文件来实现该行为。如果重复出现某种行为,National Instruments建议您在单独的序列文件中对行为进行编码,以使代码仅位于一个位置。
如何使用模型回调
每个流程模型都可以定义任意数量的模型回调,这些回调在序列列表中以绿色图标显示。右键单击Sequence View控件,然后从上下文菜单中选择Sequence File Callbacks,以启动Sequence File Callbacks对话框,您可以在其中查看所有可用的Model和Engine回调的列表(取决于当前与该序列关联的流程模型)文件),然后将模型回调添加到常规序列文件中。双击所需的回调,或在“序列文件回调”对话框中单击“ 添加”按钮以添加模型回调。请注意,当您双击所需的回调时,Present列的值将从No更改为Yes。添加所需的回调后,它们将出现在序列列表中。用户还可以通过创建新序列并使用与回调相同的名称命名序列来创建模型回调。
您还可以通过将序列添加到序列列表中来向流程模型添加新的模型回调。添加序列后,必须通过右键单击序列并从上下文菜单中选择“ 序列属性”,将序列指定为Model回调。您必须在“序列属性”对话框的“模型”选项卡上将“类型”从“ 普通”更改为“ 回调 ”。仅当序列在流程模型中时,“类型”选项才可用。
3.使用引擎回调
TestStand Engine定义了一组Engine回调,并在执行过程中的特定点调用Engine回调。使用引擎回调将TestStand配置为在测试过程中的各个时间点调用某些序列,包括在执行单个步骤之前,之后,在交互式执行之前和之后,加载序列文件之后或卸载序列文件之前。由于TestStand Engine控制步骤的执行以及序列文件的加载和卸载,因此TestStand定义了引擎回调集及其名称。您不能添加新的引擎回调。
为什么要使用引擎回调?
对于要基于特定引擎行为执行的任何行为,请使用引擎回调。常见的用例包括:
 TestStand加载序列文件时初始化仪器。
 每次执行后,将自定义信息添加到ResultList中。
 如果测试失败,则允许操作员重试测试。
 一步处理错误。
 每一步骤后登录到数据库或报告。
如何使用引擎回调
您可以以与模型回调相同的方式添加Engine回调以序列文件。您可以在常规序列文件,过程模型和工作站回调文件中定义引擎回调。您在序列文件中定义的回调仅影响该特定序列。在步骤上执行的流程模型回调会影响模型本身或客户端序列文件(取决于您使用的回调),并且您在工作站回调序列文件中定义的回调会影响工作站回调文件本身或您在其上运行的任何其他文件工作站(取决于您使用的回调)。您添加到流程模型文件中的所有以前缀“ SequenceFile”开头的回调均会影响流程模型本身,而所有以前缀“ ProcessModel”开头的回调均会影响客户端序列文件。
工作站回叫是位于 \ Components \ <NI或用户> \ Callbacks \ Station \ StationCallbacks.seq文件中的特殊文件,并保存工作站回叫。放置回调的位置取决于您希望行为的全局性。如果只希望行为出现在某个序列文件中,则将回调放置在序列文件中。如果希望使用流程模型对每个文件都执行该行为,请将回调放置在流程模型中。如果无论序列文件使用哪种模型,都希望发生这种情况,请将回调放置在桩号回调中。在多个文件中定义引擎回调不会覆盖行为。在这种情况下,TestStand Engine会调用每个回调。
4.前端回调
前端回调是FrontEndCallbacks.seq文件中的序列,位于用户界面应用程序调用的 \ Components \ <NI或User> \ Callbacks \ FrontEnd目录中。前端回调允许多个用户界面共享特定操作的相同实现。TestStand所安装的FrontEndCallback.seq版本包含一个前端回调序列,即LoginLogout回调,该序列编辑器以及TestStand调用中包括的所有用户界面。
为什么要使用前端回调?
当您必须基于用户界面中的用户操作调用特定序列时,请使用前端回调。由于前端回调序列文件实现了LoginLogout回调,因此您对LoginLogout回调所做的任何更改也必须在前端回调中进行。您可以将不依赖于流程模型的任何类似功能实现为前端回调。
如何使用前端回调
该FrontEndCallbacks.seq文件包含的TestStand可以从用户界面调用序列文件。您可以将所需的任何其他序列添加到此文件,以便可以使用或修改现有的回调。创建所需的行为后,必须通过调用Engine.CallFrontEndCallbackEx方法来调用Front-End回调,该方法可用于将序列名称和参数列表传递给正在执行的序列文件。您还可以使用ApplicationMgr.Login和ApplicationMgr.Logout方法调用LoginLogout前端回调。
5.总结
回调提供有用的功能,可用于基于某些事件来修改TestStand行为。正确使用回调可以带来更强大的测试站和更可维护的代码,并提供一种向测试站添加许多强大功能的简便方法。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值