MBD之代码生成——CAN Pack/Unpack模块的代码生成

​在一些应用场合,我们会直接在应用层Simulink模型中使用CAN Pack和CAN Unpack这两个模块加载DBC文件,进行CAN报文的解析和打包。

例如我们有DBC文件,主要包含以下两个报文:

图1.dbc文件Layout

 

现在需要在Simulink中创建MCU的CAN报文处理功能模块,即获取HCU发送的数据,解析获取HCU的指令信号;打包MCU内部信号,作为MCU发送报文。今天就跟大家介绍下CAN Unpack/Pack两种常用的应用场景

 

应用场景一:

定义CAN_Msg_In、CAN_Msg_Out两变量,分别作为输入和输出报文变量

CAN_Msg_In和CAN_Msg_Out都为CAN_MESSAGE 类型。

 

在与底层驱动进行集成时,底层可使用CAN_Msg_In和CAN_Msg_Out这两个变量,或再定义其他CAN_MESSAGE 类型的接口变量。

 

图2.CAN Unpack/Pack建模

 

上述CAN_MESSAGE 数据类型在MATLAB自带的can_message.h中进行了定义

 

can_message.h可在MATLAB安装路径下找到一个 文件,如下图。可以将此文件拷贝至当前路径下

图3.can_message.h所在路径

 

图4.CAN_MESSAGE结构体

 

知道了CAN_MESSAGE 类型的定义后,这两个模块的使用就很简单了,我们可以在工作区定义名为CAN_MESSAGE 的Simulink Bus数据对象,如下:

图5.定义CAN_MESSAGE Simulink.Bus数据对象

 

再定义CAN_Msg_In和CAN_Msg_Out两个Simulink.Signal数据对象,数据类型选择上面定义好的 Bus:CAN_MESSAGE

图6.CAN_Msg_In Simulink.Signal数据对象

 

其他信号的数据对象都是基础数据类型(double,unit8,int16等),这里不再赘述,所有数据对象最终定义成如下:

图7.所有数据对象

 

信号线关联数据对象,仿真无误,生成代码如下:

图8.变量定义

 

CAN Unpack部分代码,使用CAN_Msg_In变量直接进行解析

图9.CAN Unpack模块部分代码

 

CAN Pack部分代码,信号打包输出CAN_Msg_Out

图10.CAN Pack模块部分代码

 

 

应用场景二:

对于底层驱动已经定义了CAN_MsgIn_Data[8] CAN_MsgOut_Data[8] 两个数组变量作为接口,用于存放CAN报文的Data部分,应用层只能使用这两个数组,此时可用这种方法。

此方法其实和场景一种的很相似,都需要使用CAN_MESSAGE 这个数据类型。首先也需要在工作区(或数据字典)中定义CAN_MESSAGE  Simulink.Bus数据对象。

与场景一的主要区别是CAN Pack中需要勾选 Output as bus

图11.CAN Pack模块设置

此时,在CAN Pack输出端可接一个Bus Selector,仅输出Data

图12.Bus Selector选择Data部分输出

 

而CAN Unpack输入端,需要我们自己构造一个Bus信号,且需勾选输出为非虚拟总线,输出类型选择定义好的Bus:CAN_MESSAGE

图13.Bus Creator构造非虚拟总线

 

其他设置与应用场景一类似,这里为了演示函数封装,将CAN UnPack/Pack都封装在单独的原子子系统中,并设置相应的函数和文件名。生成的部分代码如下:

图13.生成的step函数

 


 

Tips:

需要注意的是,应用场景二中需要设置CAN pack模块输出bus信号,而稍低版本的MATLAB(例如16b)中是没有此项设置的

 

如果是这种情况,可在CAN Pack后面再增加一个CAN Unpack模块,并选择raw data输出

 

这种方法最后输出的直接是数组了,但因为多了一个CAN Unpack,无形中引入了该部分的代码,而该部分代码中涉及memcpy这个C库函数,这里也需要注意一下

 

除了这两个应用场景之外,在命令行输入canMessageBusType,工作区会自动创建一个名为CAN_MESSAGE_BUS 的Simulink Bus数据对象,用法和上面我们自定义的CAN_MESSAGE Simulink Bus数据对象类似,感兴趣的童鞋可以尝试一下。

 

如果你觉得本文能够帮助到你,请长按识别下方二维码关注公众号,另有知乎同名专栏同步更新,欢迎分享转载

文章中的示例模型或代码均可联系小编免费获取,若对文章有任何意见或建议,欢迎在文章下方留言,也可进入公众号选择‘联系方式’,加小编微信进行交流

                                                             

 

  • 12
    点赞
  • 86
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
### 回答1: C2000是德州仪器公司(TI)推出的一款高性能数字信号处理器(DSP)系列产品,在嵌入式控制和电力电子应用中使用广泛。MBD代表模型驱动开发,这是一种软件开发方法,利用数学模型来进行系统设计和开发,以生成代码。 C2000 MBD生成代码可以通过将数学模型和系统规范直接转化为可执行代码,从而实现快速且高效的系统开发。MBD生成代码的过程包括以下几个步骤: 首先,需要建立一个数学模型,该模型描述了系统的物理特性和行为。数学模型可以使用Simulink等建模工具来创建,其中包括了系统的输入、输出和中间变量等。 然后,利用MBD工具将数学模型转化为可执行代码。在C2000 MBD生成代码中,可以使用工具如Embedded Coder将Simulink模型快速转化为C语言代码生成代码将包含系统的控制逻辑和算法,以及与C2000 DSP硬件平台的接口。 接下来,生成代码将进行自动代码优化,并进行编译和调试。优化可以提高代码的执行效率和资源利用率,以适应嵌入式系统的要求。编译和调试过程确保生成代码与目标硬件平台的兼容性和正确性。 最后,生成代码可以下载到C2000 DSP硬件平台上,通过其内嵌的DSP核心来执行系统控制和信号处理任务。生成代码可以实现系统规范要求,并且适应复杂的嵌入式应用环境。 通过C2000 MBD生成代码,开发人员可以更高效地进行系统设计和开发,实现快速原型开发和迭代。同时,采用模型驱动开发方法可以提高开发过程的可重复性和可维护性,减少测试和调试的工作量,从而降低开发成本和时间。 ### 回答2: C2000是德州仪器(TI)推出的一款微控制器系列,MBD(Model-Based Design)是一种基于模型的设计方法。生成代码通常是指使用MBD工具将模型转换为可在嵌入式系统中运行的C代码。 使用C2000 MBD生成代码的过程大致可分为以下几个步骤: 首先,我们需要使用MBD工具(如MATLAB Simulink)来建立我们的系统模型。这可以通过拖拽和连接各种功能块来构建模型,例如传感器部件、算法模块和输出设备。 接下来,我们需要对模型进行参数配置和仿真测试。这样可以确保模型在软件环境中的行为与我们预期一致。 完成参数配置后,我们可以使用MBD工具来生成相应的C代码。这一过程中,工具会根据我们在模型中定义的算法和功能,将其转换为可在C2000微控制器上运行的C代码生成的C代码可以包括初始化函数、数据结构定义、算法实现以及与外部硬件交互的代码等。这些代码将直接在C2000微控制器上执行,实现我们在模型中设计的功能。 在生成代码后,我们需要将其下载到C2000微控制器上进行调试和验证。通过连接开发板和调试器,我们可以对代码的执行进行监控,并查看实际硬件上的运行情况。 总的来说,C2000 MBD生成代码是一种将模型转换为可嵌入式系统中运行的C代码的方法。它可以帮助开发者通过模型快速设计和验证系统功能,并在嵌入式系统中实现所需的算法和控制逻辑。 ### 回答3: C2000 MBD是指使用C2000系列微控制器进行模型驱动开发(Model-Based Development,MBD)并生成代码的过程。C2000微控制器是德州仪器(Texas Instruments)生产的一款高性能、实时控制特性强大的微控制器系列,常用于工业自动化、电机控制等领域。 在C2000 MBD中,开发者可以使用Matlab/Simulink等工具对系统进行建模和仿真。首先,开发者需要创建系统模型,包括输入、输出、控制逻辑以及系统的动态行为等内容。接着,开发者可以使用Simulink中的多种模块和功能对模型进行调整和优化,确保系统的性能和可靠性。在模型的开发过程中,开发者可以使用C2000 MBD提供的实时目标机仿真功能,将模型与实际硬件环境进行连接和交互,以验证系统的正确性。 当系统模型开发完成后,开发者可以使用C2000 MBD提供的代码生成工具将模型转化为C语言代码,以便在C2000微控制器上运行。代码生成工具会根据模型自动生成标准的C语言代码,包括系统的初始化、数据处理、控制循环等内容。生成代码可以直接在C2000微控制器上进行编译和烧录,从而实现对系统的实时控制。 通过C2000 MBD生成代码具有高效、可靠的特点。由于代码是从系统模型中自动生成的,因此避免了手动编写代码可能存在的错误和繁琐的工作。此外,C2000 MBD还提供了代码优化和调试工具,可以对生成代码进行性能优化和故障诊断,进一步提高系统的性能和可靠性。 综上所述,C2000 MBD可以简化系统开发的流程,提高系统的开发效率和质量,并为开发者提供了强大的控制功能。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值