如何使用python脚本调用VBA软件

本文面向汽车电子总线自动化测试场景,介绍基于Python调用INTEWORK-VBA总线工具COM API接口的集成方案:以Python作为上层测试逻辑开发与调度核心,依托Windows原生COM组件调用机制,直接访问VBA总线工具开放的COM接口,调用其已封装成熟的CAN/LIN/CANFD/车载以太网多协议适配、硬件驱动兼容、数据收发、协议解析、故障注入、负载模拟等总线能力,实现Python侧对总线测试流程的自定义控制与实时数据获取。COM API详细接口定义及使用规范可在开发指南--软硬件API接口文档下载中下载查看,适配研发台架自定义测试、产线自动化下线检测、科研项目总线功能验证等多类场景需求。

关键词:Python调用,VBAlogger启停

 

环境配置

1、安装所需python

下载win32类库:pip install pywin32

2、连接 VBA测试

打开VBA,在pycharmIDE中执行如下代码:

import win32com.client
VBA = win32com.client.Dispatch("VBACOM")

若无异常报错,则执行正确,完成连接。

3、异常情况

1 pywintypes.com_error: (-2146233088, 'OLE error 0x80131500', None, None)

错误原因:VBACOM执行需要的DLL未成功注册。

解决办法:a.VBA根目录\Exec\DLL文件夹中没有RegAsm_VBA_API.bat文件,则根据以下内容创建:

@echo off
set "path=%~dp0"
%SystemRoot%\Microsoft.NET\Framework64\v4.0.30319\RegAsm.exe /unregister "%path%\VBACOMAPI.dll"
%SystemRoot%\Microsoft.NET\Framework\v4.0.30319\RegAsm.exe /unregister "%path%\VBACOMAPI.dll"

%SystemRoot%\Microsoft.NET\Framework\v4.0.30319\RegAsm.exe /codebase "%path%\VBACOMAPI.dll"
%SystemRoot%\Microsoft.NET\Framework64\v4.0.30319\RegAsm.exe /codebase "%path%\VBACOMAPI.dll"

pause

b.RegAsm_VBA_API.bat——>右键 ——>以管理员权限执行, 弹出下图注册成功。

2)系统找不到指定的文件:

检查版本是否为VBA 2.2.0以上:2.2.0以下版本不支持;

检查VBA根路径下\\Exec\\DLL文件内是否有文件:VBACOMAPI.dl,若没有重新解压安装,或复制一份该文件。

 

Demo实例

本示例是一个基于Python开发的Demo,主要用于展示如何通过编程方式对VBA总线工具的Logger功能进行启动与停止控制。该Demo通过调用VBA提供的COM API接口,实现了对CAN总线数据记录过程的自动化管理。

导入执行所需库:

import time
import win32com.client
import os

启动VBA软件,配置VBA工作空间、工程名字以及logger模块:

vba = win32com.client.Dispatch("VBACOM")
workspacePath = "D:\\VBAproject"
vba.open(workspacePath)
project = vba.getProjectByName("test_api")
loggerModule = project.getLoggerModule()

设置logger保存路径,类型支持ascblf

path = "D:\\FAE\\05_COMapi\\0x190.asc"
if not os.path.exists(path):
    os.makedirs(path)
    print(f"路径 {path} 不存在,已创建。")
else:
    print(f"路径 {path} 已存在。")

修改logger中需要保存的报文信息:

ids = [0x190]
channels = ["CAN1","CAN2"]

运行VBA工程:

project.start()

开始Logger采集:

res = loggerModule.startLogger(channels, ids, 0, path)
print(res)
time.sleep(10)
id = res.getInfo()

停止logger采集:

res = loggerModule.stopLogger(id)
print(res)

停止VBA工程:

project.stop()

执行后,会将logger保存到指定路径下:

Python通过调用INTEWORK-VBA总线工具提供的COM API接口,实现了对总线通信的自动化控制与数据交互。该方法借助pywin32等第三方库,能够便捷地访问VBA注册的COM组件,从而完成通道的启停控制、报文发送与接收的自动化管理等核心功能。不仅提升了脚本的可复用性和可维护性,也为总线测试、数据采集和自动化验证提供了灵活高效的解决方案,显著提升了测试效率与流程的自动化水平。

上一个
设备调用之PythonCAN组件适配
下一个
如何用自动化测试软件TAE调用VBA
最近修改: 2026-05-15Powered by