3. 自动化测试工程环境搭建

MicroAutoBox 原型自动化测试工程的环境不是“装几个软件”那么简单,它本质上是一条从模型到实时硬件、再到自动化脚本与持续集成的工具链。各组件之间存在明确的版本依赖与调用关系:MATLAB/Simulink 负责模型与代码生成,dSPACE RTI 与 ConfigurationDesk 负责把模型编译为可在 MicroAutoBox 上运行的实时程序,AutomationDesk 负责测试序列编排,Python/.NET API 负责把测试接入外部脚本与 CI,Git 与 Jenkins 负责版本管理与自动触发。本节按这条链路说明安装顺序、关键配置与验证方法。

一、工具链的依赖关系与安装顺序

这条工具链的安装顺序不能随意颠倒,核心原因是 dSPACE 的 RTI 与 AutomationDesk 都以 MATLAB 为宿主环境,通过 MATLAB 的路径与注册机制加载。推荐顺序为:先装 MATLAB/Simulink,再装 dSPACE 软件(RTI、ConfigurationDesk、ControlDesk、AutomationDesk),然后配置 Python/.NET 运行环境,最后接入 Git 与 Jenkins。

MicroAutoBox 自动化测试工具链依赖与安装顺序 MATLAB / Simulink R2021b 及以上 · 含 RTW/Embedded Coder 宿主环境 · 提供 mex 编译与路径注册 dSPACE 软件套件 RTI · ConfigurationDesk ControlDesk · AutomationDesk Python / .NET API dSPACE Automation API Python 3.9+ · .NET 6 Runtime 先装 再装 Git 版本控制 Git 2.35+ · Git LFS 管理模型、脚本、配置 Jenkins 持续集成 Jenkins LTS · 插件 触发构建与回归测试 MicroAutoBox 硬件 DS1511/DS1513 等 RTI 实时程序运行目标 数据流:模型 → 代码生成 → 实时程序 → 测试脚本 → CI 触发 ① Simulink 模型 (.slx) ② RTI 编译 (.ppc/.obj) ③ 下载到 MicroAutoBox ④ AutomationDesk 执行 ⑤ Python 调用 API 收集结果 ⑥ Git 提交触发 Jenkins ⑦ 生成测试报告并归档

二、MATLAB/Simulink 与 dSPACE RTI 的配置要点

安装 MATLAB 时需勾选 Simulink、Simulink Coder、Embedded Coder 以及 MATLAB Compiler SDK(AutomationDesk 的部分接口依赖它)。dSPACE 安装程序会自动检测已安装的 MATLAB 版本,若版本不匹配会拒绝安装或提示降级。安装完成后,在 MATLAB 命令窗口执行 rtw_ver 与 dscheck 可确认 RTI 是否注册成功。

关键配置是让 Simulink 能找到 dSPACE 的编译工具链。在 MATLAB 中运行 setenv('DSPACE_ROOT','C:\dSPACE\2023-A'),并在 Simulink 的 Configuration Parameters 中把 System target file 设为 rti1005.tlc(对应 MicroAutoBox 的处理器类型),Language 设为 C。此时点击 Build 应生成 .ppc 或 .obj 文件,而不是报“找不到 rti 目标”。

% 验证 RTI 注册与目标文件可用性
rtw_ver
dscheck
% 检查目标文件是否存在
which rti1005.tlc
% 预期输出:C:\dSPACE\2023-A\MATLAB\rti1005.tlc

三、AutomationDesk 与 Python/.NET API 的接入

AutomationDesk 安装后需在 MATLAB 中注册其 COM 接口,执行 regmatlabserver 并确认 AutomationDesk 的 bin 目录已加入系统 PATH。Python 侧通过 pip install dspace-automation(示例包名,实际以 dSPACE 提供的 wheel 为准)安装 API 包,.NET 侧则需安装对应版本的 Runtime 并在项目中引用 DSPACE.Automation.Api.dll。

一个典型的 Python 调用片段如下,用于启动 AutomationDesk 并加载测试序列:

from dspace_automation import AutomationDesk
ad = AutomationDesk()
ad.start()
ad.load_experiment(r"D:\tests\motor_control.adx")
result = ad.run()
print(result.passed, result.failed, result.duration)
ad.stop()

若返回 passed=12, failed=0,说明 API 链路已打通;若报连接超时,优先检查 AutomationDesk 是否以管理员权限运行,以及防火墙是否拦截了本地 COM 端口。

四、版本控制与持续集成工具链

Git 仓库建议按“模型—脚本—配置—报告”四类目录组织,模型文件(.slx)使用 Git LFS 管理,避免二进制膨胀。Jenkins 侧安装 Git、MATLAB、dSPACE 相关插件后,新建 Pipeline 任务,在 Jenkinsfile 中定义构建阶段:拉取代码、启动 MATLAB 编译、调用 Python API 执行测试、归档报告。

pipeline {
  agent any
  stages {
    stage('Checkout') { steps { git 'git@server:macb-test.git' } }
    stage('Build')    { steps { bat 'matlab -batch "rtwbuild(\'motor_control\')"' } }
    stage('Test')     { steps { bat 'python run_tests.py --report report.xml' } }
    stage('Archive')  { steps { junit 'report.xml' } }
  }
}

配置完成后,向仓库推送一次提交,Jenkins 应自动触发构建。观察 Console Output 中是否依次出现 Checkout、Build、Test、Archive 四个阶段,且最终显示 Finished: SUCCESS。若 Build 阶段报“rti1005.tlc not found”,说明 Jenkins 运行账户的环境变量未继承 MATLAB 的 dSPACE 路径,需在 Jenkins 全局工具配置中显式指定 MATLAB 根目录与 DSPACE_ROOT。

建议在环境搭建完成后,用一条最小测试用例(例如仅验证一个常量输出通道)跑通全链路,再逐步加入复杂模型。这样能把“环境问题”与“模型问题”分开定位,避免在调试阶段同时面对两类故障。

五、环境验证清单

检查项验证命令/操作预期结果
MATLAB 与 RTI 注册dscheck显示 dSPACE 版本与 MATLAB 版本匹配
目标文件可用which rti1005.tlc返回有效路径
AutomationDesk COMPython 调用 ad.start()无异常,返回实例
Git LFSgit lfs track "*.slx"生成 .gitattributes
Jenkins 触发推送一次提交Console 显示 SUCCESS