当前位置:主页> 新闻资讯> 行业新闻>

Matlab/Simulink-J1939CAN 解包实现方法

刚刚和软件工程师讨论Matlab/Simulink下CAN信号打包解包的事情,正巧遇到J1939的坑。晚上花了不少时间和宋老师沟通,也算有些收获,感谢宋老师的帮助~

普通的CAN解包/打包方式相对简单,Simulink下主要有2种思路:

1.CAN pack+dbc实现打包

用Simulink自带的CAN pack/CAN unpack加dbc,然后生成代码,省去了很多移位运算的麻烦。

CAN pack+dbc实现打包

2.自己搭建CAN解析模板(Msg->signal, Signal->Msg)

但是Simulink自带的CAN Pack和CAN Unpack在生成代码的时候会产生很多冗余代码,手动筛选的时候比较费劲。也可以自己搭建移位运算的library只需要按照dbc协议改变接口即可,如下图所示。

自己搭建CAN解析模板(Msg->signal, Signal->Msg)

自己搭建CAN解析模板(Msg->signal, Signal->Msg)

Matlab/Simulink下实现J1939的解包打包相对复杂一点,在搭建模型生成代码的过程中,需要添加比较多的模块。

1.Simulink找到J1939 library,如下图所示。

Simulink找到J1939 library

2. 拖入相关的模块

至少需要拖入4个模块:

J1939 Network Configuration

J1939 Node Configuration

J1939 CAN Transport Layer

J1939 Receive

拖入相关的模块

双击J1939 Network Configuration模块,更改Configuration name,并且导入自己添加的1939dbc文件。

Matlab/Simulink-J1939CAN 解包实现方法

双击J1939 Node Configuration模块,选择相应的Config name和对应的Node name,如下图所示

Matlab/Simulink-J1939CAN 解包实现方法

双击J1939 CAN Transport layer模块,选择相应的device,这个类似于一个虚拟的通道,不选择的话,仿真和生成代码都会报错。

Note: 我电脑安装的是16b版本的matlab,Device下来选项是None, 但是同事高版本的matblab里面不是空的,和宋老师沟通半天也没有找到问题在哪?Anyway,有可能是matlab安装或者版本的问题,路子是可以走通的。

Matlab/Simulink-J1939CAN 解包实现方法

双击J1939 Receive模块,选择相应的Config name以及Node name,就会出现如下界面,把对应的信号解包出来。

Matlab/Simulink-J1939CAN 解包实现方法

仿真不报错的话,Ctrl+B生成代码,把J1939解析相关的代码拿出来自己用就可以了。

Matlab/Simulink-J1939CAN 解包实现方法

Matlab命令行输入以下指令,会出来自带的J1939案例,可以做1939相关的仿真工作,还是比较方便的。

web(fullfile(docroot, 'vnt/examples/basic-j1939-communication-over-can.html'))

案例模型

案例模型

仿真结果

仿真结果

上一篇:2020最可靠汽车品牌易主,捷尼赛思取代雷克萨斯
下一篇:扛过「病毒」新造车还需要扛过的几道坎!

相关新闻

精彩推荐

请自觉遵守互联网相关政策法规,作者可以直接删除恶意评论、广告或违禁词语
用户名: 验证码:点击我更换图片