人在仿真软件金宝app

金宝app基于Simulink和模型的设计

生成代码中的总线信号

博客阅读器保罗J.分享和我们一起把他的思维模型作为一个结构。虽然对于虚拟总线不是这样,但对于非虚拟总线却恰恰如此。实际上,当您为非虚拟总线生成代码时使用实时的车间,结果就是一个结构。

专注于界限

在一个上一篇关于非凡总线信号的帖子我谈到了为公共汽车分配的内存。我们要考虑内存分配的地方是系统的界限。这里是simplebusdemo_nv.mdl.

简单的巴士演示图与非virtual公共汽车

此模型具有由Inport和Outport块定义的根级边界。它在重复使用的FCN子系统边缘也具有边界。Main_bus通过该边界交叉,如果总线是虚拟与非Virtual,则生成的代码是不同的。

ReusableFcn子系统包含一个总线选择器和两个增益块。

具有非宽度总线输入的重用杂志子系统

我配置了子系统以生成可重用的功能。以下是子系统的设置:

ReusableFcn子系统参数

基本上,我已经说明了Real-Time Workshop应该如何包装在这个系统中实现的算法。通过指定“Treat as atomic unit”,系统内部的块将一起执行。Real-Time Workshop将生成具有我指定名称(ReusableFcn)的可重用函数代码到同名文件(ReusableFcn.c)中。可重用函数代码将输入和输出信号作为参数传递给函数。

现在我可以想象这是什么样子了:

ReusableFCN(输入......,输出......)

虚拟总线单独通过每个元素

具有虚拟总线输入的ReusableFcn子系统

当总线信号在ReusableFcn的导入处是虚拟的时,只有系统中使用的总线元素需要通过边界。下面是函数调用的实际代码:

30./ *原子子系统的输出:' / reusablefcn'* /31.reusablefcn(simplebusdemo_vir_u.pulse,simplebusdemo_vir_u.chirp,32.&limplebusdemo_vir_b.reusablefcn_m);33.

注意,总线信号存在的代码中没有证据表明。在编译时,源和目的地之间的直接连接替换虚拟总线。

19./ *原子系统的输出和更新:' / reusablefcn'* /20.无效ReusableFcn(real32_T rtu_0, real_T rtu_1, rtB_ReusableFcn *localB)21.22./ *增益:' / gain'* /23.localb->增益= 2.0f * RTU_0;24.25./*增益:'/增益1' */26.localb-> gain1 = 3.0 * RTU_1;27.

非虚拟总线是结构

具有非宽度总线输入的重用杂志子系统

非虚拟总线是一个连续的内存块。它被组装并传递到ReusableFcn中。

30./*本地块I / O变量*/31.main_bus rtb_main_bus;32.33./* BusCreator: '/Bus Creator'合并:34.* BusCreator:' / busconversion_insertedfor_bus creator_at_inport_0'35* buscreator:' / busconversion_insertedfor_bus creator_at_inport_1'36.*尺寸:< Root > /三机一体的37.*尺寸:“根> < / In2”38.*尺寸:“< Root > / In3”39.*尺寸:“< Root > / In4”40*尺寸:“< Root > /把鱼”41.*/42.RTB_MAIN_BUS.BUS1.CHIRP = SIMPLEBUSDEMO_NV_U.CHIRP;43.rtb_main_bus.bus1。常数[0]= simplebusdemo_nv_U.Constant [0];44.rtb_main_bus.bus1。常数[1]= simplebusdemo_nv_U.Constant [1];45.rtb_main_bus.bus1。常数[2]= simplebusdemo_nv_U.Constant [2];46.rtb_main_bus.bus2。时钟= simplebusdemo_nv_U.Clock;47.RTB_Main_Bus.bus2.pulse = simplebusdemo_nv_u.pulse;48.RTB_MAIN_BUS.BUS2.SINE [0] = SIMPLEBUSDEMO_NV_U.SINE [0];49.RTB_MAIN_BUS.BUS2.SINE [1] = SIMPLEBUSDEMO_NV_U.SINE [1];50.51./ *原子子系统的输出:' / reusablefcn'* /52.ReusableFCN(&RTB_MAIN_BUS,&SWITEBUSDEMO_NV_B.REUSABRYFCN_A);

每个输入信号都被复制到rtb_main_bus变量中,该变量是main_bus类型的一个实例。此结构匹配由main_bus、bus1和bus2指定的总线对象定义。

我注意到重复使用的界面具有较短的接口。现在唯一的输入信号是指向RTB_Main_bus的指针,该指针在本地分配。

具有非宽度总线输入的重用杂志子系统

19./ *原子系统的输出和更新:' / reusablefcn'* /20.无效ReusableFcn (Const.main_bus * rtu_in1,RTB_ReusableFCN * localb)21.22./ *增益:' / gain'* /23.localB->增益= 2.0F * (*rtu_In1).bus . pulse;24.25./*增益:'/增益1' */26.localb-> gain1 = 3.0 *(* RTU_IN1).bus1.chirp;27.

在非虚拟总线信号的情况下,使用总线对象的接口规范的概念一直延续到生成的代码中。

现在轮到你了

我们现在涵盖了总线信号上的大部分重要主题。总线信号留下哪些问题及其在您的模型中的使用?帖子A.在这里评论

|
  • 打印
  • 发送电子邮件

评论

要发表评论,请点击这里要登录您的MathWorks帐户或创建新的。