Python调用CANape读取和写入XCP Device的变量实现自动化标定

本文介绍了如何使用Python通过CANape的COM接口调用,实现对XCP设备的变量读取和写入,从而进行自动化标定。首先概述背景,然后说明准备工作,包括配置CANape XCP工程和连接ECU。接着详细阐述了接口功能,如启动CANape、建立XCP连接、读写标定变量等。最后提供了官方示例和作者的修改示例。
摘要由CSDN通过智能技术生成

Python调用CANape读取和写入XCP Device的变量实现自动化标定

1. 背景及概要

    Vector现在对于Python的支持越来越丰富了,最近知道了Python 可基于 CANape 的 COM 接口调用 CANape,实现对 ECU 的测量标定等功能,这对于之前一直使用内置脚本的我来说简直是福音,下面就记录一下Python调用CANape实现自动化标定的相关操作。

    注意:CANape 从 15SP3 及以后版本支持 64bit COM 接口,如使用 Python 64bit,请确认 CANape 版本,否则会提示”Class not registered”报错。

2. 准备工作:

  1. 在CANape中配置好XCP工程,如果不知道如何配置,可以参考我之前的文章CANape XCP on Eth工程创建或者CANape XCP on CAN工程创建
  2. 根据工程配置,连接CANape和ECU;
  3. 手动调试XCP工程,打开就能自动online即可。

3. 接口介绍

    根据Vector提供的接口,我进行了封装,根据以下接口来进行标定的读写。

  • CANape启动接口

    # 启动CANape软件并打开要测试的工程
    def boot_CANape_project(project_path):
        # 启动CANape软件
        canape = win32com.client.Dispatch('CANape.Application')
        print('\n')
        print('CANape dispatched.')
    
        # 打开对应路径的工程项目
        canape.Open1(project_path, 1, 50000, True)
        print('CANape initialized.')
    
        return canape
    
  • CANape和ECU建立XCP连接的接口

    # 选择工程中已经创建好的xcp Device和a2l文件,从而创建device句柄,并自动连接到ECU
    def create_xcp_device_handle(handle, device_name, a2l_name):
        dev = handle.Devices.Add(device_name, a2l_name, "XCP", 1)
        print('Device \'' + device_name + '\' added.')
        return dev
    
  • 创建变量对象的接口

    # 通过已创建的device句柄添加标定变量,并创建变量对象
    def add_calibration_object(dev, object_name):
        dev.CalibrationObjects.Add(object_name)
        calob = dev.CalibrationObjects.Item(object_name)
        print(object_name + ' added as calibration object.')
        return calob
    
  • 标定变量读接口

    # 标定标定变量
    def calibration_read(xcp_dev, signal_name):
        # 通过已创建的device句柄添加标定变量,并创建变量对象
        calbration_object = add_calibration_object(xcp_dev, signal_name)
    
        # 先读取一遍标定量的值以便于后面验证是否标定成功
        calbration_object.Read()
        myValue = calbration_object.Value
        print('Value of before changed: %i.' % myValue)
        return myValue
    
  • 标定变量写接口

    def calibration_write(xcp_dev, signal_name, value):
        # 通过已创建的device句柄添加标定变量,并创建变量对象
        calbration_object = add_calibration_object(xcp_dev, signal_name)
    
        # 先读取一遍标定量的值以便于后面验证是否标定成功
        calbration_object.Read()
        myValue = calbration_object.Value
        print('Value of before changed: %i.' % myValue)
    
        # 改变标定量的值
        calbration_object.value = value
        calbration_object.write()
    
        # 再次读取标定量的值,确认是否修改成功
        calbration_object.Read()
        myValue = calbration_object.Value
        print('Value of after changed: %i.' % myValue)
    
  • 开始监测接口(自带接口)

    canape.Measurement.Start()
    
  • 结束监测接口

    def stop_measurement(app_handle):
        time.sleep(10)
        app_handle.Measurement.Stop()
        print('\nStop the measurement.....\n')
        print('\nExit CANape...Thank you for using!\n')
    
  • 停止工程接口

    def quit_CANape(app_handle):
        time.sleep(10)
        print("quit CANape...")
        app_handle.Quit()
    

4. 使用示例

  • 官方示例
  • 我的示例(仅修改KBExample.py)
    # ---------------KBExample.py---------------------
    if __name__ == "__main__":
        # 启动CANape软件并打开要测试的工程
        project_path = "../xcp_test"
        canape = boot_CANape_project(project_path)
    
        # 选择工程中已经创建好的xcp Device和a2l文件,从而创建device句柄,并自动连接到ECU
        device_name = "hmi"
        a2l_name = "xxx.a2l"
        xcp_dev = create_xcp_device_handle(canape, device_name, a2l_name)
    
        # 开始启动工程
        print('Start the measurement.....')
        canape.Measurement.Start()
    
        # 循环自动标定变量
        for i in range(10):
            signal_name = "a2l文件中的变量1xxxxxx"
            calibration_write(xcp_dev, signal_name, 3)
            time.sleep(0.5)
            calibration_write(xcp_dev, signal_name, 5)
    
            time.sleep(0.5)
            signal_name = "a2l文件中的变量2xxxxxx"
            result = calibration_read(xcp_dev, signal_name)
            print("fcw count is %d", result)
    
        # 停止工程
        stop_measurement(canape)
    
        # 杀掉CANape运行进程
        canape.Quit()
    
  • 3
    点赞
  • 27
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 4
    评论
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

_长风_

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值