我是靠谱客的博主 称心花卷,最近开发中收集的这篇文章主要介绍Simulink解析CAN报文数据,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

在simulink里对can报文的解析,有两种方式,最直接的方式就是进行手动解析。需要对can的数据非常熟悉。另外一种方式就是需要有can数据文件,数据的解析完全通过dbc完成。

一.手动解析

手动对报文进行解析,和使用c代码进行解析比较类似。需要弄清楚以下问题:①编码方式:intel还是motorola,需要弄清楚高低字节,两种方式解析不一样。②信号的起始位,所占的bit位数。③信号的偏移量和分辨率。

原理:

跨字节:解析值=(高字节数据*256+低字节数据)*分辨率+偏移量

非跨字节:解析值=字节数据*分辨率+偏移量

对于字节数据的取出,如占满字节,直接转无符号8位即可。如果字节未占满,和C代码一样,主要通过与操作&和移位>>操作完成,主要用Bitwise Operator和Shift Arithmetic两个模块。
在这里插入图片描述
举个栗子:(本文主要侧重于数据的解析,对ID、数据长度等判断逻辑不不考虑)

有如下两个信号:

①制动状态,motor编码,起始位值第4个字节第5位,长度2位,分辨率为1,没有偏移量。

②车速,motor编码,起始位值第2个字节第1位,长度16位,分辨率为0.00390625,没有偏移量。

模型:
在这里插入图片描述
在这里插入图片描述
(用第四个字节,与00110000相与,取出第五位和第六位)
在这里插入图片描述(将取出第五位和第六位,右移动4位,即取出制动信号所占2位的数值)
二.dbc进行解析。

使用的simulink的模块为CAN unpack
在这里插入图片描述
导入dbc
在这里插入图片描述
模型:
在这里插入图片描述
三.仿真验证
使用CAN Pack进行仿真验证,选择相同的dbc文件,输出设置为非虚拟bus
在这里插入图片描述
用bus selector,选择数据帧
在这里插入图片描述
仿真结果:手动解析与dbc解析一致
在这里插入图片描述
如果要做代码生成,步骤如下:

①配置ert.tlc,可以参考Simulink代码生成自动化操作(三)——GUI制作中进行自动配置,也可以手动配置。

②创建can结构体类型:
在这里插入图片描述
③将输入信号,设置为非虚bus,数据类型选择刚创建的can结构体类型
在这里插入图片描述
④其他部分按照上述模型,不用改动,然后build就能生成代码。(使用unpack做代码生成,会生成相应判断ID、数据长度是否与dbc定义相同的代码,手动解析则需要自己写这些逻辑,也比较简单)
在这里插入图片描述
在这里插入图片描述
Fixed step size对代码生成的影响

防抖建模的三种方式

Simulink代码生成自动化操作(三)——GUI制作

simulink汽车软件开发入门

最后

以上就是称心花卷为你收集整理的Simulink解析CAN报文数据的全部内容,希望文章能够帮你解决Simulink解析CAN报文数据所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(39)

评论列表共有 0 条评论

立即
投稿
返回
顶部