3. 使用变量与表达式实现测试参数传递

使用变量与表达式实现测试参数传递 学习卡片

变量作用域与表达式传递的核心机制

在 TestStand 中,变量按作用域分为局部变量(Local)、序列文件全局变量(FileGlobal)和站全局变量(StationGlobal)。本案例聚焦前两种:局部变量仅在当前序列执行期间有效,序列结束后释放;文件全局变量在整个序列文件生命周期内持续存在,可被同一文件内所有序列访问。表达式则负责在步骤的输入参数中引用这些变量,实现值的动态传递。

变量作用域与表达式传递关系图 序列文件 (.seq) FileGlobal 变量区 FileGlobals.TestVoltage = 5.0 FileGlobals.LowerLimit = 4.5 FileGlobals.UpperLimit = 5.5 FileGlobals.PassCount = 0 生命周期:整个序列文件 序列:MainSequence Locals 局部变量区 Locals.MeasuredValue = 0 生命周期:仅当前序列执行期间 步骤:Numeric Limit Test Measurement = Locals.MeasuredValue Limits = FileGlobals.LowerLimit / UpperLimit 序列:SubSequence Locals 局部变量区 Locals.InputVoltage = 0 生命周期:仅当前序列执行期间 步骤:Numeric Limit Test Measurement = Locals.InputVoltage Limits = FileGlobals.LowerLimit / UpperLimit 表达式引用 表达式引用 Sequence Call 表达式语法要点 • 变量引用:FileGlobals.X / Locals.Y • 算术运算:FileGlobals.A + Locals.B • 函数调用:Str(RunState.TestCount) • 条件表达式:IIf(Locals.X > 0, "OK", "NG") • 字符串拼接:FileGlobals.Prefix + Locals.Suffix 表达式在步骤执行时求值,非定义时 FileGlobal 引用 Local 引用 序列调用

在序列编辑器中定义变量

打开序列文件后,在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 按以下顺序求值:

  1. MainSequence 的 Statement 步骤将 FileGlobals.TestVoltage + 0.2 赋给 Locals.MeasuredValue,即 5.2。
  2. Numeric Limit Test 步骤读取 Locals.MeasuredValue(5.2),与 FileGlobals.LowerLimit(4.5)和 FileGlobals.UpperLimit(5.5)比较,结果应为 Pass。
  3. Sequence Call 调用 SubSequence,SubSequence 的 Statement 步骤将 FileGlobals.TestVoltage - 0.1 赋给 Locals.InputVoltage,即 4.9。
  4. 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.变量名 所有序列 文件级持久