做一普通网站需要多少钱,乐清网站建设乐清,广西学校网站建设,网站图片布局文章目录 前言一、安装cantools二、官方说明文档三、cantools方法1、解析message的属性2、解析pdu中的signals3、根据message查找signals4、报文组成bytes 总结 前言
曾经有拿cantools来解析过dbc#xff0c;用得比较浅#xff0c;不知道可以用来解析arxml。最近有个需求需要… 文章目录 前言一、安装cantools二、官方说明文档三、cantools方法1、解析message的属性2、解析pdu中的signals3、根据message查找signals4、报文组成bytes 总结 前言
曾经有拿cantools来解析过dbc用得比较浅不知道可以用来解析arxml。最近有个需求需要适配arxml的解析其实有用过正则表达式来解析过arxml后面用了cantools这个库才发现自己做了傻事直接调用别人开发的库岂不美哉。 一、安装cantools
python3 -m pip install cantools二、官方说明文档
点击进入cantools官方说明文档 cantools官方网站里面很多函数和方法就不逐个例举了有需要的可以快速浏览下 三、cantools方法
这里简单地列举几个方法
1、解析message的属性
import cantoolsif __name__ __main__:#加载arxmlarxml cantools.db.load_file(demo.arxml)for message in arxml.messages:#解析报文名称报文ID报文长度报文是否canfd类型报文的pduprint(message.name,message.frame_id,message.length,message.is_fd,message.contained_messages)打印结果
2、解析pdu中的signals
import cantools
import pprintif __name__ __main__:#层次打印数据pp pprint.PrettyPrinter(indent1)#加载arxmlarxml cantools.db.load_file(demo.arxml)#解析pdu中的signalsfor message in arxml.messages:try:for pdu in message.contained_messages:pp.pprint(pdu.signals)except:pass 打印结果
3、根据message查找signals
import cantools
import pprintif __name__ __main__:#层次打印数据pp pprint.PrettyPrinter(indent1)#加载arxmlarxml cantools.db.load_file(demo.arxml)message arxml.get_message_by_name(FDR_ADCANFD_FrP02)for pdu in message.contained_messages:pp.pprint(pdu.signals)打印结果
4、报文组成bytes
import cantoolsdata {}
encode_data []if __name__ __main__:db cantools.db.load_file(demo.arxml)msg db.get_message_by_name(CCP_ADCANFD_PDUGW_FrP31)for contained_message in msg.contained_messages:data.clear()for signal in msg.get_contained_message_by_name(contained_message.name).signals:#encode时需要按照signal_name : value的方法进行排列字典data.update({signal.name: 0})#连接多个pdu因为frame是由1个或者多个pdu组成的encode_data.append((contained_message,contained_message.encode(data)))print(msg.encode(encode_data))打印结果 总结
简而言之cantools官网有很多方法大家可以到官网查阅这里做个简单的记录因为比较常用。