本文目录:
一、TSMaster标定模块自动化控制的基础原理
1.1 TSMaster的标定系统变量
1.2 内部TSMaster调用C脚本实现标定模块的自动化控制
1.3 外部调用COM组件实现自动化标定
二、标定自动化控制场景与TSMaster实例
2.1 C脚本实现控制标定模块的启动与关闭的设计
2.2 C脚本代码实现
2.3 测试与验证C脚本的标定功能
三、通过python调用COM组件实现自动化标定
3.1 COM组件介绍
3.2 python如何调用COM组件
3.3 python用COM组件实现自动化标定
一、TSMaster标定模块自动化控制的基础原理
1.1 TSMaster的标定系统变量
TSMaster 加载A2L文件会将 ECU 内部的每一个变量映射到与之对应的系统变量中,对于标定量来说,与其对应的系统变量是可写的,写入这些系统变量意味着修改 ECU 内部的标定量。
在TSMaster导入A2L文件后,会将A2L文件中的变量解析并生成与之对应的系统变量,属于标定模块所有者的系统变量。
其中:
Calibration.Status:标定控制器状态,0表示未连接,1表示已连接,2表示已连接且启动了在线测量。
Calibration.Controller:标定控制器自动化寄存器,写0表示断开ECU连接,写1表示连接ECU且用ECU内存构建缓存,写2表示连接ECU且用本地缓存,写3表示连接ECU并启动DAQ。
1.2 内部TSMaster调用C脚本实现标定模块的自动化控制
TSMaster内部系统变量可以被内置的C脚本,python脚本,Panel等模块来读写来实现自动化标定。
1.3 外部调用COM组件实现自动化标定
外部则可以通过Python,Labview,C#,C++等语言调用COM组件的方式进行读写TSMaster内部变量来实现自动化标定。
二、标定自动化控制场景与TSMaster实例
在汽车试验场合中会经常出现自动化标定的使用场景:
1. ECU会周期性的上电,上电时需要启动标定模块,完成连接和标定测量功能 。
2. ECU过段时间后会断电,断电后需要断开标定模块。
如下以TSMaster的操作实例来介绍整个自动化标定控制过程实现。
2.1 C脚本实现控制标定模块的启动与关闭的设计
C脚本监测CAN通讯,选择特征ID,比如ID=0x123的报文。如果监测到该报文,则写入系统变量从而使标定模块启动。如果一段时间监测不到该报文,则断开标定模块。
其中,C脚本相关子模块实现与描述:
全局定义:可以在全局定义中定义全局变量,每个事件函数内能够共享该变量,可以在这个模块定义最后收到某条报文时的时间戳这个变量,还有当前时间戳等变量。
CAN接收事件:指定 ID的CAN报文接收到的时候触发执行的函数事件,如需要收到报文ID为0x123的报文时就连接ECU,则需要在这个回调函数里面写相关代码。
定时器触发事件:定时器时间到了就触发执行的函数事件,可以在这个模块设计一个5ms的定时器,每隔5ms去对比当前时间戳减去最后收到报文时的时间戳是否大于20秒,如果是则写入系统变量“Calibration.Controller”等于0断开ECU连接。
2.2 C脚本代码实现
2.2.1 打开仿真窗口,使用C代码编辑器编辑代码
2.2.2 全局定义
定义了两个变量,变量“last_time”表示TSMaster最后接收到报文ID为0x123时的时间戳,变量“current_time”表示当前时间戳。
2.2.3 CAN接收事件
CAN报文接收事件绑定ID为123的报文,收到报文ID为0x123的报文,获取时间戳并赋值给全局变量“last_time”,通过读取系统变量“Calibration.Status”来判断当前ECU是否处于断开状态,是则写入系统变量“Calibration.Controller”等于3连接ECU并启动DAQ测量。并且启动定时器触发时间,检测已经有多长时间没收到该CAN报文。
2.2.4 定时器触发事件
新建一个5ms的定时器,然后用该定时器绑定定时器触发事件,定时器触发事件中每隔5ms检测当前时间戳减去最后收到报文ID为0x123报文时的时间戳,如果大于20秒,是则写入系统变量“Calibration.Controller”等于0断开ECU连接,并且停止该定时器事件。
2.3 测试与验证C脚本的标定功能
2.3.1设置C脚本为自启动
2.3.2 发送CAN报文
在CAN报文发送窗口,创建一条ID为123的报文,设置为周期发送(本次测试中短接了通道一和通道二,通道一发送报文通道二能收到,触发C脚本CAN接收事件)。
2.3.3 自动启动和断开ECU连接
启动发送报文,标定模块自动启动,停止发送报文20秒后,标定模块关闭。多次重复上述操作测试,结果与预期相符。
三、通过python调用COM组件实现自动化标定
3.1 COM组件介绍
COM(Component Object Model)组件指的是一种基于二进制接口和二进制标准的软件组件技术,可以用于实现不同语言环境下的程序模块之间的互操作性。COM 的应用范围涵盖了 Windows 操作系统中大量的基础服务、Windows API、Microsoft Office 等常见桌面应用程序等。通过 COM 组件技术,开发人员可以更加轻松地集成和重复使用已有的代码,提高软件的开发效率和可维护性。
3.2 python如何调用COM组件
在 Python 中调用 COM 组件可以使用 pywin32 库(Python for Windows Extensions),这个库提供了访问 Microsoft Windows 上的各种服务和资源的 Python API,包括了COM 外部对象的创建、调用和管理。
下面是一个简单的 Python 代码示例,演示如何通过 Python 调用创建并调用 COM 组件中的方法:
这里的 "MyCOMServer.MyComClass" 是 COM 组件的 ProgID(Programmatic Identifier),用于标识需要创建的 COM 对象。具体的 ProgID 可以从组件的文档或注册表中查找。
3.3 python用COM组件实现自动化标定
通过python调用COM组件读写TSMaster内部系统变量,控制自动化标定,参考代码如下: