资源简介
将can消息描述的**.dbc文件转换成c++代码来读取,不需要自己动手编解码做移位拼接操作
将can消息描述的**.dbc文件转换成c++代码来读取,不需要自己动手编解码
将can消息描述的**.dbc文件转换成c++代码来读取,不需要自己动手编解码
代码片段和文件信息
#!/usr/bin/env python
import re
import json
import pprint
from pprint import pprint
import canmatrix
from canmatrix import convert
class frame():
def __init__(selffr_nameid):
self.fr_name = fr_name
self.id = id
class DBC_to_M():
account = {}
def __init__(selfdbc_pathm_path):
self.dbc_path = str(dbc_path)
self.m_path = str(m_path)
def Read_DBC(self):
with open(self.dbc_path) as f:
self.dbc_file = f
def parse_dbc(self):
for line in self.dbc_file:
mes = []
l = line.strip()
if l.__len__() == 0:
continue
if(l.startswith(“SG_ “)):
pass
elif (l.startswith(“BO_“)):
pattern = re.compile(“BO\_ (\w+) (\w+) *: (\w+) (\w+)“)
regex = re.match(pattern)
if regex:
frame_name = regex.group(2)
frame_id = regex.group(1)
frame_len = regex.group(3)
frame_io = regex.group(4)
class can_frame():
sig_list = list()
# sig_conv_list = list()
sig_conv = {}
def __init__(self):
pass
def set_id(selfid):
self.id = id
def set_name(selfname):
self.name = name
def add_signal(selfsignal):
self.sig_list.append(signal)
self._parse_signal(signal)
def _parse_signal(selfsignal):
start_bit = (signal[“start_bit“] )
signal_length = signal[“bit_length“]
signal_isbigendian = signal[“is_big_endian“]
Sbit_data_num Sbit_bit_num = self._start_bit_position(start_bit)
Ebit_data_num Ebit_bit_num = self._end_bit_to_data_pos(Sbit_data_numSbit_bit_numsignal_lengthsignal_isbigendian)
#operation = self._parse_bits(Sbit_data_numSbit_bit_numEbit_data_numEbit_bit_numsignal[“name“])
# operation = self._descripe_bits(Sbit_data_numSbit_bit_numEbit_data_numEbit_bit_numsignal[“name“])
self.sig_conv[str(signal[“name“])] = {“St_Bit“: (Sbit_data_numSbit_bit_num) “End_Bit“:(Ebit_data_numEbit_bit_num)}
#self.sig_conv[str(signal[“name“])] = operation
def _start_bit_position(selfstart_bit):
Sbit_bit_num = start_bit % 8
Sbit_data_num = start_bit // 8
return Sbit_data_numSbit_bit_num
def _end_bit_to_data_pos(selfSbit_data_numSbit_bit_numdata_lengthis_big_endian): # give the data_length and data_position of each signal calculate
Ebit_data_num = Sbit_data_num
Ebit_bit_num = Sbit_bit_num #end_bit‘s position
for count in range(data_length - 1):
print(count)
if Ebit_bit_num < 8:
Ebit_bit_num = Ebit_bit_num + 1
elif Ebit_bit_num == 8:
Ebit_bit_num = 1
if Ebit_data_num < 8:
if is_big_endian == True:
相关资源
- SJA1000 CAN芯片驱动(SJA1000.c)
- CAN实验
- USB CAN Tool 源代码(LabVIEW 2011环境)
- arduino I2C设备扫描并串口返回地址(
- cubeMX设计实现stm32f407上的CAN及485的通
- QT CAN例程
- vs2008 can总线通讯源码
- OBD_CAN读取代码(stm32f103)
- canape教程(ape.docx)
- stm32f103 can驱动
- VC图像处理-用Canny算子提取边缘
- DBscan实现
- mysql-odbc5.1驱动包
- 图书管理系统 visual c++ 6.0,access开发
- vcredist_x86.rar
- c语言用odbc连数据库.rar
- 模式识别课程作业:C均值(k_means)聚
- CANoe窗口与模块介绍
- 是DBSCAN聚类算法的C++实现代码可以运
- 温度数据采集系统程序上位机程序+
- 在vc下开发的canny边缘检测 MFC
- C/C++使用ODBC操作SQL server数据库
- C/C++使用ODBC连接SQL server数据库完整流
- 安徽大学操作系统实验八基于扫描的
- VC6.0+MFC+USBCAN上位机通信控制
- mfc odbc access 数据库操作增,删,减,
- VC MFC CAN 通信程序支持周立功
- 基于MFC简单的学生信息管理系统ODBC
- TCPIP实用程序&温度数据采集系统程序
- VC++6.0 MFC使用ODBC链接MySQL把图片写入
评论
共有 条评论