在autosar开发中,很多时候甲方是直接输出xlsx文件,这时候需要我们自己动手生成DBC文件来作为工程的输入文件,直接在CANdb++中修改比较麻烦,所以写了一个python脚本,以便加方便的生成DBC文件,网上查了查大神们一般用什么方法什么模块来生成DBC,加上自己的优化,现在将代码提供如下,仅供参考学习,如有侵权问题,请及时联系。
代码:
#!/usr/bin/python3 #-*- coding:utf-8 -*- import xlwt import xlrd import xlsxwriter import canmatrix import decimal import os import openpyxl import lib2to3 # Press the green button in the gutter to run the script. if __name__ == '__main__': # 输入文件 print("hello,begin!!!") input_file = r'C:\Users\huiyi\Desktop\zjt\py\11.xlsx' sheet_name = "T_CAN" # 使用xlrd库读取excel文件 excel_obj = xlrd.open_workbook(input_file) # use canmatrix创建DBC实例 matrix_obj = canmatrix.CanMatrix() # add global property # 总线类型 matrix_obj.add_global_defines("BusType", "STRING") matrix_obj.add_define_default("BusType", "CAN") # 报文发送类型属性以及默认值 matrix_obj.add_frame_defines("GenMsgSendType", 'ENUM "Cyclic", "Event"') matrix_obj.add_define_default("GenMsgSendType", "Cyclic") matrix_obj.add_frame_defines("GenMsgCycleTime", 'INT 0 65535') matrix_obj.add_define_default("GenMsgCycleTime", "0") #matrix_obj.add_signal_defines("SPN", 'INT 0 65535') matrix_obj.add_define_default("SPN", "0") # 获取工作簿,开始处理数据 sheet_obj = excel_obj.sheet_by_name(sheet_name) if sheet_obj is None: raise "工作簿错误!&