第1章:测试脚本开发环境搭建

大家好,我是老张。做HIL测试这些年,我见过太多人一上来就写脚本,结果环境没配好,折腾半天跑不通。说实话,环境搭建这事儿,看着简单,但坑不少。今天咱们就把Python环境、CAN库、还有Vector那套驱动和COM接口,一次性捋清楚。

1.1 Python环境配置(3.8+)

我个人习惯用Python 3.8或3.9。为什么?因为pyvit和python-can这两个库,在3.10以上版本偶尔会出兼容性问题。我在项目里就遇到过,3.10跑得好好的,换台电脑就报错,查了半天是库版本不匹配。

安装步骤其实很简单,但有几个细节要注意:

  • 下载安装包:去python.org下载3.8.x或3.9.x版本。别下最新的,稳字当头。
  • 勾选“Add Python to PATH”:这一步很多人会忘。忘了的话,后面命令行里敲python会提示找不到命令。
  • 验证安装:打开命令行,输入python --version,看到版本号就对了。
小技巧:我建议用虚拟环境。每个项目建一个独立的虚拟环境,避免库冲突。命令是python -m venv venv,然后激活它。

1.2 pyvit与python-can库安装

这两个库是咱们做CAN测试的核心。pyvit负责解析CAN报文,python-can负责跟硬件通信。说白了,一个管“看懂”,一个管“收发”。

安装命令很简单:

pip install pyvit
pip install python-can

嗯,这里要注意。如果你用的是Python 3.8,直接装就行。但如果是3.9或更高,可能会遇到依赖问题。我曾经在3.9上装pyvit,报了个No module named 'backports'的错误。解决办法是手动装一下:

pip install backports.functools_lru_cache

为什么会这样?因为pyvit有些老代码依赖Python 3.8的内置模块,高版本里移除了。所以,我建议你直接用3.8,省心。

装完之后,验证一下:

python -c "import can; print(can.__version__)"

如果能打印出版本号,说明python-can装好了。pyvit的验证类似:

python -c "import pyvit; print(pyvit.__version__)"

1.3 Vector XL-Driver与CANoe COM接口配置

Vector的硬件,比如VN1640、VN5610,是HIL测试的标配。但驱动装不好,设备就认不出来。我刚开始用Vector时,就犯过这个错——驱动装了一半,重启后设备管理器里还是黄色感叹号。

正确的步骤是这样的:

  1. 下载XL-Driver:去Vector官网下载最新版。注意,要跟你的CANoe版本匹配。比如CANoe 15就用对应的XL-Driver 15.x。
  2. 安装驱动:双击安装包,一路Next。安装过程中会提示插入设备,插上你的VN1640或VN5610,系统会自动识别。
  3. 验证驱动:打开设备管理器,找到“Vector Interfaces”下的设备,没有黄色感叹号就OK了。
避坑指南:我曾经遇到过,驱动装好了,但CANoe就是连不上设备。查了半天,发现是USB线的问题。Vector的硬件对USB线质量要求很高,建议用原装线,或者至少是带屏蔽的USB 3.0线。

接下来是CANoe COM接口配置。说白了,就是让Python脚本能通过COM接口控制CANoe。步骤也不复杂:

  • 注册COM组件:在CANoe安装目录下,找到CANoe.exe,用管理员身份运行一次。它会自动注册COM接口。
  • Python中调用:用win32com.client库。先装一下:pip install pywin32
  • 测试连接:写个简单脚本试试:
import win32com.client
canoe = win32com.client.Dispatch("CANoe.Application")
print(canoe.Version)

如果能打印出版本号,说明COM接口配好了。如果报错,检查一下是不是没以管理员身份运行Python。

重点提醒:COM接口的调用,必须在CANoe关闭的情况下进行。否则会报“应用程序正在使用”的错误。我刚开始不知道,每次调试都要先关CANoe,后来养成了习惯,脚本里先检查CANoe状态。

1.4 环境验证:跑一个简单的CAN报文收发

环境搭好了,咱们跑个例子验证一下。用python-can发一条CAN报文:

import can
bus = can.interface.Bus(channel='CAN1', bustype='vector', app_name='CANoe')
msg = can.Message(arbitration_id=0x123, data=[0x11, 0x22, 0x33, 0x44], is_extended_id=False)
bus.send(msg)
print("报文发送成功")

这段代码里,bustype='vector'就是告诉python-can用Vector的驱动。如果你用的是其他硬件,比如Kvaser或PCAN,这里要改成对应的类型。

我个人习惯,每次搭好环境后,都会跑一遍这个例子。能发能收,说明环境没问题。如果报错,多半是驱动或COM接口没配好。回头检查一下设备管理器,或者重启一下电脑。

好了,环境搭建就这些。下一章咱们开始写真正的测试脚本。记住,环境搭好了,后面就顺了。别急,慢慢来。