1. 联合仿真入门为什么你需要TSMasterAPI与ECUTEST如果你正在从事汽车电子控制单元ECU的开发或测试工作那你一定对“仿真”和“自动化测试”这两个词不陌生。想象一下你辛辛苦苦写完了一段控制逻辑代码难道每次验证都要把代码刷进真实的ECU然后装到台架甚至实车上再一遍遍手动操作、记录数据吗这效率太低了而且成本高昂。这时候联合仿真就派上用场了。简单来说联合仿真就是让你的测试工具比如ECUTEST和你的仿真环境比如TSMaster手拉手自动地、高效地完成一系列复杂的测试任务。TSMaster是一款功能强大的汽车总线仿真、测试与分析软件而ECUTEST则是专业的ECU测试工具。它们俩单独用都很厉害但把它们结合起来威力才是最大的。TSMasterAPI就是连接这两大工具的“桥梁”和“遥控器”。通过这套API你可以在ECUTEST的测试序列中直接远程控制TSMaster软件或者TOSUN的硬件设备比如启动仿真、设置信号值、读取总线报文等等。这样一来你就能在ECUTEST里编写一个完整的自动化测试用例从环境搭建、激励施加到结果校验全部自动完成实现真正的“无人值守”测试。我刚开始接触这套方案时也觉得配置有点繁琐但一旦跑通测试效率的提升是立竿见影的。以前需要半天手动完成的测试项现在可能只需要点一下“开始”然后喝杯咖啡回来就能看到完整的测试报告了。这篇文章我就把自己从零开始配置TSMasterAPI与ECUTEST联合仿真环境再到核心接口调用的全过程、踩过的坑以及实战心得毫无保留地分享给你。无论你是刚入行的测试工程师还是想提升自动化水平的开发者跟着这篇指南一步步来都能快速上手。2. 环境准备与插件部署打好联合仿真的地基万事开头难联合仿真的第一步就是把环境搭建好。这一步看似简单但细节决定成败。配置对了后面一帆风顺配置错了可能连基本的连接都建立不起来。我会把官方文档里可能一笔带过但实际操作中至关重要的细节都给你讲明白。2.1 获取与部署TSMasterAPI插件首先你得拿到TSMasterAPI插件。目前主要有两种方式。第一种是安装时集成在安装TSMaster软件时安装程序会提供一个可选组件列表就像让你选择是否安装Python或C开发环境一样里面会有“ECUTEST Plugin”的选项。勾选它安装程序就会自动把插件部署到正确的位置。这是最省事的方法建议新安装TSMaster的朋友直接采用。第二种是手动部署适用于已经安装了TSMaster或者想尝鲜最新版插件的情况。你需要联系TOSUN的技术支持或销售获取插件包。拿到的是一个压缩文件解压后里面通常包含几个DLL文件和配置文件。手动部署的关键在于找到ECUTEST的插件目录。这个目录路径一般是这样的C:\Users\[你的用户名]\AppData\Roaming\ECUTEST\plugins。你需要把插件包里的所有文件完整地复制到这个plugins目录下。这里有个我踩过的坑一定要注意ECUTEST和TSMaster的版本兼容性。不是随便一个插件包就能用的。比如你用的是ECUTEST 2022但插件是针对ECUTEST 2024编译的很可能就无法加载。所以在获取插件包时务必向技术支持说明你使用的ECUTEST和TSMaster的具体版本号。部署完成后重启ECUTEST如果插件加载成功在后续创建工具宿主时就能看到它了。2.2 在ECUTEST工作区中导入插件插件文件放对地方只是第一步接下来要在你的ECUTEST项目Workspace里真正启用它。打开ECUTEST创建一个新的工作区Workspace或者在已有的工作区中进行设置。在创建或配置工作区的对话框中找到一个关键选项“Show workspace settings”或“高级设置”。点开后你会看到“Copy tutorial files”或类似选项。它的作用是把一些模板或插件资源复制到你的工作区目录中。在这个选项的下拉菜单里选择“TSMasterAPI”。选中后点击确定ECUTEST就会将TSMasterAPI插件相关的配置模板复制进来。完成这个操作后当你进入工作区在添加测试工具的列表中就应该能看到两个至关重要的工具项“TOSUN: TSMaster SIL Kit”和“TOSUN: Hardware SIL Kit”。前者用于控制TSMaster软件进行仿真后者用于直接控制TOSUN的硬件设备如CAN卡等。看到它们就说明插件导入成功了。3. 配置TSMaster软件仿真接口TOSUN: TSMaster SIL Kit现在我们开始配置第一个也是最常用的接口TOSUN: TSMaster SIL Kit。这个接口允许ECUTEST直接控制TSMaster软件的上位机界面执行仿真任务。你可以把它理解为ECUTEST成了TSMaster的一个“脚本控制器”。3.1 创建测试台架配置与工具宿主在ECUTEST中所有的外部工具都需要在一个“测试台架配置Test Bench Configuration”里管理。我们首先需要创建一个。在工作区中找到“Test Bench”或“硬件配置”相关的视图右键选择创建新的“Test Bench Configuration”。给它起个容易识别的名字比如“TSMaster_Software_Sim”。创建好后里面是空的我们需要添加一个“工具宿主Tool Host”。工具宿主可以理解为一个容器用来运行和管理具体的工具插件。点击“Create new tool host”类型通常选择“Local”本地意味着这个工具插件将在运行ECUTEST的同一台电脑上执行。创建完成后在工具宿主的窗口里你应该就能看到之前导入的“TOSUN: TSMaster SIL Kit”了。3.2 添加并配置TSMaster工具接下来是关键一步把TSMaster工具实例添加到宿主中。右键点击“TOSUN: TSMaster SIL Kit”选择“Add tool”。这会弹出一个配置对话框里面最重要的一个参数就是“TSMaster_project_path”。这个路径必须指向一个有效的、预先在TSMaster软件中创建并保存好的工程文件.tsp格式。这个工程文件里定义了你仿真所需的一切数据库DBC、LDF等、仿真节点、报文发送规则、系统变量、面板等等。ECUTEST通过API控制TSMaster时本质上就是命令TSMaster打开这个指定工程并执行各种操作。所以请务必提前在TSMaster中把你的仿真场景搭建好、调试通并保存好工程文件。填写好路径后点击保存。至此软件仿真的配置部分就完成了。你可以在ECUTEST的测试序列中通过调用这个工具实例提供的API函数来远程操控那个TSMaster工程了。配置流程可以简单总结为创建台架配置 - 创建本地工具宿主 - 添加TSMaster SIL Kit工具 - 配置TSMaster工程路径。每一步都设置正确才能保证后续的接口调用能成功连接。4. 配置硬件仿真接口TOSUN: Hardware SIL Kit有时候我们的测试不仅需要软件仿真还需要与真实的硬件交互比如通过真实的CAN卡发送报文或者采集硬件IO信号。这时就需要用到第二个接口TOSUN: Hardware SIL Kit。它的配置流程和软件接口类似但核心配置参数不同。4.1 硬件接口的配置差异同样我们需要在一个测试台架配置中可以新建一个也可以和软件仿真共用但建议分开管理更清晰创建本地工具宿主。然后在宿主中添加“TOSUN: Hardware SIL Kit”工具。右键添加工具后弹出的配置对话框中核心参数不再是工程路径而是“TSMaster_App_Name”。这个参数通常指的是TSMaster相关硬件服务或可执行程序的名称。对于TOSUN的硬件通常这个名称是固定的比如可能是“TSMaster_Hardware_Service”或类似的名称。具体名称需要参考你获取的插件包中的说明文档或者直接咨询TOSUN技术支持。这一点非常重要填错了会导致ECUTEST找不到硬件服务无法建立连接。这个配置的本质是让ECUTEST通过插件找到并连接到你电脑上运行的TSMaster硬件后台服务从而直接控制插在电脑上的TOSUN硬件设备如USB-CAN盒。这意味着你不需要打开TSMaster的上位机软件界面ECUTEST就能直接指挥硬件收发数据这对于搭建纯净、高效的自动化测试环境非常有用。4.2 硬件连接与状态管理配置好“TSMaster_App_Name”并保存后硬件工具的配置就完成了。但在ECUTEST测试序列中调用其API时逻辑上会比软件仿真多一步“连接”操作。通常你需要先调用一个set_hardware_config函数来传递一些硬件通道参数比如使用哪路CAN波特率是多少这些参数可能需要在ECUTEST的测试步骤中动态设置。然后需要显式地调用connect函数来建立与硬件的物理连接。只有连接成功后后续的send_msg、recv_can_msg等函数才能正常工作。测试结束时也应调用disconnect来断开连接释放资源。这种“配置-连接-操作-断开”的模式是硬件编程的典型流程确保了资源的正确管理。5. 核心API接口详解与调用实战环境配置好了工具也添加了接下来就是最核心的部分如何使用这些API。ECUTEST中调用这些API通常是在“Test Case”或“Sequence”中通过插入“Tool Adapter”步骤来实现的。下面我挑一些最常用、最关键的API结合实战场景给你讲讲怎么用。5.1 软件仿真核心API实战在“TOSUN: TSMaster SIL Kit”工具下API主要围绕仿真生命周期和信号读写展开。仿真控制三件套start_simulation(): 这个函数一执行ECUTEST就会命令TSMaster在后台打开你配置的工程文件并开始运行仿真。你可以把它放在测试序列的开头。实测下来这里有个小技巧在start_simulation之后最好加一个短暂的等待比如1秒或者循环调用simulation_is_running()检查一下确保仿真确实已经成功启动再进行后续的信号操作这样更稳定。simulation_is_running(): 这是一个查询函数会返回一个布尔值True/False。你可以用它来判断仿真状态常用于条件判断或等待循环中。stop_simulation(): 测试结束时调用用于优雅地停止TSMaster中的仿真释放资源。把它放在测试序列的清理步骤中是个好习惯。信号读写API 这是联合仿真中最常用的功能。ECUTEST需要给TSMaster中的仿真模型施加激励或者从模型中读取计算结果。set_sysvar_value(“VarName”, value): 设置一个系统变量的值。比如你的TSMaster工程里定义了一个名为“EngineSpeed_Set”的系统变量来模拟发动机转速设定值。在ECUTEST中你可以用这个函数将其设置为2000来模拟油门踩下的场景。注意变量名一定要和TSMaster工程里定义的完全一致包括大小写。get_sysvar_value(“VarName”): 获取一个系统变量的当前值。用于读取仿真结果比如获取计算出的“VehicleSpeed_Actual”来校验逻辑是否正确。set_cansignal_value(“MessageName”, “SignalName”, value)和get_cansignal_value(“MessageName”, “SignalName”): 这对函数用于直接操作CAN报文中的信号。比系统变量更底层也更直接。你需要同时指定报文名和信号名。这在模拟其他ECU发送特定报文或校验被测ECU发出的报文信号值时非常有用。实战场景示例假设我们测试一个车窗控制模块。测试步骤可以是1.start_simulation启动仿真。2. 用set_sysvar_value将“WindowSwitch_Up”变量设为1模拟按下上升按钮。3. 等待500ms。4. 用get_cansignal_value读取“BodyCAN”报文中“WindowPosition_Feedback”信号的值。5. 判断这个值是否在预期的上升范围内。6. 测试完毕stop_simulation。5.2 硬件仿真核心API实战“TOSUN: Hardware SIL Kit”的API风格更偏向底层的硬件通信。连接管理set_hardware_config(config_string): 在连接前配置硬件参数。config_string可能是一个包含通道、波特率等信息的字符串具体格式需查阅插件文档。例如“CAN1:500000”表示配置CAN1通道波特率500kbps。connect(): 执行硬件连接。调用成功后硬件指示灯可能会亮起或闪烁。disconnect(): 断开硬件连接。报文收发send_msg(channel, msg_id, data, dlc): 向指定通道发送一帧CAN报文。你需要提供通道号如0代表CAN1、报文ID十六进制或十进制、数据字节数组、以及DLC数据长度。这是模拟其他节点发送报文的主要方式。recv_can_msg(channel, timeout_ms): 从指定通道接收一帧CAN报文。可以设置超时时间。这个函数通常会返回一个包含ID、数据、时间戳等信息的结构体或数组你需要根据ECUTEST中Tool Adapter的返回值定义来解析它用于判断是否收到被测ECU发出的预期报文。实战场景示例测试一个CAN收发器。步骤1.set_hardware_config配置CAN通道。2.connect连接硬件。3. 用send_msg循环发送一帧特定ID的请求报文。4. 用recv_can_msg在指定超时时间内等待接收回应报文。5. 如果收到则解析数据判断正确性如果超时未收到则判为失败。6. 最后disconnect。6. 高效调试与常见问题排查配置和调用听起来挺顺但实际过程中难免会遇到问题。分享几个我调试时常用的方法和遇到的典型坑。首先充分利用日志。TSMaster软件本身有运行日志ECUTEST的执行序列也有详细的步骤日志。当API调用失败时第一步就是去查看这些日志。TSMaster的日志可能会显示“工程打开失败”、“变量未找到”等具体错误。ECUTEST的Tool Adapter步骤日志会显示API调用的返回状态是成功还是返回了错误码。其次分步验证先软后硬。建议先集中精力把“TSMaster SIL Kit”软件仿真调通。因为这里不涉及硬件驱动问题范围更小。确保你的TSMaster工程能独立在TSMaster软件中正常运行然后再到ECUTEST中用API控制它。软件仿真通了再去搞硬件接口。硬件接口的问题可能更多样比如驱动未安装、硬件被其他软件占用、通道配置错误等。几个常见坑点路径或名称错误TSMaster_project_path填错了或者工程文件被移动了会导致start_simulation失败。TSMaster_App_Name填错会导致硬件工具根本无法初始化。变量/信号名不匹配在ECUTEST中调用get/set函数时写的变量名或报文信号名必须与TSMaster工程中定义的完全一致。一个空格、一个大小写差异都会导致“找不到对象”的错误。我的习惯是直接从TSMaster工程中复制变量名粘贴到ECUTEST的测试步骤参数里。时序问题在ECUTEST中API调用是瞬间完成的。但仿真启动、信号传递需要时间。如果你在start_simulation后立刻去get_sysvar_value可能会读到初始值或旧值。合理的做法是加入等待或者用simulation_is_running确认状态后再操作。硬件资源冲突如果你同时打开了TSMaster上位机软件又用ECUTEST的Hardware SIL Kit去控制同一块硬件通常会导致冲突。确保同一时间只有一个主体在控制硬件。调试时保持耐心从最简单的API调用开始比如先只调用一个simulation_is_running看看返回值逐步增加复杂度。联合仿真一旦跑通构建自动化测试用例的效率就会飞速提升前期投入的调试时间是完全值得的。