Python脚本

45 阅读2分钟
#!/usr/bin/python
# -*- coding: UTF-8 -*-
'''
输入:EB配置中的CAN模块描述文件 can.xdm,在此文件中最好先配置最少一帧的收发报文
     示例的CANhardware 接收及发送的object配置信息
输出:接收和发送报文hardware object元素数量
功能:根据CANhardware示例结构,根据各路CAN的收发报文数量,自动生成对应数量的
hariware配置数量,手动把结构体集成到xdm中
'''

import re
import tkinter
import tkinter.messagebox


rx_can_id_value_lis = []
rx_can_object_id_lis = []
rx_can_node_lis = []
rx_can_type_lis = []

tx_can_id_value_lis = []
tx_can_object_id_lis = []
tx_can_node_lis = []
tx_can_type_lis = []
'''配置各个通道tx及RX报文的数量'''
rx_object_cnt_list = [2, 2]  # 这里假设已经修改为对应8个通道的数量配置 [2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2]
tx_object_cnt_list = [2, 2]

step = 0
step_cnt = 0
line_cnt = 0
line_xdm_cnt = 0
xdm_step = 0
rx_message_num = 0
tx_message_num = 0
object_cnt = 0
can_channel = 0
can_index_in_channel = 0
can_objectid = 0
can_rxid = 0

file_handle_des = open('.\Output\' + 'generated_code.txt', 'w+')
file_handle_input_rx = open('.\Files\' + 'rxinput.txt', 'r')
file_source_lines_rx = file_handle_input_rx.readlines()
file_handle_input = open('.\Files\' + 'txinput.txt', 'r')
file_source_lines = file_handle_input.readlines()

# 修改此处的循环范围为1到8,以适配8个CAN通道
for can_channel in range(1, 3):
    can_rxid = 0x18FF0000 + 0X100 * can_channel + can_index_in_channel
    can_index_in_channel = 0
    for can_index_in_channel in range(rx_object_cnt_list[can_channel - 1]):
        line_cnt = 0

        while line_cnt < len(file_source_lines_rx):
            if line_cnt == 0:
                file_handle_des.write('                  <d:ctr name="CanHardwareObject_' + str(can_objectid) + '_CAN' + str(can_channel) + '_RX_' + str(can_index_in_channel) + '" type="IDENTIFIABLE">\n')
            elif line_cnt == 22:
                file_handle_des.write('                    <d:var name="CanObjectId" type="INTEGER" value="' + str(can_objectid) + '">\n')
            elif line_cnt == 32:
                file_handle_des.write('                    <d:var name="CanMbIdex" type="INTEGER" value="' + str(can_index_in_channel) + '"/>\n')
            elif line_cnt == 46:
                file_handle_des.write('                           value="ASPath:/Can/Can/CanConfigSet/ControllerCan' + str(can_channel) + '"/>\n')
            elif line_cnt == 57:
                file_handle_des.write('                             value="' + str(can_rxid) + '"/>\n')
            else:
                line = file_source_lines_rx[line_cnt]
                file_handle_des.write(line)
            line_cnt = line_cnt + 1
        can_objectid = can_objectid + 1
        can_rxid = can_rxid + 1

for can_channel in range(1, 3):
    can_index_in_channel = 0
    for can_index_in_channel in range(tx_object_cnt_list[can_channel - 1]):
        line_cnt = 0
        while line_cnt < len(file_source_lines):
            if line_cnt == 0:
                file_handle_des.write('                  <d:ctr name="CanHardwareObject_' + str(can_objectid) + '_CAN' + str(can_channel) + '_TX_' + str(can_index_in_channel) + '" type="IDENTIFIABLE">\n')
            elif line_cnt == 25:
                file_handle_des.write('                    <d:var name="CanObjectId" type="INTEGER" value="' + str(can_objectid) + '">\n')
            elif line_cnt == 38:
                file_handle_des.write('                    <d:var name="CanMbIdex" type="INTEGER" value="' + str(can_index_in_channel) + '"/>\n')
            elif line_cnt == 52:
                file_handle_des.write('                           value="ASPath:/Can/Can/CanConfigSet/ControllerCan' + str(can_channel) + '"/>\n')
            else:
                line = file_source_lines[line_cnt]
                file_handle_des.write(line)
            line_cnt = line_cnt + 1

        can_objectid = can_objectid + 1

file_handle_des.close()