simulink进行CAN报文的解析以及生成代码

          最新一直在研究simulink的代码生成,然后工作需要进行CAN报文的解析,就突发奇想能不能用simulink进行解析,然后查看了一些资料发现按照步骤进行建模,运行能成功但是代码却无法生成,会出现各种问题,然后发现是其中一些步骤在教程中被省略,但是新手又不知道那里被简化了,从而导致代码无法生成。

        今天写一个简单的教程来帮助和我遇见一样问题的朋友来解决问题。按照此教程是可以进行代码的生成的,不过还是建议把报文解析的工作丢给底层工程师来解析。

下面是模型的概图:

 1.在matlab根目录下can_message.h文件,copy出来到模型的相同目录下,点击打开看到结构体,里面定义了帧类型、长度、ID、等类型,重点注意Timestamp,引用这个头文件的时候不要把这个忘记了,不然代码生成就会出现问题。

 2.新建一个数据字典,在里面添加一个simulink.Bus,然后点击启动类型编辑器; 

 

 3.点击BUS添加一个总线,选中总线和点击BUS_Element添加子类,数据类型和名称与can_message.h文件一致,然后保存;

 4.回到simulink页面,打开库浏览器,找到can_unpack,添加到页面;

5.双击打开can_unpack,将自己的DBC文件导入,数据输出类型按照图中选,message list选项可以选择你要解析的DBC模块,然后点击应用,就会显示出端口;

 

6.在输入口这里,我们添加 几个常量模块来测试,分别按照can_message.h文件中的排序进行,信号的数据类型也要进行更改;

 7.注意这里CAN_ID和DATA是十进制传递的,我们可以用8个常量来代表传递的数据,通过mux模块进行整合,将can类型通过bus  creator模块整合成总线传递给CAN_UNPACK,注意DATA的数据类型是uint8的,所以要用一个转换模块进行转换

 

8.对于Buscreator模块,点开后要进行配置,输出的数据类型就是我们数据字典中创建的总线名字,总线的元素按照顺序添加,然后应用;

9.打开模型资源管理器,添加simulink信号,将要输入输出的信号都添加上,在代码生成这里,输入的全局变量选择外部导入,输出的选择导出全局,

 

10. 回到模型页面,将信号进行绑定,右键信号,属性,信号名称必须解析为simulink信号对象;

 11.输出用显示模块来代替,用来验证模型是否正常;

 12.上面模型建立完毕,开始进行模型配置;选择定步长,步长1毫秒;

 

 13.代码生成这里系统目标文件ert.tlc;仅生成代码✔;

 

 14.到此模型建立完毕,点击运行,仿真没问题,点击代码生成,代码OK;

 

这里可以看到我们定义的输入变量,后面只需要把常量改成输入输出模块即可;

运行时,填入数据,解析出来的数据和手算一样,模型没问题,文章至此结束。

  • 12
    点赞
  • 39
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值