CAN总线工具。
cantools的Python项目详细描述
安装
pipinstallcantools
示例用法
脚本
该示例首先分析small DBC-file并打印 信息和信号。
>>>importcantools>>>frompprintimportpprint>>>db=cantools.database.load_file('tests/files/dbc/motohawk.dbc')>>>db.messages[message('ExampleMessage',0x1f0,False,8,'Example message used as template in MotoHawk models.')]>>>example_message=db.get_message_by_name('ExampleMessage')>>>pprint(example_message.signals)[signal('Enable',7,1,'big_endian',False,1.0,0,0.0,0.0,'-',False,None,{0:'Disabled',1:'Enabled'},None),signal('AverageRadius',6,6,'big_endian',False,0.1,0,0.0,5.0,'m',False,None,None,''),signal('Temperature',0,12,'big_endian',True,0.01,250,229.53,270.47,'degK',False,None,None,None)]
示例继续encoding消息并将其发送到can上 使用python-can包的总线。
>>>importcan>>>can_bus=can.interface.Bus('vcan0',bustype='socketcan')>>>data=example_message.encode({'Temperature':250.1,'AverageRadius':3.2,'Enable':1})>>>message=can.Message(arbitration_id=example_message.frame_id,data=data)>>>can_bus.send(message)
或者,可以使用encode_message()对消息进行编码。 数据库对象上的方法。
示例的最后一部分接收和decodes一条can消息。
>>>message=can_bus.recv()>>>db.decode_message(message.arbitration_id,message.data){'AverageRadius':3.2,'Enable':'Enabled','Temperature':250.09}
有关其他示例,请参见examples。
命令行工具
decode子命令
解码用linux程序candump捕获的can帧。
$ candump vcan0 | cantools decode tests/files/dbc/motohawk.dbc vcan0 1F0 [8] 80 4A 0F 00 00 00 00 00 :: ExampleMessage( Enable: 'Enabled' -, AverageRadius: 0.0 m, Temperature: 255.92 degK ) vcan0 1F0 [8] 80 4A 0F 00 00 00 00 00 :: ExampleMessage( Enable: 'Enabled' -, AverageRadius: 0.0 m, Temperature: 255.92 degK ) vcan0 1F0 [8] 80 4A 0F 00 00 00 00 00 :: ExampleMessage( Enable: 'Enabled' -, AverageRadius: 0.0 m, Temperature: 255.92 degK )
或者,解码后的消息可以打印在一行:
$ candump vcan0 | cantools decode --single-line tests/files/dbc/motohawk.dbc vcan0 1F0 [8] 80 4A 0F 00 00 00 00 00 :: ExampleMessage(Enable: 'Enabled' -, AverageRadius: 0.0 m, Temperature: 255.92 degK) vcan0 1F0 [8] 80 4A 0F 00 00 00 00 00 :: ExampleMessage(Enable: 'Enabled' -, AverageRadius: 0.0 m, Temperature: 255.92 degK) vcan0 1F0 [8] 80 4A 0F 00 00 00 00 00 :: ExampleMessage(Enable: 'Enabled' -, AverageRadius: 0.0 m, Temperature: 255.92 degK)
转储子命令
以可读格式转储给定的数据库:
$ cantools dump tests/files/dbc/motohawk.dbc ================================= Messages ================================= ------------------------------------------------------------------------ Name: ExampleMessage Id: 0x1f0 Length: 8 bytes Cycle time: - ms Senders: PCM1 Layout: Bit 7 6 5 4 3 2 1 0 +---+---+---+---+---+---+---+---+ 0 |<-x|<---------------------x|<--| +---+---+---+---+---+---+---+---+ | +-- AverageRadius +-- Enable +---+---+---+---+---+---+---+---+ 1 |-------------------------------| +---+---+---+---+---+---+---+---+ 2 |----------x| | | | | | B +---+---+---+---+---+---+---+---+ y +-- Temperature t +---+---+---+---+---+---+---+---+ e 3 | | | | | | | | | +---+---+---+---+---+---+---+---+ 4 | | | | | | | | | +---+---+---+---+---+---+---+---+ 5 | | | | | | | | | +---+---+---+---+---+---+---+---+ 6 | | | | | | | | | +---+---+---+---+---+---+---+---+ 7 | | | | | | | | | +---+---+---+---+---+---+---+---+ Signal tree: -- {root} +-- Enable +-- AverageRadius +-- Temperature Signal choices: Enable 0 Disabled 1 Enabled ------------------------------------------------------------------------
generate c source子命令
从给定的数据库生成源代码。
生成的代码包含:
已知限制:
-
最大信号大小是64位,在实践中从来没有。
超过。
下面是一个如何从 数据库。数据库是tests/files/dbc/motohawk.dbc。
$ cantools generate_c_source tests/files/dbc/motohawk.dbc Successfully generated motohawk.h and motohawk.c.
有关生成的内容,请参见motohawk.h和motohawk.c。 文件夹。
在下一个示例中,我们使用--database-name设置自定义 所有生成类型、定义和函数的命名空间。输出 此选项也会更改文件名。
$ cantools generate_c_source --database-name my_database_name tests/files/dbc/motohawk.dbc Successfully generated my_database_name.h and my_database_name.c.
内容见my_database_name.h和my_database_name.c 生成的文件。
在上一个示例中,我们使用--no-floating-point-numbers生成 不带浮点类型的代码,即float和double。
$ cantools generate_c_source --no-floating-point-numbers tests/files/dbc/motohawk.dbc Successfully generated motohawk.h and motohawk.c.
见motohawk_no_floating_point_numbers.h和 motohawk_no_floating_point_numbers.c用于 生成的文件。
其他C代码生成器:
monitor子命令
在基于文本的用户界面中监视can总线通信量。
$ cantools monitor tests/files/dbc/motohawk.dbc
监视器底部的菜单显示可用的命令。
- 退出:退出显示器。也可以使用ctrl-c。
- 筛选器:仅显示与给定规则匹配的消息 表达。按<;enter>;从筛选器返回菜单 输入线。
- 播放/暂停:在播放和暂停(或运行和冻结)之间切换。
- 重置:将监视器重置为初始状态。
贡献
分叉存储库。
安装必备组件。
pip install -r requirements.txt
实现新功能或错误修复。
实施测试用例以确保将来的更改不会中断 遗产。
运行测试。
make test
创建拉取请求。