【汽车电子】can报文和can database(candbc)

1.can就是controller area network,是面向汽车的通信协议,通俗来讲就是在汽车电子控制领域中的不同部分进行通信的(传输数据)。

2.can报文有标准帧和扩展帧两种,也就是can和canfd,canfd是can的升级版,最长支持64字节(byte,=64*8 bits),并且传输速率更快,帧包含更多的内容。

3.can报文有三种:应用报文(APP报文)、网络管理报文(NM报文)和诊断报文。app报文就是自己新建的can报文,一般用于通信,nm报文用于控制网络中的节点的状态,诊断报文用于诊断。

4.can dbc是 database can,用于描述can网络中的节点信息,can dbc是一种基于ASCII的文件,这种文件能够描述CAN的帧数据,来帮助识别帧数据。也就是,在can dbc中包含了新建的can报文内容。

5.CANDB++:是用来新建can dbc的一个软件,有一下常用的名词:

        Messages:报文 

        Signals:信号,报文上的具体内容

        DLC:数据长度

        Environment_variables:环境变量:定义了用于系统仿真和剩余总线仿真工具的环境变量。

        转换公式:信号值*精度值+偏移量

’6.如何使用CANDB++新建自己想要的报文:

        1.新建dbc:file-create database-CANFDTemplate.dbc(现有的dbc可以根据networks的具体信息查看是can还是canfd类型,通常是canfd类型)

        2.can的属性配置:在新建完之后,可以配置can的attribution definition,可以手动配置修改,也可以导入某个dbc的配置(file选中import attribution definition)。

 

 

        3.新建signal:右键new:byte order 字节顺序,length一般小于等于32(mcu一般是32位),value type一般选择unsigned,intel 低字节在前(高位)motorola 高字节在前(高位)(一般是摩托罗拉),配置相关信息(根据通信协议配置单位等),计算最小和最大值(calculate),comment添加注释等,也可以 配置属于哪个报文。

        4.新建枚举表并添加到signal:view-value tables-右键new-value descriptions-add,可以修改具体的值和描述;选中signal右键edit-value table选中。(有时候的信号可能只有两种情况,比如0是关闭1是打开,可以使用此功能)

        5.新建messages:右键new-填写属性(要根据networks中的vmc的属性设置message的属性can或者canfd,一般选择canfd standard)-添加signals-选中要添加的signal-ok-add;-layout可以拖拽信号(可以看信号所占的位)(要修改报文ID,如果默认为0的话会有错),可以修改报文发送的周期(一般为20ms)

 

        6.新建节点(右键选中network nodes新建并配置),并配置报文发送和报文接收:配置报文发送:在network nodes中选择节点 -右键edit-TxMessages-add。配置报文接收,无法直接配置报文,要通过配置信号接收。在network nodes中选择节点 -右键edit-mapped Rx Sig.-add。

 

         7.删除报文:选中报文右键删除,删除信号和报文即可,节点会自动删除

 

 

 

 

  • 6
    点赞
  • 32
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
Python发送CAN DBC文可以通过使用第三方库python-can实现。python-can是一个用于操作控制器局域网(CAN)总线的Python库,它提供了发送和接收CAN消息的函数和方法。 首先,需要使用pip安装python-can库。在命令行中运行以下命令: ``` pip install python-can ``` 然后,导入`can`模块和`dbc`模块: ```python import can from cantools import database ``` 接下来,加载DBC文件以解析文的定义。假设你的DBC文件为`example.dbc`: ```python db = database.load_file('example.dbc') ``` 创建CAN总线对象并打开: ```python bus = can.interface.Bus(channel='can0', bustype='socketcan_native') ``` 通过修改`channel`参数为正确的CAN通道名称,并根据操作系统选择正确的`bustype`。 构造CAN消息并发送: ```python message = can.Message(arbitration_id=0x123, data=[0x11, 0x22, 0x33, 0x44, 0x55, 0x66, 0x77, 0x88], extended_id=False) bus.send(message) ``` 这里的`arbitration_id`表示文的ID,`data`表示文的数据,`extended_id`表示ID是否为扩展ID。 完整的代码如下: ```python import can from cantools import database # 加载DBC文件 db = database.load_file('example.dbc') # 创建CAN总线对象并打开 bus = can.interface.Bus(channel='can0', bustype='socketcan_native') # 构造CAN消息并发送 message = can.Message(arbitration_id=0x123, data=[0x11, 0x22, 0x33, 0x44, 0x55, 0x66, 0x77, 0x88], extended_id=False) bus.send(message) ``` 这样,你就可以使用Python发送CAN DBC文了。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值