2013-10-07 33 views
1

我有一个simulink模型,并使用simulink编码器为通用实时目标生成代码。 然后,我将生成的文件(* .c和* .h)复制到MPLAB中的项目中。 这里我有main.c文件,在这里我使用MdlStart()来初始化模型一次,然后在无限循环中使用MdlOutputs()和MdlUpdate()来运行模型。一切正常。将simulink生成的代码集成到项目中

现在实际上我想加快模型的执行速度,因此我想将我的模型分割成子系统并仅在需要时执行子系统(例如,我想每次都只执行一些子系统,每隔几毫秒而不是每次)。我可以将模型分解为子系统,并且使每个子系统都原子化,以便为每个子系统获得不同的功能。现在通过MdlOutputs()和MdlUpdate()调用这些不同的子系统函数。所以他们每次执行模型都会执行。

其实我想在我的MPLAB项目中使用一些定时器,然后执行几个子系统,让我们说每隔100ms。我也不想修改自动生成的* .c和* .h文件。

因此,不是每次都通过MdlOutputs()和MdlUpdate()来执行这些子系统的函数,是否可以从我的main.c文件中调用子系统的函数而不触及自动生成的* .c和* .h文件?

我希望我解释得很好。

等待你的帮助。

回答

2

您应该尝试对Simulink内部子系统尝试执行的所有操作进行建模。例如,您可以使用“启用的子系统”或“触发的子系统”来创建仅在某些时间步骤上运行的子系统。我不确定你指的是什么类型的计时器。如果是Simulink时间,则需要以不同的采样速率运行不同的子系统,这将为您提供多速率模型。如果您的计时器只是另一个外部源,则尝试触发或启用的子系统。这是避免修改生成文件的最好方法。

这些子系统的Doc位于http://www.mathworks.com/help/simulink/conditional-subsystems-1.html

+1

多速率是要走的路。生成的步进功能具有集成的计数器,可在每个步骤中调用正确的功能。 – pmb

+0

非常感谢答案...我使用触发的子系统,它的工作原理... – Prashant