文章目录
前言
见《大道至简,骨灰级拆解Simulink处理CAN消息的几种不同方式(一)——直接调用.dbc文件方式》
见《大道至简,骨灰级拆解Simulink处理CAN消息的几种不同方式(二)——手动输入通信协议方式》
一、通信协议
见《大道至简,骨灰级拆解Simulink处理CAN消息的几种不同方式(一)——直接调用.dbc文件方式》
二、CAN消息发送
使用CAN Pack模块,数据输入方式选择raw data,然后手动输入Message的ID信息,点击OK后在模块的外边就会出现一个Signal Bus的In端口。在外部使用Simulink的一系列数据处理模块,码出通信协议中定义的Signal,并给这些Signal赋上对应的值,然后插入前面CAN Pack模块的In端口,最后把打包好的Message插入CAN Transmit模块即可。上述操作方法和配置成功后的效果如下:
三、CAN消息接收
使用CAN Unpack模块,可以把接收到的Message解析成具体的Signal,模块配置方式与上述CAN Pack模块相同,具体操作方法和配置成功后的效果如下:
四、仿真运行效果
基于上述举例,仿真运行时需要对模型进行适当分割,把依赖外部系统的模块去掉,只留下Simulink本身的内容。分割后的模型和仿真运行的结果如下:
五、分析和应用
上述码原始数据处理CAN消息的方式,特点是Message中每个Signal的具体定义都要用Simulink的数据处理模块中手动码出来,比如数据类型、比例系数和偏移量等等,这些Signal在Simulink模型中不能直接以物理值为单位进行调用,而需要一些列复杂的处理。这种方式的优点是,可以最大程度地减少对Simulink原有CAN Pack模块和CAN Unpack模块的依赖,当然也不需要单独编写一个.dbc文件,能够最大自由度地灵活处理CAN信号。缺点是,Simulink对CAN信号的处理比较复杂,对开发人员的个人能力要求较高,编程代码有很大的出错可能性,这个缺点尤其会在Message信号较多的项目中非常突出。整体而言,这种方式适合应用于功能需求特殊的,硬件平台资源有限的,需要在软件上深度裁剪和定制的项目,同时也适用于资深工程师解决复杂问题时,进行调试和分析的场景。
总结
以上就是本人在对Simulink处理CAN消息的几种方式进行总结分析时,讲解到的第三种实现方式。主要讲解了码原始数据处理CAN消息发送和接收的具体方法,展示了实现该方式的详细代码和实际运行效果,最后分析了这种处理方式的特点以及适用场景。
后续如果发其他现更好的Simulink处理CAN消息的方式,还会继续更新,欢迎评论区留言、点赞、收藏和关注,这些鼓励和支持都将成为笔者持续分享的动力。
另外,上述例程使用的Demo工程可以到笔者的主页查找和下载。
版权声明:原创文章,转载和引用请注明出处和链接,侵权必究!