赞
踩
关于BDC之前已经总结了很多:
参看:汽车电子 – 根据DBC解析CAN报文
参看:汽车电子 – CAN报文接收解析和发送组包
参看:汽车电子 – 使用CANdb++ Editor创建并制作一个DBC
DBC文件是用来描述CAN网络通信信号的一种格式文件。它可以用来监测与分析CAN网络上的报文数据,也可以用来模拟某个CAN节点
本文出现的符号:
’ | ’ ——可选择
’ ; '——结束定义
[…]——内容可选(0或1次)
{…}——内容重复(0或多次)
(…)——注释
unsigned_integer:无符号整型
signed_integer:有符号整型
double:双精度小数
char_string:字符串
C_identifier:C语言变量命名
在DBC文件中,“factor”和“offset”用于描述信号的转换参数。
转换公式:
根据这些定义,可以使用以下公式进行转换:
物理值 = 原始值 * factor + offset
或
原始值 = (物理值 - offset) / factor
根据ByteOrder不同,Startbit总共有六种显示形式,其中Motorola有四种,Intel有两种。
pip install cantools openpyxl
import cantools
from openpyxl import Workbook
def read_dbc_and_save_to_excel(dbc_file_path, excel_file_path):
# Load DBC file
db = cantools.database.load_file(dbc_file_path)
# Create Excel workbook and worksheet
wb = Workbook()
ws = wb.active
ws.append(['ID', 'Name', 'Signal', 'Start', 'Length', 'Factor', 'Offset', 'Min', 'Max', 'Unit'])
# Write DBC data to Excel
for message in db.messages:
ws.append([message.name, message.frame_id, message.length, message.cycle_time])
for signal in message.signals:
ws.append(["", signal.name, signal.start, signal.length, signal.byte_order, signal.is_signed,
signal.scale, signal.offset, signal.minimum, signal.maximum])
# Save Excel file
wb.save(excel_file_path)
if __name__ == "__main__":
dbc_file_path = "path/to/your/file.dbc" # Replace with the actual DBC file path
excel_file_path = "path/to/your/output.xlsx" # Replace with the desired Excel output path
read_dbc_and_save_to_excel(dbc_file_path, excel_file_path)
pip install cantools
import cantools
# 加载DBC文件
db = cantools.database.load_file('example.dbc')
# 遍历节点
for node in db.nodes:
print("Node name: ", node.name)
print("Node comment: ", node.comment)
print()
# 遍历消息
for message in db.messages:
print("Message name: ", message.name)
print("Message id: ", message.frame_id)
print("Message length: ", message.length)
print("Message senders: ", message.senders)
print("Message comment: ", message.comment)
print()
# 遍历信号
for signal in message.signals:
print("Signal name: ", signal.name)
print("Signal start bit: ", signal.start)
print("Signal length: ", signal.length)
print("Signal byte order: ",signal.byte_order)
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。