CAN总线工具。

cantools的Python项目详细描述


buildstatuscoverage

关于

python 3中的can总线工具。

  • DBCKCD、sym、arxml 4和cdd文件解析。
  • can报文的编解码。
  • 简单扩展信号复用。
  • 诊断做编码和解码。
  • candump输出解码器。
  • 节点tester
  • 源代码生成器。
  • can总线监视器。

Python2支持已被弃用,因为Python3具有更好的Unicode支持。

项目主页:https://github.com/eerimoq/cantools

文档:http://cantools.readthedocs.org/en/latest

安装

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.hmotohawk.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.hmy_database_name.c 生成的文件。

在上一个示例中,我们使用--no-floating-point-numbers生成 不带浮点类型的代码,即floatdouble

$ 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.hmotohawk_no_floating_point_numbers.c用于 生成的文件。

其他C代码生成器:

monitor子命令

在基于文本的用户界面中监视can总线通信量。

$ cantools monitor tests/files/dbc/motohawk.dbc
https://github.com/eerimoq/cantools/raw/master/docs/monitor.png

监视器底部的菜单显示可用的命令。

  • 退出:退出显示器。也可以使用ctrl-c。
  • 筛选器:仅显示与给定规则匹配的消息 表达。按<;enter>;从筛选器返回菜单 输入线。
  • 播放/暂停:在播放和暂停(或运行和冻结)之间切换。
  • 重置:将监视器重置为初始状态。

贡献

  1. 分叉存储库。

  2. 安装必备组件。

    pip install -r requirements.txt
    
  3. 实现新功能或错误修复。

  4. 实施测试用例以确保将来的更改不会中断 遗产。

  5. 运行测试。

    make test
    
  6. 创建拉取请求。

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java使用split函数分割字符串,但没有得到期望的结果   未找到包含derby数据库嵌入架构的sql Java桌面应用程序错误   java elasticsearch vs solr用于定制全文搜索系统   java Android:创建没有startOffset的动画延迟?   java如何查看其他应用程序接收的数据?   java如何在Linux中使用D和classpath选项运行jar文件   java和域设计最佳实践   具有相同内存位置的java数组,将显示为输出   连接到java中的elasticsearch?   Java Playframework重定向到带有Json负载的外部url   java无法在Android平台上使用InputStream为蓝牙socket创建ObjectInputStream   使用POI将Excel日期转换为Java日期,年份未正确显示   oracle从数据库层还是Java层调用webservice?