3. 使用变量与表达式实现测试参数传递
变量作用域与表达式传递的核心机制
在 TestStand 中,变量按作用域分为局部变量(Local)、序列文件全局变量(FileGlobal)和站全局变量(StationGlobal)。本案例聚焦前两种:局部变量仅在当前序列执行期间有效,序列结束后释放;文件全局变量在整个序列文件生命周期内持续存在,可被同一文件内所有序列访问。表达式则负责在步骤的输入参数中引用这些变量,实现值的动态传递。
在序列编辑器中定义变量
打开序列文件后,在Variables 面板中可分别管理 FileGlobal 和 Locals。FileGlobal 变量在序列文件根节点下定义,Locals 变量在具体序列节点下定义。右键变量区选择 Insert Variable,设置名称、类型和初始值。本案例定义如下变量:
| 作用域 | 变量名 | 类型 | 初始值 | 用途 |
|---|---|---|---|---|
| FileGlobal | TestVoltage | Number | 5.0 | 标准测试电压 |
| FileGlobal | LowerLimit | Number | 4.5 | 下限值 |
| FileGlobal | UpperLimit | Number | 5.5 | 上限值 |
| FileGlobal | PassCount | Number | 0 | 通过计数 |
| Local (MainSequence) | MeasuredValue | Number | 0 | 测量值 |
| Local (SubSequence) | InputVoltage | Number | 0 | 输入电压 |
通过表达式将变量传递给步骤输入参数
在 Numeric Limit Test 步骤的属性中,Measurement 输入框填写表达式而非固定数值。例如在 MainSequence 中填写 Locals.MeasuredValue,在 SubSequence 中填写 Locals.InputVoltage。上下限则引用 FileGlobal:FileGlobals.LowerLimit 和 FileGlobals.UpperLimit。
为了观察变量传递效果,在 MainSequence 中添加一个 Statement 步骤,在表达式中执行赋值:
// Statement 步骤表达式
Locals.MeasuredValue = FileGlobals.TestVoltage + 0.2
FileGlobals.PassCount = FileGlobals.PassCount + 1
在 SubSequence 中添加 Statement 步骤:
// SubSequence 中的 Statement 步骤
Locals.InputVoltage = FileGlobals.TestVoltage - 0.1
然后在 MainSequence 末尾通过 Sequence Call 步骤调用 SubSequence。执行时,TestStand 按以下顺序求值:
- MainSequence 的 Statement 步骤将
FileGlobals.TestVoltage + 0.2赋给Locals.MeasuredValue,即 5.2。 - Numeric Limit Test 步骤读取
Locals.MeasuredValue(5.2),与FileGlobals.LowerLimit(4.5)和FileGlobals.UpperLimit(5.5)比较,结果应为 Pass。 - Sequence Call 调用 SubSequence,SubSequence 的 Statement 步骤将
FileGlobals.TestVoltage - 0.1赋给Locals.InputVoltage,即 4.9。 - SubSequence 的 Numeric Limit Test 读取
Locals.InputVoltage(4.9),与同一组 FileGlobal 上下限比较,结果也应为 Pass。
关键观察点:FileGlobal 变量在 MainSequence 和 SubSequence 中均可访问,且值保持一致;Locals 变量仅在各自序列内可见,互不干扰。表达式在步骤执行时动态求值,因此 FileGlobal 的修改会立即影响后续所有引用它的步骤。
运行验证与结果判读
执行序列后,在 Execution 窗口中查看每一步的求值结果。重点检查:
- MainSequence 的 Numeric Limit Test 步骤:Measurement 显示 5.2,Limits 显示 4.5 至 5.5,Status 为 Passed。
- SubSequence 的 Numeric Limit Test 步骤:Measurement 显示 4.9,Limits 显示 4.5 至 5.5,Status 为 Passed。
- FileGlobals.PassCount 在 MainSequence 的 Statement 步骤后变为 1,可在 Variables 面板中实时观察。
常见错误:若在 SubSequence 中直接引用
Locals.MeasuredValue,运行时会报错或得到默认值,因为该局部变量属于 MainSequence,不在 SubSequence 的作用域内。跨序列传递数据应使用 FileGlobal 变量或通过序列参数(Parameters)显式传递。
变量作用域与表达式速查卡
| 操作 | 表达式写法 | 作用域 | 生命周期 |
|---|---|---|---|
| 定义文件全局变量 | FileGlobals.变量名 | 整个序列文件 | 文件打开至关闭 |
| 定义序列局部变量 | Locals.变量名 | 当前序列 | 序列执行期间 |
| 在步骤中引用变量 | 直接填写变量路径 | 取决于变量定义位置 | 步骤执行时求值 |
| 赋值操作 | 变量 = 表达式 | Statement 步骤中 | 立即生效 |
| 跨序列共享数据 | FileGlobals.变量名 | 所有序列 | 文件级持久 |